LabVIEWForum.de
Bilderkennung: Endpunkte einer nicht geraden Linie - Druckversion

+- LabVIEWForum.de (https://www.labviewforum.de)
+-- Forum: LabVIEW (/Forum-LabVIEW)
+--- Forum: LabVIEW Module (/Forum-LabVIEW-Module)
+---- Forum: LabVIEW Vision (/Forum-LabVIEW-Vision)
+---- Thema: Bilderkennung: Endpunkte einer nicht geraden Linie (/Thread-Bilderkennung-Endpunkte-einer-nicht-geraden-Linie)



Bilderkennung: Endpunkte einer nicht geraden Linie - Ruthenium-Jan - 27.01.2014 16:34

Liebes Forum,

ich habe Bild mit dunklem Untergrund und einer hellen, nicht geraden Kurve darauf, die vom Rand zur Mitte läuft. Die Kurve selbst kann aber auch gedreht sein (siehe angehängte Bilder).
[attachment=48253]
[attachment=48254]

Über einen threshold-Filter konnte ich auch schon die hellen Pixel von den dunklen trennen.

Meine Frage ist: Wie kann ich die Position (x,y) des offenen Endes dieser Linie finden? Ist das einfach möglich mit LabVIEW oder sollte ich zu anderen Tools greifen?

In den ImageDetection VIs habe ich nur Erkennung für flächige Formen gefunden.

Viele Grüße,
Jan


RE: Bilderkennung: Endpunkte einer nicht geraden Linie - b.p - 27.01.2014 16:56

Gegenfrage: Hast du NI Vision, oder arbeitest du mit irgendwas anderem, oder rein auf den Daten?
Wenn ja, hast du schon mal mit dem Vision Assistant rumgespielt? Nur so als Tipp, das ist oft effizienter, als eine bestimmte Funktion in den Menues zu suchen..

Ja, du kannst relativ trivial und ohne grosse Algorithmen die Enden der Linien finden und mir fallen dafuer einige Optionen ein.
So ganz spontan wuerde ich das Bild erst mal binarisieren (also ja Threshold, moeglicherweise vorher noch ne Bildverbesserung, vielleicht ne Kantenschaerfung oder so was, da muesste ich mehrere Bilder genauer anschauen). Dann ein Skeleton berechnen, und dann mit einer Hit-Miss-Transformation die Endpunkte rauskriegen. Dann mit Particle Find die Koordinaten abholen.

Waere es moeglich, 2-3 Beispielbilder - nicht Screenshots - hochzuladen?

Gruesse,
Birgit


RE: Bilderkennung: Endpunkte einer nicht geraden Linie - Ruthenium-Jan - 27.01.2014 20:10

Hi Birgit,

ja, ich habe NI Vision und würde auch gerne im LabVIEW Framework bleiben. Das schließt selbstgeschriebene DLLs aber nicht aus.

Dein Vorschlag hört sich ja toll an Smile Aber auch ziemlich zeitintensiv. Meinst du man kann den Prozess so verschnellern, dass der in ner halben Sekunde abläuft (besser natürlich noch schneller Wink, da ich ein Bilder pro Sekunde auswerten muss.

Ich habe mal ein paar Beispielbilder angehängt: [attachment=48263].

Viele Grüße,
Jan


RE: Bilderkennung: Endpunkte einer nicht geraden Linie - Ruthenium-Jan - 27.01.2014 22:57

Ich habe mal mit deinen Hinweisen ein VI gebastelt,

[attachment=48266]

aber leider findet die hit miss trafo mehr als nur einen Punkt.

Das nächste Problem ist, dass das structuring element im morpholgy vi nur für einen Rotationswinkel funktioniert. Kann man das irgendwie verallgemeinern?

Gute Nacht,
Jan


RE: Bilderkennung: Endpunkte einer nicht geraden Linie - b.p - 28.01.2014 15:13

Hmm.. ich hatte mir unter dem Skeleton vorgestellt, dass du eher sowas wie in folgendem Bild machst, also bei sauber vorverarbeiteten Bildern:
-> http://imgur.com/dt37W8D

Aber da die Daten sind wegen dem Gradienten eh nicht so hunderpro dafuer geeignet.
Uebrigens nicht die schlechtesten Daten, relativ stabile Belichtung und eindeutige Merkmale Top1

Ja, man koennte hit und miss rotationsunabhaengig machen. Lass dich mal von http://homepages.inf.ed.ac.uk/rbf/HIPR2/thin.htm und weiterfuehrenden Bildern inspirieren.

Bei deinen Bildern kann man aber einfach auch die IMAQ-eigenen Funktionen verwenden, das geht sehr schnell zu programmieren.
Ne Idee ist folgende: Du interpretierst die "eine" Kante als ein sehr langes, duennes Objekt, also einen Schlauch mit fast parallel verlaufenden Aussenkonturen. Diesem "rennst" du nach, und beobachtest dabei die Kruemmung, und wenn da ein scharfer Wendepunkt ist, weisst du, dass du am Ende bist.

Dafuer gibt es das Contour Analysis VI, das berechnet dir eine "curvature", sh Vision Concepts Manual
"The curvature of a contour is calculated from the edge points of the contour and by the input kernel size. For each point along the contour the algorithm selects two additional points at half the kernel width before and half the kernel width after the current point. The algorithm fits a cubic b-spline to the three points. Curvature represents the inverse radius of the circle inscribed by the cubic b-spline at the current point. Curvature can be negative. A negative curvature indicate a curve to the left along the search direction. If the current point is too close to either end of the array to choose the additional points, the curvature is calculated as 0."

Von diesem Mass berechnest du den Extrempunkt (nicht das Maximum, da nicht determiniert ist, in welche Richtung du den Schlauch abrennst - koennte man mit ROI und Suchlinie festlegen, aber dann muesste ich druaber nachdenken Blush .. geht auch ohne das Normieren, das ich im vi gemacht hab.. mhmm, das wuerd ich ueberarbeiten). Aber genau an der Stelle ist auf jeden Fall dein gesuchter Punkt.

Falls deine Probedaten irrefuehrend sind, und nicht immer beim Bildrand starten, hast du evtl. 2 lokale Maxima, und musst entscheiden, wo der richtige ist. Aber das ist ein anderes Thema.

Die Laufzeit des Algos ist auf meinem PC im ms-Bereich -> http://i.imgur.com/I7KrFOz.png
aber ich hab auch einen halbwegs vernuenftigen PC. Da ist noch viel Optimierungspotential drinnen, wenn du da was tun musst.

Schoene Gruesse,
Birgit


RE: Bilderkennung: Endpunkte einer nicht geraden Linie - Ruthenium-Jan - 28.01.2014 18:13

Hi Birgit,

deine Lösung ist ja super! Big Grin Ich habe noch ein paar weitere Datensets ausprobiert, aber es klappt immer gut Smile Rechenzeit ist auch kein Problem.

Ich hätte eigl gedacht, dass die Krümmung zu verrauscht wäre und wollte in C++ ein Level Set Verfahren implementieren, um mir eine glatte Krümmung zu berechnen. Aber der Peak ist ja auch so prominent genug.

Warum soll eigl das Maximum nicht geeignet sein? Wenn ich erst den Betrag nehme, dann spielt die Auslenkung des Peaks keine Rolle, oder?

Vielen, vielen Dank nochmal Smile Wie kommt es eigl, dass du dich mit solchen Problemen so gut auskennst?
Jan


RE: Bilderkennung: Endpunkte einer nicht geraden Linie - b.p - 29.01.2014 10:38

Hi,
danke fuer die Rueckmeldung, freut mich :-)

Das mit dem Maximum war so ein Hintergedanke, weil ich eigentlich nicht das Maximum des Arrays nehmen wollte, sondern zwischen 3 Punkten interpolieren und mir da son Extremfall eingefallen is.. egal.. Das gaeb nur den Anschein hoeherer Praezision, weil die vorherigen Operationen und die Unschaerfe das ohnehin schon killt. Also kannst vergessen, funktioniert so.

Und danke fuer die netten Worte: Ist Teil meines Jobs.. :-)

Schoene Gruesse,
Birgit