1. 3D数据格式
3D相机得到的是3D数据保存方向有两种:一种是直接保存3D数据格式,相机可以直接导出三维数据,常见的如:点云通用格式ply,stl,以及其他格式如csv,txt等,这种情况下处理方式多为3D算法。支持这种保存方式的相机多用于3D重建,地图引导等方向。相机采集到3D数据,用户用来处理和最终得到的也是3D数据。
但是,有些时候,这些数据方式并不是我们需要的。在工业视觉检测领域,这些数据有时候并不是很友好。这体现以下这些方面:常见的工业检测如高度,缺陷等,并不需要三维数据,只需要高度数据。同时这些3D数据在传输和处理方面无法之前的图像处理系统兼容。
1.1. 深度图
2D相机的图像简单点儿说是像元感光直接成像的,就大多数相机而言,成像过程可以用小孔成像过程来描述。但是,3D相机则大为不一样。3D相机是先有三维的数据,而后生成的图像。深度图像不是由小孔成像和像元感光而产生的。而是通过某种方式计算生成的。
深度图像的生成公式通常由厂商定义,但是并不是随心所欲。为了保证后续的使用,例如纹理贴图等,深度图像和2D图像通常具有位置一致性,换句话说,深度图像上的像素点和纹理图像中的像素点是一一对应的,这个特点在纹理贴图过程中非常重要。厂商的随心所欲更多地体现在XY图上。如果需要根据XY图来还原出XY方向的数据,则需要提前知道公式或者相机厂商提供的API,而深度图像则像纹理图像一样通过API直接获取。
如上图所示,深度图像上的像素点与纹理图上的像素点一一对应,基本上所有厂商都会进行保证这一点。
由于人的视觉系统对微小的灰度变化不敏感,而对彩色的微小差别极为敏感,一般来说人只能分辨26个灰度级,但是对于彩色图像至少能分辨上千种色彩。所以一般的,我们会把人眼不敏感的灰度信号映射为人眼灵敏的彩色信号,将深度图转换为伪彩色图,以增强人对图像中细微变换的分辨率。
img_rgb = cv2.applyColorMap(img_dep, cv2.COLORMAP_RAINBOW)
1.2. 点云
深度图与点云的转换
2. 数据误差的分析
以ToF为例,数据的误差从来源上分两类:
-
系统误差:来源于相机的成像原理和内部结构
-
深度图畸变(主要来自于镜头的径向畸变)
-
积分时间误差
一般的,相机的积分时间越长,积累的电荷就越多,信噪比也越高。但如果人为设定的积分时间过长,就会导致较大的采样误差。
-
像素误差:即使用ToF距离代表实际距离,而忽略了视野角的问题。通过反三角函数可以矫正。
-
温度相关误差:ToF相机传感器对温度的变化比较敏感。
-
幅值相关误差:即信号信号幅值过小(或过曝)而产生的噪点,可以通过阈值过滤。
-
-
非系统误差
- 多径误差(外部红外信号混入,或玻璃等器物反射)
- 散射误差(例如,黑色物质吸收光线)
- 运动模糊
- 随机误差
3. 深度图滤波
3.1. 空域滤波
通常用于对单个图像的各像素进行处理。
- 高斯滤波
- 中值滤波
- 双边滤波
3.2. 时域滤波
-
滑动平均滤波
-
滑动中值滤波
-
自适应帧间滤波
传统的帧间滤波方法的适用范围比较有限,对静止的物体有较好的去噪效果,但当被测物体或相机处于运动状态时,传统帧间滤波的方法会导致运动模糊。
自适应算法增加了前后两帧图像的均方差与人为设定的阈值之间的差别:若大于阈值,则热内存在运动,若小于阈值,则认为差别是图像噪声引起的。
书中仅提供了公式,并未提供具体代码。但也并不复杂。
4. 点云滤波器
深度图的滤波,针对的是图像中相邻的像素进行处理。而点云滤波器则考虑了空间位置关系,将数据透射到3D空间后进行的滤波操作。
4.1. 体素滤波器
随机下采样的效率较高,但会破坏点云的微观结构。而通过体素,则在下采样的同时,保留点云的形状特征,在提高配准、曲面重建、形状识别等方面非常实用。
4.2. 统计过滤器
使用统计分析技术,用于移除测量噪声(离群点)。即,若某处点云密度小于某个值,则点云无效。
通过计算每一个点到所有临近嗲an的平均距离,得到的结果应该符合高斯分布(正态分布),其形状是由均值和标准差决定的。平均距离在标准范围之外的点,可以定义为离群点并从数据中去除。
4.3. 半径过滤器
半径和球内点的数量都需要人工指定。
4.4. 直通过滤器
即切块过滤器,只用于图像的粗处理,用于去除不在合理的有效范围内的点。
5. 图像压缩
略。
6. 3D重建
以《玩转3D视界——3D机器视觉及其应用》第5.3.3节“木头人重建”的实例,说明3D充电的过程
-
采集深度图,并对深度图进行滤波,降低噪声并增强边缘。
-
前景的提取(排除背景):单独采集背景数据,并利用多帧平均的方式获取背景,相减后提取到前景。
-
点云滤波,去除离散点。
-
点云ICP配准
-
输入:两幅图像的初始位姿 init_pose, 最大迭代数 max_iterations, 最大容忍误差 tolerance。
-
匹配模式:point to point(PTPoint) 或 point to plane(PTPlane)
-
-
模型融合
-
表面生成(Poisson重建算法)