2011-06-11 52 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