Gerade in Bild finden

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
Benutzeravatar
tjuXx
User
Beiträge: 67
Registriert: Freitag 21. September 2007, 09:25
Wohnort: Bremerhaven
Kontaktdaten:

Hallo,
ich bin gerade auf der Suche nach einer Möglichkeit in den Pixeln eines Bildes zwei Gerade zu finden, und deren Schnittpunkt zu bestimmen.

Folgendes Bild habe ich als Quelle. Es ist ein Laser, der auf eine ca. 90° Kante von zwei Metallplatten trifft. Der Schnittpunkt der Platten soll bestimmt werden.

Bild

Im erste Schritt habe ich durch einen Theshold ein Binarbild erzeugt:

Bild

Jetzt ist mein Plan die weißen Pixel als Punkt in einem Koordinatensystem zu interpretieren. So hoffe ich auf die zwei Geraden zu kommen. Habe mal gesehen das Excel sowas kann, aus einer Punktwolke eine Funktion mitteln.

Habe die Geraden zur verdeutlichung mal mit Gimp eingezeichnet.

Bild

Der Schnittpunkt der beiden Geraden ist dann ja leicht zu berechnen.

Hat jemand eine Idee, oder einen Tipp für mich wie ich die beiden Geraden berechnen kann?

Auch über alternative Lösungsweg würde ich mich freuen.


Viele Grüße tjuXx
EyDu
User
Beiträge: 4881
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

Hallo

Das Stichwort lautet Hough-Transformation. Wenn du zu faul bist das selber zu implementieren, dann benutze einfach Open CV.

Sebastian
Das Leben ist wie ein Tennisball.
Benutzeravatar
tjuXx
User
Beiträge: 67
Registriert: Freitag 21. September 2007, 09:25
Wohnort: Bremerhaven
Kontaktdaten:

Vielen Dank. Dann werd ich mich da mal schlau machen.
jimKnopf
User
Beiträge: 11
Registriert: Donnerstag 4. Dezember 2008, 08:52

Wenn du die Koordinaten der Punkte aus dem Bild raus bekommt, sollte Polyfit den Job machen können. Das macht ein Least Square Fit. Du kannst auch angeben, das du nur ein polynom erster Orndung haben willst.

zu finden ist polyfit im numpy packet.

Greetz
Jim
CM
User
Beiträge: 2464
Registriert: Sonntag 29. August 2004, 19:47
Kontaktdaten:

Diese Aussage ist Unsinn, jimKnopf. Um damit ein verlässliches Ergebnis zu erhalten, müßte man erst das Rauschen filtern, einen Threshold applizieren und dann eine Linie nach der anderen rausziehen - insb. der letzte Schritt ist schwierig ohne a priori Information.
Mit der Hough-Transformation ist man viel schneller unterwegs - und erhält obendrein ein gutes Ergebnis.

Stefan van der Walt hat ein Beispiel auf seiner Homepage: http://mentat.za.net/
Bin sicher, dass er auch Hilfestellung bei Fragen gibt.

HTH
Christian
CM
User
Beiträge: 2464
Registriert: Sonntag 29. August 2004, 19:47
Kontaktdaten:

PS Und auf der Wikipedia-Seite zur Transformation ist ein Link zu einer "Fast"-Variante. Könnte man vielleicht wrappen - je nachdem wie viele dieser Transformationen erwartet werden ...
Benutzeravatar
HerrHagen
User
Beiträge: 430
Registriert: Freitag 6. Juni 2008, 19:07

Das was du vorhast klingt für mich nach dem Lichtschnittverfahren. Dazu verwendet man meist andere Wege als die Hough-Transformation, da (bei entsprechender Positionierung der Kamerea) pro Bildspalte die Laserlinie nur einmal sichtbar werden sollte und damit das Problem so entsprechend einfacher wird. Eine gängige Variante, die auch von vielen 3D-Kameras implementiert wird, ist spaltenweise den Schwerpunkt aller Werte die oberhalb eines gewissen Schwellenwertes liegen zu berechen.
Also in etwa so (ohne spalteweise Anwendung):

Code: Alles auswählen

def center_of_gravity(hist, threshold=0):
    """
    >>> center_of_gravity(numpy.array([0,2,5,8,7,2]), 4)
    3.25
    >>> center_of_gravity(numpy.array([0,2,7,3,7,2]), 5)
    3.0
    >>> center_of_gravity(numpy.array([0,2,5,8,7,2]), 9)

    """

    hist_ = hist.copy()
    hist_ -= threshold
    thres = hist_ < 0
    if numpy.alltrue(thres):
        return None
    hist_[thres] = 0

    bins = numpy.arange(0, len(hist))
    return numpy.average(bins, weights=hist_)
Wenn ich deine Bildaufnahme sehe, bezweifle ich allerdings das dieses Verfahren wirken kann (zu viele störende Reflektionen). Das heißt für mich allerdings eher, dass du deine Bildaufnahme verbessern solltest, als auf ein komplexeres und weit rechenaufwändigeres Verahren (wie die Hough-Transformation) zu setzen. Versuch mal die Bildaufnahme so zu gestalten, dass wirklich nur die Laserlinie (und keine Reflektionen davon) sichtbar bleibt. In der Bildverabeitung ist eine gute Bildaufnahme meist mehr wert als die trickreichsten Algorithmen.

MFG HerrHagen
Antworten