用一个参数化的模型来投影点

这次我们将学着怎么通过一个参数化的模型进行投影。这个参数化的模型是通过一系列的系数---在这里是平面,相当于ax+by+cz+d=0

下面是代码

#include <iostream>
#include <pcl/io/pcd_io.h>
#include <pcl/point_types.h>
#include <pcl/ModelCoefficients.h>
#include <pcl/filters/project_inliers.h>
int
main (int argc, char** argv)
{
pcl::PointCloud<pcl::PointXYZ>::Ptr cloud (new pcl::PointCloud<pcl::PointXYZ>);
pcl::PointCloud<pcl::PointXYZ>::Ptr cloud_projected (new pcl::PointCloud<pcl::PointXYZ>);
// Fill in the cloud data
cloud->width  = 5;
cloud->height = 1;
cloud->points.resize (cloud->width * cloud->height);
for (size_t i = 0; i < cloud->points.size (); ++i)
{
cloud->points[i].x = 1024 * rand () / (RAND_MAX + 1.0f);
cloud->points[i].y = 1024 * rand () / (RAND_MAX + 1.0f);
cloud->points[i].z = 1024 * rand () / (RAND_MAX + 1.0f);
}
std::cerr << "Cloud before projection: " << std::endl;
for (size_t i = 0; i < cloud->points.size (); ++i)
std::cerr << "    " << cloud->points[i].x << " " 
<< cloud->points[i].y << " " 
<< cloud->points[i].z << std::endl;
// Create a set of planar coefficients with X=Y=0,Z=1
pcl::ModelCoefficients::Ptr coefficients (new pcl::ModelCoefficients ());
coefficients->values.resize (4);
coefficients->values[0] = coefficients->values[1] = 0;
coefficients->values[2] = 1.0;
coefficients->values[3] = 0;
// Create the filtering object
pcl::ProjectInliers<pcl::PointXYZ> proj;
proj.setModelType (pcl::SACMODEL_PLANE);
proj.setInputCloud (cloud);
proj.setModelCoefficients (coefficients);
proj.filter (*cloud_projected);
std::cerr << "Cloud after projection: " << std::endl;
for (size_t i = 0; i < cloud_projected->points.size (); ++i)
std::cerr << "    " << cloud_projected->points[i].x << " " 
<< cloud_projected->points[i].y << " " 
<< cloud_projected->points[i].z << std::endl;
return (0);
}

以下是一些解释

产生随机点云

  cloud->width  = 5;
cloud->height = 1;
cloud->points.resize (cloud->width * cloud->height);
for (size_t i = 0; i < cloud->points.size (); ++i)
{
cloud->points[i].x = 1024 * rand () / (RAND_MAX + 1.0f);
cloud->points[i].y = 1024 * rand () / (RAND_MAX + 1.0f);
cloud->points[i].z = 1024 * rand () / (RAND_MAX + 1.0f);
}
std::cerr << "Cloud before projection: " << std::endl;
for (size_t i = 0; i < cloud->points.size (); ++i)
std::cerr << "    " << cloud->points[i].x << " " 
<< cloud->points[i].y << " " 
<< cloud->points[i].z << std::endl;

接下去,我们设置了一些参数,然后实现了一个平面

  pcl::ModelCoefficients::Ptr coefficients (new pcl::ModelCoefficients ());
coefficients->values.resize (4);
coefficients->values[0] = coefficients->values[1] = 0;
coefficients->values[2] = 1.0;
coefficients->values[3] = 0;

接下去,我们创建了ProjectInliers这个对象,并使用ModelCoefficients定义了上面的模型

  pcl::ProjectInliers<pcl::PointXYZ> proj;
proj.setModelType (pcl::SACMODEL_PLANE);
proj.setInputCloud (cloud);
proj.setModelCoefficients (coefficients);
proj.filter (*cloud_projected);

最终,我们将展示投影点云的内容

  std::cerr << "Cloud after projection: " << std::endl;
