一個班輪解決方案
用途:
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爲了完全控制所需的擴張行爲。