Hi Michael, das scheint tatsächlich erst mal ein Rundungsfehler zu sein. Das die Matrix sich von 1.00 auf 0.99 ändert nach einer Transformation ist normal, das sind einfach float-Berechnungsfehler. Die sollten sich aber eigentlich nicht aufsummieren, sondern herausmitteln... Die Bibliothek, die ITK bzw. VTK zur Matrixrechnung verwendet heißt vnl (http://paine.wiau.man.ac.uk/pub/doc_vxl/core/vnl/html/index.html) und hat uns auch schon mal Probleme wegen Ungenauigkeiten bereitet, allerdings bei der Matrixinversion. Da du zusätzlich einen Arcustangens verwendest kommen da natürlich aber auch noch mal Rundungsfehler rein.
Musst du unbedingt mehrmals hintereinander rotieren? Sonst könntest du mal versuchen immer direkt die (zwischengespeicherte) Originaltransformation zu rotieren. Also statt: Orig->Rotate(1°); doSomething(); Result->Rotate(1°); doSomething(); usw. besser Orig->Rotate(1°); doSomething(); Orig->Rotate(2°); doSomething(); usw. Dann hast du jeweils nur eine Rotation, und die Rundungsfehler sollten klein bleiben. Das Problem mit dem mehrfach hintereinander rotieren und der Anzeige hatte ich auch schon mal. Ist glaube ich nur ein Rendering-Problem, die Anzeige kommt den schnellen Änderungen nicht hinterher und aktualisiert sich nicht mehr. Die Berechnungen müssten aber korrekt ausgeführt werden. Wenn du zuschauen willst musst du eine Pause von 100 ms oder so nach den Rotationen einbauen, sonst geht das zu schnell. P.S.: Bitte immer auch Cc an die Users-List schreiben, das erleichtert anderen die dasselbe Problem haben die Suche. Viele Grüße, Tobi ------------------------------------------------------------ Dipl. Phys. Tobias Schwarz DKFZ German Cancer Research Center (Deutsches Krebsforschungszentrum) Member of the Helmholtz Association Division of Medical & Biological Informatics E130 Im Neuenheimer Feld 280 D-69120 Heidelberg Phone: 49-(0)6221-42-2353 Fax: 49-(0)6221-42-2345 E-Mail: [email protected]<mailto:[email protected]> Web: http://www.dkfz.de/en/mbi/<https://dkfzowa0.dkfz-heidelberg.de/owa/redir.aspx?C=6ebb39f6c3b94e03a77eca6c5e2e87a9&URL=http%3a%2f%2fwww.dkfz.de%2fen%2fmbi%2f> Confidentiality Note: This message is intended only for the use of the named recipient(s) and may obtain confidential and/or privileged information. If you are not the intended recipient, please contact the sender and delete the message. Any unauthorized use of the information contained in this message is prohibited. ________________________________ Von: michael.luehrs [[email protected]] Gesendet: Freitag, 16. Juli 2010 14:13 An: Schwarz Tobias Betreff: Mitk Compose Problem Hi Tobias, du hattest mir letzten Monat mal bei einem kleinen Problem bzgl. mehrfacher Ausführung einer Rotation hintereinander geholfen. Das hat mit mitk::AffineTransform3D::Compose(...) soweit auch funktioniert, aber es ist mir gerade ein weiteres Problem aufgefallen. Wenn ich den Datensatz ca. 10 mal rotiere, verändert sich die Transformationsmatrix von 1.00 in den jeweiligen stellen zu 0.99. Diese nimmt dann mit jeder Rotation weiter ab, bis die Matrix an jeder Stelle eine 0.00 enthält und das Bild irgendwo hin verschoben wird. Liegt das an einem Rundungsfehler bei der übergabe an die Rotate3D Funktion? caffineTransform->Compose(affineTransform,false); caffineTransform->Rotate3D(rotate,90.0*(atan(1.0)/45.0),false); affineTransform->Compose(caffineTransform,false); affineTransform enthält alle vorherigen Transformationen, caffineTransform wird neu auf die affineTransform angewandt. Noch ne kleine Frage, wieso kann ich die Rotation nur 4 mal in eine Richtung ausführen? Danach wird die Anzeige nicht mehr verändert, das Problem mit der Matrix bleibt jedoch. Grüße, Michael ------------------------------------------------------------------------------ This SF.net email is sponsored by Sprint What will you do first with EVO, the first 4G phone? Visit sprint.com/first -- http://p.sf.net/sfu/sprint-com-first _______________________________________________ mitk-users mailing list [email protected] https://lists.sourceforge.net/lists/listinfo/mitk-users
