私は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 値は 10 進数で、負の数で変化するべきではありませんか?
そこで、ここで利用可能なコードを使用して「手動で」変換を試みました。CloudCompare で 2 つの雲を視覚化すると、ヒストグラムでも非常によく似たビューが生成されることがわかりました。
誰かが私に理由を説明できますか?