2016-06-10 58 views
1

我有以下矩陣:以矩陣擴展的多邊形區域

1 1 1 1 1 1 1 1 
1 1 1 1 1 1 1 1 
1 1 2 2 2 1 1 3 
1 1 2 2 2 2 1 3 
1 1 1 1 2 1 1 3 
1 1 1 1 1 1 1 1 

我想通過尺寸1,膨脹之後,這意味着,擴大的值2的區域中,輸出爲:

1 1 2 2 2 1 1 1 
1 2 2 2 2 2 1 1 
2 2 2 2 2 2 2 3 
2 2 2 2 2 2 2 2 
1 2 2 2 2 2 2 3 
1 1 2 2 2 1 1 1 

我覺得imerode可以擴展和縮小二進制圖像,但在這種情況下不適用。 matlab中有沒有什麼方法可以解決這個問題?

回答

4

一個班輪解決方案

用途:

mat(imdilate(mat==2,strel('disk',2)))=2; 

結果

mat = 

1  1  2  2  2  1  1  1 
1  2  2  2  2  2  1  1 
2  2  2  2  2  2  2  3 
2  2  2  2  2  2  2  2 
1  2  2  2  2  2  2  3 
1  1  2  2  2  2  1  1 

一步一步的解釋

針對此問題的解決方案是基於在區域dilation操作,其中所述基質是等於2 這可以如下:

%initializes the input matrix 
mat = [1,1,1,1,1,1,1,1 ; 1,1,1,1,1,1,1,1; 1,1,2,2,2,1,1,3 ; 1,1,2,2,2,2,1,3; 1,1,1,1,2,1,1,3 ; 1,1,1,1,1,1,1,1]; 

%initilizes a mask which represents the reion which we want to exapand 
roiMask = mat==2; 

%perform expansion to this mask by imdilate function 
dilatedRoi = imdilate(mat==2,strel('disk',2)); 

%assigns the new value into the original matrix 
mat(dilatedRoi) = 2; 

注意,膨脹運算的特徵在於結構化元素對象,它基本上是一個定義執行擴展方式的二進制矩陣。 在我的例子中,我使用MATLAB的strel功能,生成以下內容:

strel('disk',2) 

ans = 
0  0  1  0  0 
0  1  1  1  0 
1  1  1  1  1 
0  1  1  1  0 
0  0  1  0  0 

您可能需要改變strel爲了完全控制所需的擴張行爲。