Ist es möglich, eine affine Transformationsmatrix direkt auf ein Mayavi ImageActor-Objekt anzuwenden?

9

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:

  • Ein Array von 2D-Bilddaten, die ich mit mayavi.mlab.imshow anzeigen kann
  • Ein Satz von ROIs, bestehend aus Linien und Punkten, die ich mit 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:

%Vor%

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?

    
ali_m 01.07.2013, 14:31
quelle

0 Antworten

Tags und Links