Ich verwende Mayavi, um einige Bildgebungsdaten zu rendern, die aus mehreren 2D-Ebenen innerhalb eines 3D-Volumens bestehen, deren Position, Ausrichtung und Maßstab durch 4x4-affine Starrkörper-Transformationsmatrizen definiert sind. Jedes Flugzeug besteht aus:
mayavi.mlab.imshow
anzeigen kann
mayavi.mlab.points3d
bzw. mayavi.mlab.plot3d
zeichne. Ich transformiere meine Punkte und Linienscheitelpunkte von einer 2D-Referenzebene in den 3D-Raum, indem ich ihre Koordinaten mit meiner affinen Matrix punktiere. Basierend auf meiner vorherigen Frage / Antwort hier , I fand heraus, dass ich die Positionen und Orientierungen der ImageActor
-Objekte individuell einstellen konnte mit:
Jetzt sieht die Handlung so aus:
Alles passt gut, aber es ist sehr schwierig zu interpretieren, weil die Ebenen in z so dicht sind. Was ich jetzt gerne tun könnte, ist, die Z-Achse um einen Skalierungsfaktor zu "strecken". Bei den Punkten und Linien ist das sehr einfach - ich multipliziere nur alle transformierten Z-Koordinaten mit einem Skalierungsfaktor.
Ich kann jedoch nicht herausfinden, wie ich dieselbe Transformation auf die Bilder anwenden kann. Wenn ich nur die z-Position skaliere, ist natürlich die Rotation und Skalierung der Bilder falsch, und meine gezeichneten Punkte / Linien fallen nicht mehr auf die gleiche Ebene wie das Bild:
Was ich tun muss, ist eine nichtstarre affine Transformation, die Scherung sowie Rotation, Translation und Skalierung in meine Bilder einbezieht.
Gibt es eine Möglichkeit, manuell auf eine ImageActor
zu setzen, oder sogar einfach eine willkürliche 4x4 affine Matrix, die ich vorberechnet habe, direkt anzuwenden?
Tags und Links python transformation mayavi