一种基于OpenCV实现的三帧差分运动目标检测算法研究

合集下载

基于OpenCV的运动目标检测与跟踪的开题报告

基于OpenCV的运动目标检测与跟踪的开题报告

基于OpenCV的运动目标检测与跟踪的开题报告1.问题描述动态目标检测与跟踪是计算机视觉领域的重要研究方向之一,其应用范围涉及视频监控、智能交通、人机交互等领域。

然而,传统方法对于场景复杂、目标运动快速、遮挡等情况处理效果不佳,需要更高精度、更高效率的算法解决这些问题。

2.研究目标本研究拟使用OpenCV库,运用图像处理、计算机视觉、机器学习等方法,实现运动目标的检测与跟踪,达到以下目标:(1)快速准确地检测运动目标,识别目标的运动轨迹;(2)针对遮挡、光照变化等问题,采用定位、成像、跟踪等多种策略,提高目标检测的精度;(3)针对运动目标的运动速度、方向等多种属性,进行多角度、综合性的分析和研究,建立适用于实际应用的算法。

3.研究方法和技术路线(1)建立视频采集平台。

使用摄像机获取实时视频流,并对数据进行采集、预处理,并应用OpenCV库实现视频流后处理。

(2)建立运动目标检测算法。

运用图像处理算法进行前景/背景分类、形态学滤波等操作,采用一系列特征提取的方法刻画像素点的特征,采用分类器实现目标检测。

(3)针对复杂场景、遮挡等问题,采用多特征、多分类器等方法进行重新整合,进一步提高算法准确度。

(4)建立运动目标跟踪算法。

根据检测结果,利用卡尔曼滤波、粒子滤波等跟踪方法对运动目标进行跟踪。

(5)建立性能评估体系,基于指标和实际应用场景对所研发算法进行综合性评估。

4.预期结果基于OpenCV库进行运动目标检测与跟踪,在实验室实现的基础上,进行测试、优化,结合现有开源算法,最终达到高精度、高效率的运动目标检测与跟踪效果,具体评估指标包括精度、召回率、信噪比等。

同时,根据实际应用场景,通过算法参数的调整,进一步将算法实现优化,使其适用于各种应用场景。

一种基于OpenCV实现的三帧差分运动目标检测算法研究

一种基于OpenCV实现的三帧差分运动目标检测算法研究
c n f li h e li e u r me t a uf l erat lt me r q i e n.
K y W o d t r ef medf rn i , eet n o vn be t Op n V e r s h e-r i ee t l d tci f a f a o mo ig o jc , e C
Cls mb r TP 0 . a s Nu e 3】6
1 引言
现实 生活 中, 量有 意义 的视 觉 信息 都 包 括在 大 运 动之 中 。尽 管 人类 的 视 觉 即 能看 见 运 动物 体 又 能看 到静 止 的物 体 , 是 在 许 多 场 合 , 但 比如 重 要 场
t n S me smu a i n t s sa e c r id O t b h l o ih a d t e b sc fa i e e c t o i . o i lt e t r a re u y t e a g rt m n h a i r me d f r n e me h d,r s e t e y o o f e p c i l ,mo 的基础 , 取 准确 的 获 运 动 目标对 于 后 面 的处 理具 有 重 要 意 义 , 此 , 因 研
徐 卫星 王 兰英 李 秀娟
郑州 400) 5 O 7 ( 河南工业大学 电气工程学院


运 动 目标检测在视觉监控系统 、 医学 图像 分析 、 工业检测 和军事等领域 有着广泛 的应用 。运动 目标 检测处于
这些应 用的最前端 , 检测结果 的准确 精度 对后 续处理 有很 大 的影 响 。文 中提 出 了一 种三帧 差分运 动 目标 检测算 法 , 利用
总第 2 5 6 期 2 1 年第 1 期 01 1

opencv运动检测三帧差法

opencv运动检测三帧差法

opencv运动检测三帧差法三帧差法优点:实时性高缺点:1、运动物体本身颜色相近时,会出现较大的空洞。

2、无法应对光照骤变的情况理论上:三帧差法比二帧差法更好一些(可在一定程度上消除帧间差分法的“双影”现象),但是也要结合实际情况而用。

1. 帧差法基本原理帧差法的实现非常简单:如图可见,由目标运动引起的运动变化区域,包括运动目标在前后两帧中的共同位置(图中黑色区域)、在当前帧中新显露出的背景区域和新覆盖的背景区域三部分。

数学原理:三帧差法的流程:1 结果1 = (第二幅图像 - 第一幅图像) ∩ (第三幅图像 - 第二幅图像)2结果2 = 滤波(结果1)3 结果3 = 形态学处理(结果2)4结果4 = 二值化(结果3)第一步:第二幅图像减去第一幅图像的值与第三幅图像减去第二幅图像的值作交集运算.对第一步产生的结果做滤波处理.对第二步产生的结果做形态学处理.对第三步产生的结果做二值化处理.直接上代码:1.#include <opencv2/opencv.hpp>ing namespace std;ing namespace cv;4.5.int main()6.{7.//读入视频8.VideoCapture capture("1.avi"); //Laboratory_raw.avi9.//VideoCapture capture(0);10.11.Mat tempframe, currentframe, previousframe, difframe,s3;12.Mat difframe2, difframe3;13.Mat frame;14.int framenum = 0;15.//读取一帧处理16.while (true)17.{18.if (!capture.isOpened())19.{20.cout << "read video failure" << endl;21.return -1;22.}23.//tempframe = capture.read(frame);24.capture >> frame;25.imshow("原视频", frame);26.previousframe = frame.clone(); //第一帧27.28.capture >> frame;29.currentframe = frame.clone(); //第二帧30.31.capture >> frame;32.s3 = frame.clone(); //第三帧33.34.cvtColor(previousframe, previousframe, CV_BGR2GRAY);35.cvtColor(currentframe, currentframe, CV_BGR2GRAY);36.cvtColor(s3,s3, CV_BGR2GRAY);37.38.39.absdiff(currentframe, previousframe, difframe);//做差求绝对值 1-240.absdiff(previousframe, s3, difframe2);//做差求绝对值 2-341.42.43.//准备做与运算,difframe3= difframe2^difframe44.// void bitwise_and(InputArray src1, InputArray src2,OutputArray dst, InputArray mask=noArray());//dst = src1 & src245.bitwise_and(difframe, difframe2, difframe3); //46.47.48.threshold(difframe3, tempframe, 20, 255.0, CV_THRESH_BINARY);49.dilate(tempframe, tempframe, Mat());//膨胀50.erode(tempframe, tempframe, Mat());//腐蚀51.52.imshow("运动目标", tempframe);53.54.waitKey(50);55.}//end while56.}运行结果:希望对你有帮助。

【目标追踪】三帧差法原理及实现

【目标追踪】三帧差法原理及实现

【目标追踪】三帧差法原理及实现三帧差法原理及实现•(一)帧差法原理及实现:•(二)帧差法存在的问题:•(三)三帧差法的原理:•(四)三帧差法的实现代码:•(五)视频中的目标追踪效果:(一)帧差法原理及实现:这里可以看一下我的这篇博客,这里就不赘述了:【目标追踪】python帧差法原理及其实现(二)帧差法存在的问题:运动物体本身颜色相近时,会出现较大的空洞。

位置变化缓慢时,难以检测到目标。

对光线非常敏感。

(三)三帧差法的原理:三帧差法的关键是,不再仅仅采用相邻的两帧图片作差查找运动目标,而是在相邻三帧图片的两张帧差图中取“与”操作,即:(四)三帧差法的实现代码:(具体处理和代码解析还是推荐看一下我的上一篇博客:【目标追踪】python帧差法原理及其实现)代码:import cv2import numpy as npfrom nms import py_cpu_nmsfrom time import sleepclass Detector(object):def __init__(self, name='my_video', frame_num=10, k_size=7, color=(0, 255, 0)): = nameself.color = colorself.nms_threshold = 0.3self.time = 1/frame_num # 频率self.es = cv2.getStructuringElement(cv2.MORPH_ELLIPSE, (k_size, k_size))def catch_video(self, video_index=0, k_size=7,iterations=3, threshold=20, bias_num=1,min_area=360, show_test=True, nms=True,logical='or'):# video_index:摄像头索引(数字)或者视频路径(字符路径)# k_size:中值滤波的滤波器大小# iteration:腐蚀+膨胀的次数,0表示不进行腐蚀和膨胀操作# threshold:二值化阙值# bias_num:计算帧差图时的帧数差# min_area:目标的最小面积# show_test:是否显示二值化图片# nms:是否进行非极大值抑制# logical:三帧差取or或andlogical = logical.lower()if not bias_num > 0:raise Exception('bias_num must > 0')if isinstance(video_index, str):is_camera = False# 如果是视频,则需要调整帧率else:is_camera = Truecap = cv2.VideoCapture(video_index) # 创建摄像头识别类if not cap.isOpened():# 如果没有检测到摄像头,报错raise Exception('Check if the camera is on.')frame_num = 0previous = []while cap.isOpened():catch, frame = cap.read() # 读取每一帧图片if not catch:raise Exception('Unexpected Error.')if frame_num < bias_num:value = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY) previous = [value]*bias_numframe_num += 1raw = frame.copy()gray1 = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)gray1 = cv2.absdiff(gray1, previous[0])gray1 = cv2.medianBlur(gray1, k_size)_, mask1 = cv2.threshold(gray1, threshold, 255, cv2.THRESH_BINARY)gray2 = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)gray2 = cv2.absdiff(gray2, previous[1])gray2 = cv2.medianBlur(gray2, k_size)_, mask2 = cv2.threshold(gray2, threshold, 255, cv2.THRESH_BINARY)if logical == 'or':mask = (np.logical_or(mask1, mask2) + 0)elif logical == 'and':mask = (np.logical_and(mask1, mask2) + 0)else:raise Exception('Logical must be \'OR\' or \'AND\'')mask = (mask * 255).astype(np.uint8)mask = cv2.dilate(mask, self.es, iterations)mask = cv2.erode(mask, self.es, iterations)_, cnts, _ = cv2.findContours(mask.copy(), cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)bounds = self.nms_cnts(cnts, mask, min_area, nms=nms)for b in bounds:x, y, w, h = bthickness = (w*h)//min_areathickness = thickness if thickness <= 3 else 3thickness = thickness if thickness >= 1 else 1cv2.rectangle(frame, (x, y), (x+w, y+h), self.color, thickness) if not is_camera:sleep(self.time)cv2.imshow(, frame) # 在window上显示图片if show_test:cv2.imshow(+'_frame', mask) # 边界value = cv2.cvtColor(raw, cv2.COLOR_BGR2GRAY)previous = self.pop(previous, value)cv2.waitKey(10)if cv2.getWindowProperty(, cv2.WND_PROP_AUTOSIZE) < 1:# 点x退出breakif show_test and cv2.getWindowProperty(+'_frame', cv2.WND_PROP_AUTOSIZE) < 1:# 点x退出break# 释放摄像头cap.release()cv2.destroyAllWindows()def nms_cnts(self, cnts, mask, min_area, nms=True):# 对检测到的边界框使用非极大值抑制bounds = [cv2.boundingRect(c) for c in cnts if cv2.contourArea(c) > min_area]if len(bounds) == 0:return []if not nms:return boundsscores = [self.calculate(b, mask) for b in bounds]bounds = np.array(bounds)scores = np.expand_dims(np.array(scores), axis=-1)keep = py_cpu_nms(np.hstack([bounds, scores]), self.nms_threshold)return bounds[keep]def calculate(self, bound, mask):x, y, w, h = boundarea = mask[y:y+h, x:x+w]pos = area > 0pos = pos.astype(np.float)# 得分应与检测框大小也有关系score = np.sum(pos)/(w*h)return scoredef pop(self, l, value):l.pop(0)l.append(value)return lif __name__ == "__main__":detector = Detector(name='test')detector.catch_video('./test.avi', bias_num=2, iterations=1,k_size=5, show_test=True, min_area=360, nms=False) (五)视频中的目标追踪效果:。

OpenCV实现帧间差分法详解

OpenCV实现帧间差分法详解

OpenCV实现帧间差分法详解本⽂实例为⼤家分享了OpenCV实现帧间差分法的具体⽅法,供⼤家参考,具体内容如下⼀.基本概念基于视频的车辆检测算法种类很多:光流法检测,帧差法,背景消除法(其中包括:直⽅图法,平均值法,单分布和混合⾼斯分布背景模型,Kalman滤波等),边缘检测法,运动⽮量检测法...下⾯分享的是运动⽬标检测算法中最基本的⽅法—帧间差分法。

相邻帧间图像差分思想:检测出了相邻两帧图像中发⽣变化的区域。

该⽅法是⽤图像序列中的连续两帧图像进⾏差分,然后⼆值化该灰度差分图像来提取运动信息。

由帧间变化区域检测分割得到的图像,区分出背景区域和运动车辆区域,进⽽提取要检测的车辆⽬标。

它是通过⽐较图像序列中前后两帧图像对应像素点灰度值的不同,通过两帧相减,如果灰度值很⼩,可以认为该点⽆运动物体经过;反之灰度变化很⼤,则认为有物体经过。

第k帧和k+1帧图像fk(x,y),fk+l(x,y)之间的变化⽤⼀个⼆值差分图像D(x,y)表⽰,如式:⼆值图中0对应前后未变化的地⽅,1对应变化的地⽅。

流程图如下图所⽰:帧差法的特点是实现简单,运算速度快,对于动态环境⾃适应性是很强的,对光线的变化不是⼗分的敏感。

但是在运动体内易产⽣空洞.特别是⽬标运动速度较快时,影响⽬标区域准确提取。

我们以年辆检测为例,车辆检测除了要检测出运动车辆.同时还要检测出暂时停⽌的车辆,在这个⽅⾯,此类⽅法⽆能为⼒。

⽽且如果车辆的体积较⼤,那么车辆在前后帧中根容易产⽣重叠部分,尤其是⼤货车,这使得帧问差分的结果主要为车头和车尾。

车辆中间部分的差分值相对报⼩.形成空洞,不利于检测。

⼆.程序源代码#include "stdafx.h"#include "highgui.h"#include "cxcore.h"#include "ml.h"#include "cv.h"void main(){CvCapture* capture;capture=cvCaptureFromFile("video.avi");//获取视频cvNamedWindow("camera",CV_WINDOW_AUTOSIZE);cvNamedWindow("moving area",CV_WINDOW_AUTOSIZE);IplImage* tempFrame;//⽤于遍历capture中的帧,通道数为3,需要转化为单通道才可以处理IplImage* currentFrame;//当前帧IplImage* previousFrame;//上⼀帧/*CvMat结构,本质上和IplImage差不多,但是因为IplImage⾥的数据只能⽤uchar的形式存放,当需要这些图像数据看作数据矩阵来运算时,0~255的精度显然满⾜不了要求;然⽽CvMat⾥却可以存放任意通道数、任意格式的数据*/CvMat* tempFrameMat;CvMat* currentFrameMat; //IplImage要转成CvMat进⾏处理CvMat* previousFrameMat;int frameNum=0;while(tempFrame=cvQueryFrame(capture)){//tempFrame=cvQueryFrame(capture);frameNum++;if(frameNum==1){//第⼀帧先初始化各个结构,为它们分配空间previousFrame=cvCreateImage(cvSize(tempFrame->width,tempFrame->height),IPL_DEPTH_8U,1);currentFrame=cvCreateImage(cvSize(tempFrame->width,tempFrame->height),IPL_DEPTH_8U,1);currentFrameMat=cvCreateMat(tempFrame->height, tempFrame->width, CV_32FC1);previousFrameMat=cvCreateMat(tempFrame->height, tempFrame->width, CV_32FC1);tempFrameMat=cvCreateMat(tempFrame->height, tempFrame->width, CV_32FC1);//此时这些IplImage和CvMat都是空的,没有存有数据}if(frameNum>=2){cvCvtColor(tempFrame, currentFrame, CV_BGR2GRAY);//转化为单通道灰度图,此时currentFrame已经存了tempFrame的内容 /*⽤cvConvert将IplImage转为CvMat,接下来⽤cvAbsDiff对它们处理经过转换后,currentFrame没有改变,但是tempFrameMat已经存了currentFrame的内容*/cvConvert(currentFrame,tempFrameMat);cvConvert(previousFrame,previousFrameMat);cvAbsDiff(tempFrameMat,previousFrameMat,currentFrameMat);//做差求绝对值/*在currentFrameMat中找⼤于20(阈值)的像素点,把currentFrame中对应的点设为255此处阈值可以帮助把车辆的阴影消除掉*/cvThreshold(currentFrameMat,currentFrame,20,255.0,CV_THRESH_BINARY);//cvConvert(currentFrameMat,currentFrame); //观察不⼆值化的情况cvDilate(currentFrame,currentFrame); //膨胀cvErode(currentFrame,currentFrame); //腐蚀cvFlip(currentFrame, NULL, 0); //垂直翻转//显⽰图像cvShowImage("camera",tempFrame);cvShowImage("moving area",currentFrame);}//把当前帧保存作为下⼀次处理的前⼀帧cvCvtColor(tempFrame, previousFrame, CV_BGR2GRAY);cvWaitKey(33);}//end while//释放资源cvReleaseImage(&tempFrame);cvReleaseImage(&previousFrame);cvReleaseImage(&currentFrame);cvReleaseCapture(&capture);cvReleaseMat(&previousFrameMat);cvReleaseMat(&currentFrameMat);cvDestroyWindow("camera");cvDestroyWindow("moving area");}【注意】代码复制他处,略有改动,进⾏视频输出矫正(源代码昰倒的图像)。

基于OpenCV的运动目标跟踪系统研究

基于OpenCV的运动目标跟踪系统研究
21 o o年 8月 第 8期

电 子 测

ELECT R0NI TEST C
A u 201 g. 0 No. 8
基 于 op n V的运 动 目标 跟 踪 系 统 研 究 ec
吴 永 浩 ,华 云松 , 尚 亮
( 上海理工大学 光 电信息 与计算机工程学院 ,上海 2 09 ) 000
ba e s d on he O pe t nCV
W u Y o ha H uaYun on ng o, s g,S ng L a ha ing
( iesyo h n h i o ce c n c n lg sh o f pia— lcr a a dc mp tr n ie r g s a g a 0 0 0 Unv ri f a g a fr S in ea dTeh oo y c o l t l E et c l n o ue gn e n h n h i 0 9 ) t S oo c i e i 2
中确定运动 目标 ,对感 兴趣 目标 的检 测 、提 取 。使
用运动 目标 检测技术 ,可 在摄 像机监视场景 范围内 , 对 出现 的运动 目标进行 检测 、分类 、跟踪 等 ,可应 用于各种 监控 目的 ,如周 界警戒及入侵检测 、绊 线 检测 、非法停 车车辆检测 等。正是 由于其广泛 的应 用前景和显 著的优点 ,研究运 动 目标检测 、跟踪 系
摘 要 :本文分析 比较 了传 统运 动 目标检测的3 主要方法 :背景图像差分法 、时态差分 法和光流法 ,在此基 种 础上给出了一种 背景 图像预测算法 ,大大减少 了因为背景变化而 产生的 目标检 测误差 。本文 基于Op n 设 e CV 计出改进的运动 目标 检测与跟踪 算法 ,实现 了运 动 目标 的跟踪 ,并在Vc+ 编译环境下 ,利用us 摄 像头作 + B 为视频采集器 ,通过观察 实验 结果可以看 出,本 文的运动 目标检测算法 能够 正确地检测 出视频 图像中的运动 目标 ,而且在检测性能上优于普通的 自适应背景差分法 。

基于OpenCV的视频图像序列的运动目标检测

基于OpenCV的视频图像序列的运动目标检测

0 引言
于背景图像的动态变化 ,如天气 、光照 等的影响,使得运 随着 多媒体 技术 的发 展和 计算机 性能 的提高 ,计 算 机视觉 的研究重点 已经从静态图像过渡到动态图像序列上
面,其 中运动 目标检测与跟踪是其 中—个主要分支 ,这方 动检测成为一项相 当困难 的工作。 目前几种常 用的方法有 :

3 光流法
光流 计算方法最初 是 由 H m和 Sh nk 18 年提 o cu c 于 9 1
出的 , 是一种以灰度梯度基本不变或 亮度恒定的约束假 它
设为基础的 目标检测的有效方法。
1 二 l 0 一 <T l


㈩ () 1
设 IxYt (, , )为t 刻 点 (, 时 )的 灰 度; Ix xY+△ ,+A ) +A 时刻运动到点 ( +A , t t 为t t
2 " 年 7. o / g 第 7期
电 子 测 试
ELEc7 1 NI TEsT F0 c
Ju| 2o” No. 7
基于O eC
刘维杰 , 志剑 ,马铁 华 粱 ( 中北大学 电子测试技术重 点实验 室 山西 太原 005 ) 30 1
( +A , ) xY+ 的灰度值,理论上两个灰度值相等,
将该等式右边在( , ,) Y 点用泰勒公式展开,经化简和略
去二次项和余式得 :
C 由 o 二值图像 D ) 更新背景图像 Bf 即 ,


譬 …
式中B (, 为背景图像 ; 为二值图像 ; f ) X Df I为第
[ 郭雷 ,李 晖晖 ,鲍永 生 . 1 ] 图像融合 [ . M]北京 : 电子
工业 出版 社 ,20 . 08

视频监控系统中一种运动目标的检测方法

视频监控系统中一种运动目标的检测方法

运动 目标的检测是指从 序列 图像 中将运动 目标从背 究在背景静止情 况下 的目标检测。
景 图像 中分割出来 。运动 目标 的检测 和跟踪是计 算机视 觉研究的主要问题之一 , 它融合 了 自动控制 、 图像处理 、 模
1 运 动 目标 的检 测 技 术
运动 目标 的检 测过 程包 括运 动 目标检测 的 预处理 、
( 台大 学 , 东 烟 台 240 ) 烟 山 60 5
【 摘 要】提 出了一种基于 改进 的背景 差分 法 的运 动 目标检 测 和识 别 的方 法 , 该算 法用 于 视 频监 控 系统 中运 动 目 检 测和 报 标 警 。双 阈值 法和 动态阈值法 有效地检测 出图像 中的运动 目标 。Mal . t b70中对 算法进 行 了仿真 , 验表 明, 方 法有 效去 除 了 a 实 该 运 动 目标 阴影及 背景噪声 , 可准确地 检测 出运 动 目标 。 【 关键词】视频监控; 背景差分法; 运动 目 标检测; 迭代法 【 中图分类号】T 998T 314 N 1. ;P9.1 【 文献标 识码 】A
邕雷 目酗目
a 平 均 法 b 改 进 法 c处 理 后 的 图像
稳健 I也 不好 。另一种 常见 的方法 就是对一 段时 间 内的 生
图 2 平 均 法 与 改进 法 的 比较
视 频图像 用累加求 平均值 的方法获得 背景 图像 。此方法 14 背景图像的更新 . 虽 然计算 简单 , 是很容 易 把前 景 目标 混 入到 背景 图像 但 监控视频 中的背景并 不是一成 不变 的。最 常见 的影
景 图像 的质量 。
中的新增物体当成运 动物体检测 出来 , 或者是在运动实体
内部容易产生空洞现象 , 以背景 图像需要更新 - 。 所 - , 常用 的背景 图像 更新 方法 是 : 隔一 段 时 间提取 新 每 的背景 图像 , 新取 的图像可 以是连续帧的视频图像的平均 值, 新取图像 与之前 的背景 图像 按照 一定 的 比例综 合 , 就
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
1 5] 。背景差分的基本操 比较从而分割出 运 动 目 标 [
作是 : 首先需要 有 一 张 背 景 图 像 , 然后对视频图像 和此背景图像进行差分运算 , 用一张新的图像保存 差分结果的绝对值 。 背景差分法的应用需要有一定的限制和约束 。

收稿日期 : 修回日期 : 2 0 1 1年5月1 0日, 2 0 1 1年6月2 3日 作者简介 : 徐卫星 , 男, 研究方向 : 运动目标的在线检测 。 王兰英 , 女, 硕士研究生 , 研究方向 : 嵌入式系统与图像处 理 。 李秀娟 , 女, 教授 , 硕士生导师 , 研究方向 : 图像信息处理与智能控制 。
1 4 2
徐卫星等 :一种基于 O e n C V 实现的三帧差分运动目标检测算法研究 p
第3 卷
要求前景 ( 运 动 物 体) 像素的灰度值和背景像素的 同时要求摄像机是静止 灰度值存 在 一 定 的 差 别 , 的 。 再者背景差分法作用于像素 , 在这个低层次的 处理中 , 操作的 对 象 是 单 个 的 像 素 , 由于缺乏对图 , 理解 ” 检测结果很容易受噪声和各种突 像的足够 “ 使检测结果的准确度大大下降 。 但由于 变的影响 , 背景差分法具 有 实 现 简 单 , 运 算 速 度 快, 在大多数 所以背景差分 情况下检测结果能完整的突出优点 , 法已成为应用最广泛的运动检测方法 。 )帧间差 分 法 同 背 景 差 分 一 样 , 也是一种基 2 于像素的运动检测方法 , 它通过对视频图像序列中 相邻的两帧图 像 进 行 差 分 运 算 来 获 得 运 动 物 体 轮 廓
[ 7]
向, A B 部分代表第一帧 图 像, B C 部分代表第二
帧图像 , C D 部分 代 表 第 三 帧 图 像。 帧 间 差 分 法 能 够检测出相邻两帧间发生了变化的区域 , 这个区域 实际上包括运 动 物 体 在 前 一 帧 所 覆 盖 的 区 域 即 显 露区 A 和运动物体现在所覆盖的区域 B 即图中 C, 显然这比运动目标的实际轮廓要 画左斜线的部分 , 大 。 同样 , 第三帧图像减去第二帧图像的结果是 即 图 中 画 右 斜 线 的 部 分。 本 文 的 三 B C D 三部分 , 帧差 分 法 就 是 将 两 个 差 分 图 像 A B C和B C D做 “ 与” 运算 , 结果为 B 刚好为完整的运动目标 。 C, 2. 2 三帧差分算法 )从视 频 图 像 序 列 中 选 取 连 续 的 三 帧 图 像 , 1 , , 其中第一帧图像I 第二帧 图 像 I x, x, y) y) k-1 ( k( ; 第三帧图像l x, y) k+1 ( )计算第一帧与第二帧的差值图像 A( , 2 x, y) 得到目标的变化量 ; )计算第二帧与第三帧的差值图像 B( , 3 x, y) 得到目标的变化量 ; )求帧差 A( 与 B( 的交集得到运动 4 x, x, y) y) 目标粗糙的运动区域图像 ; )运用数学形态学运算去掉背景中噪声 。 5 2. 3 帧间差分计算 , 设图像序列 表 示 为 I 其中( 表示 x, x, y) y) i( 图像中像素点的位置坐标 , 或 i 表示第i 帧的图像 ( 。选取图像序列中连续的三 者称为i 时刻的图像 ) , , , 帧图像I 分别计算 x, I x, I x, y) y) y) i -1 ( i( i +1 ( ) 差值图像用式 ( 表示 : 相邻两帧图像的差值图像 , 1
[ 9]
通过差 邻两帧图像之间的差值来获得运动区域的 , 值图像能快速 地 检 测 出 相 邻 图 像 中 运 动 目 标 所 引 但是它提取的运动目标比实际的要 起的运动范围 , 大, 往往出现 “ 双影 ” 现象 ; 另外 , 由于检测出来的物 无法检测到重叠部 体是前后两帧相对变化的部分 ,
1 2] 。为了 导致 检 测 到 的 目 标 发 生 “ 空洞” 现 象[ 分,

徐卫星 王兰英 李秀娟
( ) 河南工业大学电气工程学院 郑州 4 5 0 0 0 7 摘 要 运动目标检测在视觉监控系统 、 医学图像分析 、 工业检 测 和 军 事 等 领 域 有 着 广 泛 的 应 用 。 运 动 目 标 检 测 处 于 这些应用的最前端 , 检测结果的准 确 精 度 对 后 续 处 理 有 很 大 的 影 响 。 文 中 提 出 了 一 种 三 帧 差 分 运 动 目 标 检 测 算 法 , 利用 并与基本帧间差分算法进行对 比 分 析 , 结果表明该 算 法 准 确 率 高, 运 算 速 度 快, 能满足实 O e n C V 函数库进行了仿真测试 , p 时要求 。 关键词 三帧差分 ;运动目标检测 ; O e n C V p 中图分类号 T P 3 0 1. 6
克服帧间差分法所存在的问题 , 本文采用了一种改 进的帧间 差 分 法 — 三 帧 差 分 来 检 测 运 动 目 标 。 三 帧差分法是在帧间差分的基础上进行改进 , 将相邻 能较好的检测出 的三帧图像作为一组进行再差分 , 中间帧运动目标的形状轮廓 。 三帧 差 分 的 实 现 原 理 如 图 1 所 示。 箭 头 的 方向 代 表 目 标 运 动 的 方
总第 2 6 5期 2 0 1 1 年第 1 1期
计算机与数字工程 C o m u t e r &D i i t a l E n i n e e r i n p g g g
V o l . 3 9N o . 1 1 1 4 1
一种基于 O e n C V 实现的三帧差分运动 p 目标检测算法研究
究运动目标的 检 测 具 有 重 要 意 义 。 在 背 景 静 止 的
6] : 情况 下 , 常 用 的 运 动 目 标 检 测 方 法 主 要 有 三 种[
帧间差分法 、 背景减除法 、 光流法 , 三种方法各有优 缺点 , 各有适用的场合 。 )背景差分法通过 输 入 图 像 与 背 景 图 像 进 行 1
1 引言
现实生活中 , 大量有意义的视觉信息都包括在 运动之中 。 尽管 人 类 的 视 觉 即 能 看 见 运 动 物 体 又 能看到静止的 物 体 , 但 是 在 许 多 场 合, 比如重要场 汽 车 的 自 动 驾 驶 和 辅 助 驾 驶、 交通 所的保安监控 、 流量的控制 、 航 空 和 军 用 飞 行 器 的 制 导, 人们往往 只对运动目标 物 体 感 兴 趣 。 运 动 目 标 检 测 是 目 标 跟踪 、 目标分类 、 目标行为理解的基础 , 获取准确的 运动目标对于 后 面 的 处 理 具 有 重 要 意 义 , 因 此, 研
,m , A b s t r a c t o v i n t a r e t d e t e c t i o n i s w i d e l u s e d i n v i d e o s u r v e i l l a n c e e d i c a l i m a e r o c e s s i n i n d u s t r i a l d e t e c t i o n M g g y g p g , , a n d m i l i t a r f i e l d e t c . D e t e c t i o n o f m o v i n o b e c t i s t h e f i r s t s t a e f o r t h e s e a l i c a t i o n s s o t h e a c c u r a c o f r o c e s s i n r e s u l t y g j g p p y p g i n f l u e n c e o n t h e f o l l o w u t r e a t m e n t . T h i s a t h r e e f r a m e d i f f e r e n c e a l o r i t h m f o r m o v i n t a r e t d e t e c r e a t l a e r r e s e n t s - - - p g g g g y p p p , ,m t i o n . S o m e s i m u l a t i o n t e s t s a r e c a r r i e d o u t b t h e a l o r i t h m a n d t h e b a s i c f r a m e d i f f e r e n c e m e t h o d r e s e c t i v e l o r e o v e r y g p y ,w t h e r o o s e d r e s u l t s a r e a n a l z e d c o m a r a t i v e l .T h e r e s u l t s i l l u s t r a t e t h a t t h e a l o r i t h m i s m o r e a c c u r a t e a n d r a i d h a t p p y p y g p f u l f i l l t h e r e a l t i m e r e u i r e m e n t . c a n q , , K e Wo r d s t h r e e f r a m e d i f f e r e n t i a l d e t e c t i o n o f m o v i n o b e c t O e n C V - g j p y C l a s s N u m b e r P 3 0 1. 6 T
T h r e e i m a e D i f f e r e n c e A l o r i t h m f o r M o v i n a r e t D e t e c t i o n - g g gT g o n O e n C V B a s e d p
X u W e i x i n a n L a n i n i X i u u a n W L g g y g j ( ,H , ) C o l l e e o f E l e c t r i c a l E n i n e e r i n e n a n U n i v e r s i t o f T e c h n o l o Z h e n z h o u 5 0 0 0 7 4 g g g y g y g
相关文档
最新文档