for (size_t i = 0; i < cloud_projected->points.size (); ++i)
std::cerr << "    " << cloud_projected->points[i].x << " " 
<< cloud_projected->points[i].y << " " 
<< cloud_projected->points[i].z << std::endl;

我们运行程序将得到以下的结果

 

Cloud before projection:
0.352222 -0.151883 -0.106395
-0.397406 -0.473106 0.292602
-0.731898 0.667105 0.441304
-0.734766 0.854581 -0.0361733
-0.4607 -0.277468 -0.916762
Cloud after projection:
0.352222 -0.151883 0
-0.397406 -0.473106 0
-0.731898 0.667105 0
-0.734766 0.854581 0
-0.4607 -0.277468 0

下面是图片

 

 

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

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

相关文章

云 文件 服务器 只存,云 文件 服务器只存

云 文件 服务器只存 内容精选换一换用户通过管理控制台创建或者导入密钥对后&#xff0c;在购买弹性云服务器时&#xff0c;登录方式选择密钥对&#xff0c;并选择创建或者导入的密钥对。用户购买弹性云服务器成功后&#xff0c;可使用密钥对的私钥登录弹性云服务器。使用的登录…

pcl从一个点云里面导出下标

我们这次将学着使用ExtractIndices滤波器来从一个分割算法中导出点的下标。为了不把这个项目复杂化&#xff0c;我们不会在这里解释分割算法。 我们先建一个extract_indices.cpp 代码 #include <iostream>#include <pcl/ModelCoefficients.h>#include <pcl/i…

sr650服务器cpu型号,至强Gold 联想ThinkSystem SR650评测

今年7月&#xff0c;英特尔发布了至强可扩展处理器。面对新的处理器架构、新的AVX512指令集&#xff0c;需要新的服务器来匹配&#xff0c;需要更新机器&#xff0c;并提供新的软件、管理等套件。联想ThinkSystem SR650与至强可扩展处理器响应而出并被誉为“性能最高的服务器”…

使用一个环境的或者半径异样消除器来进行异样消除

这个文档显示了在滤波模型里面如何使用几个不同的方法来消除点云里面的异常。 第一步我们将使用一个环境消除滤波器来消除不满足环境条件的点云。然后我们将学会如何使用一个RadiusOutlierRemoval滤波器来消除在指定范围内没有达到指定数量邻居的点。 代码 #include <iost…

trailmakers未能连接服务器,Trailmakers联机版

《Trailmakers联机版》是一款可以联机进行的精美3D沙盒世界以创造为核心玩法的动作手游&#xff0c;这款游戏上手起来挺简单轻松的&#xff0c;诸多趣味内容&#xff0c;将让各位玩家们收获到极致的快感&#xff0c;非常的赞&#xff0c;不想错过任何欢乐与趣味的话&#xff0c…

lga775服务器cpu系列,【LGA775处理器 多的不仅是针脚】- 中关村在线

继发布新一代平台后&#xff0c;Intel推出了LGA775封装的P4处理器。这场被业界称为跨越性的技术革命&#xff0c;究竟能为用户带来什么样的变化和感受&#xff1f;它与Socket 478的处理器有何区别呢&#xff1f;● 何为LGA775LGA(Land Grid Array&#xff0c;栅格阵列封装)即So…

pcl点云PCD文件

csdn离线状态下不能保存&#xff0c;白写了。 然后我把官网链接发给你们&#xff0c;自己看吧&#xff0c;累觉不爱..... 点击打开链接

点云文件的操作

读取点云文件 #include <iostream> #include <pcl/io/pcd_io.h> #include <pcl/point_types.h>int main (int argc, char** argv) {pcl::PointCloud<pcl::PointXYZ>::Ptr cloud (new pcl::PointCloud<pcl::PointXYZ>);if (pcl::io::loadPCDFile…

通过八叉树进行空间分割和搜索

一个octree是一个以树基础为的管理稀疏3-D数据的数据结构。每个中间的节点有8个子节点。在这次&#xff0c;我们将学习怎么使用octree进行稀疏分割和近邻搜索。尤其&#xff0c;我们将解释如何操作"体元近邻搜索"&#xff0c;和"最近邻搜索"和"半径近…

