三维点云转换为二维图像

文章目录

    • 前言
    • 原理
    • 代码
    • 总结与反思
    • 实验结果展示

前言

目的:将三维点云转换为二维图像
作用:
a.给点云赋予彩色信息,增强点云所表达物体或对象的辨识度;
b.将三维点云中绘制的目标物体通过映射关系绘制到二维图像中,这个工作在点云标注邻域被广泛使用;
c.可以根据点云中绘制的结果提取二维图像中对应的物体

原理

  1. 确定要投影的平面,将点云投影至该平面,得到二维点坐标;
  2. 求得二维点云所在平面的极值,即x_max,x_min,y_max,y_min;
  3. 根据x_max,x_min,y_max,y_min确定点云范围;
  4. 根据点云范围即想得到图像分辨率的大小求得单个像素代表的实际长度L;
  5. 遍历点云,将点的坐标与极小值点的坐标做差之后除以L,即为该点在图像中的像素坐标
  6. RGB信息填充到对应的像素内;

代码

void pointcloud_to_image(pcl::PointCloud<pcl::PointXYZRGB>::Ptr cloud_in, float x_max, float x_min, float y_max, float y_min)
{pcl::PointCloud<pcl::PointXYZRGB>::Ptr cloud(new pcl::PointCloud<pcl::PointXYZRGB>);cloud->points.resize(cloud_in->size());for (size_t i = 0; i < cloud->points.size(); i++)   //将三维点云投影到二维,这里为投影到XOY平面{cloud->points[i].x = cloud_in->points[i].x;cloud->points[i].y = cloud_in->points[i].y;cloud->points[i].z = 0;cloud->points[i].r = cloud_in->points[i].r;cloud->points[i].g = cloud_in->points[i].g;cloud->points[i].b = cloud_in->points[i].b;}Mat image(480, 640, CV_8UC3);for (int j = 0; j < image.rows; j++){for (int i = 0; i < image.cols; i++){image.at<Vec3b>(j, i)[0] = 0;image.at<Vec3b>(j, i)[1] = 0;image.at<Vec3b>(j, i)[2] = 0;}}float l; //单个像素代表的实际长度float a = (x_max - x_min) / 640;   //分辨率,根据实际需要设置,这里采用648*480float b = (y_max - y_min) / 480;if (a > b){l = a;}else{l = b;}for (int i = 0; i < cloud->size(); i++){//计算点对应的像素坐标int x = (cloud->points[i].x - x_min) / l;int y = (cloud->points[i].y - y_min) / l;//将颜色信息赋予像素if (x > 0 && x < 640 && y>0 && y < 480){image.at<Vec3b>(y, x)[0] = cloud->points[i].r;image.at<Vec3b>(y, x)[1] = cloud->points[i].g;image.at<Vec3b>(y, x)[2] = cloud->points[i].b;}}imshow("image", image);waitKey(0);
}

总结与反思

在实际应用中,为使二维图像保留更多的点云信息,除了将颜色信息填充到对应的像素内,也可考虑将点云高度信息、法向量信息填充到图像像素内

实验结果展示

原始带部分噪声的点云数据
在这里插入图片描述
去除噪声,使用法向量信息将点云映射为法向量图像
代码参照上面改改,具体省略
在这里插入图片描述

欢迎交流,如有错误,请指正~

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/95442.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C++:初识类与this指针

文章目录 前言一、类类的定义和实例化类的访问限定符类的作用域计算类的大小 二、类的成员函数的this指针总结 个人主页 &#xff1a; 个人主页 个人专栏 &#xff1a; 《数据结构》 《C语言》《C》 前言 一、类 类的定义和实例化 注意类定义结束时后面分号( ; )不能省略。 类…

【前端demo】倒计时器 可选择时间 原生实现

文章目录 效果过程日历与获取时间居中背景与字计时器清空计时器 代码HTMLCSSJS 其他demo 效果 效果预览&#xff1a;倒计时器 可选择时间 (codepen.io) 参考&#xff1a; Simple Clock/Countdown timer (codepen.io) 前端页面实现倒计时效果的几种方法_前端倒计时__Boboy的…

2023年“羊城杯”网络安全大赛 Web方向题解wp 全

