【发布时间】:2018-04-12 01:55:35
【问题描述】:
我需要在使用 scipy.ndimage.interpolation.affine_transform 应用我生成的旋转矩阵之后计算体积内两个已知点的重新映射坐标。
除了在 affine_transform 期间进行旋转之外,输出数组还相对于输入数组进行了填充,以考虑到旋转后的体积可能超出原始数组形状的范围。
我有体积之前变换(xb1,yb1,zb1)和(xb2,yb2,zb2)中两个已知点的坐标。我想知道在仿射变换和扩展数组 (xa1,ya1,za1) & (za2, ya2, za2) 之后这些坐标的 新 位置是什么。 在 affine_transform 中,旋转是在体积中心 (xb1,yb1,zb1) 和 (xb2,yb2,zb2) 之间的中点进行的。
编辑: 到目前为止我已经尝试过: 我制作了一个与我正在转换的体积相同形状的 zeros 数组。 zeros数组中对应两个起点的两个元素设置为两个32bit整数,一个为1000,另一个为5000。 然后我用与体积相同的变换矩阵变换标记的零数组,然后在样条顺序为 0 的 affine_transform 之后(以保持变换数组中的起始元素值),我只使用 np.any 返回索引转换后的数组中的 1000 和 5000 个元素。这可以正常工作,但在某些情况下,在 affine_transform 的过程中,一个点可能会“丢失”——可能是通过样条顺序为 0(无样条)的插值。 所以这并不适用于所有情况。
【问题讨论】:
-
使用旋转矩阵变换点。
-
感谢 kazemakase,这很有用,但旋转枢轴是初始起点和终点之间的中心点(这不是卷所在阵列的中心)。 affine_transform 还将轴心点重新映射到数组中心。也许我可以将变换应用于stackoverflow.com/questions/12148351/… 之类的起点和终点,然后计算将枢轴点移动到数组中心所需的平移,并对起点和终点应用相同的平移。这可能有效。
标签: python numpy scipy affinetransform