【发布时间】:2016-02-17 07:33:16
【问题描述】:
我使用 Kinect2.0。我已经得到了深度相机和彩色相机的内在参数,以及它们之间的外在参数。
现在我已经知道每个深度(ir)图像的像素匹配哪个颜色(rgb)图像的像素。
for (int i = 0; i < 424; i++)
{
for (int j = 0; j < 512; j++)
{
fscanf(fp_dp, "%lf", &depthValue);
if (depthValue == 0) continue;
double Pir[3][1] = { j*depthValue, i*depthValue, depthValue };
P_ir = Mat(3, 1, CV_64F, Pir);
P_rgb = Mat(3, 1, CV_64F);
P_rgb = Intrinsic_rgb*(R_ir2rgb*(Intrinsic_ir_inv*P_ir) + T_ir2rgb);
int x = P_rgb.at<double>(0, 0) / depthValue;
int y = P_rgb.at<double>(1, 0) / depthValue;
//printf("(%d,%d)\n", x, y);
if (x < 0 || y < 0 || x >= 1920 || y >= 1080)
{
continue;
}
img_mmap.at<Vec3b>(i, j)[0] = img_rgb.at<Vec3b>(y, x)[0];
img_mmap.at<Vec3b>(i, j)[1] = img_rgb.at<Vec3b>(y, x)[1];
img_mmap.at<Vec3b>(i, j)[2] = img_rgb.at<Vec3b>(y, x)[2];
Color_depth[y][x] = depthValue;
}
fscanf(fp_dp, "\n");
}
fclose(fp_dp);
imwrite(ir_name, img_mmap);
如您所见,我想获取彩色图像的深度数据。但是当我使用这种方法时。我刚得到 512x424 单位的数据。这不是 1920x1080。
那么当我已经得到两个相机的内在参数和它们之间的外在参数时,我是否可以知道每个颜色(rgb)图像的像素与哪个深度(ir)图像的像素匹配?
【问题讨论】:
-
所以您扫描深度图像并转换为 RGB 以填充它?您必须做相反的事情:您从 RGB 网格坐标进行逆变换,并从深度图像中线性插值它的值。我想将深度图像存储为
cv::Mat并使用可用的变换函数是有意义的。 (不确定H_ir_inv和其他人是什么)。 -
谢谢,H_ir_inv 是深度相机内在参数的倒数。我已经使用插值。但我担心这不正确。所以我想知道每个颜色(rgb)图像的像素匹配哪个深度(ir)图像的像素。然后我可以通过匹配点,得到深度值。