Gauß-Filter

Neue Frage »

xbody Auf diesen Beitrag antworten »
Gauß-Filter
Ich habe wieder ein Problem und zwar mit dem Gauß-Filter. Big Laugh
Also, ich muss einen echten 2D Gauß-Filter programmieren (Bildbearbeitung).

Das ist aber nicht das Problem. Ich darf nicht mit dem Pascalschen Dreieck approximieren,
sondern muss die Wiki-Formel für den Gauß-Filter verwenden
http://de.wikipedia.org/wiki/Gau%C3%9F-Filter
Da weiß aber nicht weiter.
Habe mich schon in Faltung von Funktionen reingelesen. Ich muss ja, wenn ich das richtig sehe, mein Bild als eine Diskrete Funktion ansehen und dieses mit einer symmetrischen 3x3 bzw. 5x5 Matrix
durchgehen*², also mit einem diskreten Gauß'schen Filter. (Ist das richtig so?)
Nur wie kriege ich einen diskreten Gauß'schen Filter?
http://de.wikipedia.org/wiki/Faltung_%28...iskrete_Faltung

*² Ich werde in Wirklichkeit die Matrix natürlich auf Grund der Symmetrie separieren, um eine bessere Laufzeit zu erhalten.

Wenn keiner hierbei Bescheid weiß, dann kann er/sie mir vielleicht hierbei helfen;
In dieser PDF wurde auf Seite 2 eine Faltungsmatrix für SIGMA = 1.4 erstellt
http://www.cvmt.dk/education/teaching/f0...nny_09gr820.pdf
Nur wie kommt auf die Matrix? Vorallem mit der Formel hier
http://de.wikipedia.org/wiki/Gau%C3%9F-Filter
Habe schon echt das Ganze Internet nach Informationen abgefragt und keiner konnte mir überhaupt mal einen Tipp geben. unglücklich
xbody Auf diesen Beitrag antworten »

Ich bin schon etwas weiter.
Habe mal die Matrix aus der PDF durch ausprobieren rausbekommmen. Die von Wiki ebenfalls
Ich denke mal man bekommt mit der Formel Werte raus, die vielleicht noch gerundet werden oder so...
Habe auf jeden Fall mal die 2D Formel und die 1D Formel programmiert.
Und rufe mit folgenden Paramtern auf... wobei meine Funktion Sigma ebenfalls als Parameter sieht

gaussian_filter_1D (0.0, 1.4)
gaussian_filter_2D(0.0, 0.0, 1.4)

Die Formel werden natürlich richtig berechnet, darum keine Sorgen machen.

---------------------------------------------------

gaussian_filter_1D (x, sigma) {
result = (Math.pow(Math.E, -(x*x)/(2*sigma*sigma))) / (sigma * Math.sqrt(2 *Math.PI));
return Math.round(result*10*5.3);
}

gaussian_filter_2D (x, y, sigma) {
result = (Math.pow(Math.E, -(x*x+y*y)/(2*sigma*sigma))) / (sigma * sigma * 2 * Math.PI);
return Math.round(result*10*18.3);
}
---------------------------------------------------
Man erkennnt ich runde noch das Ergebnis result auf Ganze Zahlen und davor, multipliziere ich es mit 10*5.3 bzw. 10*18.3 .

Ich habe es auch mit der 3x3 Matrix von Wiki versucht. Diese hat anscheinend sigma = 1
und ich muss das Ergebnis mit 2.5 multipliezieren.
Nun kann ich mit den gaussian_filter_2D(x, y, sigma)
beliebige Felder (x,y) in der Matrix ansprechen und bekomme den richtigen Funktionswert/Matrixwert. Wobei gaussian_filter_2D(0, 0, 1.4) den Funktionswert 15 in der Mitte der Matrix liefert. gaussian_filter_2D(0, 1, 1.4) entsprechend den Funktionswert 12 usw.
nur habe ich den Faktor 18.3 in 10*18.3 geraten, aber wie kommt man drauf? Hat das mit dem sigma zu tun?
Oder war das vielleicht nur Zufall?
 
 
zyko Auf diesen Beitrag antworten »

