Results 1 to 9 of 9

Thread: Task 3: Faltung

  1. #1
    Hero
    Join Date
    Oct 2005
    Posts
    207
    Thanks
    56
    Thanked 12 Times in 8 Posts

    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:	47 
Size:	49.7 KB 
ID:	19812Click image for larger version. 

Name:	FaltungExercise.jpg 
Views:	50 
Size:	47.9 KB 
ID:	19813

    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. #2
    Hero
    Join Date
    Oct 2005
    Posts
    207
    Thanks
    56
    Thanked 12 Times in 8 Posts
    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.

  3. #3
    Baccalaureus
    Join Date
    Jun 2008
    Posts
    817
    Thanks
    139
    Thanked 144 Times in 104 Posts
    mein linear index ist anders :O

  4. #4
    Hero
    Join Date
    Oct 2005
    Posts
    207
    Thanks
    56
    Thanked 12 Times in 8 Posts
    Quote 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

  5. #5
    Baccalaureus
    Join Date
    Jun 2008
    Posts
    817
    Thanks
    139
    Thanked 144 Times in 104 Posts
    Hier ist der linear_index im computeAverageKernel:
    Code:
    int linear_index = k*(iWidth*iHeight) + j*(iWidth) + i;
    und meiner schaut halt genau so aus

  6. #6
    Hero
    Join Date
    Oct 2005
    Posts
    207
    Thanks
    56
    Thanked 12 Times in 8 Posts
    Quote 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?

  7. #7
    Baccalaureus
    Join Date
    Jun 2008
    Posts
    817
    Thanks
    139
    Thanked 144 Times in 104 Posts
    Click image for larger version. 

Name:	vis1.png 
Views:	54 
Size:	451.9 KB 
ID:	19820

    ziemlich gleich, soweit ich das seh. Oder?

  8. #8
    Hero
    Join Date
    Oct 2005
    Posts
    207
    Thanks
    56
    Thanked 12 Times in 8 Posts
    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?

  9. #9
    Baccalaureus
    Join Date
    Jan 2007
    Posts
    541
    Thanks
    0
    Thanked 48 Times in 40 Posts
    Quote 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 at 18:15.
    Matthias
    CGUE, Vis2, Infovis Tutor

  10. The Following User Says Thank You to Necrowizzard For This Useful Post:


Bookmarks

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •