2017-04-27 116 views
1

我有一個值爲1,0和2的矩陣,我希望將鄰接2的所有零變成2。任何有效的方法來解決這個問題?如何查找與值K的元素相鄰的矩陣中的值R的所有元素? - Matlab

需要解決的最後一個問題是,我需要對所有可以從矩陣中的一組初始設置的2到達的0進行「着色」。 (運行上述「函數」n^2次),可以將問題看作是一個流量問題,其中1是矩形網格的阻塞位置。

+0

後的東西,你try'ed出來,並要求它有什麼問題! – Vignesh

+1

使用'imdilate'來「增長」2的位置並獲得他們所有的鄰居。 – buzjwa

+0

@Vignesh我知道如何編寫一個函數來完成上述操作,但我正在尋找一種有效的方法來處理這個問題,(目前我做了「着色」步驟,尋找鄰居,它是O(n^2)然後運行n^2次,以便找到所有可到達的站點,最後到達O(n^4)) –

回答

2

首先定義鄰域。如果你想8個鄰居使用這種內核:如果你想4個直接鄰居

kernel = [1 1 1;1 0 1; 1 1 1]; 

使用這種內核:

kernel = [0 1 0;1 0 1; 0 1 0]; 

您可以使用conv2測試一個點附近包含2

test_neighbors = conv2(A==2, kernel,'same') > 0; 

的點的值也應該是0

test_A = A == 0; 

那麼這兩個條件必須滿足:

test = test_neighbors & test_A; 

設置這些點到2

A(test) = 2; 

於一身:

A(conv2(A==2, kernel,'same') & ~A)=2; 
+0

哇,令人驚歎的優雅,非常感謝你! –

+0

@ UriPe'er很高興,如果它可以幫助! – rahnema1