Hallo xbody,
ich habe deine Ausführungen nicht im Einzelnen überprüft, aber, wenn du die Gauß-Filterformel nur für einen endlichen Träger (3x3 oder 5x5 Fenster) benutzt, dann kann die Summe der Elemente nicht ==1 sein. Entweder vor dem Filterprozess alle Faktoren so normieren, dass deren Summe 1 ergibt, oder am Ende des Filterprozesses das Ergebnis durch die Summe der Faktoren dividieren.
Daamit wird erreicht, dass innerhalb eines Fensters mit konstanten Werten auch das Ergebnis den gleichen Wert hat.

Zur Optimierung: In diesem Fall mit dem eindimensionalen Filter arbeiten, erst zeilenweise und danach dieses Zwischenergebnis spaltenweise filtern.

Viel Erfolg
xbody Auf diesen Beitrag antworten »

@zyko: was meinst du mit Summe, ich rede gar nicht von Groß-Sigma. ^^ Sondern von der Standardabweichung sigma. Oder habe ich dich falsch verstanden? unglücklich

Nein noch ein Post, naja bearbeiten funktioniert nur 15 Minuten hier!
Sehe ich in dem Zusammenhang das richtig, dass bei der Faltung einer Funktion mit einer anderen, eine Funktion rauskommt, die zu jedem Zeitpunkt t angibt zu welchem Anteil die eine Funktion in der anderen drinn gewesen ist und ist das immer so?
http://de.wikipedia.org/wiki/Faltung_%28...ik%29#Bedeutung

Zu Mindest mit den Beispielen, die ich ausprobiert habe, hat das immer gestimmt.
Bei Wiki-Beispiel sieht man das besonders gut.
Genau zu einem Zeitpunkt ist das eine Quadrat vollständig in dem anderen drinn.
Die Funktion steigt langsam an, klar das eine Qaudrat wurde in das andere reinbewegt und
dann verlässt das eine Quadrat das andere wieder und natürlich fällt der Anteil wieder.
Erklärung warum das so ist, kenne ich nicht, vielleicht kann jmd. in ein/zwei Sätzen sagen wieso das so ist, bevor ich mir das mühsam herleiten muss. Hatte Faltung noch nie, musste mir daher selbst die Wirkung herleiten.
zyko Auf diesen Beitrag antworten »

Das GaußIntegral hat bei Integration von -oo bis +oo den Wert 1.
Du betrachtest aber ein endliches Integral von -3 bis +3, d. h. du schneidest je nach sigma einen beträchtlichen Teil ab, und approximierst dieses Integral durch die Summe der Funktionswerte an den Stützstellen gewichtet mit den Gaußwerten --> dein Ergebnis kann nicht Eins sein ohne Normierung.

Das Faltungsergebnis ist ein Maß für die Übereinstimmung der zu faltenden Funktion (Bildwerte) mit dem Faltungskern (Gaußfilter)
xbody Auf diesen Beitrag antworten »

Zitat:
Original von zyko
Das Faltungsergebnis ist ein Maß für die Übereinstimmung der zu faltenden Funktion (Bildwerte) mit dem Faltungskern (Gaußfilter)
Also, ich würde sagen, dass ist ein JA?
Danke. smile

Das GaußIntegral hat bei Integration von -oo bis +oo den Wert 1.Du betrachtest aber ein endliches Integral von -3 bis +3, d. h. du schneidest je nach sigma einen beträchtlichen Teil ab, und approximierst dieses Integral durch die Summe der Funktionswerte an den Stützstellen gewichtet mit den Gaußwerten --> dein Ergebnis kann nicht Eins sein ohne Normierung.

Was meinst du mit die Summe der Funktionswerte an den Stützstellen gewichtet mit den Gaußwerten?
Was für Stützstellen? Ich hatte das alles noch nie.
xbody Auf diesen Beitrag antworten »

So einfach ist die Lösung meines Problemes
http://www.informatikforum.de/showthread...0529#post240529

Ob ich Faltung richtig verstehe kann mir aber immer noch jmd. was sagen.
Will bitte eine klare Antwort, also JA oder NEIN und wenn NEIN, bitte auch eine Erklärung warum. ^^
(Informatiker, wir kennen nur JA (1) oder NEIN (0) Big Laugh )


Bedanke mich schonmal, dafür°°°!
Neue Frage »
Antworten »



Verwandte Themen

Die Beliebtesten »
Die Größten »
Die Neuesten »