团队名称&#xff1a;ZhangSan 序号&#xff1a;11 不得不说今年本科组打的是真激烈&#xff0c;初出茅庐的小后生没见过这场面QAQ~ D0n’t pl4y g4m3!!! 简单记录一下&#xff0c;实际做题踩坑很多&#xff0c;尝试很多。 先扫了个目录&#xff0c;扫出start.sh 内容如下…

微信小程序手机号快速验证组件调用方式

目录 一、测试环境 二、问题现象 三、总结 手机号验证组件&#xff08;包括快速验证组件和实时验证组件&#xff09;调用后无法对事件进行回调这个问题&#xff0c;先说结论&#xff0c;以下是正确的使用方式&#xff1a; <!-- 手机号快速验证组件 --> <button op…

【LeetCode-中等题】199. 二叉树的右视图

文章目录 题目方法一&#xff1a;层序遍历取每一层最后一个元素方法二&#xff1a;深度优先搜索 题目 方法一&#xff1a;层序遍历取每一层最后一个元素 // 方法一 &#xff1a;层序 集合(取每层子集合最后一个元素)// List<List<Integer>> Rlist new ArrayList…

2023数学建模国赛四天速成计划来啦!(内含大量资料)

大家好呀。高教社杯全国大学生数学建模竞赛&#xff08;下称国赛&#xff09;9.7日下午6点就正式开始了&#xff1a; 在这里给大家带来一个五天的速成计划啦&#xff01;大家可以收藏本文章或者转发到你们队友群哈&#xff0c;此外我还会发放很多资料给大家&#xff0c;注意&am…

【Day-27慢就是快】代码随想录-二叉树-二叉树的最小深度

给定一个二叉树&#xff0c;找出其最小深度。 最小深度是从根节点到最近叶子节点的最短路径上的节点数量。 说明: 叶子节点是指没有子节点的节点。 —————————————————————————————————— 1. 递归法 确定单层递归的逻辑&#xff1a; 与最…

Docker进阶:mysql 主从复制、redis集群3主3从【扩缩容案例】

Docker进阶&#xff1a;mysql 主从复制、redis集群3主3从【扩缩容案例】 一、Docker常规软件安装1.1 docker 安装 tomcat&#xff08;默认最新版&#xff09;1.2 docker 指定安装 tomcat8.01.3 docker 安装 mysql 5.7&#xff08;数据卷配置&#xff09;1.4 演示--删除mysql容器…

阿里云对象存储oss-文件上传过程详解(两种方式)

阿里云对象存储oss-文件上传过程详解{两种方式} 方式一(最新代码,时间:2023/8/27)(1)如何配置系统变量(2)完整代码 方式二(跟黑马最新教程同代码)(1)在复制下来的代码中(2)完整代码 方式一(最新代码,时间:2023/8/27) 问题:需要配置系统变量才能够使用 (1)如何配置系统变量 以wi…

Java设计模式:四、行为型模式-10:访问者模式

一、定义&#xff1a;访问者模式 访问者模式&#xff1a;核心在于同一个事物不同视角下的访问信息不同。 在一个稳定的数据结构下&#xff0c;例如用户信息、雇员信息等&#xff0c;增加易变的业务访问逻辑。为了增强扩展性&#xff0c;将两部分的业务解耦的一种设计模式。 二…

Code Snippet的使用

文章目录 前言Code Snippet:就是咱们在VS中敲的prop、propfull、ctol【构造器快捷键】、for等快捷键&#xff0c;然后按tab键自动生成代码1.VS自带的&#xff1a;prop、propfull、ctol【构造器快捷键】、for等快捷键&#xff0c;直接使用2.自定义Snippet&#xff1a; 巨人的肩膀…

【Apollo学习笔记】——规划模块TASK之SPEED_DECIDER

文章目录 前言SPEED_DECIDER功能简介SPEED_DECIDER相关配置SPEED_DECIDER流程MakeObjectDecisionGetSTLocationCheck类函数CheckKeepClearCrossableCheckStopForPedestrianCheckIsFollowCheckKeepClearBlocked Create类函数 前言 在Apollo星火计划学习笔记——Apollo路径规划算…