2017-04-04 6 views
0

enter image description hereDie RGB-Vektoren für weiße und rote Farbe sind gleiche für dieses Bild (Matlab)

I mit diesem Bild in Matlab Arbeits war die Farbe der Kreise zu erkennen. Dies ist ein 512 mal 512 JPEG Bild.

Ich finde die Zentren von Kreisen mit Hilfe von Kreisen, dann nehme ich die R, G, B Komponenten einiger Punkte in der Nähe der Mitte jedes Kreises, um Farbe zu erkennen.

Aber ich bin verwirrt, weil ich für die roten und weißen Kreise finde, dass die R, G, B Komponenten gleich sind [239 227 175].

Ich bin neu in der Bildverarbeitung, also kann jeder erklären, was hier eigentlich passiert.

+1

Sie haben uns einige aktuelle Code zu erhalten .... Ich vermute, dass Sie die beige Hintergrund sind die Auswahl Pixel (wegen falscher Indizierung) und nicht die tatsächlichen Kreise – Suever

+1

Sie sind außerhalb der Stichprobe. Das ist die Farbe des Hintergrunds –

+0

Setzen Sie Ihren Code nicht auf Pastebin, bearbeiten Sie Ihre Frage und fügen Sie sie hier hinzu (formatiert durch Einrücken)! – Wolfie

Antwort

1

Die centers output von imfindcircles gibt die Koordinaten der Zentren in x/y-Koordinaten, und Sie müssen in Ihrem Bild-Index mit Zeilen/Spalten-Koordinaten, so müssen Sie sicher sein, die zwei Spalten zu umkehren, wenn sie in das Bild indizieren

centers = imfindcircles(IM); 

center1 = IM(centers(1,2), centers(1,1),:); 
center2 = IM(centers(2,2), centers(2,1),:); 

Vermutlich machen Sie das nicht, weil Sie stattdessen Pixel aus dem Hintergrund abtasten, die offensichtlich die gleichen RGB-Werte für die Zentroide ergeben.

aktualisieren

Es scheint, dass tatsächliche Problem ist, dass Sie die Lage der Schwerpunkte auf eine uint8 werfen sie einen ganzzahligen Wert zu machen, damit Sie sie dann als Index verwenden können. Die maximale Ganzzahl, die durch uint8 dargestellt werden kann, ist 255 und die Anzahl der Zeilen und Spalten in Ihrem Bild ist größer als 255 (und damit auch die Flächenschwerpunkte), so dass sie auf 255 abgeschnitten werden, was dazu führt, dass das falsche Pixel abgetastet wird.

Rather uint8 als die Verwendung von nur round verwenden, um die Zentroide auf ihre nächste ganze Zahlen runden

cX = round(centers(n_c,1)); 
cY = round(centers(n_c,2)); 
+0

@cgb Wie erstellen Sie 'cF_EDGE'? – Suever

+0

cf_EDGE wird von der Funktion edge() zurückgegeben, dieser Teil funktioniert, da ich die Kreise bereits erfolgreich erkannt habe. –

+0

@cgb Konvertieren Sie zuerst Ihr Bild in Graustufen, bevor Sie 'edge' aufrufen? oder was? Bitte zeigen Sie Ihren vollständigen Code – Suever

Verwandte Themen