2016-05-26 17 views
0

私は2行列があります。回転/翻訳(パイソン)

#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" 

を私は、3D映像が含まれているVTKファイルを持っていると私は平行移動/回転させるようにpythonで関数を作成したいです補間。私はthe transformJ plugin sourcesからインスピレーションを取るしようとしている

import vtk 

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

here to understand how it worksを参照)

は私がvtk.vtkTransformを使用していたが、私は実際にそれがどのように動作するか理解していない:これらexamplesは何の十分近くありません私はやってみたいです。 )私は機能RotateWXYZ(というhereを見た...

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 

しかし、それは動作しません 存在:これは私がそれをやったことある

# 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() 

しかし、私は何のラインを理解していません行う。 私の主な問題は、

あなたはPythonで私にVTKのドキュメントのWebサイトに助言することができます...私は、PythonのためのVTKのドキュメントを見つけることができないということでしょうか?または、少なくともvtktransform(rotateWXYZ())がどのように機能するかを私に説明できますか? 私は完全に失われています、何も動作しません。

答えて

1

私は特定のPythonドキュメントがあるわからないんだけど、これはRotateWXYZがどのように機能するかを理解するのに役立つことができます:http://www.vtk.org/doc/nightly/html/classvtkTransform.html#a9a6bcc6b824fb0a9ee3a9048aa6b262c

あなたはあなたに、4×4の行列に回転と平行移動行列を組み合わせることができますしたい変換を作成するにはこれを行うには、回転行列を列と行0,1と2に入れ、変換ベクトルを右の列に入れ、下の行を0,0,0,1とします。 Here's some more info about this。たとえば、次のように行列変数の値を完了するために、編集:

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:

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

は、その後、あなたは直接SetMatrixを使用してvtkTransformに行列を設定することができます。

+0

あなたのリンクの説明を読んだ、ありがとう。しかし、私はSetMatrix関数をよく理解しているかどうかはわかりません...回転行列を角度とベクトル(回転の軸である<=>)に変換しようとしています。私はvtkTransform(http://www.vtk.org/doc/nightly/html/vtkTransform_8h_source.html)のソースを理解しようとしましたが、私はそれが何をしているのか分かりません...だから、ありがとう私の試みがうまくいかない場合、私の質問を更新します。 – EaudeRoche

+0

答えを編集して、マトリックスに正しい値を表示しました。その行列を[SetMatrix](http://www.vtk.org/doc/nightly/html/classvtkTransform.html#ad58b847446d791391e32441b98eff151)を使って変換に設定すると、あなたの例で与えられた回転と平行移動を適用する変換が得られます。その後、vtkImageResliceを使って変換を画像に適用することができます。私はこれがもう少しあなたに役立つことを願っています。 –

関連する問題