如何解决对齐/配准两组相似的 3D 点,无序
我有两组 3D 点(A 和 B),无序,我想对齐它们。 如果匹配正确,这两个集合非常相似:除了一个点移动剧烈外,其他点基本上都在相同的位置。 我想要得到的是允许我将 A 匹配到 B 的变换矩阵。
我研究了 CPD (Coherent Point Drift) 算法并尝试使用 pycpd python module 编写解决方案,但它似乎没有按预期工作。当使用两个相同的点集进行测试时,其中一个点的一个坐标(在示例中为 B[0][1]
)发生了变化,这两个点集没有正确对齐...
这是我的输入代码:
from functools import partial
import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
from pycpd import RigidRegistration
def visualize(iteration,error,X,Y,ax):
plt.cla()
ax.scatter(X[:,0],X[:,1],2],color='red',label='B')
ax.scatter(Y[:,Y[:,color='blue',label='A')
ax.legend(loc='upper left',fontsize='x-large')
plt.draw()
plt.pause(1)
A = np.array([[ 233.75321882,80.8999887,191.02015154],[ 161.74399384,97.85766357,166.16504879],[ 247.64107351,-49.8844893,165.82278204],[ 170.09968881,-121.22031994,225.38403046],[ 231.55268473,-38.23184623,266.80948112],[ 211.29510888,80.34622857,358.87705386]])
B = np.array([[ 233.75321882,200.8999887,358.87705386]])
fig = plt.figure()
ax = fig.add_subplot(111,projection='3d')
callback = partial(visualize,ax=ax)
reg = RigidRegistration(**{'X': B,'Y': A,'tolerance': 0.00001,'max_iterations': 1000})
reg.register(callback)
plt.show()
和 here's the resulting points 在运行严格的注册后
知道我做错了什么吗?你能指出我正确的方向吗?
谢谢
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。