Получите текстурированное облако точек с помощью алгоритма сопоставления блоков

Я хочу текстурировать сгенерированное облако точек с исходным цветом изображения из двух изображений. Для этого я рассчитал карту несоответствий с помощью Block-Matching и сделал реконструкцию. Также не составило большого труда написать функцию экспорта для .ply-файлов. Моя проблема: Как мне получить цвет из алгоритма сопоставления блоков? Он ищет похожие пиксели на выпрямленных изображениях, но нет переменной, которая сохраняет позицию найденного сопоставления, на которую ссылаются API. После этого восстановить цвет невозможно.

StereoBM sbm;
sbm(left_rectfied_image, right_rectified_image, disparity, CV_32F);

(Я работаю с OpenCV 2.4.8)


person attenbe    schedule 12.11.2015    source источник


Ответы (1)


Да! Карта несоответствий, которую вы вычисляете, относится к выпрямленному левому изображению! Вы можете просто использовать значения Координаты XY пикселя левого изображения для всех точек в 3D. например

reprojectImageTo3D(disp_32, xyz, Q, true);
pcl::PointCloud<pcl::PointXYZRGB>::Ptr point_cloud_ptr (new pcl::PointCloud<pcl::PointXYZRGB>); 
const double max_z = 1.0e4;

for (int Row = 0; Row < xyz.rows; Row++)
{
    for (int Col = 0; Col < xyz.cols; Col++)
    {
        pcl::PointXYZRGB point;
        vec3b Pix;
        //Just taking the Z Axis alone
        Vec3f Depth= xyz.at<Vec3f>(Row,Col);
        point.x = Depth[0];
        point.y = Depth[1];
        point.z = Depth[2];

        if(fabs(Depth[2] - max_z) < FLT_EPSILON || fabs(Depth[2]) > max_z|| Depth[2] > 0) 
            continue;

        Pix= mCamFrame_Left.at<vec3b>(Row,Col);

        uint32_t rgb = (static_cast<uint32_t>(Pix.val[0]) << 16 |static_cast<uint32_t>(Pix.val[1]) << 8 | static_cast<uint32_t>(Pix.val[2]));
        point.rgb = *reinterpret_cast<float*>(&rgb);
        point_cloud_ptr->points.push_back (point);
    }
}
point_cloud_ptr->width = (int) point_cloud_ptr->points.size();
point_cloud_ptr->height = 1;
person Balaji R    schedule 12.11.2015
comment
Большое спасибо за оперативную помощь, вы мне очень помогли. Очень хороший ответ! - person attenbe; 12.11.2015