LabVIEWForum.de - Zuverlässig Peak(s) im Bild finden

LabVIEWForum.de

Normale Version: Zuverlässig Peak(s) im Bild finden
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Hiho,

es handelt sich eigentlich um ein recht "simples" Problem, leider habe ich dafür noch keine wirklich zufriedenstellende Lösung gefunden..
Mein Programm soll die Position und Breite eines Elektronenstrahls auf einer großen Kamera (4k*4k, 16bit) bestimmen - es gibt immer nur einen Spot, dieser kann einige hundert bis einige zehn Pixel breit sein, hier mal ein Ausschnitt:
[attachment=29692]

Ich fitte den Spot mit einer Gauss surface an, was eigentlich gut klappt, jedoch macht es natürlich nur Sinn, einen kleinen Bereich um den Spot herum zu fitten und nicht das ganze 4k*4k Bild (allein schon weils ewig dauern würde). Daher versuche ich im ersten Schritt die Position des Peaks grob zu bestimmen und eine gewisse Umgebung dieses Punktes fitten zu lassen; die Breite der Fit-Box drumherum lege ich erstmal manuell fest, da die zu fittenden Datensätze ziemlich gleichartig sind..
Nun ist es bei realen Messdaten ja so, dass sie teils verrauscht sind, der Peak evtl. schwach ist oder der Hintergrund nicht wirklich homogen. Noch schlimmer: manchmal gibts "kosmische Events" im Szintillator, wobei dann einzelne Pixel enorme Count-Werte bekommen (viel höher als der Elektronen-Peak, dafür nur 1-2 Pixel breit).
Meine Herangehensweise ist bisher folgende: Zuerst lasse ich 2 IMAQ Filter drüberlaufen (den lowpass und einen Gauss Kernel, jeweils 5x5). Danach werden X- und Y-Achse linear gemittelt (IMAQ LinearAverages) und der jeweilige Maximalwert ist die X- bzw. Y-Koordinate des Peaks.
Das funktioniert recht schnell (Wink.. Ich muss manchmal auch das Bild drehen, das verfälscht auch die Werte an den Rändern beim Mitteln..
Bei starken kosmischen Events reicht die Glättung durch die 2 Filter manchmal nicht aus und es wird der falsche Peak erkannt..

Gibt es eine elegante und wirklich zuverlässige Methode, die Position von Peaks zu erkennen (evtl. mit manueller Vorgabe von Mindest- oder Maximalbreite)? Ich hab auch schon an die Threshold-Funktion gedacht (bzw. davon gelesen), aber die liefert auch nur Maximalwerte und würde bei übersteuerten Pixeln nicht funktionieren, oder?
Ich hab noch nicht allzuviel Erfahrung mit Vision, vielleicht hab ich da nen genialen Trick übersehen und ihr könnt mir auf die Sprünge helfen...Wink
Hi

Hast Du mal über eine Wavelet-Analyse nachgedacht? Ist nur eine Idee, könnte aber funktionieren.

Dabei werden kleinere Bilder erzeugt, die zunächst die niedrigen Frequenzanteile des Originals beinhalten und weitere mit den höheren Frequenzen. Damit sollte dem Rauschen beizukommen sein und die grobe Bestimmung der Startwerte für den 2D-Gaussfit möglich sein.

Gruß Holger
Referenz-URLs