1

vtk を使用して統計形状モデルを構築しようとしています。Procrustes アライメントと主成分分析関数は vtk で既に利用可能であり、それらの Python の例があります。ただし、vtkPCAAnalysisFilter() からの結果にアクセスするのは困難です。

具体的には、vtk.org Web サイトで見つけた例に従おうとしています。形状の輪郭上のいくつかの点の座標を含む 3 つのテキスト ファイルを作成しました。次に、これらのポイントを vtkPolyData に変換し、ProcrustesAlignment を実行し、その後 PCA を実行しました。

#ProcrustesAlignment
group = vtk.vtkMultiBlockDataGroupFilter()
group.AddInputData(poly_1)
group.AddInputData(poly_2)
group.AddInputData(poly_3)
procrustes = vtk.vtkProcrustesAlignmentFilter()
procrustes.SetInputConnection(group.GetOutputPort())
procrustes.GetLandmarkTransform().SetModeToSimilarity()
procrustes.Update()

#PCA filter
pca = vtk.vtkPCAAnalysisFilter()
pca.SetInputConnection(procrustes.GetOutputPort())
pca.Update()

#displaying the most important eigenvalues 
EVNo = pca.GetModesRequiredFor(0.98)
for j in range (0,EVNo):
    print pca.GetEvals().GetValue(j)

ただし、PCA から得られた固有ベクトルにアクセスできませんでした。また、平均モデルノードをファイルに書き込むにはどうすればよいですか。そして最後に、新しい「テスト」シェイプに必要な係数を取得するにはどうすればよいですか (pca.GetShapeParameters(shapea, params, 2) を使用する必要があると思いますが、結果をどこかに書き込むにはどうすればよいでしょうか?)。私が使用している例では、PCA の結果を視覚化できるように次の部分が実装されています。

params = vtk.vtkFloatArray()
params.SetNumberOfComponents(1)
params.SetNumberOfTuples(1)
params.SetTuple1(0,0.0)
shapea = vtk.vtkPolyData()
shapea.DeepCopy(poly_1)
pca.GetParameterisedShape(params,shapea)
normalsa = vtk.vtkPolyDataNormals()
normalsa.SetInputData(shapea)
map3a = vtk.vtkPolyDataMapper()
map3a.SetInputConnection(normalsa.GetOutputPort())
Actor3a = vtk.vtkActor()
Actor3a.SetMapper(map3a)
Actor3a.GetProperty().SetDiffuseColor(1.0000,0.3882,0.2784)
Actor3a.GetProperty().SetPointSize(5)

ただし、定義された「params」と「shapea」についてはまだ混乱しています。

どんな助けでも大歓迎です。

ありがとう、

4

0 に答える 0