Gausskurve berechnen



  • Ich brauch zum Filtern eines Bildes per Gauss eine Gausskurve, die müsste ich irgendwie berechnen. Alles was ich mit bisher besorgt und probiert habe ist irgendwie an meinen fehlenden Math. Kenntnissen gescheitert.

    Ich suche also eine einfache Möglichkeit, aus einer angegebenen Filterbreite (z.Bsp) 7 die Operatoren zu berechnen. Das wären dann z.Bsp.-3/1, -2/2, -1/5, 0/7, etc.) also immer den Y Ert für Position X.

    Ich hoffe ich konnte es halbwegs verständlih erklären was ich brauche, wenn nicht einfach Fragen, dann probier ichs nochmal. 🙂



  • ist das nicht e(-x²)?



  • He, nicht mit Fragen Antowrten. Ich kann sie nicht beantworten, sonst hätte ich die Frage nicht gestellt. 😃
    Ich werd das damit mal bei Gelegenheit probieren.



  • Besser wäre es, wenn ein Moderator das mal in Matheforum schiebt.



  • Die Gausskurve e^(-0.5*((T0-t)/Breite)) dabei beschreibt die T0 die zeitliche Verschiebung oder den Zeitpunkt ab der die Gausskurve ihren "maximalen" Punkt erreicht, Breite gibt die Breite der Glocke an... also wenn ich das richtig verstehe Deine Filterlänge...

    Gruß Winn



  • Und für was steht t ?

    Angenommen ich hätte eine Breite von 7, dann sehe das so aus:
    e^(-0.5*( ( 4-t )/7 ) )
    Ist t also die aktuelle Stelle, also 1 ... 7?



  • Winn schrieb:

    Die Gausskurve e^(-0.5*((T0-t)/Breite)) dabei beschreibt

    Also das ist keine Gaußsche Glockenkurve. Da fehlt was "quadratisches" im Exponenten.

    Zudem ist das, was du hier Breite nennst, in Wirklichkeit die Standardabweichung. Bei einem Weichzeichner, oder was immer hier gebaut werden soll, braucht man durchaus noch Bereiche, die außerhalb des durch die Standardabweichung beschriebenen Bereichs liegen.



  • 1: Also, ich bin jetzt beim "mitm Taschenrechner nachrechnen" leider auch nicht auf eine Glockenkurve gekommen.

    2: Ich möchte keinen WEichzeichner bauen, sondern brauche einfach nur einen Filter zur Kantenfindung. Der Filter sollte die Form einer Glockemkurve haben und mit einer entsprechenden Formel (welche mir immer noch fehlt) auf die entsprechende Breite abgebildet werden. Bei der oben genannten Formel und dem was ich oben schon eingesetzt habe kamm ich auf WErte von 0,8 - 0,93 bei den ersten drei Brechnungen.

    3. Ich habs sogar schon mit der Orginalformel für die Gaussche Normalverteilung aus einem Tabellenbuch versucht, bin aber leider auch nie auf eine Glockenkurve gekommen. Da fängt mein Problem schon bei der Brechnung des Erartungswertes und der Standardabweichung an.

    Vielleicht kann das ja mal jemand an ganz explizieten Werten vorrechnen.

    Also gegeben ist eine Breite von x=7 (-3,-2,-1,0,1,2,3). Dabei soll der höchste Punkt Y der Glockenkurve bei X=0 liegen.

    Ew = -3 + -2 + -1 + 0 + 1 + 2 + 3 = 0 / 7 = 0

    D2X = sqrt( ((-3² + -2² + -1² + 0² + 1² + 2² + 3²)/ 7) - (Ew*Ew) )
    D2X = sqrt( 4 - 0 );
    D2X = 2

    Sind die Richtig berechnet?



  • Dir ist sicherlich klar, dass ein einfacher Gaussfilter erstmal nicht zur Kantendetektion geeignet ist, oder? Der muss mit anderen Dingen Kombiniert werden. Man macht da normalerweise 2 verschiedene Dinge:

    1. Man leitet die 2-dimensionale Gaußsche Glockenkurve (symbolisch) nach x und nach y ab, erzeugt sich aus dem Resultat eine Faltungsmatrix und faltet dann ein Bild mit dieser. Kanten in x-Richtung bzw. in y-Richtung sind dann im Resultat durch Werte gekennzeichnet, die stark von 0 unterschiedlich sind.

    2. Man erzeugt sich einen sogenannten LoG (Laplacian of Gaussian) Operator bzw. einen Mexican Hat Operator. Damit approximiert man, im Gegensatz zur ersten Variante, wo die 1. Ableitung approximiert wird, die 2. Ableitung. Kanten sind nach Anwendung des Operators als Nulldurchgänge gekennzeichnet.

    Diese beiden Vorgehensweisen kombiniert man dann. Eine Kante ist dann dadurch gekennzeichnet, dass sie durch beide Methoden ausreichend als solche klassifiziert wird. Es reicht nicht aus, wenn nur ein Verfahren auf eine Kante hindeutet.

    Die Gausskurve wird hier in beiden Fällen indirekt als Weichzeichner genutzt, um ein besseres Ergebnis zu erhalten. Man kann darauf auch verzichten, dann nutzt man Operatoren der folgenden Art:

    1.
    
    [  0 -1  0 ]           [  0  0  0 ]
    [  0  0  0 ]    und    [ -1  0  1 ]
    [  0  1  0 ]           [  0  0  0 ]
    
    ...und weitere rotierte Varianten dieser Matrix. Man nennt diese Matrizen auch "Kompaßoperatoren".
    
    2.
    
    [  1  1  1 ]
    [  1 -8  1 ]
    [  1  1  1 ]
    


  • Das Theoretische, das du geschildert hast war mir schon klar. Bis auf den zweiten Teil, das mit dem Mexican Heat" ist ne nützliche Infos. Allerdings herrschen bei mir bestimmte Bedingungen die eine starke Vereinfachung der Kantendetektion erlauben.

    Mein Problem ist, das ich ja noch nichtmal einen einfachen Gaus berechnet bekomme, geschweige den eine 1.ste Ableitung. Eigentlich bräuchte ich ja diese, was mir auch klar ist aber wo herbekommen und nicht stellen. 🙂

    Hast du vielleicht ne Formel dafür, irgendwie muss ich diese Gaussoperatoren ja erstmal berechnen, bevor ich sie verwende.

    P.S. Falls du irgendwelche nützlichen Links hast, immer her damit. 🙂



  • Ich würde da eigentlich andersherum vorgehen. Ich würde nicht die Größe der Matrix vorgeben, die dann entsprechend durch eine Gaußkurve "besetzt" ist. Stattdessen würde ich die Standardabweichung der Gaußkurve vorgeben und daraus dann die benötigte Größe der Matrix bestimmen.

    Entsprechenden Code findest du sogar in dem Tutorial, von dem ich dir in dem anderen Thread berichtet habe. Naja, ist nicht sehr guter Code.



  • Bigwill schrieb:

    P.S. Falls du irgendwelche nützlichen Links hast, immer her damit. 🙂

    Ne, ich habe keine Links. Nur Bücher:
    Image Processing, Analysis, and Machine Vision | ISBN: 053495393X Digitale Bildverarbeitung | ISBN: 3540412603 Generische Programmierung für die Bildverarbeitung | ISBN: 3831102392



  • Entweder du verwechselst mich oder ich bin arg vergesslich. Allerdings kann ich mich an keinen anderen Thread erinnern. Kannste den Link nochmal posten, für mich, bitte.



  • Stimmt, das warst du tatsächlich nicht:

    http://www.c-plusplus.net/forum/viewtopic.php?t=63537



  • Danke für die Hilfe und die vielen bunten Bildchen da oben. 🙂
    Ich gehe dann mal bei gelegenheit unsere TU-Bibliothek plündern.
    Und deine PDF zieh ich mir auch gerade. Vielleicht werd ich ja noch zum Kantenexperte. 😃



  • Bigwill schrieb:

    Und deine PDF zieh ich mir auch gerade. Vielleicht werd ich ja noch zum Kantenexperte. 😃

    Mach dir keine falschen Hoffnungen. Über Kantendetektion steht da nichts drin. ...aber es ist halt Code für eine Gaußsche Glockenkurve vorhanden.

    ...das erste Buch (das nicht vernünftig angezeigt wird) ist übrigens das IMHO Beste. Das lohnt sich echt.



  • Gregor schrieb:

    Winn schrieb:

    Die Gausskurve e^(-0.5*((T0-t)/Breite)) dabei beschreibt

    Also das ist keine Gaußsche Glockenkurve. Da fehlt was "quadratisches" im Exponenten.

    Zudem ist das, was du hier Breite nennst, in Wirklichkeit die Standardabweichung. Bei einem Weichzeichner, oder was immer hier gebaut werden soll, braucht man durchaus noch Bereiche, die außerhalb des durch die Standardabweichung beschriebenen Bereichs liegen.

    sorry, gg, das Quadrat hab ich vergessen... heißt natürlich e(-0.5*((T0-t)/Breite)2), wenn Du Dir Funktion mal plottest, wirst Du sehen das die Breite proportional zur Breite der Kurve ist. t entspricht natürlich dem aktuellen oder den zu berechnenden Zeitpunkt.

    Bei der Kanten Detektion ist sicherlich auch die Wavelet Transformation hilfreich...

    Gute Jagd Winn


Anmelden zum Antworten