海思Hi3516 | 您所在的位置:网站首页 › 海思ive实现移动侦测 › 海思Hi3516 |
计算方法与原理: 采用四连通 一 . 运动二值图 通过帧差法或者背景法、以及设定的阈值选出一个二值图像每个框表示一个宏块0表示无运动1表示有运动二. 四连通与八连通 1. 四连通指的是上下左右四个点,如下图中红色区域为连通区,绿色也是连通区,但是两个连通区不属于同一个。 2. 八连通中的是上下左右,左上,左下,右上,右下八个点,图中两个红色区域为一个连通区。 计算: 剔除面积较小的块(噪点引起) 计算剩下的块面积占整帧面积的百分比,判断是否发生移动侦测实现:for(i = 0; i < pstCCBLOB->u8RegionNum; i++) // i < 总的连通区域个数 for (k = 0; k < pstCur->u16Height; k += bound_value_y) // 找出连通区域所属的块 for (m = 0; m < pstCur->u16Width; m += bound_value_x) 判断两个矩形是否有重叠区域 计算重叠区域面积 每个块运动的面积per_block_area[index] += area. g_md_args->precent[i] = (per_block_area[i]*10000) / per_block_sum_area; //每个块所占 该块面积的比例 for (i = 0; i < strlen(g_md->cur_cfg.configStr); i++) { if (g_md->cur_cfg.configStr[i] == '1') { precent += g_md->precent[i]; count++; } } //根据imcs / NVR 标记的块 进行叠加 标记的块为1 if (precent >= ((100 - g_md->cur_cfg.md_sensitivity) * 100 * DOWN_SCALE)) g_md->md_flag = MOT_HAPPEN; //有移动 初始化过程: 1. enc_sal_md_init() g_md_args->fps = cap->vi.fps; g_md_args->bind_phy_chn = cap->md.bindPhyChn; g_md_args->width = cap->md.width; g_md_args->height = cap->md.height; g_md_args->block_h = block_h; g_md_args->block_v = block_v; 2. md_enable_chn() stChnAttr.s32SrcFrameRate = g_md_args->fps; stChnAttr.s32DstFrameRate = (g_md_args->fps > 5) ? 5 : g_md_args->fps; stVpssChnMode.enChnMode = VPSS_CHN_MODE_USER; stVpssChnMode.bDouble = HI_FALSE; stVpssChnMode.enPixelFormat = PIXEL_FORMAT_YUV_SEMIPLANAR_420; stVpssChnMode.u32Width = g_md_args->width; stVpssChnMode.u32Height = g_md_args->height; stVpssChnMode.enCompressMode = COMPRESS_MODE_NONE; HI_MPI_VPSS_SetChnAttr(); 3. md_alloc_mem()md_create_image md_create_image //申请存放待处理图像缓冲区 md_create_memInfo //申请存放处理的结果数据 4. HI_IVS_MD_Init 5. md_startstMdAttr.enAlgMode = MD_ALG_MODE_BG; //背景帧 stMdAttr.enSadMode = IVE_SAD_MODE_MB_4X4; stMdAttr.enSadOutCtrl = IVE_SAD_OUT_CTRL_THRESH; stMdAttr.u16SadThr = 128; //阈值SAD stMdAttr.u16Width = g_md_args->width; stMdAttr.u16Height = g_md_args->height; stMdAttr.stAddCtrl.u0q16X = 32768; //加权系数 stMdAttr.stAddCtrl.u0q16Y = 32768; stMdAttr.stCclCtrl.u16InitAreaThr = 4; //初始化连通区域面积fa stMdAttr.stCclCtrl.u16Step = 4; //步伐 stMdAttr.stCclCtrl.enMode = IVE_CCL_MODE_8C; //8联通 pstMdAttr->u16SadThr = 传参 pstMdAttr->stCclCtrl.u16InitAreaThr = 传参 HI_IVS_MD_CreateChn 6. md_proc HI_MPI_VPSS_GetChnFrame HI_MPI_VPSS_GetChnFrame //获取两帧图像信息 进行对比 HI_MPI_IVE_DMA HI_IVS_MD_Process md_calc_block //连通区域的面积对比 tp_md_calc() //对比所选的块,上报警告 tp_md_check_end()//对比所选的块,上报警告
|
CopyRight 2018-2019 实验室设备网 版权所有 |