Page 1 of 2 1 2 LastLast
Results 1 to 80 of 81

Thread: Projekt How-to

  1. #1
    Dipl.Ing freiBär's Avatar
    Join Date
    Jan 2010
    Posts
    1,174
    Thanks
    168
    Thanked 478 Times in 269 Posts

    Lightbulb Projekt How-to

    Da es sicher einigen so geht, wie es mir gegangen ist, hier mal eine kleine Erklärung zum Projekt. Grundsätzlich stellt sich mal die Frage, was eigentlich zu machen ist. Die etwas schwammige Angabe findet sich in den Folien. Man findet sie inklusive Quellcode auf der LVA Seite: http://www.viskom.oeaw.ac.at/~milos/lecture/
    Die Angaben variieren jedes Jahr ein bisschen, dieses Jahr lauten sie wie folgt:
    (Very) simple rendering of 3D data sets
    Projection in ±X, ±Y, ± Z directions
    1. Simple rendering techniques
    Sum, max, compositing FTB, BTF, isosurface
    2.Submission and exam:
    1. Select 6 images you like representing
    each category, submit them in a pdf file
    2. Submit source of the project

    Das bedeutet grundsätzlich mal, dass man 3D Daten hat, die man jeweils in ±X, ±Y, ± Z Richtung projizieren soll. Dafür gibts eben ein paar Techniken, wie z.B. Sum. Projiziert man z.B. in +X Richtung, schießt man quasi Strahlen in X Richtung durch, und summiert die Helligkeitswerte auf. Dadurch erhält man eine Art Röntgen bild (beim Röntgen passiert ja auch nichts anderes). Zum Darstellen sollte man das ganze noch durch die Anzahl der durchlaufenen Pixel dividieren (also ist Sum eigentlich der Durchschnitt), da man ja nur Farbwerte zwischen 0 und 255 zeichnen kann.

    So, und wie geht man das ganze jetzt an?
    Also erstens braucht man den Quellcode von der Seite. Dann könnt ihr mal versuchen, dass ganze unter Windows laufen zu lassen, und das ganze schnell aufgeben. Weil erstens zu viele Fehler auftreten, und zweitens das Framework unter Windows falsche Ergebnisse liefert. Also ladet ihr euch VM Ware Player runter, und installiert das neue Ubuntu drauf. Geht ganz einfach und schnell. Dann kopiert ihr das Projekt auf den Ubuntu Desktop. Wenn ihr die Konsole öffnet, wechselt ihr mit cd Desktop/f3dProjBasicNoComp11 ins Projektverzeichnis. Gebt einfach "make" ein (ohne irgendwelche Parameter) um das Projekt zu kompilieren. Das ganze wird immer noch einen Fehler ausspucken. Das ganze lässt sich aber beheben, indem ihr euch von http://zlib.net/ zlib compiled DLL runterladet und entpackt. Dann kopiert ihr zlib1.dll, zconf.h und zlib.h (die Header Dateien sind im include Verzeichnis) in das Projektverzeichnis. Nun lässt sich das ganze kompilieren.

    Mittels ./project -t 2 data/bigbrain-n.f3d > bigbrain-n.ppm lässt sich nun eine Projektion erstellen. Die lässt sich unter Ubuntu ohne zusätzliche Installation öffnen und betrachten.

    So, wie löse ich nun die Aufgabe?
    Öffnet project.cpp mit dem Editor. Ihr müsst nur in diesem File arbeiten, sonst nirgends. Ab ca. Zeile 85 fängt der Code an, für den ihr euch interessiert. Hier gibt es 3 for-Schleifen, die das Bild in alle 3 Richtungen durchlaufen. Die innerste Schleife (z-Schleife) ist die, die die Projektionsrichtung angibt. Mittels in->get(x, y, z) wird der aktuelle Pixel ausgelesen. Das heißt, ihr müsst euch damit nur ein bisschen spielen, um die Projektionsrichtung zu ändern. FTB wurde bereits implementiert, der Code für BTF ist auch schon vorhanden (in FTB, aber auskommentiert). Ihr müsst jetzt nur mehr die restlichen Funktionen ergänzen. Average entspricht hierbei Sum. Ihr ergänzt jetzt einfach bei Average den Case um I= I + in->get(x,y,z); und nach der z-Schleife um

    switch(type){
    case AVERAGE:
    {
    I= I/in->getNZ();
    }
    }

    Damit habt ihr schon den Durchschnitt. Jetzt noch ein make in der Konsole und ihr könnt das ganze mit
    ./project -t 0 data/bigbrain-n.f3d > bigbrain-n.ppm testen. Das -t 0 entspricht dabei dem Sum-Modus. Welche Zahl welcher Modus ist, kann man in Zeile 10 sehen (die Reihenfolge der Einträge). Wenn ihr euch das Bild jetzt anschaut, habt ihr ein schönes Röntgenbildähnliches Bild in Z Richtung.

    Ich glaub den Rest schafft ihr jetzt auch allein
    Last edited by freiBär; 14-05-2011 at 15:08.
    Why?... Because we can take it. We are not heroes, we just love science. We are silent guardians, watchful protectors of knowledge. We are dark knights (sometimes in white labcoats).

    freiBär für alle!
    https://twitter.com/freiBaer

  2. The Following 12 Users Say Thank You to freiBär For This Useful Post:


  3. #2
    Baccalaureus mOfl's Avatar
    Join Date
    Oct 2007
    Posts
    518
    Thanks
    12
    Thanked 98 Times in 84 Posts
    Hey, das ist ne super Sache, vielen Dank! Ich habs mir selber noch gar nicht angeschaut, weil ich mit den anderen Übungen noch beschäftigt bin, aber das freut mich, dass einer sich die Mühe gemacht hat, den Kollegen den Einstieg zu erleichtern, insbesondere weil ich - wie vermutlich die meisten hier mit Windows - erst ewig versucht hätten, das im Visual Studio zum Laufen zu kriegen. Wenn du sagst, dass es unter Windows falsche Ergebnisse gibt, muss ich mir die Mühe erst gar nicht machen, es da zu probieren.
    Former ECG & CGUE Tutor

  4. #3
    Dipl.Ing freiBär's Avatar
    Join Date
    Jan 2010
    Posts
    1,174
    Thanks
    168
    Thanked 478 Times in 269 Posts
    Habs am Anfang auch mit Visual Studio probiert. Im Forum gibts sogar irgendwo eine Anleitung dafür. Das Problem ist aber, dass dort einige berichten, dass es zu unterschiedlichen Ergebnissen kommen kann. Hier gibts übrigens eine einfache Installationsanleitung für das neue Ubuntu unter VM Ware: http://www.sysprobs.com/install-natt...l-vmware-tools

    Geht einfach und relativ schnell (unter 1h). Hab mich diese Woche mit ein paar anderen aus der VU getroffen, und sind dann gemeinsam auf die oben genannten Schritte gekommen. Ist also nicht allein mein Verdienst Ich freu mich wenn ich helfen kann....immerhin kann man schon ziemlich viel Zeit in den Sand setzen, wenn man nicht genau weis was man machen soll...
    Why?... Because we can take it. We are not heroes, we just love science. We are silent guardians, watchful protectors of knowledge. We are dark knights (sometimes in white labcoats).

    freiBär für alle!
    https://twitter.com/freiBaer

  5. #4
    Dipl.Ing freiBär's Avatar
    Join Date
    Jan 2010
    Posts
    1,174
    Thanks
    168
    Thanked 478 Times in 269 Posts
    Weis wer, wos noch mehr Bilder gibt? Wir sollen ja von jeder Kategorie 6 Bilder zeigen, wir haben aber nur 3 3D Datasets...
    Why?... Because we can take it. We are not heroes, we just love science. We are silent guardians, watchful protectors of knowledge. We are dark knights (sometimes in white labcoats).

    freiBär für alle!
    https://twitter.com/freiBaer

  6. #5
    Principal
    Join Date
    Oct 2007
    Posts
    67
    Thanks
    20
    Thanked 7 Times in 5 Posts
    ist das bei euch aus so, dass wenn man averaging oder auch sum macht, der kopf nicht erkennbar ist? sondern diese komischen querstreifen?
    Die Zeit war schön, nur ans is bled...
    ... dass mit der Zeit die Zeit vergeht

  7. #6
    Elite
    Join Date
    Sep 2006
    Posts
    466
    Thanks
    7
    Thanked 5 Times in 4 Posts
    jop hab ich auch @ kuoni ... ich hätte eine andere frage: wann, wie wo muss man den source etc abgeben? das pdf muss man zur prüfung mitnehmen und den soruce auch=?
    blub

  8. #7
    Dipl.Ing freiBär's Avatar
    Join Date
    Jan 2010
    Posts
    1,174
    Thanks
    168
    Thanked 478 Times in 269 Posts
    Quote Originally Posted by Newbie0815 View Post
    jop hab ich auch @ kuoni ... ich hätte eine andere frage: wann, wie wo muss man den source etc abgeben? das pdf muss man zur prüfung mitnehmen und den soruce auch=?
    per mail schicken.
    Why?... Because we can take it. We are not heroes, we just love science. We are silent guardians, watchful protectors of knowledge. We are dark knights (sometimes in white labcoats).

    freiBär für alle!
    https://twitter.com/freiBaer

  9. #8
    Baccalaureus mOfl's Avatar
    Join Date
    Oct 2007
    Posts
    518
    Thanks
    12
    Thanked 98 Times in 84 Posts
    Was soll man denn unter "case SHADED" implementieren? Wie habt ihr das gelöst? Unter shaded hätte ich spontan eine Gouraud- oder Phong-geshadete Isofläche des Datensatzes und dann Ray Casting mit "First"-Rückgabe verstanden, aber ich wage zu behaupten, dass das den "sehr einfachen" Umfang des Übungsteils sprengen würde, oder liege ich da falsch?
    Former ECG & CGUE Tutor

  10. #9
    Dipl.Ing freiBär's Avatar
    Join Date
    Jan 2010
    Posts
    1,174
    Thanks
    168
    Thanked 478 Times in 269 Posts
    Quote Originally Posted by mOfl View Post
    Was soll man denn unter "case SHADED" implementieren? Wie habt ihr das gelöst? Unter shaded hätte ich spontan eine Gouraud- oder Phong-geshadete Isofläche des Datensatzes und dann Ray Casting mit "First"-Rückgabe verstanden, aber ich wage zu behaupten, dass das den "sehr einfachen" Umfang des Übungsteils sprengen würde, oder liege ich da falsch?
    du verwechselst da irgendwas. wo hast dubittedie komische Angabe her? Die Angabe lautet doch eindeutig Sum, max, compositing FTB, BTF, isosurface, und das ist doch ziemlich einfach...
    Why?... Because we can take it. We are not heroes, we just love science. We are silent guardians, watchful protectors of knowledge. We are dark knights (sometimes in white labcoats).

    freiBär für alle!
    https://twitter.com/freiBaer

  11. #10
    Baccalaureus mOfl's Avatar
    Join Date
    Oct 2007
    Posts
    518
    Thanks
    12
    Thanked 98 Times in 84 Posts
    "case SHADED" ist eine Zeile aus dem Code, den wir vervollständigen sollen, eben bei der Unterscheidung der verschiedenen Rendering Types. Der Tatsache, dass der Rendering Type nicht ISOSURFACE sondern SHADED heißt, habe ich entnommen, dass man sich hier auch noch um ein Beleuchtungsmodell kümmern soll.
    Former ECG & CGUE Tutor

  12. #11
    Dipl.Ing freiBär's Avatar
    Join Date
    Jan 2010
    Posts
    1,174
    Thanks
    168
    Thanked 478 Times in 269 Posts
    Quote Originally Posted by mOfl View Post
    "case SHADED" ist eine Zeile aus dem Code, den wir vervollständigen sollen, eben bei der Unterscheidung der verschiedenen Rendering Types. Der Tatsache, dass der Rendering Type nicht ISOSURFACE sondern SHADED heißt, habe ich entnommen, dass man sich hier auch noch um ein Beleuchtungsmodell kümmern soll.
    Vervollständigen ist relativ (steht auch nicht in der Angabe). Das ist nämlich seit Jahren der selbe Code, aber mit leicht veränderter Angabe. Aber um deine Frage zu beantworten: Threshold auswählen, sobald der überschritten wird Gradient (central difference estimation) bestimmen - fertig. Also ja, eigentlich hast du dadurch schon Beleuchtung drinnen. Anleitung dafür gibts schon - suche nach isosurface hilft
    Why?... Because we can take it. We are not heroes, we just love science. We are silent guardians, watchful protectors of knowledge. We are dark knights (sometimes in white labcoats).

    freiBär für alle!
    https://twitter.com/freiBaer

  13. #12
    Baccalaureus mOfl's Avatar
    Join Date
    Oct 2007
    Posts
    518
    Thanks
    12
    Thanked 98 Times in 84 Posts
    Quote Originally Posted by freiBär View Post
    Gradient (central difference estimation) bestimmen
    Danke, ich glaube, das war das richtige Stichwort. Ich hatte die Schätzung des Gradienten nicht mit den benötigten Normalen für die Beleuchtung in Verbindung gebracht
    Former ECG & CGUE Tutor

  14. #13
    Elite maxputz's Avatar
    Join Date
    Jan 2008
    Posts
    379
    Thanks
    43
    Thanked 56 Times in 46 Posts
    Vielleicht übersehe ich was, aber -

    wo gibts die angaben zur UE? Laut freibär war die Angabe letztes Jahr auf den Folien. Das Framework findet sich online auf der LVA-Website. Aber wo genau findet man eine Angabe zur UE? Hat jdm. eine Idee?

  15. #14
    Baccalaureus mOfl's Avatar
    Join Date
    Oct 2007
    Posts
    518
    Thanks
    12
    Thanked 98 Times in 84 Posts
    Puh da gräbst einen alten Schinken aus Die Angabe ist sehr vage, aber da du ohnehin nur grob 20 Zeilen ändern/schreiben musst, genügt das wohl auch. Die wenigen Informationen, die es dazu gibt, sollten sich in http://cg.tuwien.ac.at/courses/MedVi...uction2012.pdf finden lassen.
    Former ECG & CGUE Tutor

  16. #15
    Dipl.Ing freiBär's Avatar
    Join Date
    Jan 2010
    Posts
    1,174
    Thanks
    168
    Thanked 478 Times in 269 Posts
    Die Angabe findet sich in den Folien...ist ungefähr ein bis 2 Zeilen lang ;-)

    Gesendet von meinem Nexus S mit Tapatalk
    Why?... Because we can take it. We are not heroes, we just love science. We are silent guardians, watchful protectors of knowledge. We are dark knights (sometimes in white labcoats).

    freiBär für alle!
    https://twitter.com/freiBaer

  17. #16
    Elite maxputz's Avatar
    Join Date
    Jan 2008
    Posts
    379
    Thanks
    43
    Thanked 56 Times in 46 Posts
    Quote Originally Posted by freiBär View Post
    Die Angabe findet sich in den Folien...ist ungefähr ein bis 2 Zeilen lang ;-)

    Gesendet von meinem Nexus S mit Tapatalk
    das ist doch alles ein Witz!

  18. #17
    Dipl.Ing freiBär's Avatar
    Join Date
    Jan 2010
    Posts
    1,174
    Thanks
    168
    Thanked 478 Times in 269 Posts
    Na was glaubst, warum ich das Projekt-How-To geschrieben hab

    edit: Das ist die Angabe:
    (Very) simple rendering of 3D data sets Projection in ±X, ±Y, ± Z directions
    1. Simple rendering techniques
    Sum, max, compositing FTB, BTF, isosurface
    2.Submission and exam:
    1. Select 6 images you like representing
    each category, submit them in a pdf file
    2. Submit source of the project
    Sogar die selbe wie letztes mal.
    Last edited by freiBär; 29-04-2012 at 17:38.
    Why?... Because we can take it. We are not heroes, we just love science. We are silent guardians, watchful protectors of knowledge. We are dark knights (sometimes in white labcoats).

    freiBär für alle!
    https://twitter.com/freiBaer

  19. #18
    Elite maxputz's Avatar
    Join Date
    Jan 2008
    Posts
    379
    Thanks
    43
    Thanked 56 Times in 46 Posts
    Quote Originally Posted by freiBär View Post
    Na was glaubst, warum ich das Projekt-How-To geschrieben hab
    hehe, danke nochmal!!!

  20. The Following User Says Thank You to maxputz For This Useful Post:


  21. #19
    Dipl.Ing freiBär's Avatar
    Join Date
    Jan 2010
    Posts
    1,174
    Thanks
    168
    Thanked 478 Times in 269 Posts
    Also was wirklich ein Witz war: Die Aufgabe zu lösen, ohne mein Projekt-How-to zu haben
    Why?... Because we can take it. We are not heroes, we just love science. We are silent guardians, watchful protectors of knowledge. We are dark knights (sometimes in white labcoats).

    freiBär für alle!
    https://twitter.com/freiBaer

  22. The Following 3 Users Say Thank You to freiBär For This Useful Post:


  23. #20
    Elite maxputz's Avatar
    Join Date
    Jan 2008
    Posts
    379
    Thanks
    43
    Thanked 56 Times in 46 Posts
    Sie dürften dieses Semester den Source Code überarbeitet haben (damit man den oben beschriebenen Workaround mit den zlib Sachen nicht braucht, nehme ich an - bei funktionierts auch so)
    Bei mir ist die Source ein Fragmenthaufen:
    - als Parameter für die direction gibts nur +x und die direction (dir) selbst wir einmal auf MX gesetzt und kommt nie wieder vor.
    - Sollen wir jetzt SHADED oder ISOSURFACE / SUM oder AVERAGE implementieren?
    - Gabs dazu Infos in der Vorlesung?
    Last edited by maxputz; 09-05-2012 at 20:00.

  24. #21
    Elite maxputz's Avatar
    Join Date
    Jan 2008
    Posts
    379
    Thanks
    43
    Thanked 56 Times in 46 Posts
    Achja nochwas: Wie verwendet man das Argument +x beim Programmaufruf richtig?

  25. #22
    Principal
    Join Date
    Jun 2011
    Posts
    67
    Thanks
    17
    Thanked 5 Times in 5 Posts
    Erstmal riesigen Dank an die obige Anleitung und Hilfe!
    Leider bin ich trotzdem nicht allzuweit damit gekommen. Ich scheitere an dem ausführen von "make" und zwar bekomme ich als Fehler

    g++ -O -I. -o project.o -c project.cpp
    make: g++: Command not found
    make: *** [project.o] Error 127

    Nun steht einmal oben noch was dazu
    "Das ganze lässt sich aber beheben, indem ihr euch von http://zlib.net/ zlib compiled DLL runterladet und entpackt. Dann kopiert ihr zlib1.dll, zconf.h und zlib.h (die Header Dateien sind im include Verzeichnis) in das Projektverzeichnis. Nun lässt sich das ganze kompilieren."

    Nur kann ich die entsprechenden files nicht finden? bzw weiß schonmal gar nicht was ich auf http://zlib.net/ runterladen muss.
    Und maxputz meinte ja das sie dies in der jetzigen ss2012 version nicht mehr nötig ist.

    Nur wie bringe ich das dann zum laufen?

  26. #23
    Elite maxputz's Avatar
    Join Date
    Jan 2008
    Posts
    379
    Thanks
    43
    Thanked 56 Times in 46 Posts
    Quote Originally Posted by Thomas G View Post
    Erstmal riesigen Dank an die obige Anleitung und Hilfe!
    Leider bin ich trotzdem nicht allzuweit damit gekommen. Ich scheitere an dem ausführen von "make" und zwar bekomme ich als Fehler

    g++ -O -I. -o project.o -c project.cpp
    make: g++: Command not found
    make: *** [project.o] Error 127

    Nun steht einmal oben noch was dazu
    "Das ganze lässt sich aber beheben, indem ihr euch von http://zlib.net/ zlib compiled DLL runterladet und entpackt. Dann kopiert ihr zlib1.dll, zconf.h und zlib.h (die Header Dateien sind im include Verzeichnis) in das Projektverzeichnis. Nun lässt sich das ganze kompilieren."

    Nur kann ich die entsprechenden files nicht finden? bzw weiß schonmal gar nicht was ich auf http://zlib.net/ runterladen muss.
    Und maxputz meinte ja das sie dies in der jetzigen ss2012 version nicht mehr nötig ist.

    Nur wie bringe ich das dann zum laufen?
    Compiler installiert?

  27. #24
    Principal
    Join Date
    Jun 2011
    Posts
    67
    Thanks
    17
    Thanked 5 Times in 5 Posts
    Lol. Nein... ;-) Welchen? Woher?

  28. #25
    Elite maxputz's Avatar
    Join Date
    Jan 2008
    Posts
    379
    Thanks
    43
    Thanked 56 Times in 46 Posts

  29. #26
    Dipl.Ing freiBär's Avatar
    Join Date
    Jan 2010
    Posts
    1,174
    Thanks
    168
    Thanked 478 Times in 269 Posts
    Quote Originally Posted by maxputz View Post
    Sie dürften dieses Semester den Source Code überarbeitet haben (damit man den oben beschriebenen Workaround mit den zlib Sachen nicht braucht, nehme ich an - bei funktionierts auch so)
    Bei mir ist die Source ein Fragmenthaufen:
    - als Parameter für die direction gibts nur +x und die direction (dir) selbst wir einmal auf MX gesetzt und kommt nie wieder vor.
    - Sollen wir jetzt SHADED oder ISOSURFACE / SUM oder AVERAGE implementieren?
    - Gabs dazu Infos in der Vorlesung?
    ISOSURFACE, nicht shaded. SUM und Average ist das selbe (also ihr müsst average implementieren). SUM könntest du nämlich grafisch gar nicht darstellen (weil die Werte größer als 255) sind - deshalb den Durchschnitt nehmen.

    Für die Direction brauchst du ein switch (weis nicht obs schon im Code drinnen steht). Das ganze soll in alle Richtungen funktionieren.

    switch(dir){
    case PZ:{
    ...
    break;
    }
    case PX:{
    ...
    break;
    }
    ......

    Quote Originally Posted by maxputz View Post
    Achja nochwas: Wie verwendet man das Argument +x beim Programmaufruf richtig?
    Der Programmaufruf sollte in etwa so ausschaun:
    ./project +x -t 4 data/tot2-n.f3d > pics/ISO/tot2_px_4.ppm
    +x ist die Direction, -t 4 ist dann für die Methode.
    Why?... Because we can take it. We are not heroes, we just love science. We are silent guardians, watchful protectors of knowledge. We are dark knights (sometimes in white labcoats).

    freiBär für alle!
    https://twitter.com/freiBaer

  30. #27
    Principal
    Join Date
    Jun 2011
    Posts
    67
    Thanks
    17
    Thanked 5 Times in 5 Posts
    Wah ich peil nur einen Hauch von diesem Zeug.
    1.Also mit dem Compiler (danke nochmal) scheint das nun funktioniert zu haben (siehe unten). (Wenn man die Warnings mal ignoriert)
    2. Dann habe ich "./project -t 2 data/bigbrain-n.f3d > bigbrain-n.ppm" in die Konsole eingegebn das zur Folge hatte das nun dieses Röntgen Bild mit dem Kopf zu sehen ist im Ordner. Mehr hatte das nichts zu bedeutenoder?
    3. Nun gehts weiter indem ich die project.cpp geöffnet habe und vor diesem Quellcode sitze (was ja schonmal gut ist, dass ich den sehe), Die besagten 3 for schleifen habe ich auch gefunden, nur was soll ich hier jetzt machen? Und wie kann ich mich "spielen" was kann ich hier ausprobieren und wie kann ich es ansehen?

    Compiler
    ordice@lordice-virtual-machine:~/Desktop/f3dProjBasicNoComp14$ make
    g++ -O -I. -o project.o -c project.cpp
    g++ -O -I. -o f3d.o -c f3d.c
    f3d.c: In function ‘FILE* ReadHeader(FILE*, f3dHeader*, int*, int*, int*)’:
    f3d.c:1046:27: warning: ignoring return value of ‘char* fgets(char*, int, FILE*)’, declared with attribute warn_unused_result [-Wunused-result]
    f3d.c:1059:27: warning: ignoring return value of ‘char* fgets(char*, int, FILE*)’, declared with attribute warn_unused_result [-Wunused-result]
    f3d.c:1069:27: warning: ignoring return value of ‘char* fgets(char*, int, FILE*)’, declared with attribute warn_unused_result [-Wunused-result]
    f3d.c:1248:27: warning: ignoring return value of ‘char* fgets(char*, int, FILE*)’, declared with attribute warn_unused_result [-Wunused-result]
    g++ -O -I. -o f3dGridLite.o -c f3dGridLite.cpp
    g++ -o project project.o f3d.o f3dGridLite.o -lm

  31. #28
    Dipl.Ing freiBär's Avatar
    Join Date
    Jan 2010
    Posts
    1,174
    Thanks
    168
    Thanked 478 Times in 269 Posts
    Quote Originally Posted by Thomas G View Post
    Wah ich peil nur einen Hauch von diesem Zeug.
    1.Also mit dem Compiler (danke nochmal) scheint das nun funktioniert zu haben (siehe unten). (Wenn man die Warnings mal ignoriert)
    2. Dann habe ich "./project -t 2 data/bigbrain-n.f3d > bigbrain-n.ppm" in die Konsole eingegebn das zur Folge hatte das nun dieses Röntgen Bild mit dem Kopf zu sehen ist im Ordner. Mehr hatte das nichts zu bedeutenoder?
    3. Nun gehts weiter indem ich die project.cpp geöffnet habe und vor diesem Quellcode sitze (was ja schonmal gut ist, dass ich den sehe), Die besagten 3 for schleifen habe ich auch gefunden, nur was soll ich hier jetzt machen? Und wie kann ich mich "spielen" was kann ich hier ausprobieren und wie kann ich es ansehen?

    Compiler
    ordice@lordice-virtual-machine:~/Desktop/f3dProjBasicNoComp14$ make
    g++ -O -I. -o project.o -c project.cpp
    g++ -O -I. -o f3d.o -c f3d.c
    f3d.c: In function ‘FILE* ReadHeader(FILE*, f3dHeader*, int*, int*, int*)’:
    f3d.c:1046:27: warning: ignoring return value of ‘char* fgets(char*, int, FILE*)’, declared with attribute warn_unused_result [-Wunused-result]
    f3d.c:1059:27: warning: ignoring return value of ‘char* fgets(char*, int, FILE*)’, declared with attribute warn_unused_result [-Wunused-result]
    f3d.c:1069:27: warning: ignoring return value of ‘char* fgets(char*, int, FILE*)’, declared with attribute warn_unused_result [-Wunused-result]
    f3d.c:1248:27: warning: ignoring return value of ‘char* fgets(char*, int, FILE*)’, declared with attribute warn_unused_result [-Wunused-result]
    g++ -O -I. -o f3dGridLite.o -c f3dGridLite.cpp
    g++ -o project project.o f3d.o f3dGridLite.o -lm
    Zu 2. Ja das soll so sein.
    Zu 3. Indem du das ganze so implementierst, das er die Bilder in der jeweiligen Richtung durchläuft. Du kannst dich dann e an die bereits implementierte Methode halten.
    Why?... Because we can take it. We are not heroes, we just love science. We are silent guardians, watchful protectors of knowledge. We are dark knights (sometimes in white labcoats).

    freiBär für alle!
    https://twitter.com/freiBaer

  32. #29
    Elite maxputz's Avatar
    Join Date
    Jan 2008
    Posts
    379
    Thanks
    43
    Thanked 56 Times in 46 Posts
    Danke @freibär!

    Was mich stört: Was ist dieses SUM, ISOSURFACE, MAX?
    Ich hätte zumindest beim Durchblättern keine passenden Folien mit Formeln dazu gefunden, v.a. was ISOSURFACE betrifft.
    War jdm. in der letzten Vorlesung - gabs Erklärungen zur Übung?

  33. #30
    Dipl.Ing freiBär's Avatar
    Join Date
    Jan 2010
    Posts
    1,174
    Thanks
    168
    Thanked 478 Times in 269 Posts
    SUM ist aufsummieren, was aber wie gesagt dem Average entspricht. Max ist eigentlich auch selbst erklärend (Maximum Intensity Projection). Isosurface steht irgendwo in den Folien (etwas mit Gradienten) bzw. gibts auch hier im Forum: http://www.informatik-forum.at/showt...4079-Projekt-1
    Last edited by freiBär; 14-05-2012 at 09:53.
    Why?... Because we can take it. We are not heroes, we just love science. We are silent guardians, watchful protectors of knowledge. We are dark knights (sometimes in white labcoats).

    freiBär für alle!
    https://twitter.com/freiBaer

  34. #31
    Principal
    Join Date
    Jun 2011
    Posts
    67
    Thanks
    17
    Thanked 5 Times in 5 Posts
    Sorry: "Zu 3. Indem du das ganze so implementierst, das er die Bilder in der jeweiligen Richtung durchläuft. Du kannst dich dann e an die bereits implementierte Methode halten."
    Ich bin wirklich eine totale Pfeife im Programmieren. Ich weiß wirklich nicht wie ich das implementieren soll.

    Ich hab die for Schleifen schon gefunden. hab ich ja geschrieben^^
    Nur weiß ich nicht wo ich da jetzt ansetzen muss und und wie oder was ich "implementieren muss, das die Bilder in der jeweiligen Richtung durchläuft"
    Kann mir das jemand erklären. Sobald ich das verstanden habe sollte sich der rest ergeben.


    for (x=0; x<in->getNX(); x++)
    for (y=0; y<in->getNY(); y++){
    float I(0); // accumulated color
    float b(0); // accumulated alpha
    for (z=0; z<in->getNZ(); z++) {
    float val = in->get(x, y, z);
    switch (type){
    case COMP_FTB:
    {
    // voxel opacity
    // we assume that maximum is 255
    float a = 1-exp(-val/255);
    // voxel color - just gray
    float C = in->get(x, y, z)*a;
    //FTB
    I = I + (1-b)*C;
    b = b + (1-b)*a;
    //BTF
    //I = I*(1-a) + C;
    }

  35. #32
    Dipl.Ing freiBär's Avatar
    Join Date
    Jan 2010
    Posts
    1,174
    Thanks
    168
    Thanked 478 Times in 269 Posts
    Nun ja, die Basics einer Projektion enes 3D Volumens in en 2D Bild sollte man ehrlich gesagt schon drauf haben (ich glaub für die LVA wird auch "VO Visualisierung" empfohlen. Wenn du nicht gut Programmieren kannst, wirdst du dir hier sicher nicht leicht tun. Ich helf dir trotzdem: Du hast 3 in sich geschachtelte Schleifen, innerhalb werden die Pixel ausgelesen. Die 3 Schleifen entsprechen das durchlaufendes Volumens auf der x,y und z Achse. Wird jetzt in der untersten Schleife aufsummiert, und unterhalb der 2. Schleife (selbe Ebene wie die z Schleife) gespeichert, hast du ein 2D Bild, das für jeden Punkt (x,y) die Summe der Pixel entlang der z-Ahse enthält. Du hast also die Sum Projektion (dividiers noch durch die Länge der z- Achse, da du Werte > 255 nicht rendern kannst = Durchschnittsberechnung). Berechnest du nicht die Summe sondern den Maximalwert hast du die Maximum Intensity Projection (MIP)
    Why?... Because we can take it. We are not heroes, we just love science. We are silent guardians, watchful protectors of knowledge. We are dark knights (sometimes in white labcoats).

    freiBär für alle!
    https://twitter.com/freiBaer

  36. The Following User Says Thank You to freiBär For This Useful Post:


  37. #33
    Principal
    Join Date
    Jan 2005
    Posts
    87
    Thanks
    7
    Thanked 4 Times in 2 Posts
    Es wurde heute gesagt, dass die Prüfung am 21. Juni ist. Abgabe des Projekts soll einfach davor per Mail geschehen. Was auch ganz interessant ist, dass es einen Fragenkatalog geben wird. War das letztes Jahr auch schon und gibt es da vielleicht schon eine Ausarbeitung? Ich habe ein GoogleDocs angelegt: https://docs.google.com/document/d/1...mWFqoHdHw/edit falls sich jemand bei der Ausarbeitung beteiligen möchte.

  38. #34
    Dipl.Ing freiBär's Avatar
    Join Date
    Jan 2010
    Posts
    1,174
    Thanks
    168
    Thanked 478 Times in 269 Posts
    Nein, hats nicht gegeben.
    Why?... Because we can take it. We are not heroes, we just love science. We are silent guardians, watchful protectors of knowledge. We are dark knights (sometimes in white labcoats).

    freiBär für alle!
    https://twitter.com/freiBaer

  39. #35
    Veteran
    Join Date
    Nov 2010
    Posts
    17
    Thanks
    8
    Thanked 6 Times in 1 Post
    Hi!

    Nachdem ich leider beim isosurface nicht durchblicke (auch nicht mit dem anderen thread), frag ich mal nach

    Bitte korrigieren wenn falsch aber soweit hab ichs verstanden und s

    Zuerst threshold detection also am ersten pixel welcher den thresh übersteigt die weiteren Berechnungen machen.
    Dann die gradient estimation (gx,gy,gz) wie in post nummer 24 in http://www.informatik-forum.at/showt...4079-Projekt-1 berechen.

    Ab jetzt versteh ichs leider nicht mehr, aus was berechnet sich jetzt genau der pixel wert dann?

    Danke im Voraus

  40. #36
    Dipl.Ing freiBär's Avatar
    Join Date
    Jan 2010
    Posts
    1,174
    Thanks
    168
    Thanked 478 Times in 269 Posts
    Steht doch e im Thread den du gepostet hast:
    http://www.informatik-forum.at/showt...l=1#post589787
    Why?... Because we can take it. We are not heroes, we just love science. We are silent guardians, watchful protectors of knowledge. We are dark knights (sometimes in white labcoats).

    freiBär für alle!
    https://twitter.com/freiBaer

  41. #37
    Veteran
    Join Date
    Nov 2010
    Posts
    17
    Thanks
    8
    Thanked 6 Times in 1 Post
    ja genau das hab ich dann nicht verstanden,

    weil vorher wurde geschrieben dot multiply with the viewing direction

    und er schreibt dann im post:
    val = gx*vx + gy*vx + gz*gz
    was für mich keinen sinn ergibt,

    dot multiply with the viewing direction wär für mich sowas:
    val = gx*vx + gy*vy + gz*vz
    und damit schauts finde ich ok aus

    aber stimmt jetzt meins oder das im post? und wenn das im post stimmt wie schauts für die anderen richtungen aus?
    danke
    TehSackL

  42. #38
    Dipl.Ing freiBär's Avatar
    Join Date
    Jan 2010
    Posts
    1,174
    Thanks
    168
    Thanked 478 Times in 269 Posts
    Deins stimmt, das andere ist offensichtlich ein Tippfehler. Der ist mir damals nicht mal aufgefallen...

    Gesendet von meinem Nexus S mit Tapatalk
    Why?... Because we can take it. We are not heroes, we just love science. We are silent guardians, watchful protectors of knowledge. We are dark knights (sometimes in white labcoats).

    freiBär für alle!
    https://twitter.com/freiBaer

  43. The Following User Says Thank You to freiBär For This Useful Post:


  44. #39
    Baccalaureus
    Join Date
    Sep 2007
    Posts
    632
    Thanks
    96
    Thanked 85 Times in 73 Posts
    Bin zwar eigentlich schon fertig, aber eine Sache verwirrt mich da schon ein bissl.

    Im Programm ist ja schon eine Projektion implementiert (eh klar, sonst könnt man ja auch kein FTB machen, wie es ja auch bereits implementiert ist). Steht ja auch der Argumentbehandlung:

    Code:
    else if (strcmp(*argv,"-x") == 0) {
                dir = MX;
                ++argv;
                argc--;
            }
    Die Projektion die aber ursprünglich im Programm implementiert ist, ist jetzt aber nicht die -x Projektion (wie das in der Argumentbehandlung steht), sondern die -z Projektion oder? Weil er nimmt ja jedes (x,y) Paar und schickt für das einen Strahl in die z-Richtung. Richtig?

  45. #40
    Veteran
    Join Date
    Nov 2010
    Posts
    17
    Thanks
    8
    Thanked 6 Times in 1 Post
    Seh ich auch so das die innerste Schleife die Richtung angiebt, auch freiBär hats ja in seinem ersten Post geschrieben, ich hät aber gedacht es is die +z Richtung die implementiert is ^^, aber mit den richtungen kämpf ich eben auch noch...

  46. #41
    Principal
    Join Date
    Dec 2004
    Posts
    31
    Thanks
    0
    Thanked 1 Time in 1 Post
    Quote Originally Posted by frankenstone View Post
    Es wurde heute gesagt, dass die Prüfung am 21. Juni ist. Abgabe des Projekts soll einfach davor per Mail geschehen. Was auch ganz interessant ist, dass es einen Fragenkatalog geben wird. War das letztes Jahr auch schon und gibt es da vielleicht schon eine Ausarbeitung? Ich habe ein GoogleDocs angelegt: https://docs.google.com/document/d/1...mWFqoHdHw/edit falls sich jemand bei der Ausarbeitung beteiligen möchte.
    Inzwischen ist der Fragenkatalog auf der LVA-Homepage verlinkt.
    Oder direkt: http://www.cg.tuwien.ac.at/courses/M...Topics2012.pdf

  47. #42
    Elite deathhero's Avatar
    Join Date
    Dec 2007
    Location
    1050 wien / klagenfurt
    Posts
    352
    Thanks
    107
    Thanked 57 Times in 47 Posts
    hallo,

    ich habe noch eine frage zu isosurface, da mir das noch nicht ganz klar ist.

    1. threshold
    definiere ich diesen wert selbst? zB einfach 100 ?

    2. gx, gy gz ausrechnen sollte machbar sein.
    dann multiplikation mit den v werten: (zB +x)
    val = gx*1 + gy*0 + gz*0;

    was mache ich jetzt mit diesem val wert in der innersten schleife? bzw. was passiert beim nächsten schleifendurchlauf?
    zusammenzählen?

    bitte um kurzes feedback

    danke lg

  48. #43
    Baccalaureus
    Join Date
    Sep 2007
    Posts
    632
    Thanks
    96
    Thanked 85 Times in 73 Posts
    Quote Originally Posted by deathhero View Post
    1. threshold
    definiere ich diesen wert selbst? zB einfach 100 ?
    Ja, ich hab aber z.B. das Argumenthandling erweitert, damit man den threshold als Parameter mitgeben kann.

    Quote Originally Posted by deathhero View Post
    2. gx, gy gz ausrechnen sollte machbar sein.
    dann multiplikation mit den v werten: (zB +x)
    val = gx*1 + gy*0 + gz*0;

    was mache ich jetzt mit diesem val wert in der innersten schleife? bzw. was passiert beim nächsten schleifendurchlauf?
    zusammenzählen?
    Ich glaub so ganz hab ich das auch noch nicht verstanden, was er da jetzt wirklich will. Ich weiß nur eins, wenn du einen Volume Renderer hast, der ein Isosurface simulieren soll, dann definierst du einen Threshold und wenn der erreicht ist, dann brichst du die Loop fürs Ray-Casting ab und berechnest an dieser Stelle das Shading, siehe z.B. hier: http://code.google.com/p/visualizati...svn1118&r=1118

    Nachdem ich noch keine Antwort bezüglich Feedback bekomme habe, hier mal ein paar Bilder von meinem Programm. Ja, so falsch schauts eigentlich gar nicht aus, ist ja nur eine diffuse Beleuchtungssituation bei mir...
    Attached Thumbnails Attached Thumbnails Click image for larger version. 

Name:	teapot-n-shaded+x.png 
Views:	61 
Size:	5.3 KB 
ID:	21260   Click image for larger version. 

Name:	teapot-n-shaded+y.png 
Views:	66 
Size:	7.5 KB 
ID:	21261   Click image for larger version. 

Name:	teapot-n-shaded+z.png 
Views:	57 
Size:	4.6 KB 
ID:	21262   Click image for larger version. 

Name:	teapot-n-shaded-x.png 
Views:	47 
Size:	5.3 KB 
ID:	21263   Click image for larger version. 

Name:	teapot-n-shaded-y.png 
Views:	45 
Size:	7.5 KB 
ID:	21264  


  49. #44
    Elite deathhero's Avatar
    Join Date
    Dec 2007
    Location
    1050 wien / klagenfurt
    Posts
    352
    Thanks
    107
    Thanked 57 Times in 47 Posts
    Quote Originally Posted by ReinhardBla View Post
    Ich glaub so ganz hab ich das auch noch nicht verstanden, was er da jetzt wirklich will. Ich weiß nur eins, wenn du einen Volume Renderer hast, der ein Isosurface simulieren soll, dann definierst du einen Threshold und wenn der erreicht ist, dann brichst du die Loop fürs Ray-Casting ab und berechnest an dieser Stelle das Shading, siehe z.B. hier: http://code.google.com/p/visualizati...svn1118&r=1118
    Nachdem ich noch keine Antwort bezüglich Feedback bekomme habe, hier mal ein paar Bilder von meinem Programm. Ja, so falsch schauts eigentlich gar nicht aus, ist ja nur eine diffuse Beleuchtungssituation bei mir...
    ok also du rechnest diesen val wert für jeden punkt nur einmal aus und verlässt danach die innerste schleife, richtig?

  50. #45
    Baccalaureus
    Join Date
    Sep 2007
    Posts
    632
    Thanks
    96
    Thanked 85 Times in 73 Posts
    Ja, ich mach es derzeit schon so. Sonst würde meiner Meinung nach der Threshold wenig Sinn machen.

    Edit: Ich hatte es aber auch schon anders, weil ich versucht habe ein transparentes Isosurface darzustellen. Bei dem Ansatz hab ich dann aufsummiert und ein alpha berechnet, aber das hat bei den Volumina extrem scheisse ausgesehen.
    Last edited by ReinhardBla; 22-06-2012 at 13:32.

  51. #46
    Elite deathhero's Avatar
    Join Date
    Dec 2007
    Location
    1050 wien / klagenfurt
    Posts
    352
    Thanks
    107
    Thanked 57 Times in 47 Posts
    ok dann werde ich das auch so machen... thx!

  52. #47
    Baccalaureus
    Join Date
    Sep 2007
    Posts
    632
    Thanks
    96
    Thanked 85 Times in 73 Posts
    Ja, post mal ein paar Bilder, wenn du fertig bist

  53. #48
    Elite deathhero's Avatar
    Join Date
    Dec 2007
    Location
    1050 wien / klagenfurt
    Posts
    352
    Thanks
    107
    Thanked 57 Times in 47 Posts
    mache ich....morgen

  54. #49
    Dipl.Ing Stephe's Avatar
    Join Date
    Oct 2004
    Posts
    1,193
    Thanks
    27
    Thanked 70 Times in 33 Posts
    Quote Originally Posted by freiBär View Post

    Der Programmaufruf sollte in etwa so ausschaun:
    ./project +x -t 4 data/tot2-n.f3d > pics/ISO/tot2_px_4.ppm
    +x ist die Direction, -t 4 ist dann für die Methode.
    Wenn ich das so eingeb (oder mit +y, -y etc.) , bekomm ich "Incorrect number of arguments". WTF?


  55. #50
    Veteran
    Join Date
    Oct 2008
    Posts
    10
    Thanks
    2
    Thanked 1 Time in 1 Post
    Es ist am Anfang nur +x implementiert. Schau in die main-Methode und ergänze einfach die restlichen Richtungen.

  56. #51
    Dipl.Ing Stephe's Avatar
    Join Date
    Oct 2004
    Posts
    1,193
    Thanks
    27
    Thanked 70 Times in 33 Posts
    Quote Originally Posted by Hadesskywalker View Post
    Es ist am Anfang nur +x implementiert. Schau in die main-Methode und ergänze einfach die restlichen Richtungen.
    Sorry, ja. Ich dachte, die Argumentbehandlung selbst wurde schon implementiert, was aber nicht der Fall ist Jetzt geht's.


  57. #52
    Elite deathhero's Avatar
    Join Date
    Dec 2007
    Location
    1050 wien / klagenfurt
    Posts
    352
    Thanks
    107
    Thanked 57 Times in 47 Posts
    ich bekomme hin und wieder den fehler: "segmentation fault (core dumped)"
    sonst zufällig auch jemand?

  58. #53
    Baccalaureus
    Join Date
    Sep 2007
    Posts
    632
    Thanks
    96
    Thanked 85 Times in 73 Posts
    Dann greifst du bei in->get(x, y, z); auf einen Voxel zu, den es nicht gibt...

  59. The Following User Says Thank You to ReinhardBla For This Useful Post:


  60. #54
    Elite deathhero's Avatar
    Join Date
    Dec 2007
    Location
    1050 wien / klagenfurt
    Posts
    352
    Thanks
    107
    Thanked 57 Times in 47 Posts
    alles klar, thx. meine iso bilder schauen übrigens wie deine aus...

  61. #55
    Veteran
    Join Date
    Nov 2010
    Posts
    17
    Thanks
    8
    Thanked 6 Times in 1 Post
    Hallo,

    ich bin mir leider noch unsicher mit den projektionsrichtungen, zb bei den oben geposteten bildern ist der teapot ja verdreht ich durchlaufe momentan die bilder so (von der äußersten zur innersten schleife, vorzeichen gibt die richtung an)
    PX: (+y,+z,+x)
    MX: (-y,+z,-x)
    PY: (+x,+z,+y)
    MY: (-x,+z,-y)
    PZ: (+x,+y,+z)
    MZ: (-x,+y,-z),

    Bin mir aber unsicher damit, weil für tot-2 find ich die bilder ok von den richtungen her, aber der teapot steht irgendwie wie bei den bildern oben, die innerste variable ist eigentlich klar, die äußersten verdreh ich damit die bilder für zb mip in +x und -x nicht ident sindern, sondern wirklich so als würde man von der anderen seite draufschauen.

    Wie habts ihr das gemacht und weiss vielleicht wer wies der prof gern hätte?

  62. #56
    Dipl.Ing freiBär's Avatar
    Join Date
    Jan 2010
    Posts
    1,174
    Thanks
    168
    Thanked 478 Times in 269 Posts
    Dem Professor ist das ziemlich egal. Machs einfach in die Richtungen, egal obs am Kopf steht oder nicht. Das Projekt ist einfach nur Voraussetzung für die Prüfung und zählt nicht zur Note.
    Why?... Because we can take it. We are not heroes, we just love science. We are silent guardians, watchful protectors of knowledge. We are dark knights (sometimes in white labcoats).

    freiBär für alle!
    https://twitter.com/freiBaer

  63. #57
    Elite maxputz's Avatar
    Join Date
    Jan 2008
    Posts
    379
    Thanks
    43
    Thanked 56 Times in 46 Posts
    Bei mir war das auch kopfstehend. Dem Prof ist das aber komplett egal. Ich glaub sogar, dass er sich den Source code gar ned anschaut, wenn die bilder passen.

  64. #58
    Dipl.Ing freiBär's Avatar
    Join Date
    Jan 2010
    Posts
    1,174
    Thanks
    168
    Thanked 478 Times in 269 Posts
    Der schaut bei jedem ungefähr eine halbe Minute ins PDF, ob die Bilder halbwegs passen....das ist den Professoren sowas von egal....
    Why?... Because we can take it. We are not heroes, we just love science. We are silent guardians, watchful protectors of knowledge. We are dark knights (sometimes in white labcoats).

    freiBär für alle!
    https://twitter.com/freiBaer

  65. #59
    Elite maxputz's Avatar
    Join Date
    Jan 2008
    Posts
    379
    Thanks
    43
    Thanked 56 Times in 46 Posts
    Weiß jdm vom Vorjahr wie detailiert die Fragen bei der Prüfung gestellt werden? 4 Fragen mit je 10 Unterpunkten oder sind die mit ein paar Stichwörtern beantwortbar? Schwierigkeit? Benotung?

  66. #60
    Baccalaureus
    Join Date
    Sep 2007
    Posts
    632
    Thanks
    96
    Thanked 85 Times in 73 Posts
    Quote Originally Posted by TehSackL View Post
    Hallo,

    ich bin mir leider noch unsicher mit den projektionsrichtungen, zb bei den oben geposteten bildern ist der teapot ja verdreht ich durchlaufe momentan die bilder so (von der äußersten zur innersten schleife, vorzeichen gibt die richtung an)
    PX: (+y,+z,+x)
    MX: (-y,+z,-x)
    PY: (+x,+z,+y)
    MY: (-x,+z,-y)
    PZ: (+x,+y,+z)
    MZ: (-x,+y,-z),

    Bin mir aber unsicher damit, weil für tot-2 find ich die bilder ok von den richtungen her, aber der teapot steht irgendwie wie bei den bildern oben, die innerste variable ist eigentlich klar, die äußersten verdreh ich damit die bilder für zb mip in +x und -x nicht ident sindern, sondern wirklich so als würde man von der anderen seite draufschauen.

    Wie habts ihr das gemacht und weiss vielleicht wer wies der prof gern hätte?
    Nö, das passt schon so. Aber in meinem Post oben fehlt ein Bild! Bei der +y stehts dann nicht am Kopf. Du kannst dir das Ganze ja auch mit dem f3dview ansehen, da steht es auch am Kopf

    Click image for larger version. 

Name:	f3dview.png 
Views:	78 
Size:	76.1 KB 
ID:	21368

    Betreffend Vertauschen von +z und -z Projektion: Imho kommt es da ja drauf an, welches Koordinatensystem du verwendest, ob rechtshändig oder linkshändig. Und nachdem das nicht angegeben ist, würd ich mal sagen, dass es wurscht ist :P

  67. #61
    Dipl.Ing freiBär's Avatar
    Join Date
    Jan 2010
    Posts
    1,174
    Thanks
    168
    Thanked 478 Times in 269 Posts
    Quote Originally Posted by maxputz View Post
    Weiß jdm vom Vorjahr wie detailiert die Fragen bei der Prüfung gestellt werden? 4 Fragen mit je 10 Unterpunkten oder sind die mit ein paar Stichwörtern beantwortbar? Schwierigkeit? Benotung?
    Naja es waren schon ein paar (3-4) Unterpunkte dabei. Wir hatten aber letztes Jahr keinen Fragenkatalog (zudem war das das erste mal, dass die Prüfung schriftlich war)...vl stellen sie ja die Fragen anders.
    Die Fragen waren schon ziemlich ins Detail, also wirklich immer alles hinschreiben was in den Folien stand. Nur Formeln waren nicht nötig (vl eventuell noch die Formel fürs CT). Zudem kam gar nichts von Dicom oder GPUs. Wies mit der Benotung läuft weis ich nicht, ich wusste damals alles...kann also nicht sagen wie sich ein Fehler/Nichtwissen auswirkt.

    Gekommen sind (soweit ichs noch weis):
    CT oder MRT erklären (abhängig von der Gruppe)
    Transferfunktion
    Marching Cubes
    Perspective Rendering Probleme/Lösung
    Why?... Because we can take it. We are not heroes, we just love science. We are silent guardians, watchful protectors of knowledge. We are dark knights (sometimes in white labcoats).

    freiBär für alle!
    https://twitter.com/freiBaer

  68. #62
    Master
    Join Date
    Oct 2007
    Posts
    103
    Thanks
    33
    Thanked 3 Times in 3 Posts
    Hallo, ich muss diese Übungsbsp noch abgeben und komme nun bei den Projektionsrichtungen leider nicht mehr weiter. Also bis jetzt verstehe ich, dass die innerste for-Schleife die Projektionsrichtung angbit, somit muss man die for-Schleifen Anordnungen ändern um die Projektionsrichtung zu ändern. Jedoch ist mir nicht klar wo der Unterschied zwischen zB +x und -x ist. Was muss man anders im Code machen? Eventuell kann mir jemand einen kleinen Tipp geben. Danke sehr.

  69. #63
    Dipl.Ing freiBär's Avatar
    Join Date
    Jan 2010
    Posts
    1,174
    Thanks
    168
    Thanked 478 Times in 269 Posts
    Das ist einfach von den entgegengesetzten Seiten. Lauf die for Schleife einfach in der anderen Richtung durch.

    Gesendet von meinem Nexus S mit Tapatalk 2
    Why?... Because we can take it. We are not heroes, we just love science. We are silent guardians, watchful protectors of knowledge. We are dark knights (sometimes in white labcoats).

    freiBär für alle!
    https://twitter.com/freiBaer

  70. The Following User Says Thank You to freiBär For This Useful Post:


  71. #64
    Master
    Join Date
    Oct 2007
    Posts
    103
    Thanks
    33
    Thanked 3 Times in 3 Posts
    Ich hätte noch eine Frage zur Angabe: "Select 6 images you like representing each category, submit them in a pdf file"
    Müssen wir zusätzlich 3 ( + 3 die in der Angabe vorhanden sind) .f3d Bilder irgendwo raussuchen und mit diesen arbeiten?
    Danke sehr.

  72. #65
    Dipl.Ing freiBär's Avatar
    Join Date
    Jan 2010
    Posts
    1,174
    Thanks
    168
    Thanked 478 Times in 269 Posts
    Früher wars zumindest nicht so.

    Gesendet von meinem Nexus 7 mit Tapatalk 2
    Why?... Because we can take it. We are not heroes, we just love science. We are silent guardians, watchful protectors of knowledge. We are dark knights (sometimes in white labcoats).

    freiBär für alle!
    https://twitter.com/freiBaer

  73. #66
    Elite maxputz's Avatar
    Join Date
    Jan 2008
    Posts
    379
    Thanks
    43
    Thanked 56 Times in 46 Posts
    Quote Originally Posted by Big_Show View Post
    Ich hätte noch eine Frage zur Angabe: "Select 6 images you like representing each category, submit them in a pdf file"
    Müssen wir zusätzlich 3 ( + 3 die in der Angabe vorhanden sind) .f3d Bilder irgendwo raussuchen und mit diesen arbeiten?
    Danke sehr.
    Du hast pro Kategorie ("Funktion") drei Bilder (bigbrain, teapot, tot2) mit jeweils 6 Richtungen. Das sind 18 Kombinationen pro Kategorie. Da suchst du dir jeweils 6 raus, die dir gut gefallen. Das heißt insgesamt mindestens 30 Bilder (5x6) von den 90 Möglichen (5x18).

  74. The Following User Says Thank You to maxputz For This Useful Post:


  75. #67
    Master
    Join Date
    Oct 2007
    Posts
    103
    Thanks
    33
    Thanked 3 Times in 3 Posts
    Vielen Dank, sehr nett

  76. #68
    Elite Bernhard123's Avatar
    Join Date
    Sep 2009
    Location
    Vienna - NÖ
    Posts
    315
    Thanks
    86
    Thanked 23 Times in 15 Posts
    bräuchte bitte feedback ob meine funktionen richtig implementiert sind:
    Average, btf , compftb , isosurface,mip
    danke

    Click image for larger version. 

Name:	______teapot_AVERAGE.jpg 
Views:	34 
Size:	4.2 KB 
ID:	22751Click image for larger version. 

Name:	______teapot_BTF.jpg 
Views:	35 
Size:	12.0 KB 
ID:	22752Click image for larger version. 

Name:	______teapot_COMP_FTB.jpg 
Views:	42 
Size:	4.1 KB 
ID:	22753Click image for larger version. 

Name:	______teapot_ISO.jpg 
Views:	41 
Size:	6.2 KB 
ID:	22754Click image for larger version. 

Name:	______teapot_MIP.jpg 
Views:	40 
Size:	10.8 KB 
ID:	22755

    bzw. schaff ichs nicht die negativen projektionen zu gestalten (-x,-y,-z), hab versucht die forschleifen umzudrehen, klappt aber nicht so richtig. Muss ich da zB.: for(x=in->getNX();x>=0;x--) ?
    Last edited by Bernhard123; 02-06-2013 at 20:53.

  77. #69
    Veteran
    Join Date
    Apr 2011
    Posts
    20
    Thanks
    0
    Thanked 0 Times in 0 Posts
    EDIT: argh, vorher lesen hilft ... man muß nur eines von den Project 1-3 machen, steht auch so auf der Folie.
    Sorry für den Spam.

  78. #70
    Elite Bernhard123's Avatar
    Join Date
    Sep 2009
    Location
    Vienna - NÖ
    Posts
    315
    Thanks
    86
    Thanked 23 Times in 15 Posts
    Prof. Sramek hat mir geantwortet, dass mein isosurface nicht ok ist und ich die gradienten vektoren normalisieren muss.
    In dem anderen Übungsthread wird kurz darauf verwiesen mit der Vektorlänge float l=sqrt(gx*gx+gy*gy+gz*gz) und danach den Pixelwert für bspw. +x ist dann gx/l. Doch ich bekomm kein Bild.
    Hab zuerst die gx,gy,gz laut formel berechnet -> danach berechne ich die Länge l -> und mein Pixelwert wäre I=gx*vx+gy*vy+gz*vz, wie und wo baue ich jetzt aber das gx/l ein?

  79. #71
    Elite deathhero's Avatar
    Join Date
    Dec 2007
    Location
    1050 wien / klagenfurt
    Posts
    352
    Thanks
    107
    Thanked 57 Times in 47 Posts

    Post

    Quote Originally Posted by Bernhard123 View Post
    Prof. Sramek hat mir geantwortet, dass mein isosurface nicht ok ist und ich die gradienten vektoren normalisieren muss.
    In dem anderen Übungsthread wird kurz darauf verwiesen mit der Vektorlänge float l=sqrt(gx*gx+gy*gy+gz*gz) und danach den Pixelwert für bspw. +x ist dann gx/l. Doch ich bekomm kein Bild.
    Hab zuerst die gx,gy,gz laut formel berechnet -> danach berechne ich die Länge l -> und mein Pixelwert wäre I=gx*vx+gy*vy+gz*vz, wie und wo baue ich jetzt aber das gx/l ein?
    hast du dazu schon eine lösung? ich stehe nämlich gerade beim gleichen problem. wie/wo baut man jetzt das gx/l ein?

    mein derzeitiger code für "shaded" +x:
    Code:
    // hit detection: voxel value > threshold = surface
    if(val > th)
    {
         // centered differences
         gx = (in->get(x+1, y, z) - in->get(x-1, y, z)) / 2;
         gy = (in->get(x, y+1, z) - in->get(x, y-1, z)) / 2;
         gz = (in->get(x, y, z+1) - in->get(x, y, z-1)) / 2;
    
        float laenge = sqrt(gx*gx+gy*gy+gz*gz);
    
         //I = gx*vx + gy*vx + gz*gz     
         //vx, vy und vz sind dabei die koordinaten der betrachtungsrichtung dh bei +x projektion (+1 0 0).
         I =  gx*1 + gy*0 + gz*0;
       
         ...??
    }

  80. #72
    Veteran
    Join Date
    Jun 2011
    Posts
    5
    Thanks
    1
    Thanked 2 Times in 1 Post
    @ Freibär, viele Dank für deine Hilfe! Die 4 gefragten Rendering-Methoden hab ich innerhalb 1 Std implementieren können, war echt nicht schwierig.

    Hast du einen Tipp, wie ich schnell und effektiv die Projektionsrichtungen ändern kann, ohne einfach die Schleifen jedes Mal umzuschreiben?

    [EDIT]: Ein Medieninformatiker hat mir gesagt, dass ISOSURFACES (bzw im Code SHADED) auch einfach bedeuten kann, nur den "Abstand vom Betrachter" im jeweiligen Punkt zu codieren. Also die Helligkeit des ersten Punkts, der meinen Threshold überschreitet, wird im jeweiligen Pixel gespeichert.
    Sprich: Voxel, die nah am Betrachter liegen, sind hell (Wert nahe 255) und welche, die weit vom Betrachter weg liegen, sind dunkel (Wert nahe 0).
    Was haltet ihr von dieser Definition? Ich sehe gerade, dass diese Methode im Skript surfrend13.pdf als "Depth Shading" angeführt ist. Somit aus meiner Sicht eine erlaubte Shading-Variante!
    (Depth shading–Distance to observer stored
    –Shading in postprocessing possible)
    Last edited by naise; 24-06-2013 at 18:24.

  81. #73
    Elite deathhero's Avatar
    Join Date
    Dec 2007
    Location
    1050 wien / klagenfurt
    Posts
    352
    Thanks
    107
    Thanked 57 Times in 47 Posts
    Quote Originally Posted by naise View Post
    @ Freibär, viele Dank für deine Hilfe! Die 4 gefragten Rendering-Methoden hab ich innerhalb 1 Std implementieren können, war echt nicht schwierig.

    Hast du einen Tipp, wie ich schnell und effektiv die Projektionsrichtungen ändern kann, ohne einfach die Schleifen jedes Mal umzuschreiben?

    [EDIT]: Ein Medieninformatiker hat mir gesagt, dass ISOSURFACES (bzw im Code SHADED) auch einfach bedeuten kann, nur den "Abstand vom Betrachter" im jeweiligen Punkt zu codieren. Also die Helligkeit des ersten Punkts, der meinen Threshold überschreitet, wird im jeweiligen Pixel gespeichert.
    Sprich: Voxel, die nah am Betrachter liegen, sind hell (Wert nahe 255) und welche, die weit vom Betrachter weg liegen, sind dunkel (Wert nahe 0).
    Was haltet ihr von dieser Definition? Ich sehe gerade, dass diese Methode im Skript surfrend13.pdf als "Depth Shading" angeführt ist. Somit aus meiner Sicht eine erlaubte Shading-Variante!
    (Depth shading–Distance to observer stored
    –Shading in postprocessing possible)
    ich hab das kurz mal getestet. das schaut sehr "bescheiden" aus...
    hättest du kurzes feedback zu meinem code 1 post weiter oben? THX

  82. #74
    Baccalaureus
    Join Date
    Sep 2007
    Posts
    632
    Thanks
    96
    Thanked 85 Times in 73 Posts
    Quote Originally Posted by deathhero View Post
    hast du dazu schon eine lösung? ich stehe nämlich gerade beim gleichen problem. wie/wo baut man jetzt das gx/l ein?

    mein derzeitiger code für "shaded" +x:
    Code:
    // hit detection: voxel value > threshold = surface
    if(val > th)
    {
         // centered differences
         gx = (in->get(x+1, y, z) - in->get(x-1, y, z)) / 2;
         gy = (in->get(x, y+1, z) - in->get(x, y-1, z)) / 2;
         gz = (in->get(x, y, z+1) - in->get(x, y, z-1)) / 2;
    
        float laenge = sqrt(gx*gx+gy*gy+gz*gz);
    
         //I = gx*vx + gy*vx + gz*gz     
         //vx, vy und vz sind dabei die koordinaten der betrachtungsrichtung dh bei +x projektion (+1 0 0).
         I =  gx*1 + gy*0 + gz*0;
       
         ...??
    }
    Den Gradienten musst du durch die Länge dividieren, damit er normalisiert ist (Also z.B. gx /= laenge). Danach das Dot-Produkt von Gradienten (ist sowas in der Art wie die Normale) mit der Richtung vom Licht damit du diffuse Shading bekommst. I = gx*vx + gy*vx + gz*gz stimmt ja schonmal, bis auf das gz*gz ^^ Danach noch mit 255 multiplizieren...

  83. The Following User Says Thank You to ReinhardBla For This Useful Post:


  84. #75
    Principal
    Join Date
    Oct 2009
    Location
    @home, baby...
    Posts
    32
    Thanks
    3
    Thanked 10 Times in 6 Posts
    wär dieses bild für ein isosurface okay? Click image for larger version. 

Name:	bigbrain-n4.png 
Views:	59 
Size:	27.9 KB 
ID:	22950
    We get some rules to follow,
    We get these pills to swallow...

  85. #76
    Elite deathhero's Avatar
    Join Date
    Dec 2007
    Location
    1050 wien / klagenfurt
    Posts
    352
    Thanks
    107
    Thanked 57 Times in 47 Posts
    Quote Originally Posted by cohLe View Post
    wär dieses bild für ein isosurface okay? Click image for larger version. 

Name:	bigbrain-n4.png 
Views:	59 
Size:	27.9 KB 
ID:	22950
    hmm schaut komisch aus. hier meines zum vergleich.(hat ihm gepasst)
    Click image for larger version. 

Name:	pz.JPG 
Views:	61 
Size:	21.9 KB 
ID:	22951

  86. #77
    Baccalaureus
    Join Date
    Sep 2007
    Posts
    632
    Thanks
    96
    Thanked 85 Times in 73 Posts
    Quote Originally Posted by cohLe View Post
    wär dieses bild für ein isosurface okay? Click image for larger version. 

Name:	bigbrain-n4.png 
Views:	59 
Size:	27.9 KB 
ID:	22950

    Nein

  87. #78
    Principal
    Join Date
    Oct 2009
    Location
    @home, baby...
    Posts
    32
    Thanks
    3
    Thanked 10 Times in 6 Posts
    post ja ungern so viel code... aber wo könnte sich hier der fehler eingschlichen haben?
    die schleifensturktur ist folgende: x bis NX, y bis NY, z bis NZ (also eine +z projektion)

    case SHADED: {
    if(val > threshold) {
    float gx = (in->get(x+1, y, z) - in->get(x-1, y, z)) / 2;
    float gy = (in->get(x, y+1, z) - in->get(x, y-1, z)) / 2;
    float gz = (in->get(x, y, z+1) - in->get(x, y, z-1)) / 2;

    float length = sqrt(gx*gx + gy*gy + gz*gz);
    length = abs(length);

    gx = gx / length;
    gy = gy / length;
    gz = gz / length;

    I = gx*(0) + gy*(0) + gz*(1);

    if(I > 0) { stop = true; } //bricht die innerste Schleife ab
    I = I * 255;
    }
    Nach der innersten Schleife setze ich dann das Bildpixel: im.set(x, y, I);
    Last edited by cohLe; 25-06-2013 at 18:16.
    We get some rules to follow,
    We get these pills to swallow...

  88. #79
    Principal
    Join Date
    Oct 2009
    Location
    @home, baby...
    Posts
    32
    Thanks
    3
    Thanked 10 Times in 6 Posts
    hmmmm... wenn ich den threshold weit heruntersetze, so auf 10.. bekomm ich das: Click image for larger version. 

Name:	bigbrain_4_90_plusZ.jpg 
Views:	54 
Size:	21.3 KB 
ID:	22953
    We get some rules to follow,
    We get these pills to swallow...

  89. #80
    Baccalaureus
    Join Date
    Sep 2007
    Posts
    632
    Thanks
    96
    Thanked 85 Times in 73 Posts
    Quote Originally Posted by cohLe View Post
    hmmmm... wenn ich den threshold weit heruntersetze, so auf 10.. bekomm ich das: Click image for larger version. 

Name:	bigbrain_4_90_plusZ.jpg 
Views:	54 
Size:	21.3 KB 
ID:	22953
    Wie kommst du auf I = gx*(0) + gy*(0) + gz*(1);? Der Vektor vec(0, 0, 1) mit dem du den Gradienten multiplizierst sollte nämlich nicht konstant sein, sondern von der view-Richtung abhängig sein!
    Last edited by ReinhardBla; 25-06-2013 at 23:04.

Page 1 of 2 1 2 LastLast

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
  •