Announcement

Collapse
No announcement yet.

Task 3: Faltung

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • [FRAGE] Task 3: Faltung

    Ich stehe ein bissl bei der Implementierung der 3d Faltung an...

    Ich habe mir das so gedacht, das man die slices auch berücksichtigen muß und daher den code um eine 3. for schleife erweitert, die über alle slices iteriert (0 bis k < kernel_size_slices). in dieser schleife steht dann der ürsprüngliche code mit

    Voxel<float, 1> voxValue....
    float signal_value...

    int linear_index...
    fConvoluted...

    am ende erhöh ich noch den zähler offset_slices um eins.

    mein problem ist das unterbringen der 3. dimension in der berechnung von linear_index. denn ursprünglich steht ja
    int linear_index = j*(kernel_size_rows) + i;

    zur zeit rechne ich i*j*(kernel_size_slices) + k, was offensichtlich nicht simmt (links refferenz, rechts mein ergebnis - bei central difference & average smoothing filter):

    Click image for larger version

Name:	FaltungReferenz.jpg
Views:	1
Size:	49.7 KB
ID:	1247453Click image for larger version

Name:	FaltungExercise.jpg
Views:	1
Size:	47.9 KB
ID:	1247454

    ich hab das ganze so verstanden, dass die faltung, so wie sie hier implementiert is dann nur vom linear_index abhängt und nur dort der code abgeändert werden muß.


  • #2
    So ich glaub ich habs geschafft. ich hab die Parameter für voxValue ganz überlesen... da fehlte noch was, und der linear_index paßt eh wie ich es mir gedacht hab.

    Comment


    • #3
      mein linear index ist anders :O

      Comment


      • #4
        Originally posted by intruder View Post
        mein linear index ist anders :O
        wie berechnest du deinen linear_index? bei mir stimmt die ausgabe mit der referenz überein (smoothing average, gradient filter egal). ich hab aber im code gesehn, dass bei diversen methoden (zb computeAverageKernel) anscheinend auch gefaltet wird, zumindest schauts so aus und da wird der linear_index anders berechnet...

        was richtig is, weiß ich leider auch nicht

        Comment


        • #5
          Hier ist der linear_index im computeAverageKernel:
          Code:
          int linear_index = k*(iWidth*iHeight) + j*(iWidth) + i;
          und meiner schaut halt genau so aus

          Comment


          • #6
            Originally posted by intruder View Post
            Hier ist der linear_index im computeAverageKernel:
            Code:
            int linear_index = k*(iWidth*iHeight) + j*(iWidth) + i;
            und meiner schaut halt genau so aus
            und wie schaut bei dir die ausgabe aus?

            Comment


            • #7
              Click image for larger version

Name:	vis1.png
Views:	1
Size:	451.9 KB
ID:	1235098

              ziemlich gleich, soweit ich das seh. Oder?

              Comment


              • #8
                ich hab jetzt zusätzlich linear_index auch so implementiert wie in computeAverageKernel und ich seh keine unterschiede zwischen der referenz, und den beiden verschiedenen implementierungen.

                mal kurz eine andere Frage, is es eigentlich wurscht, ob ich die for-schleife über die slices außen oder ganz innen mach?

                Comment


                • #9
                  Originally posted by da_pat View Post
                  wie berechnest du deinen linear_index? bei mir stimmt die ausgabe mit der referenz überein (smoothing average, gradient filter egal). ich hab aber im code gesehn, dass bei diversen methoden (zb computeAverageKernel) anscheinend auch gefaltet wird, zumindest schauts so aus und da wird der linear_index anders berechnet...

                  was richtig is, weiß ich leider auch nicht
                  du wirst den unterschied erst beim gauß merken, da der average filter klarer weise überall den gleichen wert im kernel hat

                  es ist schon notwendig den linear index anzupassen


                  edit: also die version von intruder sieht für mich richtig aus (wobei keine ahnung wie das genau mit source code posten gehandhabt werden soll; müsste man in zukunft vielleicht noch festlegen)

                  edit2: am besten sieht man unterschiede im ergebnis direkt in den slice views; (welche auch üblicherweise ziemlich beliebt sind in der praxis; solange man zb mit segmentation oder entfernung von störungen zu tun hat)
                  Last edited by Necrowizzard; 16-11-2011, 18:15.
                  Matthias
                  CGUE, Vis2, Infovis Tutor

                  Comment

                  Working...
                  X