本文链接:https://blog.csdn.net/qq_18234121/article/details/82763385

作者:冻人的蓝鲸梁思成

视频分割算法可以从时域和空域两个角度考虑。时域分割算法利用视频流时域连续性,通过 相邻帧的时域变化来检测运动目标。在摄像头静止的情况下,常用的方法有帧差法减背景法

帧差法比较直观实用,对光照的变化干扰不敏感,但是 对目标的检测不准确,对于缓慢运动的目标甚至可 能无法提取出目标边界,对于快速运动的目标提取 出的目标区域又过大。减背景法容易得到目标的准 确描述,对静止和非静止的目标都适用,但是背景更新的计算量比较大,还必须建立合适的模型,同时在 背景大幅运动的场合也不适用。

空域分割算法利用图像的空域属性( 颜色、 亮度、纹理以及边缘信息等) 来提取视频对象。例 如基于边缘的目标提取算法,虽然算法能检测出精 确的图像边缘,但是检测过程存在较大的盲目性,检 测出的边缘不仅包括所需要的运动目标的边缘,连 背景中的静止物体的边缘也一并被检测出来,这就 给目标分割带来困扰。

1.运动目标检测

采集某一时间段里的视频序列图像,设f( x,y, t) 表示t时刻当前帧,其前后相邻的两帧分别用 f( x,y,t - 1) 和f( x,y,t + 1) 表示。t时刻相邻两帧之间作差分运算:

  |f(x,y,t)-f(x,y,t-)|<T            背景
  |f(x,y,t)-f(x,y,t-)|>=T 前景
  其中f(x,y,t),f(x,y,t-)分别为t,t-1时刻对应像素点的像素值,T为阈值。

以下图为例:

仅根据两帧序列图像间的差分来检测运动目标存在许多问题。如图1 所示,d、e 两帧图像差分的结果中,由于相邻两帧之间的差分并不完全是运动目标,上一帧被运动目标覆盖的背景,会在下一帧显露出来,并被误判为前景目标,这样导致得到的运动目标区域包括背景区域,因此会比实际运动区域大。

在实际应用中,为了后续的运动分析与理解,总希望得到最准确的运动目标,因此本文中采用三帧差分代替两帧差分来实现运动目标检测。三帧差分法利用两帧差分结果Dt,t-1 ( x,y,t) 和 Dt,t + 1 (x,y,t) 的“与”运算确定当前帧f( x,y,t ) 中运动目标边缘D3( x,y,t) ,即

其中,× 为与运算。图1 是一段subway 视频,图1f为得到的运动目标边缘D3(x,y,t) ,可以看出三帧差分法有效地解决了运动目标的遮挡和背景重现问题,得到了准确的运动目标边缘,并且在一定的程度上抑制了光照、阴影以及噪声的影响。

------------------------------------------------------------------------分界线----------------------------------------------------------------------------------------

经过“与”运算后运动区域中的噪声得到了一 定程度的抑制,但在D3(x,y,t) 中还存在着部分孤 立的噪声点,若不加处理将影响对运动目标的有效 检测。可用邻域平均、中值滤波和高斯低通滤波等方法来抑制噪声。

对于邻域平均法,如把求灰度平均值的邻域取得太大,或反复进行若干次操作,则会使图像模糊,图像的质量也会随之降低。中值滤波不仅能有效滤除图像中的孤立噪声点,与邻域平均法相比还能有效保护边界信息。图2为中值滤波前后的效果图。邻域S 采用大小为3 × 3 的窗口。

2.边缘检测方法之Kirsch边缘检测

该算法既能保持图像的边缘细节又具有一 定的抗噪声能力,有效地克服了经典的一阶和二阶微分边缘检测算子对噪声敏感的缺点。虽然该算法计算开销比较大,但它可以产生最大的梯度边界。 Kirsch 算子从8 个方向对图像边缘信息进行提取。 详细的边缘检测算法描述如下: 首先获得如图3 所示的8个滤波模板。

下一步的操作有点绕,具体是:将这八个模板依次在图像中一点(x,y)处进行滤波,那么会产生八个值,选出其中的最大值Fmax。按这种取值方法,得到了整幅图的滤波值。

由fmax ( x,y ) 组成滤波图像,基于滤波图像中的极值点可得到极值点图像FImax ( x,y) ,FImax ( x,y) 定义为:

FI ( x,y) 表示图像中( x,y) 处的像素值,若 ( x,y ) 在滤波图像中是极值点,则FI ( x,y ) = fmax ( x,y ),否则FI( x,y ) = 0。

根据极值点图像FImax和预设的阈值T,可得到边缘图像EI,EI 定义为:

EI( x,y) 表示边缘图像中( x,y) 处的像素值,若FI( x,y) > T,则EI( x,y) = 1,否则,EI( x,y) = 0

在边缘检测时,一些重要的边缘细节由于干扰或对比度不足变得模糊、微弱。直接利用Kirsch 边 缘检测获得的边缘线容易出现断点,效果不是很理 想。本文中通过图像边缘连续性检测来调节阈值 T,从而得到连通的图像边缘。通常在边缘不连续的地方,象素值会有较大的差异,文中用4 × 4 的方向模板计算目标点周围6个方向上的差值,当最大差值超过某个门限值时,则可认为该点为不连续点,由此来检测图像边缘的不连续性。通过该算法在抑制噪声、保证边缘连续性的同时较好地保护了低强度的边缘细节,获得了令人满意的效果。算法流程图如左图,预设的阈值T 取不同值的情况下,边缘检测效果如右图所示。

阈值T决定着边缘定位的精度和边缘的连续。T较小时,边缘定位精度高,连续性差,低强度的边缘细节被漏检;T 较大时,情况正好相反,因此,要根据需要调节阈值T。

3.运动目标分割

设D3(x,y) 是经过中值滤波后由三帧差分得到的运动区域掩模,EI(x,y,t) 是由Kirsch 边缘检测算法得到的当前帧的边缘掩模,则最终的运动目标边缘图Mt为:

结果下图所示:

由图6可以看出,将时空域相结合可以准确的检测出运动目标的边缘,有效地克服了阴影问题。但所得到的边缘仍存在不连续的问题,需要对运动对象边缘进行连接。

4.目标提取

文中采用自适应数学形态学对图像边缘进行连接,对每一个端点,用自适应椭圆结构元素进行自适应膨胀运算,结构元素的大小和方向可根据像素的局部特性如斜率、曲率进行调整,得到膨胀后闭合的运动目标边缘B( x,y,t ) ,因为经过膨胀处理,原图像边缘难免会变宽,因此需要对处理后的B( x,y,t) 图像结合EI( x,y,t ) 重新进行边缘定位,得到最终的闭合的运动目标边缘O(x,y,t) :

最后,对闭合的运动目标边界O(x,y,t) 进行区域填充,得到运动目标的二值掩模图像,将其与当前帧f( x,y,t) 相结合,便实现了对运动目标的分割,结果上面右图 所示。与图1中基于帧差法的分割结果相比较其定位精度高,分割效果好

5.结论和小结

文中采用的方法综合利用了时域和空域的检测结果来提高分割性能。帧差法提取运动信息的突出特点是实现简单、运算速度快,而且由于相邻帧间环境亮度变化很小,受光照突变影响较小,具有较强的鲁棒性。结合改进的Kirsch 边缘检测算法和基于形态学的边缘连接算法,有效地消除了三帧差分带来的“重影”和“空洞”现象,提取了关于运动目标更为完整的区域。实验表明,本算法能够快速响应实际场景的变化,准确、有效地进行运动对象分割。

原文参考地址:http://suo.im/4LuhH4

