2016-06-10 7 views
1

I haben die folgende Matrix:einen Polygonbereich in einer Matrix erweitern

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 

I den Bereich des Wertes 2 nach Größe 1, erweitern wollen, die nach der Expansion bedeutet, ist die Ausgabe:

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 

Ich denke, Imerode kann für Binärbild erweitern und verkleinern, während in diesem Fall nicht anwendbar ist. Gibt es Methoden in Matlab, die dieses Problem lösen können?

Antwort

4

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.