【问题标题】:3D Scanner Depth Distortion3D 扫描仪深度失真
【发布时间】:2018-06-23 15:27:32
【问题描述】:

我正在尝试使用 OpenCV Structured Light API 构建结构光扫描仪。我正在使用立体相机并在相机对之间进行校准。
立体相机误差约为 0.26
个别相机误差也在0.22左右
但在格雷码模式解码结束时,我的图像出现了奇怪的深度失真(链接如下)。结果应该是平坦的表面,但表面看起来非常弯曲。 是什么导致了这样的错误?

https://docs.opencv.org/3.1.0/dc/da9/tutorial_decode_graycode_pattern.html

深度失真错误图像
https://ibb.co/fp8jU6
https://ibb.co/f16op6

【问题讨论】:

  • 用已知物体去扭曲传感器。
  • 已经有一部分是关于不失真和重新映射的。 initUndistortRectifyMap(cam1intrinsics, cam1distCoeffs, R1, P1, imagesSize, CV_32FC1, map1x, map1y);重映射(捕获模式[1][i],捕获模式[1][i],map1x,map1y,INTER_NEAREST,BORDER_CONSTANT,标量());
    但是好像不太好用或者我校准的问题太大了
  • 如果去掉那部分,结果是好是坏?
  • 我认为有/没有 remap ibb.co/c3yw96 没有 remap ibb.co/m92pU6 有 remap 在对象表面上会好一点
  • 只是为了再次检查,您确定您没有在校准时间和 3D 捕获时间之间移动硬件吗?另外你确定相机的焦点没有设置为自动吗?

标签: c++ opencv 3d camera-calibration projector


【解决方案1】:

当我与其他开源项目比较时,重新映射似乎存在错误。

重映射函数应该像下面这样使用

remap( captured_pattern[0][i], captured_pattern[0][i], map1x, map1y, INTER_NEAREST, BORDER_CONSTANT, Scalar() );
remap( captured_pattern[1][i], captured_pattern[1][i], map2x, map2y, INTER_NEAREST, BORDER_CONSTANT, Scalar() );

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-21
    • 2019-02-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多