利用matlab中的Hough变换检测平行线

利用matlab中的Hough变换检测平行线,matlab,line,hough-transform,Matlab,Line,Hough Transform,假设有一个黑色背景的二值图像和“绘制”在其上的白线,也就是说,它们不会烧到图像上。例如: 我只需要保留与图片中至少一条其他线平行的线。如果不是完全并行的,至少要足够接近并行(也许一个可以控制并行度的变量会有帮助)。换句话说,如果我选择了一条特定的线,并且它有一条或多条与之平行的线,我会保留它,否则我会丢弃它。我需要对图像中的所有行执行此操作 我遇到过,但我很难理解如何使用垃圾箱来检查方向和确定平行线。还是有更好的办法 另外,因为直线不是图像的一部分,只是在图像上绘制,所以我没有图像输入到Hou

假设有一个黑色背景的二值图像和“绘制”在其上的白线,也就是说,它们不会烧到图像上。例如:

我只需要保留与图片中至少一条其他线平行的线。如果不是完全并行的,至少要足够接近并行(也许一个可以控制并行度的变量会有帮助)。换句话说,如果我选择了一条特定的线,并且它有一条或多条与之平行的线,我会保留它,否则我会丢弃它。我需要对图像中的所有行执行此操作

我遇到过,但我很难理解如何使用垃圾箱来检查方向和确定平行线。还是有更好的办法

另外,因为直线不是图像的一部分,只是在图像上绘制,所以我没有图像输入到Hough变换函数中。我可以直接使用plot函数的输出作为输入吗?这是我用来绘制白线的代码:

Location1
是一个m-x-2矩阵,其中包含用于绘制直线的坐标

figure; imshow(blackImage); 
hold on ;
for i=1:size(Location1,1)-1
   h = plot([Location1(i,1) Location1(i+1,1)], [Location1(i,2) Location1(i+1,2)]) ;
   set(h,'linewidth', .1, 'color', 'b') ;
end
任何帮助都将不胜感激。

鉴于此

for i=1:size(Location1,1)-1
   % one line = Location1(i,:) to Location1(i+1,:)
end
然后

但是,由于直线是平行的,即使它们的
theta
方向相反,您也希望将所有角度映射为半圆:

theta = mod(theta,pi/2);
现在θ在[-π/2,π/2]范围内

要找到相似的角度:

[s,i] = sort(theta);
k = find(diff(s)<0.01); % diff(s) is always positive because s is sorted
i = i([k,k+1]);
theta(i) % <-- sets of similar angles
% Location1(i,:),Location1(i+1,:) <- corresponding lines
[s,i]=排序(θ);
k=在给定的条件下查找(差异)

for i=1:size(Location1,1)-1
   % one line = Location1(i,:) to Location1(i+1,:)
end
然后

但是,由于直线是平行的,即使它们的
theta
方向相反,您也希望将所有角度映射为半圆:

theta = mod(theta,pi/2);
现在θ在[-π/2,π/2]范围内

要找到相似的角度:

[s,i] = sort(theta);
k = find(diff(s)<0.01); % diff(s) is always positive because s is sorted
i = i([k,k+1]);
theta(i) % <-- sets of similar angles
% Location1(i,:),Location1(i+1,:) <- corresponding lines
[s,i]=排序(θ);

k=find(diff(s)你为什么不使用H,theta,rho=hough(BW);
那么你有theta…问题是,我没有图像。我用“绘图”绘制了线函数和线条正好叠加在图像上。我应该在问题中提到它,抱歉。有没有办法直接将绘图发送到Hough变换函数中?请编辑问题,给出所有细节\代码。如果使用绘图,则您有一个图像,您只是还不知道。@bla我将问题编辑为包括代码的详细信息。既然已经有了线的参数,Hough就没有意义了。它所做的只是在图像中查找线的参数。使用
位置1
数组查找平行线。为什么不使用
[H,theta,rho]=Hough(BW)
然后你有θ…问题是,我没有图像。我用“绘图”绘制了线函数和线条正好叠加在图像上。我应该在问题中提到它,抱歉。有没有办法直接将绘图发送到Hough变换函数中?请编辑问题,给出所有细节\代码。如果使用绘图,则您有一个图像,您只是还不知道。@bla我将问题编辑为包括代码的详细信息。因为您已经有了线的参数,所以Hough毫无意义。它所做的只是在图像中查找线的参数。使用
Location1
数组查找平行线。