我在道路边缘绘制了2或3条hough线,这些线在道路和天空相交的地平线点相交。我想找到并策划这一点。如何使用霍夫线实现这一目标? 在我的投票地图中我想到了一个想法如何创建投票地图? 这是我的代码。假设来自道路边缘的hough线相交并与内部的道路区域形成三角形。 这是我的输出图像
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');
答案 0 :(得分:1)
没有线的方程或点使得更难。如果这只是一次操作,而你只有3行,我建议使用ginput
并手动选择点。
因此,在绘制完图形后,在命令行键入[x,y]=ginput;
。这应该将焦点放在你的身材上,你会看到一个可以在图上移动的十字准线。现在单击您感兴趣的三个点,然后按Enter键。现在x
和y
将包含三个点的坐标。
答案 1 :(得分:1)
如果你有线的方程,那么你只需要解决3个具有两个未知数(x,y的交点)的方程。使用matlab矩阵除法运算符(\)。 例如: 你有3行:
代码是:
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