skimage中按比例缩放行进立方体算法输出的顶点坐标

时间:2019-03-05 12:40:09

标签: coordinates scaling scikit-image coordinate-transformation marching-cubes

我正在尝试使用skimage.measure.marching_cubes_lewiner解析某些等值面f(x,y,z)=0。在我的情况下,f是强非线性的,当坐标以对数间距给出时,最好映射。因为行进立方体需要规则的网格来构建体素,所以我正在使用坐标X,Y,Z的网格,该网格对应于原始坐标的log10,因此等值面由{ {1}}。如果不是因为我正在使用f(10**X,10**Y,10**Z)=0中的X,Y,Z(相当于[-1.5,2]^3中的x,y,z),一切都很好, [0.03,100.]^3给出的解决方案不在此多维数据集中。

在SO上回答另一个related question之后,我认为这可能是由于以下事实:该算法可能考虑了单位体积,因此我需要设置正确的skimage.measure.marching_cubes_lewiner我在spacing的调用中输入参数。以这种方式,假设我将函数skimage.measure.marching_cubes_lewiner映射到每个坐标f个点的网格上,这样我就将每个坐标N的指数增加,因此我称:

numpy.diff([-1.5,2])/N

但是,出乎意料的是,求解点的坐标通常在import numpy as np from skimage import measure as msr def f(x,y,z): val = ... # some lengthy code to define my implicit function return val # Define ranges of my coordinates xRange = [0.03,100.] yRange = [0.03,100.] zRange = [0.03,100.] XRange = np.log10(xRange) YRange = np.log10(yRange) ZRange = np.log10(zRange) # Create regular grid N = 50 # number of points per coordinate X,Y,Z = np.mesh[XRange[0]:XRange[1]:N*1j, YRange[0]:YRange[1]:N*1j, ZRange[0]:ZRange[1]:N*1j] F = f(10**X,10**Y,10**Z) sol,_,_,_ = skimage.measure.marching_cubes_lewiner(F,0.0,spacing(np.diff(XRange)/N,np.diff(YRange)/N,np.diff(ZRange)/N)) 中带有[0,Vx]*[0,Vy]*[0,Vz]Vx>XRange[-1]Vy>YRange[-1]。我不知道为什么会发生这种情况,也不知道如何正确地将等值面解决方案的坐标调整为问题的实际单位。

0 个答案:

没有答案