VTK
画像のスタックに埋め込まれたオブジェクトの体積と表面積を計算する小さなPython関数がありTIFF
ます。に読み込むためTIFF's
にVTK
、を使用vtkTIFFReader
して結果を処理しましたvtkImageThreshold
。次にvtkMassProperties
、しきい値処理後に識別されたオブジェクトの体積と表面積を抽出するために使用します。
を使用VTK-5.04
すると、この関数はテストスタックの正しい値(3902ピクセル)を返します。ただし、VTK-5.4.2
同じ関数を使用すると、異なる値(422ピクセル)が返されます。誰かがこれを説明できますか?
コード
def testvtk():
# read 36 TIFF images. Each TIFF is 27x27 pixels
v16=vtk.vtkTIFFReader()
v16.SetFilePrefix("d:/test/slice")
v16.SetDataExtent(0,27,0,27,1,36)
v16.SetFilePattern("%s%04d.tif")
v16.SetDataSpacing (1,1,1)
v16.Update()
# Threshold level for seperating background/foreground pixels
maxthres=81
# Threshold the image stack
thres=vtk.vtkImageThreshold()
thres.SetInputConnection(v16.GetOutputPort())
thres.ThresholdByLower(0)
thres.ThresholdByUpper(maxthres)
# create ISO surface from thresholded images
iso=vtk.vtkImageMarchingCubes()
iso.SetInputConnection(thres.GetOutputPort())
# Have VTK calculate the Mass (volume) and surface area
Mass = vtk.vtkMassProperties()
Mass.SetInputConnection(iso.GetOutputPort())
Mass.Update()
# just print the results
print "Volume = ", Mass.GetVolume()
print "Surface = ", Mass.GetSurfaceArea()
ノート
VTK-5.4.2とVTK-5.2.1の両方をテストすることで、物事を少し絞り込み、この動作がバージョン5.0.4と5.2.1の間に導入されたと信じています。
アップデート
VTK-5.4.2では、vtkTIFFReaderはSetDataSpacingメソッドで設定されたx値とy値を無視しているようです。代わりに、vtkTIFFReaderは、TIFFファイルによって報告された解像度からxおよびyデータ間隔を計算しています。