2017-01-25 17 views
0

vtk、特にvtkPolyDataConnectivityFilterを使用するのは苦労しています。私は、3Dポイントクラウドからサーフェスを作成したMarching Cubesアルゴリズムの出力をフィードします。私はメッシュをvtkPolyDataConnectivityFilterで区切る

filt = vtk.vtkConnectivityFilter() 

filt.SetInputData(surface_data) # get the data from the MC alg. 
filt.SetExtractionModeToLargestRegion() 
filt.ColorRegionsOn() 
filt.Update() 

filt.GetNumberOfExtractedRegions() # will 53 instead of 1 

を設定しようとすると、 はしかし、それは私に奇妙な結果が得られます。特定の地域に抽出モードを使用することはできません。または、事前にそれらを知らないので、単一のポイントをシードすることはできません。 最大のメッシュのポイントを小さいものから分離し、大きなメッシュだけを保持する必要があります。 出力全体をレンダリングすると、右に抽出された領域が表示されます。しかし、異なる領域は依然としてデータセットに含まれており、データセットを分離する方法はありません。

私は間違っていますか?

ベストJ

+0

抽出された領域のうち最大の領域を特定したいのですか?マーチングキューブは、点を含む任意の領域を含むサーフェスを作成します。おそらくアウトライアポイントのすべての周りのサーフェスに終わっているでしょう。 –

+0

私は接続点の最大の領域を抽出し、それをさらなる分析のために使用できるように提供する必要があります。したがって、接続されていないポイントはすべて削除する必要があります。外れ値ポイントは実際にいくつかの外側のサーフェスにつながりますが、これらはフィルタによって削除する必要があります。 – user6364481

答えて

0

私はセグメントにvtkpolydataに変換STLファイルを持っていた同じ問題を抱えていました。

https://www.vtk.org/Wiki/VTK/Examples/Cxx/PolyData/PolyDataConnectivityFilter_SpecifiedRegionを見ると、メンバー関数SetExtractionModeToSpecifiedRegions()が使用されています。

次を使用してコードに置き換えます

filt.SetInputData(surface_data)

filt.SetExtractionModeToSpecifiedRegions()

filt.AddSpecifiedRegion filt.GetNumberOfExtractedRegionsまで0から(0)#Manuallyインクリメント()

filt.Update()

あなたは、指定をレンダリングして表示する必要があります実際に興味があるセグメント化された領域のインデックスを把握することができます。

関連する問題