Frage zu gaussischem Weichzeichner



  • Hallo zusammen
    Ich möchte einen gaussischen Weichzeicher implementieren und habe hierfür den Pixelshader im Direct3D SDK angeschaut, wo unter Anderem folgendes steht:

    int g_cKernelSize = 13;
    float2 PixelKernel[g_cKernelSize] = {{0,-6},{0,-5},{0,-4},{0,-3},{0,-2},{0,-1},{0,0},{0,1},{0,2},{0,3},{0,4},{0,5},{0,6}};
    float BlurWeights[g_cKernelSize] = {0.002216,0.008764,0.026995,0.064759,0.120985,0.176033,0.199471,0.176033,0.120985,0.064759,0.026995,0.008764,0.002216};
    

    Wenn ich aber nun die BlendWeigths mit Maple berechne, bekomme ich völlig andere Werte:

    f := (x, o) -> exp(-x^2/(2*o^2))/(sqrt(2*Pi)*o);
    
    for i from -6 to 6 do
     i, evalf(f(i, 13))
    od;
    

    -6, 0.02758738250
    -5, 0.02849996590
    -4, 0.02926903437
    -3, 0.02988151819
    -2, 0.03032683815
    -1, 0.03059720939
    0, 0.03068786771
    1, 0.03059720939
    2, 0.03032683815
    3, 0.02988151819
    4, 0.02926903437
    5, 0.02849996590
    6, 0.02758738250

    Was mache ich falsch?

    Mfg Samuel

    P.S.
    Ich hatte überlegt, dieses Problem ins Grafik-/Spieleprogrammierungsforum zu schreiben, aber es ist ja IMHO ein mathematisches Problem. Daher habe ich es schliesslich in dieses FOrum geschrieben 😉


  • Mod

    Ich kann dir zwar nicht sagen warum, aber ich kann dir immerhin sagen, dass die Werte in DirectX SDK für o=2 sind. Vielleicht hilft dir das ja weiter.



  • die summe der gewichtungen sollte am ende wieder 1 ergeben, bei dir sieht es aus als haettest du 12* ca0.3, was weit drunter ist. vielleicht hast du noch ein bug? 🙂


  • Mod

    rapso schrieb:

    die summe der gewichtungen sollte am ende wieder 1 ergeben, bei dir sieht es aus als haettest du 12* ca0.3, was weit drunter ist. vielleicht hast du noch ein bug? 🙂

    Seine Werte sind schon richtig, aber der Bereich [-6:6] ist viel zu klein, um eine Gaußkurve mit einer Standardabweichung von 13 sinnvoll zu erfassen.



  • Hallo,

    ich habe mal eine generelle Frage, was bedeuten bei Weichzeichnern, wie z.b. dem einfachen WZ, die 1/9 und beim gauss'schen WZ, die 1/16 ???

    Soll das die Stärke des Filters kennzeichnen?

    Die Algorithmen lauten ja 1/9 (EM) * Umgebung
    und beim gauss Wz 1/16 (...) *Umgebung

    *EM=Einheitsmatrix

    Bei den anderen Filtern gibt es die nämlich nicht, z.B. dem Boost oder Sobel,Laplace ... Filtern, da rechnet man nur mit den vorgegebenen Matrizen.

    Wäre um Rat oder math. Hintergrund dankbar.

    Danke!!


Log in to reply