1. 概述
3D降噪算法是将前后两帧的图像进行对比处理,找出噪点位置,然后对其增益控制。3D数字降噪功能能够降低弱信号图像的噪波干扰。
2. 函数接口
HI_S32 HI_MPI_VPSS_SetGrpParam(VPSS_GRP VpssGrp, VPSS_GRP_PARAM_S*pstVpssParam);
参数名称 | 描述 | 输入/输出 |
VpssGrp | VPSS GROUP号 | 输入 |
pstVpssParam | 高级属性设置 | 输入 |
VPSS_GRP_PARAM_S结构体:
typedef struct hiVPSS_GRP_PARAM_S { HI_U32 u32Contrast; //保留 HI_S32 s32GlobalStrength; //3DNR降噪强度,[0.1408] HI_S32 s32IeStrength; //图像纹理增强,[-1,100] HI_S32 s32YSFStrength; //亮度空域去噪强度,[-1,100] HI_S32 s32YTFStrength; //亮度时域去噪强度,[-1,15] HI_S32 s32CSFStrength; //色度空域去噪强度,[-1,255] HI_S32 s32CTFStrength; //色域时域去噪强度,[-1,32] HI_S32 s32MotionLimen; //运动阈值,表示NR强度,[-1,32] }VPSS_GRP_PARAM_S;
空域降噪是对单帧进行采样,降噪会牺牲更多的细节;时域降噪是对前后帧进行分析,尽量保留画面细节,但是拍摄剧烈运动可能会有拖影。在实际应用中可根据不同的侧重点(细节、运动、亮度、色度)来调整VPSS_GRP_PARAM_S结构体的成员变量。
3. PQTools设置界面
4. 代码设计
在SDK包的mpp/tools目录下编写应用程序代码,具体代码如下:
/* File Name: vpss_attr_3dnr.c Author: shugen.yin Date: 2017.2.10 Function: 3DNR setting log: */ #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" #define CHECK_RET(express,name) do{ if (HI_SUCCESS != express) { printf("%s failed at %s: LINE: %d ! errno:%#x \n", name, __FUNCTION__, __LINE__, express); return HI_FAILURE; } }while(0) HI_S32 main() { HI_S32 s32Ret=0; HI_U8 u8Index = 0; VPSS_GRP VpssGrp = 0; VPSS_GRP_ATTR_S stVpssGrpAttr = {0}; VPSS_GRP_PARAM_S stVpssGrpParam = {0}; HI_S32 s32NrParam[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"); return 0; }
5. 编译运行
在mpp/tools目录下执行make命令,生成vpss_attr_3dnr可执行程序,将此可执行程序复制到目标板卡中,执行./vpss_attr_3dnr,3DNR算法模块开始工作。
6. 最终结果
在没有运行vpss_attr_3dnr时,视频显示结果如下图所示,画面有明显的弱噪声。
运行vpss_attr_3dnr后,视频显示结果如下图所示,弱噪声得到明显抑制。
本文出自 “shugenyin的博客” 博客,请务必保留此出处http://shugenyin.blog.51cto.com/4259554/1896821
原文:http://shugenyin.blog.51cto.com/4259554/1896821