Pcl:Normal的定义结构及输出

news/2024/9/20 6:48:13

1. pcl::Normal在pcl官网中的定义
 /*brief A point structure representing normal coordinates and the surface curvature estimate. (SSE friendly)ingroup common*/

struct Normal : public _Normal
{
    inline Normal (const _Normal &p)
    {
     normal_x = p.normal_x; 
     normal_y = p.normal_y; 
     normal_z = p.normal_z;
     data_n[3] = 0.0f;
     curvature = p.curvature;
    }

    inline Normal ()
    {
     normal_x = normal_y = normal_z = data_n[3] = 0.0f;
     curvature = 0;
    }

    inline Normal (float n_x, float n_y, float n_z)
    {
     normal_x = n_x; normal_y = n_y; normal_z = n_z;
     curvature = 0;
     data_n[3] = 0.0f;
    }

    friend std::ostream& operator << (std::ostream& os, const Normal& p);
    EIGEN_MAKE_ALIGNED_OPERATOR_NEW
};

2. 官网 tutorial中的资料
union{
float data_n[4]
float normal[3];
struct
{
float normal_x;
float normal_y;
float normal_z;
};
};
union{
struct{
float curvature;
};
float data_c[4];
};

看出,pcl::Normals normal的四个值表示(normal_x, normal_y, normal_z, curvature);

3. 表示pcl::Normal的几种方式:
 

pcl::PointCloud<pcl::Normal>::Ptr normals (new pcl::PointCloud<pcl::Normal>); 
std::cout<<normals->points[100]<<std::endl;
std::cout<<"["<<normals->points[100].normal_x<<" "<<normals->points[100].normal_y<<" "<<normals->points[100].normal_z<<" "<<normals->points[100].curvature<<"]"<<endl;
std::cout<<"["<<normals->points[100].normal[0]<<" "<<normals->points[100].normal[1]<<" "<<normals->points[100].normal[2]<<" "<<normals->points[100].curvature<<"]"<<endl;
//此种显示方式不带曲率,只有XYZ
std::cout<<"["<<normals->points[100].data_n[0]<<" "<<normals->points[100].data_n[1]<<" "<<normals->points[100].data_n[2]<<" "<<normals->points[100].curvature<<"]"<<endl;

带曲率的输出方式:

//计算法线
pcl::NormalEstimation<pcl::PointXYZ, pcl::Normal> n;
pcl::PointCloud<pcl::Normal>::Ptr normals(new pcl::PointCloud<pcl::Normal>);
//建立kdtree来进行近邻点集搜索
pcl::search::KdTree<pcl::PointXYZ>::Ptr tree(nepcl::search::KdTree<pcl::PointXYZ>);
n.setInputCloud(cloud);
n.setSearchMethod(tree);
//点云法向计算时,需要所搜的近邻点大小
n.setKSearch(3);
//开始进行法向计算
n.compute(*normals);
cout << "point normal size = " << normals->points.size() << endl;cout << "point normal" << normals->points[i] << endl;
cout << " k point normal " << normals->points[pointIdxNKNSearch[m]]<< endl;

结果如下:(这是法向量用坐标X,Y,Z表示的结果,最后一个应该是曲率???)

 

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈,一经查实,立即删除!

相关文章

ArcGIS Engine开发-TOCControl中实现图层的拖放

TOCControl非常好&#xff0c;不用写一行代码就可以将整个地图的图层信息况显示出来&#xff1b;TOCControl也非常坏&#xff0c;提供的接口非常少&#xff0c;我认为有用的只有三个&#xff1a;HitTest,SetBuddyControl,Update&#xff0c;而且Update方法一执行&#xff0c;整…

高斯金字塔

1、为什么要构建高斯金字塔 高斯金字塔模仿的是图像的不同的尺度&#xff0c;尺度应该怎样理解&#xff1f;对于一副图像&#xff0c;你近距离观察图像&#xff0c;与你在一米之外观察&#xff0c;看到的图像效果是不同的&#xff0c;前者比较清晰&#xff0c;后者比较模糊&am…

PCL:点云中的超体素数据

-----------------------体素数据---------------------体素化网格 体素&#xff08;Voxel&#xff09;是体积元素&#xff08;Volume pixel&#xff09;的简称&#xff0c;是数据位于三维空间内规则网格上的最小单位&#xff0c;体素&#xff0c;其物理意义类似于二维图像像素…

和12岁小同志搞创客开发:如何选择合适的传感器?

目录 1、信号采集 2、信号输出 3、物美价廉 4、如何选型采购 机缘巧合在网上认识一位12岁小同志&#xff0c;从零开始系统辅导其创客开发思维和技巧。 项目专栏&#xff1a;https://blog.csdn.net/m0_38106923/category_11097422.html 人类有五觉&#xff1a;视觉、听觉、…

差分金字塔

1、原理 DOG金字塔的每1组第i层是由高斯金字塔的每1组第i1层减每1组第i层得到的。以此类推&#xff0c;逐组逐层生成每一个差分图像&#xff0c;所有差分图像构成差分金字塔&#xff1b;每一组在层数上&#xff0c;DOG金字塔比高斯金字塔少一层。 DOG金字塔的构建可以用下图描…

毕业设计So Easy:珠穆朗玛FM音频电台APP

目录 1、项目背景 2、系统介绍 2.1、系统概述 2.2、关键技术 2.3、环境配置 3、系统结构设计 3.1、播放器状态结构图 3.2、登录流程结构图 4、系统模块设计 5、系统总体架构 6、接口描述 很多计算机专业大学生经常和我交流&#xff1a;毕业设计没思路、不会做、论文…

机器学习中的数学基础:(1)实际应用中矩阵特征值与特征向量的几何意义

关于特征值、特征向量的讲解有很多的教程&#xff0c;对于这些枯燥的数学基础怎么运用到自己的实际计算机视觉实验中&#xff0c;是一项很重要的任务。算法的底层其实就是数学公式的各种结合与推导&#xff0c;有时间不是我们不能很好的去理解这些算法基础&#xff0c;而是没有…

JAVA电影购票系统

一、功能描述 电影购票系统简介、项目功能演示 日志框架搭建、系统角色分析 首页设计、登录、商家界面、用户界面实现 商家-详情页设计、影片上架、退出 商家-影片下架、影片修改 用户-展示全部影片 用户-购票功能 用户-评分功能 用户-评分降序展示 用户-根据片名查询全部影片信…