python - 事件形状模型 : matching model points to target points

标签 python algorithm opencv image-processing matching

我有一个关于事件形状模型的问题。我正在使用 T. Coots 的论文(可以找到 here 。)

我已经完成了所有初始步骤(Procrustes 分析计算平均形状,PCA 减少尺寸)但仍停留在拟合上。

这就是我现在所处的情况:我已经用点 X 计算了平均形状,还计算了一组新的点 Y X 应该移动到,更符合我的形象。

我正在使用以下算法,可以在之前链接的论文的第 23 页找到该算法:


enter image description here


澄清:是用 Procrustes Analysis 计算的平均形状,是包含主成分分析计算的特征向量的矩阵。

到第 4 步为止一切顺利。我可以计算姿势参数并将转换反转到点 Y

然而,在第 5 步,奇怪的事情发生了。无论在第 3 步中计算姿势参数并在第 4 步中应用任何姿态参数,第 5 步总是会产生几乎完全相同的向量 y',但值非常低(例如,其中一个为 1.17747114e-05) . (所以无论我计算的比例是 1/10 还是 1000,y' 几乎没有变化)。

这导致算法始终收敛到相同的 b 值,因此无论输入的目标点集如何 x 都具有相同的输出形状 < strong>Y 是我希望模型点 X 与之匹配。

这肯定不是算法的目标...任何人都可以解释这种奇怪的行为吗?不知何故,将我在第 5 步 中计算出的向量 y 投影到“切平面”中没有考虑到在第 4 步中所做的任何更改.


编辑:我有更多的推理,但没有解释或解决方案。如果在步骤 5 中,我手动将 y' 设置为仅包含零,则在步骤 6 中,b 等于特征向量乘以均值的矩阵。这导致我总是得到相同的 b(因为 y' 总是一个具有非常低值的向量)。

但这些特征向量是使用 PCA 从均值形状计算出来的...那么,应该不会发生任何变化,对吗?


最佳答案

您可以检查的是您的坐标是否已正确缩放:该算法假定所有坐标都已缩放,以便平均形状向量具有欧几里德范数 1。如果不是这种情况(特别是如果它比 1 大得多,您将得到非常小的 y 分量)。

关于python - 事件形状模型 : matching model points to target points,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30528039/

相关文章:

python - 如何优化 pandas 的内存使用

python - 如何使用ffmpeg-python转换采样率

c - 如何仅使用堆栈操作对堆栈进行排序?

c++ - 在 svm-predict 命令中使用字符串流而不是文件流

opencv - 从 Canny 边缘提取单线轮廓

eclipse - eclipse pydev 中的 anaconda opencv Unresolved 导入

python - Python 交叉模块中的全局变量

python - 在字典中查找最小非零值 (Python)

algorithm - 使用主定理求解 T (n) = √2*T(n/2) + log n

algorithm - 寻找可能的组合数量