彩色点云初始匹配出现色彩丢失的问题

我在进行点云SAC初始匹配时,出现了点云色彩丢失的问题。如下图所示:

这里写图片描述

我用了两种方法:一种是直接对PointXYZRGB格式的点云进行SAC配准,得到配准后的图像。另一种是以PointXYZ格式载入点云进行配置,根据得到旋转矩阵对PointXYZRGB格式点云进行旋转,两种方式都会出现上述现象。打开对应的pcd文件,可以看到:

这里写图片描述

彩色缺失的部分全部变为了:nan.

从PCL 1.0.1版本开始,用字符串“nan”表示NaN,此字符表示该点的值不存在或非法等。

我不知道哪里出了问题,有知道的请告诉我。

我的解决办法是重新给点云配色。程序如下:

#include <iostream>  
#include <vector>  
#include <Eigen/Core>  
#include <pcl/point_types.h>  
#include <pcl/point_cloud.h>  
#include <pcl/io/pcd_io.h>   

using namespace std;

typedef pcl::PointXYZ PointT;
typedef pcl::PointCloud<pcl::PointXYZ> pointcloud;
typedef pcl::PointCloud<pcl::PointXYZRGB> pointcloudColor;

int main(int argc, char ** argv)
{
    pointcloud::Ptr src1 (new pointcloud);
    pointcloudColor::Ptr src2 (new pointcloudColor);
    pointcloudColor::Ptr tgt (new pointcloudColor);



    pcl::io::loadPCDFile<pcl::PointXYZ>(argv[1],*src1);
    pcl::io::loadPCDFile<pcl::PointXYZRGB>(argv[2],*src2);
    pointcloud Final1 = *src1;
    pointcloudColor Final2 = *src2;
    cout<<"1:"<<Final1.points.size()<<"/n"<<"2:"<<Final2.points.size();
for(int i=0;i< Final1.points.size();i++)  

    {  

        pcl::PointXYZRGB basic_point;  
        //pcl::PointXYZ basic_point;  
        basic_point.x = Final1.points[i].x;  
        basic_point.y = Final1.points[i].y;  
        basic_point.z = Final1.points[i].z;  
        basic_point.rgb = Final2.points[i].rgb;  
        tgt->points.push_back(basic_point);  
    }

tgt->width = 1;
tgt->height = tgt->points.size();
    pcl::io::savePCDFile ("color.pcd", *tgt);
}

思路如下:
设源点云为彩色点云src2,sac配准旋转后对应点云为src1.根据src2中对应位置的色彩,对src1重新上色。

效果如下:

这里写图片描述

ps:由于历史原因(PCL源于ROS包),RGB信息被打包成一个整数并被转换为浮点数。更具体的可以参考:http://docs.pointclouds.org/1.7.0/structpcl_1_1_point_x_y_z_r_g_b.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值