有没有人知道找到工具包或包来做上述的好地方?
现在,我有一些内部代码,但我希望在准确性方面升级到更具工业实力的东西.
编辑1:这是一些(差)样本data.这比典型的球体小得多.我可以在生成它时添加更好的数据!它在(自我)肿瘤脑肿瘤中.
解决方法 一种选择是使用VTK. (我将在这里使用tvtk python绑定…)至少在某些情况下,获得等值面内的区域会更准确一些.
此外,就表面积而言,tvtk.MasspropertIEs也会计算表面积.它是mass.surface_area(下面代码中的mass对象).
import numpy as npfrom tvtk.API import tvtkdef main(): # Generate some data with anisotropic cells... # x,y,and z will range from -2 to 2,but with a # different (20,15,and 5 for x,and z) number of steps x,z = np.mgrID[-2:2:20j,-2:2:15j,-2:2:5j] r = np.sqrt(x**2 + y**2 + z**2) dx,dy,dz = [np.diff(it,axis=a)[0,0] for it,a in zip((x,z),(0,1,2))] # Your actual data is a binary (logical) array max_radius = 1.5 data = (r <= max_radius).astype(np.int8) IDeal_volume = 4.0 / 3 * max_radius**3 * np.pi coarse_volume = data.sum() * dx * dy * dz est_volume = vtk_volume(data,(dx,dz),(x.min(),y.min(),z.min())) coarse_error = 100 * (coarse_volume - IDeal_volume) / IDeal_volume vtk_error = 100 * (est_volume - IDeal_volume) / IDeal_volume print 'IDeal volume',IDeal_volume print 'Coarse approximation',coarse_volume,'Error',coarse_error,'%' print 'VTK approximation',est_volume,vtk_error,'%'def vtk_volume(data,spacing=(1,1),origin=(0,0)): data[data == 0] = -1 grID = tvtk.ImageData(spacing=spacing,origin=origin) grID.point_data.scalars = data.T.ravel() # It wants fortran order??? grID.point_data.scalars.name = 'scalars' grID.dimensions = data.shape iso = tvtk.ImagemarchingCubes(input=grID) mass = tvtk.MasspropertIEs(input=iso.output) return mass.volumemain()
这会产生:
IDeal volume 14.1371669412Coarse approximation 14.7969924812 Error 4.66731094565 %VTK approximation 14.1954890878 Error 0.412544796894 %总结
以上是内存溢出为你收集整理的用于计算python中的体积或表面积的良好算法全部内容,希望文章能够帮你解决用于计算python中的体积或表面积的良好算法所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)