降采样理论
介绍
本文解释了如何对 Zivid 点云进行降采样的理论。如果您对 SDK 实现的方法感兴趣,请转到 降采样 文章。
为什么不保留每第 N 个像素?
当对图像进行降采样时,目标是减小图像的尺寸,同时尽可能地保持质量。
降采样的常用方法是保留每第二、第三、第四等像素并丢弃其余像素。但是,由于传感器上的滤色器,这不一定是理想的。以 拜耳滤镜马赛克 为例。4x4 图像的拜耳滤镜马赛克网格如下所示。
备注
Zivid 点云坐标系从 (0,0) 开始。
利用此滤镜,相机上的每个像素都与马赛克上的一个颜色滤镜相对应。
考虑一个保留每隔一个像素的降采样算法。所有保留的像素将对应相同的颜色过滤器:
(1,1) (1,3) (3,1) (3,3) → 蓝色
(2,1) (2,3) (4,1) (4,3) → 绿色
(1,2) (1,4) (3,2) (3,4) → 绿色
(2,2) (2,4) (4,2) (4,4) → 红色
推荐的降采样过程
为了保证数据质量,您应该考虑所有像素并在均匀像素网格(2x2、4x4、6x6 等)上执行降采样。以下是将图像尺寸缩小一半的推荐方法,例如从 4x4 缩小到 2x2。
降采样RGB值(彩色图像)
通过对初始图像中每个 2x2 像素网格的每个通道 R、G 和 B 取平均值来计算新图像的每个像素值。例如,要计算新的 R 值:
对 G 和 B 值重复相同的过程。
降采样XYZ值(点云)
对于点云数据,我们还需要处理 NaN 值。与 R、G、B 颜色值一样,新图像的 X、Y、Z 像素值应通过取初始图像的每个 2x2 像素网格来计算。不要使用正常平均值,而是对每个坐标使用 SNR 加权平均值。要了解 Zivid 如何使用 SNR,请查看我们的 SNR页面 。
在某些情况下,任何像素的 X、Y、Z 坐标都可能为NaN值,但该像素的 SNR 不会是NaN。我们可以通过做一个基本的检查来查看任何像素的坐标之一是否有NaN值,从而解决这个问题。查看是否有任何一个像素的 X、Y、Z 坐标中的任何一个值为NaN值。如果是,则将该像素的 SNR 值替换为0。这可以通过筛选像素来完成,例如将 Z 坐标为NaN的像素筛选出来,并将它们的 SNR 值设置为0:
\(isNAN()\) 是一个逻辑屏蔽函数,它将仅筛选出输入坐标为NaN的像素。
下一步是计算每个2x2像素网格的 SNR 值的总和:
然后计算初始图像的每个像素的权重:
为了避免不得不处 理 \(NaN \cdot 0 = NaN\) 代替 \(NaN \cdot 0 = 0\),建议执行以下操作:
最后可以计算出 X、Y、Z 坐标值。以下是计算新 X 的示例:
对 Y 和 Z 的值也执行同样的操作。