Manchmal sind Fehlermeldungen irreführend. Ich bekomme diese Meldung vereinzelt, wenn eine best. Funktion nicht vorhanden ist, obwohl es dafür eine andere Fehlermeldung gibt. Hast du diese Funktion?
Ich habe mein Beispiel unter R2013b ausgeführt. Natürlich ohne Fehlermeldung. Sonst hätte ich Sie dir nicht gegeben. Dafür aber ein anderes Problem beobachtet, das zeigt, wie man sich täuschen kann:
Die Funktion imfindcircle gehört zu R2013b. Die Variablen sind sehr empfindlich. Bei geringer Abweichung wird der Kreis nicht erkannt. Wenn man beim Probieren die Funktion startet, alles durchlaufen hat, alle Variablen löscht und sofort wieder startet, habe ich beobachtet, dass der Kreis nicht rot umrandet wird, obwohl die Werte stimmten.
Das macht einen ganz konfus, zumal man die richtigen Werte eingeben hat und versucht, irgendwo einen anderen Fehler zu suchen. Tatsächlich hängt das Problem mit dem Löschen der Daten im Workspace ab. Obwohl sie dort nicht mehr erscheinen, gibt es diesen Fehler, wenn man die Funktion sofort wieder startet. Wartet man dagegen eine Sekunde, läuft die Funktion fehlerfrei durch. Dieser Fehler ist reproduzierbar!!
Ich habe die R2009b Version von MatLab. Als ich deinen Vorschlag mit "imfindcircles" gesehen habe, fiel mir im Nachinein ein, dass ich bei der Suche nach Kreiserkennung, wie z.B.
oder ein anderes mit den Coins immer eine Fehlermeldung mit "imfindcircles" bekommen habe.
Ich habe mich auch bezüglich der Hough Transformation zur Detektion von kreisen schlau machen wollen, aber da seh ich leider überhaupt nicht durch, obwohl ich die allgemeine Theorie dahinter denke zu verstehen weiß.
Eine Alternative wäre, über die Segmentierung den Kreis hervorzuheben. Die Funktion: "BlobsDemo" könnte man als Hinweis auf andere Funktionen nehmen. Wichtig wären die Funktionen um "label2rgb", da über die "codierten Farben" eine Zuordnung möglich wäre. Du musst nur die Fläche mit dem störenden Rot soweit entfernen, dass andere Funktionen diese nicht in der gleiche Farbe darstellen.
Bist du weiter gekommen? Sonst tausche in deinem Code, den du ganz am Anfang geschrieben hast:
"diff_im = bwareaopen(diff_im,300);" % entfernen
gegen die Funktionen: imclose und imopen aus. Bei der richtigen Einstellung wird der rote Ball mit einem rechteckigen Rahmen versehen, der die Koordinaten x=676 und y=454 wiedergibt.
Das rote Rechteck wird dann nicht erfasst. Wenn der Rahmen um den Ball noch präziser gezeigt werden soll, musst du noch eine weitere Segmentierung dazu nehmen. Das wäre dann "imdilate" und du bist nicht auf die Funktion "imfindcircle" nicht angewiesen.
die Objekte auf Ihre Rundheit untersucht (Bild 2).
Als nächsten Schritt würde ich gern alle "unrunden Objekte" schwärzen, sprich mit dem Wert "1" belegen und somit aus dem Binärbild entfernen. Somit spielen weitere rote "unrunde" Objekte bei der späteren Kreisbestimmung ja theoretisch keine Rolle mehr!?
% Display the label matrix and draw each boundary imshow(label2rgb(L, @jet, [.5 .5 .5])) hold on
for k = 1:length(B)
boundary = B{k};
plot(boundary(:,2), boundary(:,1), 'w', 'LineWidth', 2) end
stats = regionprops(L,'Area','Centroid');
Verstehe nicht, warum du die Funktion so umständlich machst oder hat das einen tieferen Hintergrund. Du brauchst doch nur die von mir genannten Befehle einzusetzen und hast das Ergebnis.
Wenn du 2x das gleiche Rot im Bild hast kann auch HSV die beiden Rotflächen nicht trennen. Dein letzter Link verzichtet auch auf HSV und geht gleich zur Segmentierung über.
Du kannst Beiträge in dieses Forum schreiben. Du kannst auf Beiträge in diesem Forum antworten. Du kannst deine Beiträge in diesem Forum nicht bearbeiten. Du kannst deine Beiträge in diesem Forum nicht löschen. Du kannst an Umfragen in diesem Forum nicht mitmachen. Du kannst Dateien in diesem Forum posten Du kannst Dateien in diesem Forum herunterladen
MATLAB, Simulink, Stateflow, Handle Graphics, Real-Time Workshop, SimBiology, SimHydraulics, SimEvents, and xPC TargetBox are registered trademarks and The MathWorks, the L-shaped membrane logo, and Embedded MATLAB are trademarks of The MathWorks, Inc.