我有一個黑色的背景圖像,由白點,點組成的曲線形狀。形狀是一個封閉的不規則曲線。我有這些白點的座標。我一直在尋找一種「連接」這些點的方法,以關閉這條線來形成一條閉合的曲線。我不能使用擴張和侵蝕,因爲我需要保留現有位置。在matlab中連接黑色圖像中的白色點
任何想法?
實施例圖像:
我有一個黑色的背景圖像,由白點,點組成的曲線形狀。形狀是一個封閉的不規則曲線。我有這些白點的座標。我一直在尋找一種「連接」這些點的方法,以關閉這條線來形成一條閉合的曲線。我不能使用擴張和侵蝕,因爲我需要保留現有位置。在matlab中連接黑色圖像中的白色點
任何想法?
實施例圖像:
這將工作,如果你得到的行,列有序列表中的座標:
1)使用roipoly
做一個面膜。 roipoly
help:
BW = roipoly(I, c, r)
返回由向量c和r所描述的多邊形指定的ROI,它分別指定每個頂點的列和行索引。 c和r必須是相同的大小。
2)在BW
掩碼上使用edge
。這將給你一個連接給定點的連線的邏輯圖。
或者)使用impoly
創建一個imroi
實例,該實例是一個對象,並且具有許多可以在其上使用的方法(函數)。這是一個更復雜的方法,會導致同樣的結果,但您可能會對它感興趣,因爲它很整潔。
這兩種方法都取決於您在有序列表中擁有點。
我有一個矩陣中的這些點的座標,推定爲256 x 216的圖像。稍後再試。非常感謝你! – prairiewolf
高效地工作。非常感謝弗雷德裏克! – prairiewolf
如果點已經在順序,它很容易與複數:
定義示例數據(正方形):
x = [1 2 2 1];
y = [1 1 2 2];
重複第一點(創建週期),視爲複雜,並繪製:
plot(complex([x x(1)],[y y(1)]))
在這個例子中,這給出了下圖。
如果點不按順序,它們可以基於@與此類似,下令減少距離丹的想法:
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
給指數較大者的最近點指數。有了這些信息,人們應該能夠訂購積分。但這不是一個容易的問題。我不確定最小化距離總是會給出首選形狀(儘管它會在您的示例中)。
不錯的小問題,你有什麼試過?順便說一下,你關於膨脹/侵蝕的觀點並不好,因爲你總是可以保存你的起始圖像(你甚至有座標!) –
把點轉換成xy座標,找到距離矩陣(和pdist一樣)和然後將每個點連接到它最近的兩個鄰居? – Dan
我只需要這些座標,而不是我會得到的擴大的座標。我已經嘗試過「polyfit」,「fit」,現在我正在嘗試使用lsqlin,我看到有人試過,但我沒有得到我需要的結果。 – prairiewolf