在matlab中使用霍夫变换检测平行线
Detect parallel lines using Hough transform in matlab
假设有一个黑色背景和白线 "plotted" 的二值图像,即它们没有被烧到图像上。例如:
我只需要保留与图片中至少一条其他线平行的线。如果不是完全平行,至少要足够接近平行(也许可以控制平行度的变量会有所帮助)。换句话说,如果我选择一条特定的线并且有一条或多条线与之平行,我会保留它,否则我会丢弃它。我需要对图像中的所有行执行此操作。
我遇到了 Hough transform,但我无法理解如何使用垃圾箱来检查方向和确定平行线。还是有更好的方法来解决这个问题?
另外,由于线条不是图像的一部分,只是绘制在图像上,所以我没有图像可以输入霍夫变换函数。我可以直接使用 plot 函数的输出作为输入吗?这是我编写的用于绘制白线的代码:
Location1
是一个包含绘制线条坐标的 m×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 = 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
假设有一个黑色背景和白线 "plotted" 的二值图像,即它们没有被烧到图像上。例如:
我只需要保留与图片中至少一条其他线平行的线。如果不是完全平行,至少要足够接近平行(也许可以控制平行度的变量会有所帮助)。换句话说,如果我选择一条特定的线并且有一条或多条线与之平行,我会保留它,否则我会丢弃它。我需要对图像中的所有行执行此操作。
我遇到了 Hough transform,但我无法理解如何使用垃圾箱来检查方向和确定平行线。还是有更好的方法来解决这个问题?
另外,由于线条不是图像的一部分,只是绘制在图像上,所以我没有图像可以输入霍夫变换函数。我可以直接使用 plot 函数的输出作为输入吗?这是我编写的用于绘制白线的代码:
Location1
是一个包含绘制线条坐标的 m×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 = 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