计算方法与原理:
采用四连通
一 . 运动二值图
二. 四连通与八连通
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; //有移动
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;
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();
md_create_image
md_create_image //申请存放待处理图像缓冲区
md_create_memInfo //申请存放处理的结果数据
stMdAttr.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
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()//对比所选的块,上报警告