微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

对齐/配准两组相似的 3D 点,无序

如何解决对齐/配准两组相似的 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 举报,一经查实,本站将立刻删除。