Anfang eines "Strichs" erkennen (Bildverarbeitung)

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
antimatter
User
Beiträge: 13
Registriert: Freitag 8. Oktober 2010, 16:44

Hallo zusammen,

ich schreibe derzeit eine kleine Software zur Auswertung von langzeitbelichteten Nachthimmel-Aufnahmen. Sterne sind daher mehr oder minder als gekrümmte Spur abgebildet, deren Anfang bzw. Ende gesucht werden soll.
Dabei klickt der Anwender im Gesamtbild recht nahe eines Spurenendes ins Bild, um damit einen kleinen Auschnitt (rot) zur Analyse zu definieren. Ziel der Analyse ist die einigermaßen genaue Ermittlung der Position im Ausschnitt, an welcher die jeweils anvisierte Spur anfängt.

So sieht ein Teil des Bildes aus:
Bild

Nach meinen ersten Recherchen und Diskussion mit einem anderen Studenten bietet sich z.B. an, über einen Rank-Filter den Hintergrund zu säubern, einen Schwellwert anzusetzen und das ganze dann über das Labeling in scipy.ndimage rausfinden.

Allerdings bin ich ziemlicher Neuling, was Bildverarbeitung angeht.
Kennt sich da jemand genauer aus? Wäre die Vorgehensweise für das gezeigte Material ein guter Anfang oder wäre eine andere Strategie besser?


Viele Grüße
antimatter
Zuletzt geändert von antimatter am Mittwoch 24. November 2010, 13:26, insgesamt 1-mal geändert.
Benutzeravatar
Sr4l
User
Beiträge: 1091
Registriert: Donnerstag 28. Dezember 2006, 20:02
Wohnort: Kassel
Kontaktdaten:

Hallo, könntest du das Bsp Bild nochmal hochladen?
Ich bekomme nur ein File not Found.

*edit*
Dein Link hat nur einen "/" zuviel.
http://img189.imageshack.us/img189/2600/testuy.jpg
ms4py
User
Beiträge: 1178
Registriert: Montag 19. Januar 2009, 09:37

Suchst du vielleicht nur nach dem Stichwort Kantenerkennung / Edge Detection? Da gibt es einige Algorithmen und viele Infos im Netz.
„Lieber von den Richtigen kritisiert als von den Falschen gelobt werden.“
Gerhard Kocher

http://ms4py.org/
Benutzeravatar
HerrHagen
User
Beiträge: 430
Registriert: Freitag 6. Juni 2008, 19:07

Deine Idee ist schon in Ordnung. Da sie hauptsächlich auf Standard-Algorithmen basiert kann man sowas schnell mal umsetzen. Wie robust das ganze ist muss natürlich auf einer ganzen Reihe Bilder geprüft werden. Mit einem Programm wie Fiji (=ImageJ + Plugins) kannst vorab schon mal grob prüfen ob dein Weg zielführend ist. Darin sind die gängigsten Algorithmen schon implementiert. Auch die von dir angesprochenen Rangordnungsfilter (Medianfilter, Erosion, Dilation).
Wenn du nicht weiterkommst, kannst du ja noch ein paar Bilder posten. Dann kann ich dir sicher noch ein wenig unter die Arme greifen.

MFG HerrHagen
Benutzeravatar
HerrHagen
User
Beiträge: 430
Registriert: Freitag 6. Juni 2008, 19:07

@ms4py: Kantenerkennung bringt dich hier nur bedingt weiter. Damit werden Kanten im Bild hervorgehoben. Keine Linien (unterschiedlicher Dicken) segmentiert. Das Hauptproblem ist hier eher durch eine gescheite Vorverarbeitung zu finden, die den Vordergrund vom verrauschtem Hintergrund robust trennt.
Benutzeravatar
Sr4l
User
Beiträge: 1091
Registriert: Donnerstag 28. Dezember 2006, 20:02
Wohnort: Kassel
Kontaktdaten:

Ich habe mal ein bisschen rum gespielt. Ich entschuldige mich schon mal vorab für den Code; ist wirklich mies zu lesen und verstehen.

Mein Ergebnis ist der Code:
http://www.python-forum.de/pastebin.php?mode=view&s=92

Das bereinigte Bild sieht so aus:
1_clean.bmp

Das Bild mit eingefärbten Linien dann so:
2_color.bmp

Und hier noch ne Überbledung der zwei Bilder:
3_blend.bmp
Antworten