INFO: Dieses Forum nutzt Cookies...
Cookies sind für den Betrieb des Forums unverzichtbar. Mit der Nutzung des Forums erklärst Du dich damit einverstanden, dass wir Cookies verwenden.

Es wird in jedem Fall ein Cookie gesetzt um diesen Hinweis nicht mehr zu erhalten. Desweiteren setzen wir Google Adsense und Google Analytics ein.


Antwort schreiben 

Dieses Thema hat akzeptierte Lösungen:

Bilderkennung: Endpunkte einer nicht geraden Linie



Wenn dein Problem oder deine Frage geklärt worden ist, markiere den Beitrag als "Lösung",
indem du auf den "Lösung" Button rechts unter dem entsprechenden Beitrag klickst. Vielen Dank!

27.01.2014, 16:34
Beitrag #1

Ruthenium-Jan Offline
LVF-Grünschnabel
*


Beiträge: 29
Registriert seit: Feb 2010

8.2; 9.0,11,12
2009
DE_EN

106xx
Deutschland
Bilderkennung: Endpunkte einer nicht geraden Linie
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).
   
   

Ü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
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
Anzeige
27.01.2014, 16:56
Beitrag #2

b.p Offline
LVF-Gelegenheitsschreiber
**


Beiträge: 197
Registriert seit: Oct 2010

2009-14
-
DE_EN


Sonstige
RE: Bilderkennung: Endpunkte einer nicht geraden Linie
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
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
27.01.2014, 20:10
Beitrag #3

Ruthenium-Jan Offline
LVF-Grünschnabel
*


Beiträge: 29
Registriert seit: Feb 2010

8.2; 9.0,11,12
2009
DE_EN

106xx
Deutschland
RE: Bilderkennung: Endpunkte einer nicht geraden Linie
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:
0.0 .zip  test.zip (Größe: 138,42 KB / Downloads: 177)
.

Viele Grüße,
Jan
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
27.01.2014, 22:57
Beitrag #4

Ruthenium-Jan Offline
LVF-Grünschnabel
*


Beiträge: 29
Registriert seit: Feb 2010

8.2; 9.0,11,12
2009
DE_EN

106xx
Deutschland
RE: Bilderkennung: Endpunkte einer nicht geraden Linie
Ich habe mal mit deinen Hinweisen ein VI gebastelt,


12.0 .vi  hitmisstrafo.vi (Größe: 63,35 KB / Downloads: 171)


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
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
28.01.2014, 15:13 (Dieser Beitrag wurde zuletzt bearbeitet: 28.01.2014 15:18 von b.p.)
Beitrag #5

b.p Offline
LVF-Gelegenheitsschreiber
**


Beiträge: 197
Registriert seit: Oct 2010

2009-14
-
DE_EN


Sonstige
RE: Bilderkennung: Endpunkte einer nicht geraden Linie

Akzeptierte Lösung

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


Angehängte Datei(en)
13.0 .vi  birgit.vi (Größe: 105,92 KB / Downloads: 176)

10.0 .vi  2010.vi (Größe: 1,61 MB / Downloads: 190)
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
28.01.2014, 18:13
Beitrag #6

Ruthenium-Jan Offline
LVF-Grünschnabel
*


Beiträge: 29
Registriert seit: Feb 2010

8.2; 9.0,11,12
2009
DE_EN

106xx
Deutschland
RE: Bilderkennung: Endpunkte einer nicht geraden Linie
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
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
Anzeige
29.01.2014, 10:38
Beitrag #7

b.p Offline
LVF-Gelegenheitsschreiber
**


Beiträge: 197
Registriert seit: Oct 2010

2009-14
-
DE_EN


Sonstige
RE: Bilderkennung: Endpunkte einer nicht geraden Linie
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
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
Antwort schreiben 


Möglicherweise verwandte Themen...
Themen Verfasser Antworten Views Letzter Beitrag
  Image - dicke Linie ziehen gottfried 4 1.908 19.03.2021 19:58
Letzter Beitrag: Martin.Henz
  Linie aus Bild in Pfad umwandeln blueberry99 5 5.768 11.03.2014 17:40
Letzter Beitrag: b.p
  Senkrechte Linie zu erkannter Kante setzen (LV2012) Peter Schulze 9 4.248 06.09.2012 13:53
Letzter Beitrag: jg
  ROI während der Bilderkennung darstellen Lord Chaos 1 3.509 20.02.2008 10:26
Letzter Beitrag: Lord Chaos

Gehe zu: