如何找到matlab行之间的交点

时间:2011-06-11 10:57:09

标签: image matlab lines

我在道路边缘绘制了2或3条hough线,这些线在道路和天空相交的地平线点相交。我想找到并策划这一点。如何使用霍夫线实现这一目标? 在我的投票地图中我想到了一个想法如何创建投票地图? 这是我的代码。假设来自道路边缘的hough线相交并与内部的道路区域形成三角形。 这是我的输出图像

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');

3 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分: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

如果您不知道方程式,但只知道这些线通过的像素,则在黑色图像上投射所有线并搜索最大像素值。交点将比其余线条亮3倍。 如果你想减少运行时间而不是从任意一行的像素开始,并迭代它的邻居,直到找到交叉点。

答案 2 :(得分: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