2016-03-25 23 views
0

私はVTKを初めて使用しており、2メッシュから始まるダイ類似度係数(DSC)を計算しようとしています。 DSCはVabメッシュAの間で重複ボリュームであり、メッシュ(3Dスライサー、https://www.slicer.orgを用い.vtk形式でエクスポートすなわち器官輪郭)を読み出すためにB.メッシュ上のVTK/ITKダイス類似度係数

メッシュIは、次のスニペットを使用2 Vab/(Va + Vb)、として計算することができます。 (私はVTKと3Dスライサーを用いて計算するものと計算されたものとの間にいくつかの違いを観察したが)

string inputFilename1 = "organ1.vtk"; 

// Get all data from the file 
vtkSmartPointer<vtkGenericDataObjectReader> reader1 = vtkSmartPointer<vtkGenericDataObjectReader>::New(); 
reader1->SetFileName(inputFilename1.c_str()); 
reader1->Update(); 

vtkSmartPointer<vtkPolyData> struct1 = reader1->GetPolyDataOutput(); 

IはvtkMassPropertiesを使用して、2つのメッシュの体積を計算することができます。

次に、2メッシュを交差させるために、vtkIntersectionPolyDataFilterを使用しようとしています。ただし、このフィルタの出力は、入力されたvtkPolyDataオブジェクトの交差点をマークし、閉じたサーフェスではありません。したがって、私はこれらの行から何らかの形でメッシュを生成し、そのボリュームを計算する必要があります。

このようなメッシュを生成し、それを行う方法はどれが良い、正確な方法でしょうか?


あるいは、私もITKを使用しようとしました。この問題(2010年12月http://www.insight-journal.org/browse/publication/762)を処理するパッケージが見つかりましたが、ITKの最新バージョンに対してコンパイルできません。 ITKは(現在廃止されている)ITK_USE_REVIEWフラグONでコンパイルする必要があります。言うまでもなく、私はModule_ITKReviewONに設定してコンパイルしていましたが、下位互換性はありましたが運がなかったのです。


最後に、この問題を解決するための他の代替(スクリプト可能)ソフトウェア/ライブラリがある場合は、教えてください。私はこれらの計算を自動的に実行する必要があります。

+0

通常、画像には重なりがあります。 2つのメッシュを比較したい場合は、単に距離メトリックを使用するだけではいかがですか? 'vtkDistancePolyDataFilter'を使用していますか? – mirni

+0

@mirni私の知る限り、ダイス類似度係数は医用画像文献でよく使用されています。特に、私は研究の基盤となるいくつかの放射線治療関連の論文で使用されています。 私は他の測定基準も考慮に入れます:あなたの助言に感謝します:) –

答えて

1

あなたはあなたのデータは滑らかで、よく振る舞っている場合、このフィルタはかなり良い作品vtkBooleanOperationPolyDataFilter

http://www.vtk.org/doc/nightly/html/classvtkBooleanOperationPolyDataFilter.html

filter->SetOperationToIntersection(); 

を試みることができます。しかし、鋭い構造、例えば。バイナリイメージマーチングキューブアルゴリズムに由来するものは、それを問題にする可能性があります。つまり、vtkPolyDataToImageStencilは必ずしもこの点に関してはそれほど優れているとは限りません。

ポリゴンのブール演算が100kポリゴン以上のサイズの「オルガン」には本当に理想的ではないという印象を一度も持ちました。依存します。

+0

も参照してください。ありがとうございました。 –

0

ダイ類似度係数を計算する場合は、まずvtkPolyDataToImageStencilを使用してメッシュからボリューム(ラスタライズ)を生成することをお勧めします。 DSCを計算するのは簡単です。

幸運:)

+0

こんにちはサイモン、あなたの答えを詳しく教えていただけますか?なぜ 'ImageStencil'を使うのが良いアイデアですか?私はすでに 'vtkMassProperties'を使って開始メッシュのボリュームを計算することができます。 –

+1

これは、少なくともVTKでは2つのメッシュ間の閉じた交差点を得るのが難しいと思うからです。だから私は画像が簡単でわかりやすく表示されます。しかし、誰かがあなたが望むことをメッシュだけでやる方法を知っているかもしれません。 –

+0

データが容積測定ではないので、それがDSCが不適切な指標であるかもしれないことを示唆した理由です。距離メトリックを使用します(例:一方の面の他の面に対する点の平均距離。これを行う 'vtkDistancePolyDataFilter'があり、あなたのメッシュをボリュームにステンシル化することでエラーが発生することはありません。 – mirni

関連する問題