我有一个小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似乎忽略了在setdataspace方法中设置的x和y值。相反,vtkTIFFReader正在根据TIFF文件报告的分辨率计算x和y的数据间距。在
我以前从来没听说过VTK,不过现在说了。在
开源软件的好处是可以直接检查源代码。更好的是,如果有基于web的版本控制浏览器,我们可以像这样在网上讨论它。在
让我们看看有问题的^{} 。5.0.4使用r1.28,5.4.2使用r1.30。这是diff between r1.28 and r.30。可能影响体积计算的部分是
以及
^{pr2}$但我觉得所有的改变都没问题。在
下一个可疑的是^{} 。Diff between r1.1.6.1 and 1.5。在
以及
再次,他们正在修复铸件,但看起来还不错。在
不妨也看看^{} 。Diff between r1.50 and r1.52。在
还有很多,但都是演员。在
使用^{} 会更有趣。Diff between 1.51 and 1.63。从修订号的不同可以看出,这个类与其他类相比有了一些发展。以下是签入注释:
从vtkTIFFReader中所做的更改的数量来看,我猜行为上的差异来自于此。例如,它可能已经开始将Tiff识别为不同的格式,并更改了内部像素值。试着打印出像素值,看看有没有差别。如果像素值已更改,
maxthres=81
可能太高。在相关问题 更多 >
编程相关推荐