【数字图像处理】帧差法与Kirsch边缘检测实现运动目标识别与分割的更多相关文章

  1. 机器学习进阶-背景建模-(帧差法与混合高斯模型) 1.cv2.VideoCapture(进行视频读取) 2.cv2.getStructureElement(构造形态学的卷积) 3.cv2.createBackgroundSubtractorMOG2(构造高斯混合模型) 4.cv2.morpholyEx(对图像进行形态学的变化)

    1. cv2.VideoCapture('test.avi') 进行视频读取 参数说明:‘test.avi’ 输入视频的地址2. cv2.getStructureElement(cv2.MORPH_E ...

  2. Win8 Metro(C#)数字图像处理--2.55OSTU法图像二值化

    原文:Win8 Metro(C#)数字图像处理--2.55OSTU法图像二值化  [函数名称] Ostu法图像二值化      WriteableBitmap OstuThSegment(Writ ...

  3. 【Matlab】运动目标检测之“帧差法”

    videoObj = VideoReader('4.avi');%读视频文件 nframes = get(videoObj, 'NumberOfFrames');%获取视频文件帧个数 : nframe ...

  4. Win8 Metro(C#)数字图像处理--2.59 P分位法图像二值化

    原文:Win8 Metro(C#)数字图像处理--2.59 P分位法图像二值化  [函数名称]   P分位法图像二值化 [算法说明]   所谓P分位法图像分割,就是在知道图像中目标所占的比率Rat ...

  5. 数字图像处理之sobel边缘检测

    在前两部文章介绍了几种边缘检测算法,和位图的内存结构.如果对前两篇文章已经理解透彻 了,那么本文将带你进入数字图像处理的世界. 本文通过C代码实现基本的sobel边缘检测,包括8个方向和垂直方向: 代 ...

  6. Win8 Metro(C#)数字图像处理--2.57一维最大熵法图像二值化

    原文:Win8 Metro(C#)数字图像处理--2.57一维最大熵法图像二值化  [函数名称] 一维最大熵法图像二值化WriteableBitmap EntropymaxThSegment(Wr ...

  7. Win8 Metro(C#)数字图像处理--2.58双峰法图像二值化

    原文:Win8 Metro(C#)数字图像处理--2.58双峰法图像二值化  [函数名称]   双峰法图像二值化 WriteableBitmap  PeakshistogramThSegment( ...

  8. Win8 Metro(C#)数字图像处理--2.48Canny边缘检测算法

    原文:Win8 Metro(C#)数字图像处理--2.48Canny边缘检测算法  [算法说明] Canny边缘检测算法可以分为4步:高斯滤波器平滑处理.梯度计算.非极大值抑制.双阈值边缘检 测和 ...

  9. Win8Metro(C#)数字图像处理--2.14Prewitt 边缘检测

    原文:Win8Metro(C#)数字图像处理--2.14Prewitt 边缘检测  [函数名称] 图像Prewitt边缘检测函数PrewittEdgeProcess(WriteableBitmap ...

随机推荐

  1. 一百三十九:CMS系统之首页帖子列表布局

    # 配置ueditor上传文件到七牛UEDITOR_UPLOAD_TO_QINIU = True # 设置为True是,视为开始把图片传到七牛储存,本地不储存UEDITOR_QINIU_ACCESS_ ...

  2. IDEA中提示Error:java: Compilation failed: internal java compiler error

    解决办法:File-->Setting...-->Build,Execution,Deployment-->Compiler-->Java Compiler 设置相应Modul ...

  3. PAT 甲级 1043 Is It a Binary Search Tree (25 分)(链表建树前序后序遍历)*不会用链表建树 *看不懂题

    1043 Is It a Binary Search Tree (25 分)   A Binary Search Tree (BST) is recursively defined as a bina ...

  4. Win10安装PostgreSQL9.6

    首先去 官网 下载PostgreSQL 9.6. 可以看到最新版已经到11了,但是我们这里还是以9.6.10版本为例进行下载. 下载好之后点击进行安装,安装期间的一些参数如下: 默认的安装位置是C:\ ...

  5. Hibernatne 缓存中二级缓存简单介绍

    hibernate的session提供了一级缓存,每个session,对同一个id进行两次load,不会发送两条sql给数据库,但是session关闭的时候,一级缓存就失效了. 二级缓存是Sessio ...

  6. iOS-UILabel的使用

     常用属性UILabel //显示的文字 @property(nonatomic,copy)   NSString           *text; //字体 @property(nonatomic, ...

  7. 【转】Entity Framework简介

    Entity Framework Core 可基于现有数据库创建模型,也可基于模型创建数据库. 以下文字来源于:http://www.entityframeworktutorial.net/what- ...

  8. Word 分栏页码,一个页面两个不同页码的设置

    1. 前言 在一些报纸.杂志中,我们可以见到各种各样的排版风格效果,其中有一种效果是一个页面设置了两栏,并且每栏下面都有不同的页码,那么,这种效果是如何实现的呢?这种页码在Word中默认页码样式中是没 ...

  9. windows安装redis并为php5.4添加redis扩展

    第一步 安装包下载 首先下载php5.4对应版本的php_igbinary.dll,php_redis.dll扩展.(php7以后可不需要php_igbinary.dl这个文件了) 链接:https: ...

  10. Python——类和对象(一)

    一.定义类 在面向对象的程序设计中有两种重要概念: 类:可以理解为一个种类,一个模型,是一种抽象的东西. 实例.对象:可以理解为一种具体制作或者存在的东西. 定义类的语法格式如下: class 类名: ...