2013-09-23 91 views
0

我有一個黑色的背景圖像,由白點,點組成的曲線形狀。形狀是一個封閉的不規則曲線。我有這些白點的座標。我一直在尋找一種「連接」這些點的方法,以關閉這條線來形成一條閉合的曲線。我不能使用擴張和侵蝕,因爲我需要保留現有位置。在matlab中連接黑色圖像中的白色點

任何想法?

實施例圖像:

+0

不錯的小問題,你有什麼試過?順便說一下,你關於膨脹/侵蝕的觀點並不好,因爲你總是可以保存你的起始圖像(你甚至有座標!) –

+0

把點轉換成xy座標,找到距離矩陣(和pdist一樣)和然後將每個點連接到它最近的兩個鄰居? – Dan

+0

我只需要這些座標,而不是我會得到的擴大的座標。我已經嘗試過「polyfit」,「fit」,現在我正在嘗試使用lsqlin,我看到有人試過,但我沒有得到我需要的結果。 – prairiewolf

回答

1

這將工作,如果你得到的行,列有序列表中的座標:

1)使用roipoly做一個面膜。 roipoly help:
BW = roipoly(I, c, r)返回由向量c和r所描述的多邊形指定的ROI,它分別指定每個頂點的列和行索引。 c和r必須是相同的大小。

2)在BW掩碼上使用edge。這將給你一個連接給定點的連線的邏輯圖。

或者)使用impoly創建一個imroi實例,該實例是一個對象,並且具有許多可以在其上使用的方法(函數)。這是一個更復雜的方法,會導致同樣的結果,但您可能會對它感興趣,因爲它很整潔。

這兩種方法都取決於您在有序列表中擁有點。

+0

我有一個矩陣中的這些點的座標,推定爲256 x 216的圖像。稍後再試。非常感謝你! – prairiewolf

+0

高效地工作。非常感謝弗雷德裏克! – prairiewolf

2

如果點已經在順序,它很容易與複數:

定義示例數據(正方形):

x = [1 2 2 1]; 
y = [1 1 2 2]; 

重複第一點(創建週期),視爲複雜,並繪製:

plot(complex([x x(1)],[y y(1)])) 

在這個例子中,這給出了下圖。

enter image description here

如果點不按順序,它們可以基於@與此類似,下令減少距離丹的想法:

z = complex(x,y); 
dist = tril(bsxfun(@(z1,z2) abs(z1-z2), z, z.')); % each pair only once ("tril") 
dist(dist==0) = inf; % mark self-distances and repeated pairs as infinities 
[~, ind] = min(dist); 

對於每一個點,ind給指數較大者的最近點指數。有了這些信息,人們應該能夠訂購積分。但這不是一個容易的問題。我不確定最小化距離總是會給出首選形狀(儘管它會在您的示例中)。

相關問題