2011-08-10 14 views
1

某些處理的輸出包含一個具有多個連接區域的二進制映射。Matlab:查找二進制區域的長軸

對於每個區域,其目標是計算並在圖像上繪製穿過其最長軸上區域的線,但不會進一步延伸。線位於該區域內很重要,因此橢圓擬合不太好。

有關如何以高效方式實現此結果的任何提示?

+0

您的區域是凸面還是凹面?什麼構成一個區域?你有代表性的例子,你可以與我們分享? – John

+0

@Danilo:也許你可以使用[REGIONPROPS](http://www.mathworks.com/help/toolbox/images/ref/regionprops.html#bqkf8iq)函數的'Extrema'屬性 – Amro

回答

1

我的第一個傾向是將像素視爲2D點並使用主成分分析。 PCA會給你每個地區的長軸(princomp,如果你有統計工具箱)。

關於製作線段而不是線條,不知道這些區域的形狀,我不會想到一種有效的方法。假設該區域可以具有任意形狀,則可以沿着每條線追蹤,直到到達該區域的邊緣。然後在另一個方向重複。

我認爲你已經有二進制圖像分成區域。如果不是這樣,你可以先使用bwlabel(如果區域不接觸)或k-means(如果是的話)。

2

如果你有圖像處理工具箱,你可以使用regionprops這將給你幾個標準的措施,任何二進制連接區域。這包括

您還可以獲得最緊密的矩形邊界框,質心,周長,方向。這些都將幫助您進行橢圓擬合。

根據想要如何繪製線條,regionprops函數還會返回二維連接區域中長軸和短軸的長度,並在每個連接區域基礎上進行,爲您提供軸長度。如果你指定4鄰居連接你是相當確定長度將完全在連接區域內。但是這並不能保證,因爲`regionprops'會計算一個與連通區域具有相同歸一化第二中心矩的橢圓的長軸長度。