【发布时间】:2018-02-17 03:17:32
【问题描述】:
我目前正在解决一个问题,我根据 Velodyne 数据创建了一个 CV_16UC1 类型的 uint16 图像,假设 98% 的像素是黑色(值 0),其余像素具有度量深度信息(距离那一点)。这些像素对应于云中的 velodyne 点。
cv::Mat depthMat = cv::Mat::zeros(frame.size(), CV_16UC1);
depthMat = ... //here the matrice is filled
如果我尝试显示此图像,我会得到:
在图像上,您可以看到最亮的(白色)像素对应于具有最大深度的像素。由此,我需要获得更密集的深度图像或类似于适当深度图像的 smth,如本例所示视频:
https://www.youtube.com/watch?v=4yZ4JGgLE0I
这需要对这些点(2D 图像的像素)进行适当的插值和外插,这就是我卡住的地方。我是插值技术的初学者。有谁知道如何做到这一点,或者至少可以指出一个可行的解决方案或示例算法,用于从稀疏数据创建深度图?
我从Kinect 示例中尝试了以下内容,但它没有改变输出:
depthMat.convertTo(depthf, CV_8UC1, 255.0/65535);
const unsigned char noDepth = 255;
cv::Mat small_depthf, temp, temp2;
cv::resize(depthf, small_depthf, cv::Size(), 0.01, 0.01);
cv::inpaint(small_depthf, (small_depthf == noDepth), temp, 5.0, cv::INPAINT_TELEA);
cv::resize(temp, temp2, depthf.size());
temp2.copyTo(depthf, (depthf == noDepth));
cv::imshow("window",depthf);
cv::waitKey(3);
【问题讨论】:
-
记住:只有你有数据来测试并让这个意大利面条代码工作。这里 99.9% 的人没有坐在桌子上的 Velodyne 传感器。考虑到这一点,请意识到现在写问题的方式意味着没有人能够帮助您。祝你好运!
-
在旁注中,我注意到您问了几个问题,但没有为他们选择任何官方答案。似乎其中至少有几个值得选择答案。您可以返回,查看您的问题并单击最能解决这些问题的答案附近的复选框吗?这将为回答他们的人提供一些分数,并帮助我们保持 Stackoverflow 井井有条。将来,有类似问题的人会阅读您的问题并更容易找到最佳答案,如果他们被标记为这样。
-
@karlphillip 你说得对,我编辑了标题以免与 Velodyne 混淆,因为问题可以改写为“如何在稀疏深度 2D 图像上进行插值/外插”。我们在这里只处理一个单通道图像矩阵。至于我之前忽略的问题,我给了他们一个评论,谢谢你提醒我这样做:)
-
你有seen this吗?蒙版必须比降低原始图像质量的线条更厚/更大。我不认为你这样做是正确的。
标签: c++ image opencv image-processing ros