5.5.4 运动目标分割
这部分的主要作用是对灰度图进行二值化,并且进一步对二值化后的图像进行滤波,使得能有效地把运动物体的前景和背景区分开来。二值化中最重要的就是寻找阈值,可以是全局阈值,可以是局部阈值。所谓阈值就是用来区分灰度图中前景和背景的中间点。而寻找阈值最有效的方法是观察它的直方图,直方图实质上是一个统计图,对灰度图像中所有元素进行统计,并记录像素值0~255各个出现的次数。最适合分割的直方图就是具有两个波峰和波峰中间有一个波谷的图形,而这个波谷就是我们需要寻找的阈值点,它的两边正好一边是背景,一边是前景。图5.31有两幅图,左边是二次差分的灰度图,右边是它的直方图信息,由右边的直方图可以看出大部分背景分布在低灰度区域,而大部分前景运动目标分布在高灰度值区域,故选择适当的阈值T 可以将灰度图进行二值化,即可实现背景和运动物体的自动分离。

图5.31 原图与其灰度图
阈值的选取可通过计算当前图像背景区域的均方差值δ来实时估计。由于一般相邻时刻背景区域变化不大,可用上一时刻的前景图的零值区域(即背景区域)作为当前时刻的背景区域。
D(x,y,t)为t时刻的灰度图像,FD(x,y,t)为t时刻的二值图像,N、M 分别是图像序列的长度和宽度,AREA是背景区域的面积,T 为设定的阈值。
当FD(x,y,t-1)=0时的处理:

α值的设定与场景的复杂度有关,一般的场景取3,如果场景复杂的话,可以选取大一点4~8。就本系统而言,α定为3。(https://www.daowen.com)
接下来要做的就是去除二值化后孤立的点,因为这些点很有可能是噪声,我们运用数学形态学的方法来处理。下面我们先来介绍一下数学形态学处理。
数学形态学处理的基本方法有腐蚀、膨胀、开运算和闭运算。腐蚀时输入的两幅图像,一个是源图像,一个是腐蚀的大小范围。用这个范围去对源图像进行腐蚀的意思就是用这个范围的中心沿着图像的边缘走一遍,剔除掉源图像包含在这个腐蚀内范围的图像。膨胀则是相反的,让物体变得更大。开运算和闭运算是这两个方法(腐蚀和膨胀)的结合。开运算是先腐蚀后膨胀,闭运算是先膨胀后腐蚀。如果是一个孤立的点的话,用一个矩形框当做腐蚀范围,对源图像进行腐蚀的结果就是这个孤立的点会消失,而且物体的面积也会减小,然后再对这个作用后的图像进行相同范围的膨胀,就可以把原图像中像素值给恢复回来。这就是这里要提出的滤波的方法。也就是用一个矩形框来对二值图像进行开运算就可以了。这个矩形框的大小设定是长宽都是2个像素。
二值图像信息的提取是对输入的二值前景图像进行处理,统计这幅图像中含有的连通区域的大小、连通区域的重心、连通区域的轮廓等具体的区域信息,将信息存储起来,等到跟踪之后再明确区分这些连通区域是杂质还是气泡之类的后期处理。
有以下三种方法可以用来统计连通区域信息[24][25]:
(1)像素标记法:该方法根据当前像素邻近像素标签值决定当前像素的标签值,并记录冲突标记形成冲突表,在第二次扫描图像时将其改为正确的标签。
(2)区域增长法:扫描二值图像中每一个像素点,如果该点未标记则将其压入堆栈并从该点反复标记其邻域,直到堆栈为空。该算法会出现“1”反复扫描的情况。
(3)基于行程编码的标记算法:行程是一种逐行存储目标特征信息的结构,该方法首先对图像进行行程编码,通过判断上下连续两行的行程的连通性,编写标号冲突表。扫描完图像后整理冲突表,按照某种搜索算法得到标号等价表,并随后修改标记图像。
由于像素标记法对应操作的单位是一个一个的像素,所以它的效率不高,运算复杂度较大。为了提高检测效率,我们采用的是基于行程编码的标记算法。行程指的是扫描一行的连通区域。每一个行程都有一个编号。而编号不同就代表是不同的区域。当扫描下一行时,不仅要计算出这一行的行程编号,当在这一行扫描完时还需要看与上一行行程有没有相连通的部分(连通有八连通和四连通之分,八连通是指上、下、左、右、右斜上、左斜上、右斜下、左斜下八个方向连通。四连通是指只含有上、下、左、右四个方向连通)。如果连通要在一个内存区域记录这个信息,也就是这两个行程其实是一个连通区域,最后计算考虑这个内存区域信息。当我们把每个区域都获取到了时就可以统计它的各个信息。