【问题标题】:Depth Values Don't Make Sense R200 Camera深度值没有意义 R200 相机
【发布时间】:2019-03-12 15:12:58
【问题描述】:

我正在运行此处找到的教程:https://software.intel.com/en-us/articles/using-librealsense-and-opencv-to-stream-rgb-and-depth-data

它使用以下行从 r200 获取深度值:

   cv::Mat depth16( _depth_intrin.height, _depth_intrin.width, CV_16U,(uchar *)_rs_camera.get_frame_data( rs::stream::depth ) );
   cv::Mat depth8u = depth16;
   depth8u.convertTo( depth8u, CV_8UC1, 255.0/1000 );
   imshow( WINDOW_DEPTH, depth8u );

输出图像蒸汽是:

https://imgur.com/EmdhFNk

您也可以看到彩色图像。我还在底部放了一个卷尺,最远可达 3.5m(r200 的范围应该是 3.5m)

为什么颜色是二进制的?我尝试添加不同颜色的图像,但它似乎根本不是深度值。此外,即使距离 1m 到 5m,地板始终是黑色也是没有意义的。为什么所有物体都是白色的?桌子和沙发的距离明显不同。

我该如何改进呢?我知道您可以从 r200 获得良好的深度值,就像我在示例中获得的一样。请参阅 (http://docs.ros.org/kinetic/api/librealsense/html/cpp-capture_8cpp_source.html),但这些使用 glfw 而不是 OpenCV。我想知道为什么深度值在转换后如此奇怪。

理想情况下,我想生成深度值并过滤 1m 到 2m 范围之外的任何值。谢谢!

【问题讨论】:

  • 一种基本的调试技术是单独检查每个步骤。 16位输入的深度范围是多少?如果您使用0-3500 范围内的输入将相机图像替换为手工输入,会发生什么?

标签: c++ computer-vision realsense


【解决方案1】:

编辑:正如@MSalters 指出的那样,我的答案的前半部分是错误的,并且由于我误读了 OP 的代码。后半部分包含正确答案。

如果你的深度范围是1-3.5m,以毫米为单位(1000mm-3500mm);将结果除以 1000 将为您提供 1.0-3.5 范围内的数据。但是,您的源数据是 16 位无符号类型,它不能表示十进制或浮点值,只能表示整数,因此您的值会被截断为 {0,1,2,3} 之一。您可能convertTo 中解决这个问题,因为它可能会在内部编组类型,但这是一个潜在的错误来源。

还有第二个问题...CV_8U 是一个 8 位无符号字符,它也只能表示整数值,这次的范围是 0-255。由于您的数据可以在 0...3500 范围内,通过像您在示例中所做的那样乘以 0.255,任何超过 1000 毫米深度的值都会导致值超过 255,因此会在此处被截断。

您可以使用cv::normalize 函数和NORM_MINMAX 归一化类型将您的数据归一化到0...255 范围,而不是像上面那样转换原始深度图像。您也可以将目标图像格式设置为 CV_8U。

这可能只适用于可视化,因为它会受到源数据输入范围的影响。相反,如果您知道最大值为 3500,最小值为 0,请将源图像除以 3500 并乘以 255。也就是说,在可能的情况下,最好将其保留为 16 位格式,以便深度分辨率。

【讨论】:

  • 我不明白这个答案。 255.0/1000 是写0.255 的另一种方式。输入不除以 1000 也不乘以 255。转换使用的比例因子为 0.255
  • 感谢您的帮助。我实际上不知道为什么我不知道我似乎无法阅读。我也不知道为什么教程使用255/1000。 r200 的深度值高达 3.5m,因此用 3500 替换 1000 可以得到准确的结果。之后我也做了一些阈值处理,一切看起来都很好。
  • @MSalters - 你对答案的那部分是正确的,我会解决的。第二点仍然存在。
  • 嗯,第二点是关于乘以255,正如我在第一条评论中指出的那样,他也没有这样做 - 他乘以0.255double价值)。正如 Dale 的评论所示,使用 255.0/3500 有效,因为这是 0.073 的一个因素。
  • 我重新阅读了我写的内容 - 我的措辞不正确 - 我的意思是你说的,但现在是早上 6 点,我的大脑处于半功能状态。更正了我的答案。
猜你喜欢
  • 2018-10-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-12-03
  • 1970-01-01
  • 2013-01-12
  • 1970-01-01
相关资源
最近更新 更多