a)Config相关配置
在Config中配置光流传感器时,以下参数尤为关键:
- **"DataWidth"** 和 **"DataHeight"**:这些参数指定了光流传感器的图像分辨率,决定了传感器捕捉画面的宽度和高度。
- **"CameraFOV"**:光流计算中视场角(FOV)用于确定像素偏移量的转换比例。
- **"SensorAngEular[1]"**:设置传感器角度(如
-90°
),用于确定传感器朝向,如向下对准地面。
- **"otherParams[0]"**:定义最大检测距离,即光流传感器的作用距离。
- **"otherParams[1]"**:置为0以真值计算光流,置为1以OpenCV处理图像来计算光流
b) 结构体 OpticalFlow
光流数据结构体包含以下字段:
- sensor_id**:传感器ID,区分不同的光流传感器。
- **flow_x 和 flow_y**:表示光流在 x 和 y 方向上的像素偏移量(单位是像素,
dipix
)。
- **flow_comp_m_x 和 flow_comp_m_y**:光流在 m/s(米/秒)为单位的实际速度,用于描述相对运动速度。
- **quality**:光流质量,反映检测结果的可信度。
- **ground_distance**:表示光流传感器到地面的距离,有助于计算精确的光流速度。
- **flow_rate_x 和 **flow_rate_y**:角速度,表示图像中的旋转运动速度。
c) 参考例程
参考路径 4.RflySimModel\3.CustExps\e7_ExternalSensors\e3_Opticalflow_UE
中的例程,其中包含4种方式计算光流:
- **Python 真值计算**:通过Python代码基于地面真值计算光流。
- **UE 真值计算**:使用UE真实值计算光流。
- **UE OpenCV 计算**:在UE中调用OpenCV库计算光流。
- **外部 OpenCV 计算**:在外部环境中(如Python或C++)调用OpenCV库计算光流。
d) 计算光流的方式
光流计算主要有以下两种方法:
直接计算
:
- 利用传感器配置中的分辨率(Width和Height)以及FOV,计算光流在像素上的偏移量。这种方法适用于计算简单、实时性要求高的场景。
OpenCV函数计算
:
- 使用OpenCV库的
goodFeaturesToTrack
和 calcOpticalFlowPyrLK
函数计算光流。
- **角点检测**:
goodFeaturesToTrack
函数检测图像中的角点数量,角点越多,光流的质量越高。
- **稀疏光流计算**:
calcOpticalFlowPyrLK
函数基于检测的角点计算光流,并获得每个点的偏移量和追踪状态。
- 通过识别的角点数量与最大角点数量的比值,估算光流质量,平均值可用于描述光流的方向和速度。
e) 数据准确性验证
为了验证光流数据的准确性,可以考虑以下方法:
- **与地面真值对比**:将计算得到的光流数据与地面真值(或其他可靠传感器数据)进行对比。
- **质量指标检查**:使用结构体中的
quality
字段检查光流质量,当质量较低时可能需要过滤或重新计算。
- **多次采样求平均**:通过对多帧光流数据求平均,减少噪声影响,提升准确性。