2017-09-09 2 views
1

Wie kann ich in MATLAB verbundene Komponenten von rechts nach links und von unten nach oben sortieren? Zum Beispiel habe ich dies in der resultierenden Label Matrix L:Angeschlossene Komponenten von rechts nach links sortieren

L = [0 0 0 1 1 1 0 0 0 0 0 3 3 0 4 4 0 0 0; ... 
    0 0 1 1 1 0 0 0 0 0 0 3 3 0 4 4 4 0 0; ... 
    0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 5 5; ... 
    0 0 0 0 0 0 2 2 2 2 0 0 0 0 0 0 0 5 5]; 

mag ich die angeschlossenen Komponenten in einem Bild von rechts zu lesen und diese stattdessen in L nach links zu erhalten:

L = [0 0 0 5 5 5 0 0 0 0 0 3 3 0 2 2 0 0 0; ... 
    0 0 5 5 5 0 0 0 0 0 0 3 3 0 2 2 2 0 0; ... 
    0 0 0 0 0 0 0 0 0 4 0 0 0 0 0 0 0 1 1; ... 
    0 0 0 0 0 0 4 4 4 4 0 0 0 0 0 0 0 1 1]; 

I habe die regionprops Funktion in MATLAB benutzt, aber es scheint von links nach rechts zu funktionieren.

Antwort

1

Haben Sie versucht, das Binärbild zu drehen?

%bin_img is the binary image 
bin_img = rot90(rot90(bin_img)); 

%use regionprops like you want 
%after this, you can retunr the image to the original 

bin_img = rot90(rot90(bin_img)); 
+0

Es ist zu gut funktioniert. – Abigail

1

Kennzeichnung (wie die von bwlabel getan) erscheint eine lineare Ordnung zu folgen, was bedeutet, es nach unten jede Spalte geht von links nach rechts, Markierung von Regionen in der Reihenfolge sie findet sie zuerst.

Wenn Sie möchten, jede Region statt beschriften von rechts nach links, aber immer noch unten jede Spalte können Sie Ihre Matrix nach rechts zuerst von links flip, die Kennzeichnung tun, dann das Ergebnis Flip wieder zurück. Zum Beispiel:

L = flip(bwlabel(flip(bw, 2), 4), 2); 

Wenn Sie möchten, von rechts nach links jede Region beschriften, sondern bis jede Spalte gehen, können Sie 180-Grad-rotations Ihre Matrix verwenden, anstatt es von Spiegeln:

L = rot90(bwlabel(rot90(bw, 2), 4), 2); 

Eine weitere Option, die in L ist die Etiketten einfach umkehren wird, wie folgt:

L(L > 0) = max(L(:))+1-L(L > 0); 
+0

Vielen Dank. Es scheint perfekt mit dem L = rot90 zu funktionieren (bwlabel (rot90 (bw, 2), 4), 2); Befehl. und liest Etiketten von rechts nach links und von unten nach oben. – Abigail

Verwandte Themen