【数字图像处理】帧差法与Kirsch边缘检测实现运动目标识别与分割
本文链接: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.cv2.VideoCapture(进行视频读取) 2.cv2.getStructureElement(构造形态学的卷积) 3.cv2.createBackgroundSubtractorMOG2(构造高斯混合模型) 4.cv2.morpholyEx(对图像进行形态学的变化)
1. cv2.VideoCapture('test.avi') 进行视频读取 参数说明:‘test.avi’ 输入视频的地址2. cv2.getStructureElement(cv2.MORPH_E ...
- Win8 Metro(C#)数字图像处理--2.55OSTU法图像二值化
原文:Win8 Metro(C#)数字图像处理--2.55OSTU法图像二值化 [函数名称] Ostu法图像二值化 WriteableBitmap OstuThSegment(Writ ...
- 【Matlab】运动目标检测之“帧差法”
videoObj = VideoReader('4.avi');%读视频文件 nframes = get(videoObj, 'NumberOfFrames');%获取视频文件帧个数 : nframe ...
- Win8 Metro(C#)数字图像处理--2.59 P分位法图像二值化
原文:Win8 Metro(C#)数字图像处理--2.59 P分位法图像二值化 [函数名称] P分位法图像二值化 [算法说明] 所谓P分位法图像分割,就是在知道图像中目标所占的比率Rat ...
- 数字图像处理之sobel边缘检测
在前两部文章介绍了几种边缘检测算法,和位图的内存结构.如果对前两篇文章已经理解透彻 了,那么本文将带你进入数字图像处理的世界. 本文通过C代码实现基本的sobel边缘检测,包括8个方向和垂直方向: 代 ...
- Win8 Metro(C#)数字图像处理--2.57一维最大熵法图像二值化
原文:Win8 Metro(C#)数字图像处理--2.57一维最大熵法图像二值化 [函数名称] 一维最大熵法图像二值化WriteableBitmap EntropymaxThSegment(Wr ...
- Win8 Metro(C#)数字图像处理--2.58双峰法图像二值化
原文:Win8 Metro(C#)数字图像处理--2.58双峰法图像二值化 [函数名称] 双峰法图像二值化 WriteableBitmap PeakshistogramThSegment( ...
- Win8 Metro(C#)数字图像处理--2.48Canny边缘检测算法
原文:Win8 Metro(C#)数字图像处理--2.48Canny边缘检测算法 [算法说明] Canny边缘检测算法可以分为4步:高斯滤波器平滑处理.梯度计算.非极大值抑制.双阈值边缘检 测和 ...
- Win8Metro(C#)数字图像处理--2.14Prewitt 边缘检测
原文:Win8Metro(C#)数字图像处理--2.14Prewitt 边缘检测 [函数名称] 图像Prewitt边缘检测函数PrewittEdgeProcess(WriteableBitmap ...
随机推荐
- mysql 1577、1548错误 解决方案
mysql 1577.1548错误 解决方案 1.mysql版本: 5.5.12 2.问题原因: 使用Navicat导出数据库的提示 :1577 – Cannot proceed because sy ...
- 怎样创建一个OpenStack官方账号?
OpenStack官方账号分两种: 社区成员 (Community Member) 基金会成员 (Foundation Member) 基金会成员比社区成员的权利多一点: 允许提交峰会议题 允许对峰会 ...
- 对Mysql数据表本身进行操作
创建实验环境 mysql> create database test_db; Query OK, 1 row affected (0.00 sec) mysql> use test_db; ...
- 用Dev C++编写第一个C语言程序
不少新同学表示对计算机类专业有些担忧,那么可以趁军训期间提前玩玩. 学校一般使用VS2008进行编程,VS2008功能强大,内容丰富,体积也比较大.如果只关注C语言编程的话,有一个非常轻便的软件Dev ...
- 取用户中文名 FDM_CUST_USER_NAME_READ_SINGLE
DATA:lv_first TYPE ad_namefir, lv_last TYPE ad_namelas, lv_full TYPE ad_namtext. CALL ...
- Spring Boot学习笔记——搭建一个最简单的hello world
使用Spring Initializer新建项目 进入https://start.spring.io/新建一个项目,并下载下来. 这就是一个最基础的spring boot项目了. 我这里是基于spri ...
- Paper Mark2
论文:CBAM: Convolutional Block Attention Module 论文链接 pytorch代码 论文:Approach for Fashion Style Recogniti ...
- Jenkins占用内存较大解决办法
主机启动jenkins后导致内存占用较大 登录主机top按键M按消耗内存排序 未调优前查看进程 修改配置文件 /usr/local/jenkins-tomcat/bin/catalina.sh 增加一 ...
- WordPress获取特色图像的链接地址
为什么要获取WordPress的特色图像呢? 这主要是因为,我们已经写好了静态模板文件,只有获取WordPress特色图像地址插入进去就可以了,非常方便. 还有就是有的时候,我们需要设置图片的宽度为1 ...
- 【CUDA开发】论CUDA和LAV解码器是否真的实用
先说配置,我电脑E3V3+GTX780TI视频就一个普通的720P AVC1编码MP4视频,实时检测软件是CPU-Z和GPU-Z,AIDA64[全默认设置]全部用ptoplayer默认播放时候,播放3 ...