什么是深度图像?(距离图像目前看来更好理解一点)
深度图像(Depth Images)也被称为距离影像(Range Image),是指将从图像采集器到场景中各点的距离值作为像素值的图像,它直接反应了景物可见表面的几何形状,利用它可以很方便的解决3D目标描述中的许多问题,深度图像经过点云变换可以计算为点云数据,有规则及有必要信息的点云数据可以反算为深度图像数据。
距离图像的获得原理?
https://blog.csdn.net/zuochao_2013/article/details/69904758 可以看看这个博客写的比较好。
#include <pcl/range_image/range_image.h>
int main (int argc, char** argv) {
pcl::PointCloud<pcl::PointXYZ> pointCloud;
//生成数据
for (float y=-0.5f; y<=0.5f; y+=0.01f) {
for (float z=-0.5f; z<=0.5f; z+=0.01f) {
pcl::PointXYZ point;
point.x = 2.0f - y;
point.y = y;
point.z = z;
pointCloud.points.push_back(point); //每循环一次都将点给点云
}
}
pointCloud.width = (uint32_t) pointCloud.points.size(); //注意数据类型
pointCloud.height = 1;
//以1度为角分辨率,从上面创建的点云创建深度图像。
float angularResolution = (float) ( 1.0f * (M_PI/180.0f));
// 1度转弧度
float maxAngleWidth = (float) (360.0f * (M_PI/180.0f));
// 360.0度转弧度
float maxAngleHeight = (float) (180.0f * (M_PI/180.0f));
// 180.0度转弧度
Eigen::Affine3f sensorPose = (Eigen::Affine3f)Eigen::Translation3f(0.0f, 0.0f, 0.0f);
pcl::RangeImage::CoordinateFrame coordinate_frame = pcl::RangeImage::CAMERA_FRAME;
float noiseLevel=0.00;
float minRange = 0.0f;
int borderSize = 1;
pcl::RangeImage rangeImage;
rangeImage.createFromPointCloud(pointCloud, angularResolution, maxAngleWidth, maxAngleHeight, sensorPose, coordinate_frame, noiseLevel, minRange, borderSize);
std::cout << rangeImage << "\n";
}
很简单的函数使用。
其中minRange>0,代表模拟器所在位置半径minRange内的邻近点都将被忽略。
9.3.2 如何从深度图像中提取边界
rangeimage是来自传感器一个特定角度拍摄的一个三维场景获取的有规则的有焦距等基本信息的深度图。
提取边界重要的一点是:区分深度图像中的当前视点 不可见点的集合 和应该可见 但是处于传感器 获取距离范围外的点集
后者为典型边界 前者不是 。(好像不是非常理解这句话)因此,如果后者的测量值存在,则提供那些超出传感器距离获取范围之外的数据对于边界的提取是非常重要的。
代码有点多 。头疼c++就是东西多。
好久没看点云了,最近不是考试就是一些其他的项目