0

我正在使用 Kinect V2 来捕获 3D 点云及其相应的彩色图像。为了将一些 3D 模型正确投影到这个彩色图像中,我需要计算从相机到图像空间的有效投影矩阵。由于 Kinect V2 SDK 没有关于 RGB 相机的校准信息,我发现有一种方法叫做坐标映射器类中的MapCameraPointsToColorSpace

此方法返回一个查找表,其中包含云中每个 3D 点与图像像素之间的对应关系。从表中,我试图计算 RGB 相机内在矩阵(焦距、主点、图像间距因子)。但是使用计算的内在矩阵投影的二维点与查找表中的值之间存在一些误差。我认为发生此错误是因为我没有计算径向失真。我对吗?我应该关心径向失真以通过此查找表获得 3D 到 2D 色点之间的精确映射吗?

4

1 回答 1

0

是的,你是对的。原始 Kinect RGB 图像有失真。最好的方法是首先使用 RGB 相机内在矩阵手动扭曲空白图像并将其用作查找表。

distort(int mx, int my, float& x, float& y) const
    {
        float dx = ((float)mx - depth.cx) / depth.fx;
        float dy = ((float)my - depth.cy) / depth.fy;
        float dx2 = dx * dx;
        float dy2 = dy * dy;
        float r2 = dx2 + dy2;
        float dxdy2 = 2 * dx * dy;
        float kr = 1 + ((depth.k3 * r2 + depth.k2) * r2 + depth.k1) * r2;
        x = depth.fx * (dx * kr + depth.p2 * (r2 + 2 * dx2) + depth.p1 * dxdy2) + depth.cx;
        y = depth.fy * (dy * kr + depth.p1 * (r2 + 2 * dy2) + depth.p2 * dxdy2) + depth.cy;
}

了解更多信息

于 2017-11-26T12:40:51.790 回答