2016-05-26 13 views
0

Ich habe 2-Matrix:Rotation/Translation von vtk 3D-Bild mit Interpolation (Python)

#for example 
rotation = matrix([[ 0.61782155, 0.78631834, 0.  ], 
      [ 0.78631834, -0.61782155, 0.  ], 
      [ 0.  , 0.  , -1.  ]]) 
translation = matrix([[-0.33657291], 
      [ 1.04497454], 
      [ 0.  ]]) 
vtkinputpath = "/hello/world/vtkfile.vtk" 
vtkoutputpath = "/hello/world/vtkrotatedfile.vtk" 
interpolation = "linear" 

Ich habe eine vtk Datei, das 3D-Bild enthält, und ich möchte eine Funktion in Python schaffen, mit mir zu drehen/übersetzen interpoliere es.

import vtk 

def rotate(vtkinputpath, vtkoutputpath, rotation, translation, interpolation): 
    ... 

Ich versuche Inspiration von the transformJ plugin sources zu nehmen (siehe here to understand how it works)

Ich wollte vtk.vtkTransform benutzen, aber ich nicht wirklich verstehen, wie es funktioniert: diese examples werden schließen nicht genug von dem, was Ich will das tun. Dies ist, was ich damit tat

reader = vtk.vtkXMLImageDataReader() 
reader.SetFileName(vtkinputpath) 
reader.Update() 
transform = reader.vtkTransform() 
transform.RotateX(rotation[0]) 
transform.RotateY(rotation[1]) 
transform.RotateZ(rotation[2]) 
transform.Translate(translation[0], translation[1], translation[2]) 
#and I don't know how I can choose the parameter of the interpolation 

Aber das kann nicht funktionieren ... Ich sah here, dass die Funktion RotateWXYZ() existiert:

# create a transform that rotates the cone 
transform = vtk.vtkTransform() 
transform.RotateWXYZ(45,0,1,0) 
transformFilter=vtk.vtkTransformPolyDataFilter() 
transformFilter.SetTransform(transform) 
transformFilter.SetInputConnection(source.GetOutputPort()) 
transformFilter.Update() 

Aber ich verstehe nicht, was die Linien machen. Mein Hauptproblem ist, dass ich die vtk-Dokumentation für Python nicht finden kann ...

Können Sie mir eine Dokumentation Website für Vtk in Python beraten? Oder kannst du mir zumindest erklären, wie vtktransform (rotateWXYZ()) funktioniert? Bitte, ich bin total verloren, nichts funktioniert.

Antwort

1

Ich bin nicht sicher, dass es spezifische Python-Dokumentation, aber dies kann hilfreich sein, zu verstehen, wie RotateWXYZ funktioniert: http://www.vtk.org/doc/nightly/html/classvtkTransform.html#a9a6bcc6b824fb0a9ee3a9048aa6b262c

die Transformation So erstellen Sie mögen, dass Sie Rotation und Translation Matrizen in eine 4x4-Matrix kombinieren, zu tun wir dies die Rotationsmatrix in Spalten und Zeilen 0,1 und 2, setzen wir den Übersetzungsvektor in der rechten Spalte, die untere Zeile ist 0,0,0,1. Here's some more info about this. Zum Beispiel:

0.61782155 0.78631834 0  -0.33657291 
0.78631834 -0.61782155 0  1.04497454 
0   0   -1  0 
0   0   0  1 

Dann können Sie direkt die Matrix zu vtkTransform mit SetMatrix gesetzt:

matrix = [0.61782155,0.78631834,0,-0.33657291,0.78631834,-0.61782155,0,1.04497454,0,0,-1,0,0,0,0,1] 
transform.SetMatrix(matrix) 

EDIT: Bearbeiten die Werte in der Matrix Variable abzuschließen.

+0

Ich habe die Beschreibung Ihres Links gelesen, danke. Aber ich bin mir nicht sicher, ob ich die SetMatrix-Funktion gut verstanden habe ... Ich versuche meine Rotationsmatrix in einen Winkel und einen Vektor zu konvertieren (<=> die Drehachse). Ich habe versucht, die Quellen von vtkTransform zu verstehen (http://www.vtk.org/doc/nightly/html/vtkTransform_8h_source.html), aber ich bin mir nicht sicher, ob ich verstehe, was es tut ... Also vielen Dank, ich Ich werde meine Frage aktualisieren, wenn mein Versuch nicht funktioniert. – EaudeRoche

+0

Ich habe die Antwort bearbeitet, um die korrekten Werte in der Matrix anzuzeigen. Wenn Sie diese Matrix mit [SetMatrix] (http://www.vtk.org/doc/nightly/html/classvtkTransform.html#ad58b847446d791391e32441b98eff151) auf die Transformation setzen, erhalten Sie eine Transformation, die die in Ihrem Beispiel angegebene Rotation und Translation anwendet. Danach können Sie vtkImageReslice verwenden, um die Transformation auf ein Bild anzuwenden. Ich hoffe das hilft dir ein bisschen mehr. –