我有一個值爲1,0和2的矩陣,我希望將鄰接2的所有零變成2。任何有效的方法來解決這個問題?如何查找與值K的元素相鄰的矩陣中的值R的所有元素? - Matlab
需要解決的最後一個問題是,我需要對所有可以從矩陣中的一組初始設置的2到達的0進行「着色」。 (運行上述「函數」n^2次),可以將問題看作是一個流量問題,其中1是矩形網格的阻塞位置。
我有一個值爲1,0和2的矩陣,我希望將鄰接2的所有零變成2。任何有效的方法來解決這個問題?如何查找與值K的元素相鄰的矩陣中的值R的所有元素? - Matlab
需要解決的最後一個問題是,我需要對所有可以從矩陣中的一組初始設置的2到達的0進行「着色」。 (運行上述「函數」n^2次),可以將問題看作是一個流量問題,其中1是矩形網格的阻塞位置。
首先定義鄰域。如果你想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;
哇,令人驚歎的優雅,非常感謝你! –
@ UriPe'er很高興,如果它可以幫助! – rahnema1
後的東西,你try'ed出來,並要求它有什麼問題! – Vignesh
使用'imdilate'來「增長」2的位置並獲得他們所有的鄰居。 – buzjwa
@Vignesh我知道如何編寫一個函數來完成上述操作,但我正在尋找一種有效的方法來處理這個問題,(目前我做了「着色」步驟,尋找鄰居,它是O(n^2)然後運行n^2次,以便找到所有可到達的站點,最後到達O(n^4)) –