Python 比较或对齐三维对象

Python 比较或对齐三维对象,python,matlab,matrix,3d,image-recognition,Python,Matlab,Matrix,3d,Image Recognition,我有两个3D矩阵。每个像素都是一个灰度值 第一个3D矩阵是一个参考形状。e、 g.想象一个嘴巴的3D模型 第二个3D矩阵是参考形状的近似部分。e、 想象一颗牙齿。该小节是近似的,因为它来自不同的口。注:该小节可能略微倾斜 挑战在于确定参考矩阵中各小节的坐标。扩展上面的口腔示例,挑战在于确定第二个3D矩阵最准确地表示的牙齿 输出可以是3D像素位置和方向值。您可以使用imregister、imregtform和imwarp自动对齐两个体积数据集。看见 或者,如果您想更努力地工作,可以在6D(conv

我有两个3D矩阵。每个像素都是一个灰度值

第一个3D矩阵是一个参考形状。e、 g.想象一个嘴巴的3D模型

第二个3D矩阵是参考形状的近似部分。e、 想象一颗牙齿。该小节是近似的,因为它来自不同的口。注:该小节可能略微倾斜

挑战在于确定参考矩阵中各小节的坐标。扩展上面的口腔示例,挑战在于确定第二个3D矩阵最准确地表示的牙齿


输出可以是3D像素位置和方向值。

您可以使用
imregister
imregtform
imwarp
自动对齐两个体积数据集。看见
或者,如果您想更努力地工作,可以在6D(
convn
)中进行卷积,从第一个矩阵的(x,y,z,θ=0,φ=0,psi=0)开始,然后在所有角度投影中创建3d齿的表示

通常,您希望将您的分段矩阵
B
与参考矩阵
A
的每个可能的分段矩阵进行比较(使其具有与矩阵
B
相同的大小),并找到最相似的部分

通过比较,我指的是对差异的估计,例如,如果
B_I
是矩阵A的某个子部分,则可以计算:

 d_i=sum(sum(sum((B_i-B).^2)));
之后,您需要找到最低$d_i$。如果您使用的是大矩阵A(nxn)和B(mxmxmxm),则有
(N-M)^3
可能的子矩阵
B_i
,其大小与矩阵
B
相同。该算法将相当昂贵


然而,有一种使用卷积的替代实现。你可以看看这个算法,它和你的问题非常相似

感谢您的快速回复@bla将查看。理想情况下,在python@david_adler如果你在寻找Python的解决方案,不要用Matlab来标记这个问题……理想情况下,Python,Matlab是可以的。我想我会得到matlab社区的更多支持,但问题更一般。这适用于数据科学堆栈交换(而不是StackOverflow)。谢谢@Pete,我将在那里转载