2017-05-01 2 views
3

Ich habe eine binäre Maske, die den Vordergrund des Bildes bezeichnet. Viele Bildverarbeitungsalgorithmen wie die Histogrammentzerrung oder die OTSU-Methode behandeln das gesamte Bild. Meine Frage ist, wie man diese Bildverarbeitungsalgorithmen so anwendet, dass sie NUR die Region bearbeiten können, die meine binäre Maske beschriftet hat?Wie man Bildverarbeitungsalgorithmen auf dem ROI anwendet, das auf einer binären Maske in Matlab beschriftet wird?

Zum Beispiel ist I das Graustufenbild und BW ist die binäre Maske. Der folgende Code verarbeitet immer noch das gesamte Bild und nicht die spezifische Region, die mit der BW Maske gekennzeichnet ist.

level = graythresh(I.*BW); 
BW = im2bw(I.*BW,level); 

Antwort

1

Das Problem mit Ihrem Code ist, dass Sie nur Elemente des Bildes auf Null setzen. Stattdessen sollten Sie nur die interessierenden Voxel an den grayscale-Algorithmus übergeben. Zum Beispiel, wenn BW in der ROI von null verschieden ist, können Sie

level = graythresh(I(BW>0)); 

sagen, dass nur die Elemente auswählen, werden Sie für die Schwellenwertberechnung werden soll. Es ist eine Abkürzung für

level = graythresh(I(find(BW>0))); 

Diese zweite Form des Ausdrucks erzeugt ein Zwischenarray mit dem Indizes - die in der Regel langsamer als die Verwendung von logischer Indizierung (das ist, was diese Art von Index genannt wird).

+1

Siehe [logische Indexierung] (https://nl.mathworks.com/help/matlab/math/matrix-indexing.html#bq7egb6-1) für weitere Informationen. – m7913d

0

@SimaGuanxing, können Sie auch das gleiche erreichen, indem folgenden:

level = graythresh (I (BW));

Aber Sie müssen sicherstellen, dass BW eine Matrix der gleichen Größe wie ich mit logischen Werten als Einträge ist.

Verwandte Themen