海思DIS防抖笔记

DIS(Digital Image Stabilization)数字图像防抖;

        DIS是对图像进行数字处理的过程,采用防抖算法计算出当前图像的运动偏移,然后根据计算得到运动偏移对当前图像进行平移,旋转等变换;从而起到防抖效果;

在对图像进行图像变换操作时,会改变图像像素的位置,使得图像的边缘可能会超出原有图像的宽高,会被平移出整个画面的位置,所以在DIS防抖时要对图像进行裁剪和放大;

        DIS防抖是要在完成变换操作后对图像按照一定的裁剪比例裁剪掉图像的边缘,然后在按原有宽高放大裁剪之后的图像;

DSI计算运动偏移的三种算法:

  •  软件算法

        是通过提取图像特征点,计算出当前图像的特征点和参考帧图像的特征点间的运动偏移;

        优点:图像较稳定,有较好的防抖效果;

        缺点:(a)画面中有大面积拍摄物体在移动时,会出现背景拖拽现象;因为无法区分画面物体移动还是摄像机移动,可能造成误判;

                 (b)在低照明情况下,图像的特征点太少,软件算法无法起到防抖效果;

  • 硬件算法(陀螺仪算法)

        根据陀螺仪产生的数据计算当前帧图像的运动偏移

        优点:采用硬件算法能够较好的解决误判和低照明情况无防抖效果等现象;

        缺点:硬件本身有局限性,使用硬件算法防抖效果效果较弱;

  • 混合算法

        同时采用软件和硬件(陀螺仪)算法计算运动偏移;

总结:软件就是没有陀螺仪数据加持,仅仅使用海思接口;  硬件算法就是纯陀螺仪数据,不使用海思接口算法; 混合就是海思接口+陀螺仪数据回调加持;

软件流程:

具体看sample下的dis/sample_dis.c

//设置DIS配置信息
HI_MPI_VI_SetDISConfig

//初始化DIS
HI_MPI_VI_DISInit

//设置DIS属性
HI_MPI_VI_SetDISAttr

//需要硬件算法
if( SAMPLE_GYRO_Init() == HI_SUCCESS)
{
    SAMPLE_GYRO_Start();
    stDISCallback.pfnGetGyroDataCallback = SAMPLE_GYRO_GetData;
    stDISCallback.pfnReleaseGyroDataCallback = SAMPLE_GYRO_Release;
    HI_MPI_VI_RegisterDISCallback(0, &stDISCallback); //注册陀螺仪数据回调
}

//开线程运行DIS
HI_MPI_VI_DISRun

//退出
HI_MPI_VI_DISExit

 

你可能感兴趣的:(海思,海思,DIS)