2014-09-30 105 views
1

使用MATLAB,我有一個矩陣,例如:MATLAB添加1的到矩陣周圍的特定元素的元素

1 1 0 
1 0 1 
1 1 1 

目的是代表零的像在掃雷程序的礦井和周圍的0的值應該反映有多少地雷與之相鄰。

因此創建一個向量是這樣的:

1 2 0 
1 0 2 
1 1 1 

我曾經想過採取零周圍元素作爲子矩陣,然後加1,但隨後它會變成0的成1的。

我該如何編程這樣的任務?

+1

你想爲'[1 1 0; 1 1 1; 1 0 1]'輸出什麼?你想'[0 1 0; 1 2 2; 1 0 1]'?這會把1,1元素變成礦山嗎? – David 2014-09-30 03:46:43

+0

請點擊右側的複選標記,考慮接受最適合您的答案。 – 2014-09-30 18:58:55

回答

4

我認爲這是可以通過簡單的卷積加上一些處理後得到的矩陣上進行如下來實現:

% Defining a 6x6 matrix of zeros and ones 

mineMat=randi(2,6,6)-1; 
numberOfMines=conv2(double(~mineMat),ones(3,3),'same').*mineMat; 

% Result: 

mineMat= 

1  0  1  1  0  0 
0  0  0  1  0  0 
1  1  1  1  1  0 
1  1  1  1  0  1 
0  1  0  0  0  0 
0  1  1  0  0  0 

numberOfMines= 

3  0  3  3  0  0 
0  0  0  3  0  0 
2  3  2  3  4  0 
1  2  2  4  0  4 
0  3  0  0  0  0 
0  3  3  0  0  0 
0

Parag's answer將是我的第一選擇。另一種方法是使用blockproc(圖像處理工具箱):

blockproc(~M, [1 1], @(x)sum(x.data(:)), 'Bordersize', [1 1], 'TrimBorder', 0).*M 
0

聽起來像是你正在尋找應用(二維)濾波器:

M = [1 1 0; 1 0 1; 1 1 1]==0; 

F = filter2(ones(3),M); 
F(M)=0 

中間線基本上沒有工作(應用過濾器)來創建計數。最後一行確保地雷停留在0值。