- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我有一条小 python VTK
计算嵌入在 TIFF
图像堆栈中的对象的体积和表面积的函数。为了将 TIFF 的
读入 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 数据空间。
最佳答案
我从未听说过VTK之前,但在这里。
开源软件的好处是你可以直接查看源代码。更好的是,如果有基于 Web 的版本控制浏览器,我们可以像这样在线讨论它。
让我们看看vtkMassProperties
有问题。 5.0.4 使用 r1.28,5.4.2 使用 r1.30。这是 diff between r1.28 and r.30 .可能影响体积计算的部分是
vol[2] += (area * (double)u[2] * (double)zavg); // 5.0.4
vol[2] += (area * u[2] * zavg); // 5.4.2
和
kxyz[0] = (munc[0] + (wxyz/3.0) + ((wxy+wxz)/2.0)) /(double)(numCells); // 5.0.4
kxyz[0] = (munc[0] + (wxyz/3.0) + ((wxy+wxz)/2.0)) /numCells; // 5.4.2
但我认为所有更改都正常。
下一个可疑的是 vtkMarchingCubes
. Diff between r1.1.6.1 and 1.5 .
self->UpdateProgress ((double) k / ((double) dims[2] - 1)); // 5.0.4
self->UpdateProgress (k / static_cast<double>(dims[2] - 1)); // 5.4.2
和
estimatedSize = (int) pow ((double) (dims[0] * dims[1] * dims[2]), .75); // 5.0.4
estimatedSize = static_cast<int>(
pow(static_cast<double>(dims[0]*dims[1]*dims[2]),0.75)); // 5.4.2
同样,他们正在修复类型转换问题,但看起来还不错。
不妨看看vtkImageThreshold
也。 Diff between r1.50 and r1.52 .
lowerThreshold = (IT) inData->GetScalarTypeMin(); // 5.0.4
lowerThreshold = static_cast<IT>(inData->GetScalarTypeMin()); // 5.4.2
还有很多,但他们都是 Actor 。
vtkTIFFReader
变得更有趣了. Diff between 1.51 and 1.63 .从修订号的差异可以看出,与其他类(class)相比,该类(class)有了一些发展。以下是签到评论:
从 vtkTIFFReader 中所做的更改量来看,我猜想行为上的差异来自那里。例如,它可能已经开始将您的 Tiff 识别为不同的格式并更改了内部像素值。尝试打印出像素值,看看是否有任何差异。如果像素值发生变化,maxthres=81
可能太高。
关于python - 对 VTK 5.04 和 VTK 5.4.2 的 vtkMassProperties 差异感到好奇,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/967468/
我正在尝试学习Rust。我正在阅读一本书online,该书实现了unix程序cat。现在,我试图读取作为像cargo run file1.txt file2.txt这样的参数传递的文件的内容,但是程序
我在 GHC 8.0.1 中遇到了一个带有种类索引 (?) GADT 的奇怪情况,其中在类型与种类签名中引入 foralls 会产生不同的类型检查行为。 考虑以下数据类型: {-# LANGUAGE
我正在使用 Perl 5.10 开发应用程序,HTML::Mason和 Apache 2.2。这是我第一次在大型项目中使用 Perl 5.10。我每隔一段时间就会出现奇怪的行为。应用程序因一个非常奇怪
我正在尝试将文件上传到aws中的rust中,因为我使用的是 rusoto_s3 的s3 rust客户端,当这些部分从单个线程发送时,我设法使分段上传代码正常工作不是我想要的,我想上传大文件,并且希望能
我是一名优秀的程序员,十分优秀!