了解Point Cloud Library中的StereoMatching

时间:2015-08-24 16:00:25

标签: opencv point-cloud-library

情境:我正在尝试使用point cloud获取pcl::AdaptiveCostSOStereoMatching"compute"使用两个已整理的图像(图片可以)。

我使用这些教程来学习如何做到这一点:
First tutorial
Second tutorial

错误:调用AdaptiveCostSOStereoMatching

"compute"方法时,程序在运行时崩溃

问题:如何正确地将图片传递给"png2pcd.exe in.png out.pcd"方法?

我试过
1)由png2pcd转换的图像 (命令行: cv::Mat
2)使用以下void MatToPointCloud(Mat& mat, pcl::PointCloud<RGB>::Ptr cloud) { int width = mat.cols; int height = mat.rows; pcl::RGB val; val.r = 0; val.g = 0; val.b = 0; for (int i = 0; i < mat.rows; i++) for (int j = 0; j < mat.cols; j++) { auto point = mat.at<Vec3b>(i, j); //std::cout << j << " " << i << "\n"; val.b = point[0]; val.g = point[1]; val.r = point[2]; cloud->at(j, i) = val; } } 的功能转换的图像 但没有运气。

将cv :: Mat转换为pcl :: PointCloud

的函数
    // Input
    Mat leftMat, rightMat;
    leftMat = imread("left.png");
    rightMat = imread("right.png");

    int width = leftMat.cols;
    int height = rightMat.rows;
    pcl::RGB val;
    val.r = 0; val.g = 0; val.b = 0;

    pcl::PointCloud<pcl::RGB>::Ptr left_cloud(new pcl::PointCloud<pcl::RGB>(width, height, val));
    pcl::PointCloud<pcl::RGB>::Ptr right_cloud(new pcl::PointCloud<pcl::RGB>(width, height, val));

    MatToPointCloud(leftMat, left_cloud);
    MatToPointCloud(rightMat, right_cloud);

    // Calculation
    pcl::AdaptiveCostSOStereoMatching stereo;
    stereo.setMaxDisparity(60);
    //stereo.setXOffest(0); Почему-то не распознается
    stereo.setRadius(5);
    stereo.setSmoothWeak(20);
    stereo.setSmoothStrong(100);
    stereo.setGammaC(25);
    stereo.setGammaS(10);
    stereo.setRatioFilter(20);
    stereo.setPeakFilter(0);
    stereo.setLeftRightCheck(true);
    stereo.setLeftRightCheckThreshold(1);
    stereo.setPreProcessing(true);

    stereo.compute(*left_cloud, *right_cloud); // <-- CRASHING THERE 
    stereo.medianFilter(4);

    pcl::PointCloud<pcl::PointXYZRGB>::Ptr out_cloud(new pcl::PointCloud<pcl::PointXYZRGB>);
    stereo.getPointCloud(318.11220, 224.334900, 368.534700, 0.8387445, out_cloud, left_cloud);

pcl :: AdaptiveCostSOStereoMatching(compute)

AdaptiveCostSOStereoMatching

错误信息:
输出日志:HEAP [App.exe]:
堆积在0000006B0F828460处修改为0000006B0F8284A8过去要求的尺寸为38
App.exe已触发断点。

left_cloud 右侧云看起来像left_cloud enter image description here

迷你问题:如果ACSSM真的允许来自2张图片的构建点云,.如何在没有不确定和繁琐参数的情况下执行此操作?

1 个答案:

答案 0 :(得分:0)

问题:我在没有.ics的情况下下载并安装了旧版PCL 之后,我从其他PCL包下载了stereo并将此库添加到我的PCL包中。它工作不正确。

解决方案:我已填写stereo,我的程序现已合适。
操作系统PCL 1.8
IDE Windows

如果您尝试编译PCL,这些链接可以帮助您:
Official-tutorial-1
Official-tutorial-2
Good help with FLANN and VTK

Example to verify installation