从一个点云里面创建一个深度图

这次&#xff0c;我们将显示如何从一个点云和一个给定的传感器来创造深度图。下面的代码&#xff0c;创建了一个在观察者前面的矩形。 #include <pcl/range_image/range_image.h>int main (int argc, char** argv) {pcl::PointCloud<pcl::PointXYZ> pointCloud;//…

从深度图里面导出边界

这次我们将学着怎么从一个深度图里面导出边界。我们对3种不同种类的点很感兴趣:物体的边框的点&#xff0c;阴影边框点&#xff0c;和面纱点(在障碍物边界和阴影边界)&#xff0c;这是一个很典型的现象在通过雷达获取的3D深度。 下面是代码 /* \author Bastian Steder */#incl…

以相关组为基础的3D物体识别

这次我们要解释如何以pcl_recognition模块来进行3D物体识别。特别地&#xff0c;它解释了怎么使用相关组算法为了聚类那些从3D描述器算法里面把当前的场景与模型进行匹配的相关点对点的匹配。(长难句)。对于每一次聚类&#xff0c;描绘了一个在场景中的可能模型实例&#xff0c…

隐式形状模型

在这次我们将学会隐式形状模型算法通过pcl::ism::ImplicitShapeModel这个类来实现。这个算法是把Hough转换和特征近似包进行结合。有训练集&#xff0c;这个算法将计算一个确定的模型用来预测一个物体的中心。 这个算法由两部分组成&#xff0c;第一部分是训练&#xff0c;第二…

3D物体识别的假设检验

3D物体识别的假设验证 这次目的在于解释如何做3D物体识别通过验证模型假设在聚类里面。在描述器匹配后&#xff0c;这次我们将运行某个相关组算法在PCL里面为了聚类点对点相关性的集合&#xff0c;决定假设物体在场景里面的实例。在这个假定里面&#xff0c;全局假设验证算法将…

怎么样递增的注册成对的点云

这次我们将使用Iterative Closest Point algorithm来递增的注册一系列的点云。 这个主意来自于把所有的点云转换成第一个点云的框架&#xff0c;通过找到每个连续点云间最好的装换&#xff0c;并且计算整个点云的转换。 你的数据集应该由重新排列的&#xff0c;在一个相同的框…

qt入门

&#xfeff;&#xfeff;qt入门 1.首先我们先创建一个qt的空项目 1.这会生成两个文件 xx.pro xx.pro.user xx.pro文件是qt的工程文件&#xff0c;有点类似于vc的prj文件&#xff0c;或者sln文件。xx.pro.user是这个当前环境下的工程文件。(移植的时候这个文件没啥用) 以…

新手博客,开博立言_Youcans2021

这是我的第一篇博客。 今后我会将我的学习心得和总结在这里发布&#xff0c;与大家共享&#xff0c;共勉。

qt输入框

&#xfeff;&#xfeff;qt里面的输入框是QLineEdit这个类来实现的。 下面是代码 /* 应用程序抽象类 */ #include <QApplication>/*窗口类*/ #include <QWidget> #include <QCompleter> #include <QLineEdit>int main(int argc, char* argv[]) {QAp…

Python数模笔记-PuLP库(2)线性规划进阶

1、基于字典的创建规划问题 上篇中介绍了使用 LpVariable 对逐一定义每个决策变量&#xff0c;设定名称、类型和上下界&#xff0c;类似地对约束条件也需要逐一设置模型参数。在大规模的规划问题中&#xff0c;这样逐个定义变量和设置模型参数非常繁琐&#xff0c;效率很低。P…

qt坐标系统与布局的简单入门

&#xfeff;&#xfeff;qt坐标系统 qt坐标系统比较简单 button.setGeometry(20,20,100,100); 上面的代码把按钮显示为父窗口的20,20处宽度为100&#xff0c;高度为100 接下去是布局 qt里面布局需要加入<QLayout.h>这个头文件。 qt里面垂直布局 qt里面的垂直布局…