-->
版本:V1.2
本文档中出现的专业术语缩写及其解释如表1所示。
表1 专业术语缩写及其解释
评价深度质量,需要对深度数据从各个方面进行定量计算,然后与标准或者真值进行比较。定量评价深度质量的一些常用指标包括:
深度精度(Depth accuracy):通过计算深度数据的中值偏差来评估绝对误差。
空间精度(Spatial Precision):通过计算深度数据的均方根误差来评价空间噪声。
时域精度(Temporal Precision):评价深度值随着时间变化的一致性。
填充率(Fill Rate):评估图像中有效深度像素的百分比。
定量指标要求对深度质量进行深入的的量化评估。建立一个稳定全面的测试环境对于准确评估深度传感器的性能、局限性以及在特定应用或者场景中的适用性至关重要。为了保证深度质量评估的一致性,建议使用平整度较高、反射率较高(反射率大于78%)的漫反射板,避免使用复杂的、不稳定的测试场景,将高反射率面板放置在距离相机一定距离下,作为测试目标。如果缺乏这样的测试条件,一个平整度较好的墙面或者白板也可以作为测试目标。每个指标可以在相机视场中任何ROI中计算。
图1 用于深度质量评估的参考平面
深度精度是指测量的深度值和物体与相机之间的真实距离的一致程度。高精度意味着深度测量值接近于真值,距离估计误差很小。如前所述,为了简化深度数据的真实值评估,建议在传感器前一个已知距离的位置放置参考平面,并且可以使用激光测距仪或卷尺等常见测量工具准确确定平面与传感器之间的距离。
表2 深度精度(有符号)
Input:Depth_Image, GT;
Output:Depth_accuracy_Signed
1:去除深度图中的零点;
2:深度图转点云;
3:计算点云的拟合平面;
4:去除离群值:所有低于百分之0.5和高于百分之99.5的Z值;
5:计算 CP_Length:光心和拟合平面之间沿着真值方向的实际长度;
6:计算 PP_Dist:所有点到拟合平面的距离;
7:计算深度误差 Depth_Error = CP_Length – GT + PP_Dist;
8:计算中值 Median_Value = 50% percentile value of Depth_Error;
9:计算深度精度 Depth_accuracy_Signed = 100 * Median_Value / GT;
深度精度评估的是与真实深度的系统性偏差,而空间精度则评估深度的一致性。空间精度反映了平面目标上深度的噪声水平。高空间精度的深度表现为,在同一场景中相同或相似表面的深度值显示出低方差。为了评估空间精度,可以在已知位置对参考平面进行测量,计算所得深度值的均方根误差,并将其与期望的精度阈值或标准进行比较。
均方根误差可以用距离或视差的单位表示,但考虑到深度与噪声之间的耦合,这一误差可以通过相机与平面目标之间的距离进行归一化,并以百分比(%)单位表示。
表3 空间精度
Input:Depth_Image
Output: Spatial_precision
1:去除深度图中的零点;
2:深度图转点云;
3:移除离群值:所有低于百分之0.5和高于百分之99.5的Z值;
4:计算CP_Dist:光心到拟合平面的距离;
5:计算PP_Dist:所有点到拟合平面的距离;
6:计算PP_Dist的均方根RMS;
7:计算空间精度 Spatial_precision = 100 * RMSE / CP_Dist;
时域精度评估的是感兴趣区域(ROI)内深度值随时间变化的波动。深度图像的质量可以基于其时间上的一致性来评估,高质量的深度图像应该表现出随时间的稳定性。这种方法定义为在特定帧数(例如30帧)内深度值的标准差(STD)。时域精度的量化是在每个像素的基础上进行的,计算的是在指定时间内每个像素的标准差与参考距离的比值,单位为%。
表4 时域精度
Input:N张深度图,GT;
Output:Temporal Precision;
1:for 每张深度图 do
2: Depth_Tensor = (Depth_Image, N);
3:去除Depth_Tensor中的零点;
4:计算STD_Matrix:Depth_Tensor每个像素的STD;
5:计算Median_STD:STD_Matrix的50%百分位数值;
6:计算Temporal Precision = 100 * Median_STD / GT;
高质量的深度图像应该均匀覆盖整个视野,没有缺失区域。填充率是用来衡量深度图像中非零像素的比例,代表了深度覆盖的范围。高填充率表明大部分场景点被成功识别到。
表5 填充率
Input:Depth_Image;
Output:Fill_Rate;
1:计算总数Total_Num = size(Depth_Image);
2:定义Valid_Image = Depth_Image;
3:去除Valid_Image中的零点;
4:计算Valid_Num = size(Valid_Image);
5:计算Fill_Rate = 100 * Valid_Num / Total_Num;