Konsistente Pixelzuweisungen in ClusteringComponents?

Aug 26 2020

Ich habe einen großen Datensatz von REM-Aufnahmen, die ich binär über ClusteringComponents binär segmentieren möchte, und es scheint die genaueste Methode im Vergleich zu den anderen Binärisierungsfunktionen zu sein, z. B. Morphological Binarize.

Während die Cluster genau sind, werden die dunklen oder hellen Pixelgruppen in im Wesentlichen zufälliger Reihenfolge zugewiesen. Ich vermute jedoch, dass es auftritt, wenn der Kontrast gering ist.

Ich kann dieses Problem mit Beispielbildern reproduzieren. Auf dem ersten Bild wird den dunklen Pixeln 0 zugewiesen, während auf dem zweiten Bild den hellen Pixeln 0 zugewiesen wird.

test=ExampleData[{"TestImage","Man"}]

clustered=ClusteringComponents[test,2,PerformanceGoal->"Quality"];
Image[clustered - 1, "Bit"]

test2=ExampleData[{"TestImage","Tank2"}]

clustered2=ClusteringComponents[test2,2,PerformanceGoal->"Quality"]

Wie kann ich es bekommen, damit es die dunklen Pixelkomponenten konsistent entweder 0 oder 1 zuweist?

Antworten

1 ChristopherMoore Aug 27 2020 at 01:50

OK, also werde ich meine Lösung mit Jerry-Takelage veröffentlichen:

  1. Verwenden Sie das binärisierte Clusterbild, um eine Maske des Originalbilds zu erstellen

  2. Testen der mittleren Pixelintensität des maskierten Bereichs im Vergleich zum globalen Mittelwert, um zu überprüfen, ob die schwarzen Cluster mit den dunklen Bereichen übereinstimmen

  3. Bedingt ColorNegate die Werte, die nicht übereinstimmen

    clusterColorTestFunction[testImage_] := 
    Module[{clustered,mask,globalMean,maskedMean},
    
    clustered=ClusteringComponents[testImage,2,PerformanceGoal->"Quality"];
    mask=Image[clustered - 1, "Bit"];
    
    globalMean=ImageMeasurements[testImage,"Mean"];
    maskedMean=ImageMeasurements[testImage,"Mean",Masking->mask];
    
    Which[globalMean>maskedMean,ColorNegate[mask],globalMean <maskedMean,mask]
    ];
    
    clusterColorTestFunction[#]&/@{test,test2}
    

Wenn es jedoch eine Lösung innerhalb der Clustering-Funktionalität gibt, würde ich sie gerne hören