从两个Kinect深度图中提取投影单应性

smi*_*man 15 homography projective-geometry kinect

从Kinect深度图获得两个连续的3D点云1和2(不是整个云,比如用OpenCV的GoodFeaturesToMatch从云中选择的100个点),我想从1到2计算摄像机的单应性.我理解这是一个投影变换,它已经由很多人完成了:这里(幻灯片12),这里(幻灯片30)这里似乎是经典论文.我的问题是,虽然我是一名称职的程序员,但我没有数学或触发技巧将其中一种方法转化为代码.由于这不是一个简单的问题,我为解决以下问题的代码提供了大量的赏金:

相机位于原点,沿Z方向看,不规则的五面体[A,B,C,D,E,F]: 相机位置1

相机向左移动-90mm(X),向上移动60mm(Y),向前移动+ 50mm(Z)并向下旋转5°,向右旋转10°,逆时针旋转-3°: 相机位置2

旋转整个场景以使相机返回其原始位置允许我在2处确定顶点的位置: 在此输入图像描述

用于准备它的3DS Max文件是最大1,最大2最大3

以下是顶点之前和之后的位置,内在函数等: 顶点和内在函数

请注意,camera2的顶点不是100%准确,有一些故意的噪音.

这是Excel文件中的数字

我需要的代码,必须可以很容易地翻译成VB.Net或C#,必要时使用EMGUCV和OpenCV,获取2组顶点和内在函数并生成此输出:

Camera 2 is at -90 X, +60 Y, +50 Z rotated -5 Y, 10 X, -3 Z.
The homography matrix to translate points in A to B is:
a1, a2, a3
b1, b2, b3
c1, c2, c3
Run Code Online (Sandbox Code Playgroud)

我不知道单应性坐标的单应性是3X3还是3X4,但它必须允许我将顶点从1转换为2.

我也不知道值a1,a2等; 那是你必须找到的; ;-)

500赏金提供'替换'我提供给这个非常相似的问题的赏金,我在那里添加了一个指向这个问题的评论.

编辑2:我想知道我问这个问题的方式是否具有误导性.在我看来,问题更多的是点云拟合而不是相机几何(如果你知道如何平移和旋转A到B,你知道相机变换,反之亦然).如果是这样,那么也许可以用Kabsch的算法或类似的方法获得解决方案

edv*_*dig 1

用于计算 2D 或 3D 点云的两个快照之间的差异的“正确”算法称为 ICP(迭代最近点)。该算法求解ICP

以人类可读的格式:对于给定的点集 P1 和 P2,找到将 P1 转换为 P2 的旋转矩阵 R 和平移 T。只要确保它们围绕其起源进行标准化即可。

该算法概念简单,通常在实时中使用。它迭代地修改最小化两个原始扫描点之间的距离所需的变换(平移、旋转)。

对于那些感兴趣的人来说,这是计算几何处理中的一个主题