Разъяснения по конверсии между RGB и CIELAB - PullRequest
0 голосов
/ 28 мая 2018

Я работаю cum облаков точек с PCL.Недавно мне пришлось преобразовать информацию о цвете точек в RGB в Cielab.

Я видел, что это возможно сделать с OpenCV, а затем я использовал следующий код:

pcl::PointCloud<pcl::PointXYZLAB>::Ptr convert_rgb_to_lab_opencv(pcl::PointCloud<pcl::PointXYZRGB>::Ptr cloud) {
pcl::PointCloud <pcl::PointXYZLAB>::Ptr cloud_lab(new pcl::PointCloud <pcl::PointXYZLAB>);

cloud_lab->height = cloud->height;
cloud_lab->width = cloud->width;

for (pcl::PointCloud<pcl::PointXYZRGB>::iterator it = cloud->begin(); it != cloud->end(); it++) {
    // Color conversion
    cv::Mat pixel(1, 1, CV_8UC3, cv::Scalar(it->r, it->g, it->b));
    cv::Mat temp;
    cv::cvtColor(pixel, temp, CV_BGR2Lab);

    pcl::PointXYZLAB point;

    point.x = it->x;
    point.y = it->y;
    point.z = it->z;

    point.L = temp.at<uchar>(0, 0);
    point.a = temp.at<uchar>(0, 1);
    point.b = temp.at<uchar>(0, 2);


    cloud_lab->push_back(point);

}

return cloud_lab;

}

Мой вопрос: правильные ли значения получены?Разве значения LAB не должны быть десятичными и изменяться с отрицательными числами?

Поэтому я попытался выполнить преобразование "вручную" с помощью доступного кода здесь .Когда я визуализировал два облака в CloudCompare, я увидел, что они дают очень похожие представления даже в гистограмме.

Может кто-нибудь объяснить мне, почему?

...