2011-06-11 51 views
1

我在道路边缘绘制了2条或3条霍夫线,这些线在道路和天空相交的地平线上相交。我想找到并绘制这一点。我怎样才能达到这个使用霍夫线? 我的投票地图中有一个想法,我如何创建投票地图? 这是我的代码。假设道路边缘的虚线与道路区域相交并形成三角形。 这是我的输出图像如何找到直线之间的交点matlab

enter image description here

I = imread('1.jpg'); 


J = imfilter(I, fspecial('gaussian', [17 17], 5), 'symmetric'); 

se3 = strel('disk', 4); 

%J = imdilate(J, se); 

J = rgb2gray(J); 

BW = edge(J, 'sobel'); 
BW = imdilate(BW, se3); 

[H T R] = hough(BW); 

P = houghpeaks(H, 4); 

lines = houghlines(J, T, R,P); 
Q = figure(5); 
imshow(I) 
hold on; 

xy1 = [lines(3).point1; lines(3).point2]; 
line1 = plot(xy1(:,1),xy1(:,2),'LineWidth',6,'Color','blue'); 

    xy2 = [lines(4).point1; lines(4).point2]; 
line2 = plot(xy2(:,1),xy2(:,2),'LineWidth',6,'Color','blue'); 

    xy3 = [lines(2).point1; lines(2).point2]; 
line3 = plot(xy3(:,1),xy3(:,2),'LineWidth',6,'Color','blue'); 

回答

1

如果你有方程的线,那么你只需要解决3个方程与两个未知数(x,y的交点)。使用matlab矩阵分割运算符(\)。 例如: 你有3行:

  • X + 2Y = 7,
  • 3X + 4Y = 8,
  • 5X + 6Y = 9

的代码是:

A = [1,2;3,4;5,6] 
b = [7,8,9]' 
x = A\b 

如果您不知道方程式,但只有那些线条所经过的像素才会清除黑色图像上的所有线条e并搜索最大像素值。交点将比其余线路亮3倍。 如果您希望减少运行时间,而不是从任意线上的像素开始,并遍历其邻居,直到找到交点。

+0

谢谢DanielHsH。如果你只能给我一个代码示例开始?谢谢 – 2011-06-13 14:01:18

2

不具有线的方程或点使得它更难。如果这只是一次操作,并且只有3行,我建议使用ginput并手动选择点。

所以在绘制完图后,在命令行输入[x,y]=ginput;。这应该把重点放在你的身材上,你会看到一个十字线,你可以在这个图上移动。现在点击您感兴趣的三个点,然后按回车键。现在xy将包含三个点的坐标。

+0

我感谢你的帮助,但它不是我要找的东西。此代码将在视频中实时执行。即时通讯使用霍夫线让我们假设霍夫线还不是图像的一部分,但是这些线相交。我希望这一点成为道路的消失点或地平线。我有道理吗?对不起我的英语:( – 2011-06-11 19:07:09

+0

@Hasham:这是你应该在你的问题中提供的信息,以便其他人了解你正在尝试做什么......请编辑你的问题以添加更多细节 – abcd 2011-06-11 19:13:32

0

的总体战略是: 1.在各行霍夫2. 使用选取两个点这两点得到直线方程 3.使用线方程找到自己的交点

你必须弄清楚如何在每条线上选择两个点,比如说第1行是p1和p2,第2行是q1和q2。那么如果p [1 | 2],q [1 | 2]是2D行向量,那么

line1 = GetLineFromTwoImagePoints(p1, p2); 
line2 = GetLineFromTwoImagePoints(q1, q2); 
intersection = GetPointFromTwoImageLines(line1, line2); 

function line = GetLineFromTwoImagePoints(one, two) 
    line = cross([one 1], [two 1]); 
end 

function point = GetPointFromTwoImageLines(one, two) 
    p = cross(one, two); 
    point = [p(1)/p(3) p(2)/p(3)]; 
end