1. 概述

3D降噪算法是将前后两帧的图像进行对比处理,找出噪点位置,然后对其增益控制。3D数字降噪功能能够降低弱信号图像的噪波干扰。


2. 函数接口

HI_S32 HI_MPI_VPSS_SetGrpParam(VPSS_GRP VpssGrp, VPSS_GRP_PARAM_S*pstVpssParam);

参数名称描述输入/输出VpssGrpVPSS GROUP号输入pstVpssParam高级属性设置输入

VPSS_GRP_PARAM_S结构体:

typedefstructhiVPSS_GRP_PARAM_S{HI_U32u32Contrast;//保留HI_S32s32GlobalStrength;//3DNR降噪强度,[0.1408]HI_S32s32IeStrength;//图像纹理增强,[-1,100]HI_S32s32YSFStrength;//亮度空域去噪强度,[-1,100]HI_S32s32YTFStrength;//亮度时域去噪强度,[-1,15]HI_S32s32CSFStrength;//色度空域去噪强度,[-1,255]HI_S32s32CTFStrength;//色域时域去噪强度,[-1,32]HI_S32s32MotionLimen;//运动阈值,表示NR强度,[-1,32]}VPSS_GRP_PARAM_S;

空域降噪是对单帧进行采样,降噪会牺牲更多的细节;时域降噪是对前后帧进行分析,尽量保留画面细节,但是拍摄剧烈运动可能会有拖影。在实际应用中可根据不同的侧重点(细节、运动、亮度、色度)来调整VPSS_GRP_PARAM_S结构体的成员变量。


3. PQTools设置界面


4. 代码设计

在SDK包的mpp/tools目录下编写应用程序代码,具体代码如下:

/*FileName:vpss_attr_3dnr.cAuthor:shugen.yinDate:2017.2.10Function:3DNRsettinglog:*/#include<stdio.h>#include<stdlib.h>#include<string.h>#include"hi_common.h"#include"hi_comm_video.h"#include"hi_comm_sys.h"#include"hi_comm_vo.h"#include"hi_comm_vi.h"#include"hi_comm_vpss.h"#include"hi_type.h"#include"mpi_vb.h"#include"mpi_sys.h"#include"mpi_vi.h"#include"mpi_vo.h"#include"mpi_vpss.h"#defineCHECK_RET(express,name)\do{\if(HI_SUCCESS!=express)\{\printf("%sfailedat%s:LINE:%d!errno:%#x\n",\name,__FUNCTION__,__LINE__,express);\returnHI_FAILURE;\}\}while(0)HI_S32main(){HI_S32s32Ret=0;HI_U8u8Index=0;VPSS_GRPVpssGrp=0;VPSS_GRP_ATTR_SstVpssGrpAttr={0};VPSS_GRP_PARAM_SstVpssGrpParam={0};HI_S32s32NrParam[4][8]={{0x0,0x2f8,0x0,0x20,0xc,0x8,0x6,0x0},{0x0,0x330,0x0,0x20,0xc,0x8,0x6,0x0},{0x0,0x3ea,0x0,0x20,0xc,0x8,0x6,0x0},{0x0,0x458,0x0,0x20,0xc,0xe,0xc,0x0}};s32Ret=HI_MPI_VPSS_GetGrpAttr(VpssGrp,&stVpssGrpAttr);CHECK_RET(s32Ret,"HI_MPI_VPSS_GetGrpAttr");s32Ret=HI_MPI_VPSS_GetGrpParam(VpssGrp,&stVpssGrpParam);CHECK_RET(s32Ret,"HI_MPI_VPSS_GetGrpParam");stVpssGrpAttr.bNrEn=1;stVpssGrpParam.u32Contrast=s32NrParam[u8Index][0];stVpssGrpParam.s32GlobalStrength=s32NrParam[u8Index][1];stVpssGrpParam.s32IeStrength=s32NrParam[u8Index][2];stVpssGrpParam.s32YSFStrength=s32NrParam[u8Index][3];stVpssGrpParam.s32YTFStrength=s32NrParam[u8Index][4];stVpssGrpParam.s32CSFStrength=s32NrParam[u8Index][5];stVpssGrpParam.s32CTFStrength=s32NrParam[u8Index][6];stVpssGrpParam.s32MotionLimen=s32NrParam[u8Index][7];s32Ret=HI_MPI_VPSS_SetGrpAttr(VpssGrp,&stVpssGrpAttr);CHECK_RET(s32Ret,"HI_MPI_VPSS_SetGrpAttr");s32Ret=HI_MPI_VPSS_SetGrpParam(VpssGrp,&stVpssGrpParam);CHECK_RET(s32Ret,"HI_MPI_VPSS_SetGrpParam");return0;}


5. 编译运行

在mpp/tools目录下执行make命令,生成vpss_attr_3dnr可执行程序,将此可执行程序复制到目标板卡中,执行./vpss_attr_3dnr,3DNR算法模块开始工作。


6. 最终结果

在没有运行vpss_attr_3dnr时,视频显示结果如下图所示,画面有明显的弱噪声。

运行vpss_attr_3dnr后,视频显示结果如下图所示,弱噪声得到明显抑制。