2013-03-22 122 views
0

我想獲得我的二進制圖像中的輪廓直線度量(相對較快)。圖像看起來如下:評估任意數值的直線度

Contours

現在,在紅色框的輪廓是,我想要優選除去的那些。由於它們不直。這些是我嘗試過的東西。我現在正在MATLAB中實現。

1.收集每個輪廓的行和列座標,然後取出導數。對於直線對象(例如矩形),導數將大部分爲低,並且有幾個尖峯(沿着矩形的拐角)。

問題:收集的座標不是按順序排列,即如果我們將其成像爲路徑,輪廓將被遍歷的順序。因此,衍生物有時會產生荒謬的高值。此外,輪廓不是絕對直的,它是邊緣檢測算法的輸出,所以您可以想象可能會有一些不連續性(請參見底部的矩形,人眼可以理解它是矩形,儘管它不是絕對直的)。

2.試着想想polyfit,但是這個輪廓問題又出現了。由於它是一個矩形,我不知道如何將polyfit應用到該點集。

此外,我想刪除垂直/水平分佈的輪廓。基本上這是一個車道檢測算法。所以車道不能完全垂直/水平。

任何想法?

回答

2

您應該更多地瞭解regionprops的功能。爲了公平起見,我從this answer偷了劇本,但在這裏它是:

BW = imread('lanes.png'); 
BW = im2bw(BW); 
figure(1), 
subplot(1,2,1); 
imshow(BW); 

cc = bwconncomp(BW); 
l = labelmatrix(cc); 

a_rp = regionprops(CC,'Area','MajorAxisLength','MinorAxislength','Orientation','PixelList','Eccentricity'); 
idx = ([a_rp.Eccentricity] > 0.99 & [a_rp.Area] > 100 & [a_rp.Orientation] < 70 & [a_rp.Orientation] > -90); 

BW2 = ismember(l,find(idx)); 

subplot(1,2,2); 
imshow(BW2); 

您可以用性能浪費時間。 'Orientation','Eccentricity''Area'可能是你想要的參數。我也混淆了主軸/副軸長度的比率,但偏心率基本上是這樣做的(偏心度是衡量橢圓是多麼「圓形」的一種度量)。下面是輸出:

enter image description here

我居然看到一個很好的視頻專門從MATLAB使用regionprops車道檢測。我會試着看看我能否找到並鏈接它。

+1

+1從regionprops獲得eccentricity,這就是要走的路。 – bla 2013-03-23 04:01:48

+0

感謝您提到偏心,我會嘗試。 – 2013-03-23 09:08:37

1

您可以使用bwlabel分割圖像,然後分別對每個bwlabel連接的對象分別使用find。這應該有助於解決您的訂單問題。

關於一個度量標準,現在唯一想到的就是擬合一個橢圓,並將a/b(主軸/短軸)比率(基本偏心率)設置爲一個參數。例如,一條直線(即使不完美)將被擬合到一個具有非常大的長軸和非常小的短軸的橢圓上。因此,假設您設置的比率閾值> 10等。例如,使用此FEX submission可以完成擬合橢圓。

+0

我正在使用'bwlabel'編寫單個組件。我確實會使用怪癖。 – 2013-03-23 09:07:56