One-Liner Lösung
Verwendung:
mat(imdilate(mat==2,strel('disk',2)))=2;
Ergebnis
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
Schritt für Schritt Erklärung
Die Lösung für dieses Problem basiert auf dilation Operation an den Bereichen, in denen die Matrix auf 2. Dieses gleich ist, kann wie folgt erfolgen:
%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;
bemerken, dass die Dilatation Betrieb durch ein strukturierendes Element gekennzeichnet Objekt, das ist im Grunde eine binäre Matrix, die die Art und Weise definiert, die Erweiterung durchzuführen. In meinem Beispiel habe ich MATLAB strel Funktion, die die folgenden erzeugt:
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
Sie die strel ändern, um möchten vollständig das gewünschte Ausdehnungsverhalten zu steuern.