在matlab中使用Hough变换检测平行线

时间:2018-05-18 16:45:54

标签: matlab line hough-transform

假设有一个黑色背景和白线的二进制图像"绘制"在它上面,即它们没有被烧到图像上。例如:

The docs on packages

我只需要保留与图片中至少其他一条线平行的线条。如果不完全平行,至少足够平行(可能是一个可以控制并行度的变量将有助于此)。换句话说,如果我选择一条特定的线并且它有一条或多条与它平行的线,我保留它,否则我丢弃它。我需要对图像中的所有行都这样做。

我遇到enter image description here,但我无法理解如何使用这些垃圾箱来检查方向并确定平行线。或者有更好的方法来解决这个问题吗?

此外,由于线条不是图像的一部分而只是在其上绘制,因此我没有图像可以输入霍夫变换功能。我可以直接使用绘图功能的输出作为输入吗?这是我写的用于绘制白线的代码:

Location1是一个m-by-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

任何帮助都将不胜感激。

1 个答案:

答案 0 :(得分:2)

鉴于此

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

然后

theta = atan2(diff(Location1(:,2)),diff(Location1(:,1)));

但是由于线条是平行的,即使它们的theta方向相反,你想要将所有角度映射到半个圆圈:

theta = mod(theta,pi/2);

现在theta的范围是[-π/ 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