Erkennen von Ellipsen in Contouren mithilfe von OpenCV?

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
uLocked
User
Beiträge: 27
Registriert: Dienstag 9. Februar 2021, 10:29

Hallo,

ich habe ein Fotos mit Blutspritzern und möchte dort den Primärtropfen detektieren. Das Problem bei der Kantenerkennung ist, dass dort eine Abrintspur ist, die bei der Kanten erkennung mitdetektiert wird.

Deshalb die Idee, ob ich eine Ellipse in die Kontur legen kann und die Punkte matchen kann, um den Primärtropfen zu detektieren.

Warum eine Ellipse? Weil das die Form ist die ein aufgetroffener Bluttropfen animmt.
__deets__
User
Beiträge: 14545
Registriert: Mittwoch 14. Oktober 2015, 14:29

Die Tage einem anderen User das hier geraten: viewtopic.php?t=51205

Da sind ggf Strategien drin.

Ich könnte mir auch vorstellen, dass eine PCA hilft: https://docs.opencv.org/3.4/d1/dee/tuto ... o_pca.html

Da reicht es ggf schon, den größten Tropfen durch zu identifizieren.

Und das ist im Grunde eine Vorbereitung deiner Idee: die beiden Hauptkomponenten entsprechen den Achsenabschnitten a, b deiner Ellipse. Ggf kannst du mit denen und dem Centroid der PCA auch eine Ellipse fitten, und dann wiederum einen Fehler mit der Kontour bestimmen. Um so noch genauer auf eine Form zu klassifizieren.

Wie immer bei sowas gilt: so viele wie möglich Testdaten erstellen, die gut gelabeld sind. Und deine Klassifikation darüber laufen lassen & eine Erfolgsquote berechnen.
uLocked
User
Beiträge: 27
Registriert: Dienstag 9. Februar 2021, 10:29

Das Problem dabei ist, dass das Center nicht im Primärtropfen erkannt wird, weil die Abrintspur ja auch als Teil des Tropfens erkannt wird.
__deets__
User
Beiträge: 14545
Registriert: Mittwoch 14. Oktober 2015, 14:29

Man kann über solche Dinge nicht reden, ohne sie zu sehen. Bitte bring aussagekräftige Bilder und Code bei.
uLocked
User
Beiträge: 27
Registriert: Dienstag 9. Februar 2021, 10:29

Der Code den ich verwende ist 1:1 der hier: https://www.pyimagesearch.com/2016/03/2 ... th-opencv/

Wie lade ich hier Fotos hoch, von meiner Festplatte?
__deets__
User
Beiträge: 14545
Registriert: Mittwoch 14. Oktober 2015, 14:29

Du musst die auf Imgur packen, und einen Link setzen. Ist leider etwas umständlich.
uLocked
User
Beiträge: 27
Registriert: Dienstag 9. Februar 2021, 10:29

Hier sind Fotos

So ist es zurzeit:

Bild

So hätte ich es gerne:

Bild
__deets__
User
Beiträge: 14545
Registriert: Mittwoch 14. Oktober 2015, 14:29

Man muss wirklich Links auf die Bilder setzten. Es ist etwas ärgerlich, und das eine Feature, das ich mir hier unbedingt wünsche. Aber als Mod habe ich es mal kurz repariert.

Zur Sache: ich verstehe den Wunsch. Die PCA wird da so direkt nicht helfen. Es gibt etwas, das ich neulich Steffen Brunton gesehen habe: robust PCA. Die kann outlier ausschließen. Ich habe das nicht en Detail nachvollzogen, aber vielleicht ein Weg, diese Abrintspur zu ignorieren.

Die Frage die ich mir stelle: was ist momentan der Zweck? Willst du nur wissen, was der größte Tropfen ist? Denn dann reicht doch die Konturfläche. Die kannst du ja von OpenCV Berechnen, und einfach die Kontouren danach sortieren - die größte ist der Treffer.
uLocked
User
Beiträge: 27
Registriert: Dienstag 9. Februar 2021, 10:29

Vielen Dank, ich habe das nicht ganz verstanden. Ich brauche nur von jedem diese Ellipse, der Primärtropfen. Das läuft in einer Schleife und vermisst alle gefundenen Konturen. Wenn diese Abrinntspur auftritt, dann brauche ich eben nur die Ellipse und möchte, dass die automatisch vermessen wird. Die Idee ist viele Ellipsen in die Contour zu packen, aber ich weiß nicht wie ich das in Python bewerkstellige. Der Zweck ist, dass diese Abrinntspur die Berechnung des Auftreffwinkels verfältscht
__deets__
User
Beiträge: 14545
Registriert: Mittwoch 14. Oktober 2015, 14:29

Verstehe. Dann ist die eigentlich Aufgabe also die Abrintspur zu finden. Dazu habe ich so aus der lameng keine Idee, muss ich länger drüber nachdenken.

Wenn es Aber am Ende nur darum geht, den Winkel zu berechnen, dann würde ich bei den gegebenen Daten einen einfachen Mehrheitsentscheid nehmen. Berechne die Winkel jeder Kontur. Nimm den median. So eliminierst du Ausreißer.
uLocked
User
Beiträge: 27
Registriert: Dienstag 9. Februar 2021, 10:29

Das wird so nicht funktionieren, weil ich den Winkel für jeden einzeln bestimmen muss. Gibt es eine Möglichkeit in die Fläche der Contour eine Ellipse oder Quadrat zu legen und dann das mit der größten Fläche zu nehmen?
__deets__
User
Beiträge: 14545
Registriert: Mittwoch 14. Oktober 2015, 14:29

Du bestimmst den ja auch für jeden einzelnen. Nur entscheidest du dich nur einen zu berücksichtigen, und schmeißt outlier raus. Ich sehe zb schon zwei, der komisch knubbelige ist doch auch irgendwie falsch. Und jeder wissenschaftliche Prozess gibt Fehlerwahrscheinlichkeiten an. Wenn du vor Gericht mit diesem Blutspritzer stehst, dann wird das doch auch nicht an nur einem Tropfen festmacht. Hoffe ich zumindest sehr.

Und deine Frage umzuformulieren ändert meine Antwort nicht. Ich habe schon verstanden, was du dir wünschst. Ich habe nur im Moment keine Antwort, und müsste mir da länger Gedanken machen.
uLocked
User
Beiträge: 27
Registriert: Dienstag 9. Februar 2021, 10:29

Okay. Danke für deine Hilfe
Antworten