【发布时间】:2018-12-19 20:35:45
【问题描述】:
背景:
用例:我想从几张图片构建一个人体的 3D 网格。
更具体地说,现在我正在尝试旋转一个 3-D numpy 数组,这样我就可以应用人体的下一个“蒙版”,这样我就可以获得皮肤的体素表示,从中可以制作网格
最具体地说,问题是scipy.ndimage.rotate() 没有做我需要的 3 维(尽管它适用于 2 维)。对于任意旋转角度(即 72.9 度而不是 90.0 度),它也会失败。它要么在应该有“开启”体素的地方留下“关闭”体素,要么(如果我使用连续数字而不是布尔值)它会在应该关闭体素的地方留下很多“开启”体素。有没有更好的rotate() 函数可以解决这个噪音问题?
版本信息:
版本细节:
python 2.7.15: Anaconda, Inc.
numpy 1.11.3 py27h3dfced4_4
numpy-base 1.14.5 py27hdbf6ddf_4
scipy 1.1.0 py27hc49cb51_0
uname -a 的输出:
Linux elon-eats-my-shorts 4.15.0-42-generic #45~16.04.1-Ubuntu SMP Mon Nov 19 13:02:27 UTC 2018 x86_64 x86_64 x86_64 GNU/Linux
代码:
#====================================================
def rot8(model, angle):
xy=(1,0); return uint_mids( scipy.ndimage.rotate(model, angle, axes=xy, reshape=False, mode='constant'))
#====================================================
def uint_mids(arr):
# NOTE: do we want this to run on floats? TODO: try multiple ways (first on uint8, then float, etc.)
UINT8_MAX=np.iinfo('uint8').max; MID=int(round(UINT8_MAX/2.))
arr[np.greater(arr, 0)]=MID; return arr
#====================================================
结果:
我希望这些 plt.show() 结果看起来像人体的二维视图,噪音最小。相反,我要么得到 A) 人体内部的洞,要么得到 B) 应该在外部的“身体”:
一)
B)
有关scipy.ndimage.rotate() 不精确的最小示例,请使用this link 的代码。回复:约翰
之前轮换:
之后轮换:
rotate() 方法创建了新的体素!我正在寻找不这样做的rotate_in_3D() 方法
【问题讨论】:
-
您的图片已损坏。
-
@user2357112 我正在修复中。感谢您让我知道您也看不到它们
-
图像是你的输出,但模型是什么样的?
-
是的,但是如果没有看到您要旋转的东西,就很难确定错误的来源。您能否制作一个分辨率非常低的最小示例来演示该问题?
-
注意:我已经解决了这个问题。如果您需要解决方案,请通过通知与我联系;除了@John之外,似乎没有多少人真正解决了这个问题。如果有更多的兴趣,我会发布一个解决方案
标签: python numpy scipy mesh voxel