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));
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
Sie sind außerhalb der Stichprobe. Das ist die Farbe des Hintergrunds –
Setzen Sie Ihren Code nicht auf Pastebin, bearbeiten Sie Ihre Frage und fügen Sie sie hier hinzu (formatiert durch Einrücken)! – Wolfie