模式识别
——Human dection
一、 实验目的:
通过摄像头捕捉公交车上的情况,经过计算机的图像处理,检测出公交
车上座位有无乘客。
二、 实验数据:
50 副采集自公交车上摄像头拍摄的图像,其中 46 幅为有人图像,4 幅
为无人图像。
三、 实验流程:
开 始
将 图 像 分 为 上 下 两
个区域
YES
YES
检测区域一
是否有人?
NO
检测区域二
是否有人?
NO
输出:无人出现
结 束
输出:有人出现,
标记位置
输出:有人出现,
标记位置
四、 实验内容:
1) 区域分割:将一个座位的图像分为上下两部分区域。
区域一的坐标为:SReg1.x1=60
SReg1.y1=0
SReg1.x2=175 SReg1.y2=55
区域二的坐标为:SReg2.x1=40;SReg2.y1=55
SReg2.x2=175;SReg2.y2=150
图例 4-1
2) 区域一检测:
a) 预处理:将采集到的灰度图像经过二值化。二值化的过程可以简述为:
先计算区域一的平均灰度值,然后再将图像的各个像素点与平均值作
比较,若高于均值的 80%则判定为是黑色(像素值为 0),小于则判定
为是背景,置为灰色(像素值为 200)。
然后进行一次闭运算(先膨胀,再腐蚀),得到处理后的二值图像。
b) 特征提取:得到预处理后的二值图像后,我们计算出图像的直方图,
区域一的预处理代码
然后根据直方图的均值、方差等数据进行分类。
直方图的计算代码如下所示:
c) 分类算法:得到图像的直方图后,将进行分类算法,具体规则如下:
i. 去除非常狭长的区域
ii. 去除非常平坦的区域
iii. 得到面积较大,顶部变化缓慢的区域
iv. 得到均值大于 15 的区域
v. 得到最大值大于 5 的区域
主要代码如下:
d) 坐标定位:根据得到的图像直方图可以快速的得到黑色区域的中心位
置。代码如下:
得到了坐标位置后,只需要在其位置标记“X”即可,代码如下:
3) 区域二检测:
a) 预处理:区域二的图像比区域一更加复杂一些,背景噪声较多,所以
我想办法先将区域二中的背景噪声去除,以方便接下来的检测。具体
做法是:将区域二边角缩小 15 个像素点。因为区域二的已经包括了
座位坐在区域的大部分面积,而人头出现在边角的可能性很小,所以
预先排除。具体代码如下:
接下来,对区域二进行二值化操作,跟区域一的方法相同,但是我修改了
下二值化的阈值,能够更好的将前-背景分离,阈值选择在平均灰度值的 90%,
大于 90%的判为黑色,小于 90%的判为灰色(像素值为 200)。
通过观察处理后的区域二的二值图像发现,人头和背景还是没有
很好的分离出来,那么我采用了不断腐蚀很膨胀的方法,将背景噪声
尽可能的去除。我采用了先腐蚀 3 次,在膨胀 4 次的操作。结果能将
大部分的背景噪声去除。
具体代码如下:
b) 分类算法:经过上述的预处理操作后发现区域二的部分图像的背景噪
声很好的去除了,只剩下人头的部分,和个别的小面积区域,那么我
采用的分类方法就很简单了,只要判别黑色区域面积的大小,调整阈
值,就分类出人头的区域。
具体代码如下: