工业电梯人数统计系统 计算机视觉资料
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
2.光流法的目标跟踪
自己编写函数中的相关参数感觉很费劲,所以用了OpenCV函 数库里两个现成的函数cv::calcOpticalFlowPyrLK和 cv::goodFeatureToTrack 尝试实现了一下,追踪目标的效果不错, 但是没有想到很好的计数方法,所以先搁置了,看以后能不能有 好的方法解决一下。
1.帧间差分法
帧间差分法是利用相邻两帧图像做减法来提取 前景物体,由于计算量小,所以运行速度比较快 ,另外帧间差分法对缓慢变换的光照不是很敏感 ,所以其用途比较广泛。 其基本原理可以用下面公式看出: |i(t)-i(t-1)|<T 背景 |i(t)-i(t-1)|>=T 前景 其中i(t),i(t-1)分别为t,t-1时刻对应像素点的 像素值,T为阈值。
// 积累图中255像素点的数量
3)积累图提取结果
1.某时刻一个人经过进出线时的积累图
2.某时刻两个人经过进出线时的积累图
由上图可以看出当有人经过进出线时,提取的积累图中 会显示大片聚集的亮点,当两个人同时进出时积累图会变宽, 在随后的过程中,我们会发现对积累图的分析处理就可以实现 人员的检测和统计。
//上一帧图像第100行的首地址 //阈值结果线
//变化过大的像素点数量
//若一行像素点有60个以上变化了12 则布尔变量为true
2)积累图的提取
if (sun_Linechange1(colorImage)) { pAccl1=accLine1.ptr<uchar>(accNum1); // accLine1为积累图 for (j=0;j<imgCols;j++) { pAccl1[j]=pLine1[j]; } accNum1++; } else { if (accNum1>7) { Mat target(accNum1,imgCols,CV_8UC1); int zeoNum=0; for (i=0;i<accNum1;i++) { pTarg1=target.ptr<uchar>(i); pAccl1=accLine1.ptr<uchar>(i); for (j=0;j<imgCols;j++) { pTarg1[j]=pAccl1[j]; if (pTarg1[j]==255) { zeoNum++; } }
三.自己的算法
1.思路
在视频流(480*640)中设置两条进出线,只讨论这两条线 分别是第100行和第300行像素点的变化情况,来分析是否有人员 进出,将相邻两帧图像的对应进出线上像素点做差,若大于某一 阈值则认为该像素点变化过大将其置为255否则置为0,若某一差 值进出线上变化过大的像素点数量超过预定值,则将这一时刻的 差值进出线提取出来作为阈值结果线存储到一幅空图像中。一段 时间后,这幅空图像将存储一系列的阈值结果线并构成积累图, 我们对积累图进行形态学去噪,提取轮廓并加以分析,来进行目 标识别和统计人数的工作。
3.目标的处理和分析
if (zeoNum>700) {
//填充前景物体中的小洞 morphologyEx(target,target,CV_MOP_OPEN,Mat()); //移除场景中比较小的物体
morphologyEx(target,target,CV_MOP_CLOSE,Mat()); vector<vector<Point>> contours; Mat targetClone=target.clone(); findContours(targetClone,contours,CV_RETR_EXTERNAL,CV_CHAIN_APPROX_N ONE); for(vector<vector<Point>>::iterator it=contours.begin();it!=contours.end();) { if(contourArea(*it)<400) it=contours.erase(it); else { it++; } } Rect boundingBox; if(contours.size()>0) contours.boundingBox=boundingRect(contours[0]); if(boundingBox.width>300||contours.size()>1) {...} else{...}
工业电梯人数ຫໍສະໝຸດ Baidu数系统
专业:模式识别与智能系统 姓名:王奉甲 学号:1401266
一.系统介绍
为了防止电梯超载,还有施工现场的安全问题,采用 摄像头获取视频流,运用图像处理技术对进出电梯的双向 人数进行计数,用于监测和管理。
二.目标识别提取的方法
• • • • •
帧间差分法 光流法 均值漂移算法 haar分类器提取目标 等等
2.算法流程图
视频图像的采集 阈值结果线的提取
积累图的提取
积累图处理与分析
计数得到结果
3.目标的提取
1)阈值结果线的提取
bool frameprocess::sun_Linechange1(Mat sourceImg) { int j,sum=0;
uchar *pImg=sourceImg.ptr<uchar>(Pos1); //灰度图像的100行首地址放在pImg
用OpenCV2.4.4+Visual Studio 2012做了个简单的实验
可以看出帧差法很简单,但是有很多的缺点。其“双影 ”和”空洞”比较明显。双影是由于帧差法有2个影子,在 该试验中就是轮廓变得很粗,”空洞”是由于物体内部颜色 相近,检测不出来。 当然帧差法还有个致命的缺点就是阈值T需要人工设定。 虽然可以优化,比如三帧差法,还有相关的形态学处理 可以消除一些缺点,但是总体来说效果不太理想。
uchar *pLine=lastLine1.ptr<uchar>(0); uchar *pLinecc=ccLine1.ptr<uchar>(0); for (j=0;j<imgCols;j++) { if (pImg[j]-pLine[j]>12||pImg[j]-pLine[j]<-12) { sum++; pLinecc[j]=255; } else { pLinecc[j]=0; } pLine[j]=pImg[j]; } return sum>60; }