应用笔记03-Vzense 3D 相机的RGB图像应用及调节方式

编辑:Sophia.feng 时间: 2024-10-11

ToF,即Time-of-flight,已成为当今市场上最受欢迎的深度传感技术之一。在自主移动机器人(AMR)和自主引导车辆(AGV)领域,ToF相机的应用尤为广泛。通过向目标发射激光并接收反射光的时间,ToF相机可精确计算目标与相机间的距离,同时实现障碍物检测,进而实现自主导航。ToF相机仅提供场景的深度数据,不具备捕捉色彩信息的能力,这在某些需要识别物体的应用中成为了一个缺陷。这时就需要一个RGB和ToF相机集成的产品,RGB相机可以提供彩色图像,并且和ToF相机提供的深度图像一起,可以在物体识别和视觉分析等方向发挥重要作用。

RGB应用场景举例

是否需要在一帧中同时包含深度和RGB数据,取决于最终的应用需求。

场景一:某场景识别特定物体

以智能叉车为例,如果目的只是检测障碍物而不识别物体,那么普通的ToF相机就能满足要求,但如果需要智能叉车识别货物或者托盘,通过RGB的彩色图像配合AI技术无疑具备更精准的识别效果,故需要用RGB先做识别托盘,再通过坐标系转换在ToF深度图上定位托盘的位置。其他视觉应用的情况也是如此,假设需要识别物体,以下是其他一些需要在单帧中结合深度和RGB数据的视觉应用:
1、AMR(自主移动机器人)例如清洁机器人、货到人机器人、服务机器人、陪伴机器人等;
2、AGV(自主导引车);
3、机械臂;
4、客流统计系统。

场景二:复杂场景中物体识别或分类

对于某些场景,用RGB彩色图像做物体识别或分类时,往往遇到图像过于复杂,导致需要耗费大量的算力才能把目标物体从背景分离出来。在目标物体位置和距离大致确定的前提下,可以用ToF输出的深度图像,先从距离上分割出前景和后景,再将包含目标物体的RGB画面分割出来,最后用分割出来的RGB图像进行机器训练和识别,这样可以大大降低训练和识别所需要的算力。
案例介绍:
下图为原始的RGB图像,中间的白色靶牌为目标物体,但此时目标物体和背景的色彩高度近似,不管是标注还是识别都需要耗费更多的人力和算力。

通过下图的深度图来看,被目标物体距离相机较近,是可以被ToF相机拍摄到的,但背景距离ToF相机较远,无法拍摄到。

下图为分割后的RGB图像,即将深度图上的距离过远的背景区域在RGB图像上分割开,只保留近距离的目标物体,再用分割后的RGB图像来做语义识别,可大大降低处理器的算力消耗。

Vzense ToF产品RGB相机模块的参数设定

RGB 图像分辨率

NYX650/660, DS86/87的RGB分辨率可设置成640×480,800×600,或1600×1200三个选项,分辨率越高则相机的画质越清晰。设置如下图所示:

参考例程
BaseSDK/Windows/Samples/Base/NYX650/ColorResolutionChange。
RGB 分辨率调整的软件 API 如下:

//设置RGB传感器分辨率
ScStatus scSetColorResolution(ScDeviceHandle device, int32_t w, int32_t h);

//获取当前RGB传感器分辨率设置
ScStatus scGetColorResolution(ScDeviceHandle device, int32_t* pW, int32_t* pH);

//获取RGB传感器支持的分辨率列表
ScStatus scGetSupportedResolutionList(ScDeviceHandle device, ScSensorType type, ScResolutionList* pList);
/**
 * @brief    传感器类型
 */
typedef enum
{
    SC_TOF_SENSOR   = 0x01,   //ToF相机
    SC_COLOR_SENSOR = 0x02,   //RGB相机
} ScSensorType;

曝光模式

RGB相机的曝光时间是一个比较重要的参数,不同的曝光时间可以影响RGB图像的亮度,曝光时间越长,图像亮度越高。所有产品的RGB相机可配置成自动曝光(AUTO),或手动曝光(MANUAL)两种曝光方式。
参考例程
BaseSDK/Windows/Samples/Base/NYX650/ColorExposureTimeSetGet。
曝光模式(AUTO或MANUAL)可以通过以下 API 设置或获取:

//设置RGB传感器的曝光模式(自动或手动)
ScStatus scSetExposureControlMode(ScDeviceHandle device, ScSensorType sensorType, ScExposureControlMode controlMode);

//获取当前RGB传感器曝光模式设置
ScStatus scGetExposureControlMode(ScDeviceHandle device, ScSensorType sensorType, ScExposureControlMode* pControlMode);
/**
 * @brief    传感器类型
 */
typedef enum
{
    SC_TOF_SENSOR   = 0x01,   //ToF相机
    SC_COLOR_SENSOR = 0x02,   //Color相机.
} ScSensorType;
/**
 * @brief    曝光模式类型
 */
typedef enum
{
    SC_EXPOSURE_CONTROL_MODE_AUTO   = 0,   //自动曝光模式
    SC_EXPOSURE_CONTROL_MODE_MANUAL = 1,   //手动曝光模式
} ScExposureControlMode;

在每种模式下,最大曝光时间与帧速率相关,这意味着帧速率越高,最大曝光时间越短。
用户可以通过以下软件 API 获得支持的最大曝光时间:

//获取当前帧率下,RGB传感器最大曝光时间
ScStatus scGetMaxExposureTime(ScDeviceHandle device, ScSensorType sensorType, int32_t* pMaxExposureTime);

自动曝光模式

在自动曝光方式(Auto Exposure Control)下,相机会实时检测环境光亮度,然后调节自己的曝光时间,从而自动适应环境光的变化。请注意,AEC是一个反馈系统,当光线剧烈变化时,往往需要通过连续几帧才可以调整到合适的曝光时间。

Vzense的ToF产品可以设置RGB相机在自动曝光模式下的最大曝光时间,它并不代表实际的曝光值,而是可自动曝光的上限,实际曝光时间仍然由RGB相机的自动曝光算法来控制。设置如下图所示:

RGB 相机的最大 AEC 曝光时间可以通过以下 软件 API 设置或获取:

//设置RGB传感器自动曝光模式的最大曝光时间
ScStatus scSetColorAECMaxExposureTime(ScDeviceHandle device, int32_t exposureTime);

//获取当前RGB传感器自动曝光模式下的最大曝光时间设置
ScStatus scGetColorAECMaxExposureTime(ScDeviceHandle device, int32_t* pExposureTime);

手动曝光模式

在手动曝光方式下,相机会被设定为固定的曝光时间,不随场景变化而变化。所设置的曝光时间即为RGB相机的实际曝光时间。设置不同曝光时间的效果如下所示:

在手动模式下,可以通过设置gain来调节图像亮度,如下图所示:

RGB图像实时曝光时间可以通过以下 API 设置和获取:

//设置RGB传感器手动曝光模式的最大曝光时间
ScStatus scSetExposureTime(ScDeviceHandle device, ScSensorType sensorType, int32_t exposureTime);

//获取当前RGB传感器手动曝光模式下的最大曝光时间设置
ScStatus scGetExposureTime(ScDeviceHandle device, ScSensorType sensorType, int32_t* pExposureTime);
/**
 * @brief    Specifies the type of sensor.
 */
typedef enum
{
    SC_TOF_SENSOR   = 0x01,   //ToF camera.
    SC_COLOR_SENSOR = 0x02,   //Color camera.
} ScSensorType;

RGB图像实时Gain可以通过以下 API 设置和获取:

//设置RGB图像的增益
ScStatus scSetColorGain(ScDeviceHandle device, float params);

//获取RGB图像当前增益的设置
ScStatus scGetColorGain(ScDeviceHandle device, float* pParams);

相关文章

How can we support you?

We will be happy to advise you on product selection and find the right solution for your application.

联系我们