1. 算法目的:
连通域分析算法的目的就是对二值图像进行分析,计算出在每帧图象上目标(这里是人)的位置。这里主要扩充了游程码的思想,将相互毗邻的值为“1”的像素点归结到同一个连通域中,不相互毗邻的点归结到不同的连通域中,并用矩形盒把所有的连通域包围起来,最后得出包围盒得左上、右下顶点坐标,连通域的面积、质心等特征值。
l 难点:
① 如何在求连通域过程中同时确定连通域的质心;
② 系统固有噪声,以及人所携带得小目标干扰可能会导致误识别,产生误差。这一点可以通过给连通域的面积设定阀值的方法在一定范围内校正。
l 缺点:
无法解决多个人粘连到一起的情况,这时,多个粘连的人会被划分到同一个连通域中,引起记数误差。该算法无法正确处理这种情况,初步准备在该算法之后用其他算法解决。
2.算法描述:
l 算法接口
① 输入:int data(int width,int height);
② 输出:struct boxlist* arealist
l 数据结构
① 连通域链表arealist*
用来存储连通域分析处理好的,最终结果中的连通域包围盒。
struct box* arealist
② 当前扫描段链表boxlist*
用来存储正在处理的包围盒。
struct box{
int boxX1, boxY1 ; /*包围盒左上顶点的坐标*/
int boxX2,boxY2 ; /*包围盒右下顶点的坐标*/
int area ; /*该连通域的面积,即点数*/
float centerX,centerY ; /*质心的坐标*/
struct box* next ; /*指向链表的下一个节点*/
int flag ; /*