2013-08-02 373 views
0

在圖像中連接特定像素我有一個martrix,A代表一個640×480的圖像,並且包含一些指標如所示的另一矩陣index_matrix:通過邊緣Matlab的

[1 639; 
212 210; 
213 208; 
214 209; 
215 211; 
216 210; 
217 211]; 

第一欄是對應於martix行索引A和第二列對應於矩陣A中的列索引,因此index_matrix中的每一行代表馬蒂克斯A中的一個像素的索引,例如,上述index_matrix示例中的第一行表示位於row_1中的像素的索引col_639。所以我只想連接在index_matrix中找到的martix A的點,其中這些點的每個點將連接到index_matrix中最近的兩個其他點。這就像在這些點之間構建樹或圖。使得連接兩個點的該圖的邊緣應當繪製在具有大於零的值的像素上,因此如果值等於零的像素處於邊緣路徑中,則將不會構建連接兩個點的邊緣,並且兩個點將不會連接。 因此,如fig所示,如果像素A,B和C的索引位於index_matrix中,並且A和B將被連接,則B和C將被連接,而A和C將不會被連接,因爲在構建邊的路徑時將通過一個零值像素「盤旋」。所以我問是否有人可以請告知我該怎麼做?

+0

你想在你的例子中的紅線「中斷」的零像素,或根本沒有繪製? – Floris

+0

@弗洛里斯只是爲了澄清這些值是像素值。我不知道你是什麼意思的「打斷」,但是如果在構建邊緣路徑時發現零像素,這個邊緣將不會被繪製 – Tak

+0

@弗洛伊斯我想知道你是否有任何建議嗎? – Tak

回答

1

使用plot命令在圖像上的兩個點之間繪製一條線。你可以做的是存儲原始圖像(例如,I),並繼續在另一個圖像上繪圖(例如,C)。

假設我們從第二點(212,210)開始。那麼我們需要兩條線,(212,210) - (1,639)(212,210) - (213,208)。我們來看第一行。

您既可以計算兩點之間的線段上的離散點,也可以使用plot函數在空白圖像上繪製它,如M = zeros(size(I));。現在,M(對於蒙版)將只有白色像素,該線將被繪製。

然後,可以使它一個邏輯掩模(M == 255)和檢查是否存在原始圖像I中對應於true像素M任何零。

UPDATE:由於使用掩模每次都是有點跛,並利用直線方程和離散化的方法不畫線的最佳方式,我會建議使用bresenham函數來獲取線段上的點列表。你可以很容易地檢查這些值,並決定保留線路,而不會弄髒掩碼。

+0

感謝您的回答!其實我不僅要在前一個和後一個之間劃一條線,而且要在每個其他點之間劃一條線,例如在我的例子中,我將嘗試在(1,639)和所有其他6個像素之間劃一條線。是否可以嘗試腳本來做到這一點,因爲我對繪圖不是很熟悉,我非常感謝!很多謝謝 – Tak

+1

是的,你只需要每次使用一個新的面具來檢查沿線的點。我會建議看看我使用'bresenham'的更新答案。請注意,它需要從MATLAB中央下載。 – Jacob