面向对象分割(精选8篇)
面向对象分割 篇1
摘要:面向对象的影像分割技术是信息提取方法的核心之一, 分割效果直接影响到信息提取的质量。本文对分割参数的选择进行了大量的实验研究, 提出将纹理信息和边缘检测信息加入到分割过程中的新方法。实验表明, 该方法有效避免了分割结果过于破碎的现象, 有利于边缘点多且较为复杂的影像地物的分割。得到的分割结果边缘连续, 很好地解决了“椒盐噪声”对信息提取结果 的影响。
关键词:面向对象,影像分割,纹理滤波,边缘检测
0 引言
当前智慧城市建设如火如荼, 其发展离不开基础数据的支撑。遥感影像分割技术作为信息提取的核心之一, 对信息提取的质量具有决定性意义。遥感影像信息量丰富, 地物形状结构复杂多样, 是影像分割过程中需要克服的难点。
面向对象影像分割有两个主要影响因素:分割尺度和分割参数。分割尺度决定生成影像对象的图斑大小。影像的分辨率差具有不连续性, 存在一定的阶梯类型现象, 不同类别的地物需要选择不同的分割尺度。传统影像分割技术主要依靠影像的光谱信息, 面向对象影像分割过程中, 除可以设置光谱因子、形状因子外, 还可以加入纹理、DEM等作为专题信息, 从而生成高同质性的影像图斑对象。为提高影像分割的质量, 本文提出将纹理信息和边缘检测信息作为专题, 参与面向对象影像分割的方法。
1 纹理信息提取
为获取较好的纹理信息, 本文在纹理信息提取过程中进行了大量的实验对比:一是对比五种纹理概率统计滤波与8种二阶概率统计滤波的提取效果, 并确定二阶概率统计滤波效果更好;二是分别选用3×3, 5×5以及7×7的窗口提取纹理滤波, 对比提取结果发现窗口大小为3×3时效果最好;三是对比二阶概率统计的8个纹理滤波, 并分别参与影像分割, 结果显示相关性 (Correlation) 纹理滤波参与分割的效果最佳。图1为分割结果。
从实验结果来看, 加入非相似性、同质度、方差以及对比度等纹理信息, 显示的分割结果特别破碎。而加入相关性纹理信息后分割效果相比不加纹理的分割效果有明显提高, 尤其是房屋的完整性及边缘分割效果非常好。
2 影像分割试验
利用canny算法对遥感影像的边缘进行检测, 不仅可以有效抑制非边缘信息的干扰, 而且还可以尽量定位到边缘的中心位置, 故而得到的边缘检测结果精度较高。将边缘检测的结果作为专题层参与影像分割, 对建筑物等边缘较为敏感的地物具有突出优势。
2.1 基本参数设置
本文采用面向对象的多尺度分割算法, 基于异质性最小原则进行区域合并。异质性指混合光谱 (标准偏差) 和形状 (紧致度和光滑度的偏差) 的异质性, 即以光谱度、光滑度、紧密度异质性最小为原则执行分割。影像对象的异质性计算公式如下:
光谱异质性计算公式为:
其中nObj1, nObj2, σcObj1, σcObj2为相邻区域的面积和方差, σc为像元内部象元值的标准差, wc为参与分割合并波段权重。
形状因子的平滑度 (hsmooth) 和紧密度 (hcompact) 的计算公式如下:
2.2 影像分割
本文将基本分割参数设置为尺度50, 形状因子0.3, 紧致度因子0.4, 并在此基础上添加边缘和纹理专题执行分割, 图2为分割效果的对比。
对比分析图2的分割结果看到, 只利用光谱信息参与分割, 会产生地物类别的混分现象, 不同性质的地块因为亮度值相似而被合并为一个影像多边形对象。而加入纹理和边缘专题后, 生成的多边形对象同质度较高, 且边缘清晰、完整, 使得分割效果有了非常明显的改善。
3 建筑物信息提取实验
本文选取了沈阳市和平区一块大小为2345pixel×2345pixel的IKONOS高分辨率遥感影像作为数据源。该影像拍摄于2010年, 其全色波段的空间分辨率为1m, 多光谱波段为4m。实验基于前面阐述的分割方法对影像进行分割, 然后针对建筑物的特征建立了知识规则, 并对影像中的建筑物信息进行了提取, 提取结果如图3所示。
图3为提取建筑物信息后叠加在原始影像上的结果, 红色部分为提取的建筑物信息。叠加结果显示:建筑物整体提取效果很好, 提取信息与原始影像中建筑物的大小、形状、位置基本吻合。
4 结论与展望
多尺度分割技术是面向对象分类方法的关键, 信息提取结果的好坏在很大程度上由前期影像分割结果的质量决定。就目前国内外的研究成果而言, 尚未形成最优分割参数的一致评价标准, 只能依靠进行大量的实验。
本文提出的将纹理和边缘检测结果作为专题层参与分割的方法, 大大降低了影像对象的异质性, 提高了影像分割的整体效果, 从根本上改善了建筑物信息提取的质量。面向对象多尺度分割过程中, 各参数的权重系数也是一个很重要的影响因子, 这也是下一步需要重点研究的内容。
参考文献
[1]CHEN Jianyu, PAN Delu, MAO zhihua.Optimum segmentation of simple objects in high-resolution remote sensing imagery in coastal areas[J].Science in china Series D:Earth Sciences, 2006, 49 (11) :1195-1203.
[2]孙晓霞, 张继贤, 刘正军.利用面向对象的分类方法从IKONOS全色影像中提取河流和道路[J].测绘科学, 2006, 31 (01) :62-63.
[3]Haralick R M.Statistical and Structural Approaches to Texture[J].Proceeding of the IEEE, 1979, (67) :768-804.
[4]张俊, 朱国龙, 李妍.面向对象高分辨率影像信息提取中的尺度效应及最优尺度研究[J].测绘科学, 2011, 36 (2) :107-109.
[5]Baatz M, Schape A.Multi-resolution Segmentation:An Optimization Approach for High Quality Multi-scale Image Segmentation[C].Information sverarbeitung XⅡ, 2000, (6) :12-23.
[6]Canny J.A Computational Approach to Edge Detection[J].IEEE Transactions on Pattern Analysis and Machine Intelligence, 1986, 8 (6) :679-698.
[7]陈云浩, 冯通, 史培军等.基于面向对象和规则的遥感影像分类研究[J].武汉大学学报 (信息科学版) , 2006, 31 (4) :316-320.
面向对象数据库系统设计 篇2
关键词:面向对象;数据库;系统设计
一、数据查询(OQL)
作为数据库,最重要的估计是数据查询了,面向对象数据同样如此。在这里,我设计了以下查询语法:get(…)if(…),其中get里面是要查询的类,类的属性等,相当于SQL里面的select … where …。比如有类A,A中有一个属性a(数字型,关于类型后面会说)。则获取所有A类实例中所有a的值小于0的实例集合的查询语句是:get(A)if(A.a<0);
执行该语句应该要返回所有类A实例中所有a小于0的实例集合。具体使用方法如下:
(一)单类查询
即在一个类中进行查询。如:get(A)if(A.a<0);就返回是所有类A实例中所有a小于0的实例集合。而不带条件的查询是get(A);这将返回类A的所有实例。
(二)多类查询
如:get(A,B);将返回类A和类B的所有实例的数据。
(三)方法查询(暂不实现)
(四)表达式计算
如:get(3+3);返回的将是6。
(五)复杂查询
如:get(A.a+B.b,C,C.a/A.a)if(A.a
二、数据操作(OML)
(1)插入数据:new 类名(构造函数参数列表);这样即生成了一个实例(即插入一个实例)。举例如下:
Test t = new Test(1,2,3);//假如类Test的构造参数是三个数字类型的参数。
(2)更新数据:直接调用该类实例的引用的属性复制即可实现更新。举例如下:
t.a = 3;//假如类Test有个公有成员a且是数字型的。
可以有更复杂的、有逻辑的更新,如:if(Test.a>3){Test.a = 1;//将所有符合条件的Test类的实例的a字段复制为1,是集合操作。}
又如:while(t.a>0){Test.a——;//只要实例t的字段a的值还大于0,则所有Test的实例的值继续减一。}
(3)删除数据:free(类名)if(删除条件表达式)。如果没有if,则删除此类的所有实例。free(Test)if(Test.a>0);这将删除类Test的实例t。
(4)数据定义(ODL)
定义语言包括类的定义和对象的定义。语法模仿的Java的语法。具体如下:
定义类:
class :定义类,语法如下:class 类名{
属性定义:其中包括变量权限声明,值定义,类型声明,目前仅支持三种类型,字符串型,数字型和 比特型。
方法定义:方法定义,跟Java类似,但目前仅留接口,不做实现。}
下面是一个实例:
class Test{private num a;//数字型;public str b;//字符串型;protected byte c;//比特型,变长比特型,用来存储大容量数据;public void testMethod(num a){//方法定义,目前暂不实现a++;this.a = a;}“;//”一定要加 “;”号,否则不能结束。
alter:更新类。语法如下:alter 类名.字段名或者方法名 =
{//字段或者方法的新式描述,如果没有任何信息,则表示删除该字段或者方法};举例如下:
alter Test.a {public num a;//如果不是命名为a,而是b,则将删除a字段,新建b字段。
该语句将把字段a的访问权限从私有变为公有。下面是更新方法:alter Test. testMethod {public void testMethod(num a){//方法更新,目前暂不实现a++;this.a = a——};
drop:删除类。此关键字只有一个语法,即:
drop 类名;如:
drop Test;//即表示删除Test类。
(5)数据控制使用try{//行为}catch(){}的语法形式,用来控制事务。在try块中的行为必须全部执行成功数据库才会更改,相当于事务提交。如果发生异常(即不能全部执行成功),则事务回滚。同时还要执行catch块中的信息。一般说来,catch块中留空则只回滚事务。
参考文献:
[1]邢斌、高荣芳、刘予东,《基于JSP的学生就业管理系统》,福建电脑。2006-9
作者简介:
视频对象分割技术研究 篇3
多媒体数据压缩国际标准MPEG-4采用基于对象的编码方法,要求在编码前把视频序列的场景分解为多个视频对象平面,此过程即视频对象分割,是MPEG-4标准关键技术。视频对象分割的主要目的是通过一系列连续图像帧中抽取感兴趣的对象,把视频表示成一个视频对象(VO),为基于对象的编码和基于对象的表达提供技术支持。就目前的应用需求和技术可行性而言,大多数的研究对象都集中在从背景中分割出运动目标。视频对象分割技术是新一代视频编码标准MPEG-4的一个重要支撑技术,有着很广的应用范围(如多媒体检索、目标跟踪、基于内容的视频编码等)。视频对象分割的方法很多,但是它们基本上都有一个共同的模式,即同时利用当前帧的颜色一致区域分割结果和相邻帧之间的运动检测结果进行联合分析,得到最后的分割结果。
1 视频对象分割算法分类
视频对象分割算法的分类方法各异,大多数分类方法是模糊的或不完整的。常见的分类方法有以下几种:
按照用途的不同,视频对象分割算法可分为2类:① 用于视频压缩编码,将分割出来的视频对象单独进行压缩编码,并通过按视频对象对人眼视觉的重要性对不同的视频对象分配不同的码率,达到有效提高视频压缩比改善视觉效果的目的。这种应用一般要求实时、自动地实现对视频对象的提取,并对于分割出的视频对象轮廓要求并不十分严格;② 用于基于内容的交互式多媒体应用,这类应用一般不要求实时、自动实现视频分割,但要求得到准确的视频对象轮廓。这种应用可用于基于MPEG-4的虚拟场景,即将视频对象分割出来后,可以在场景中使用,并按对象进行操纵。
根据视频是否以压缩形式提供,视频分割算法可分为压缩域分割和非压缩域分割。在压缩域分割时,视频是以压缩的形式提供,分割过程一般不要求将视频序列解压缩,以节省处理时间。R.Venkates等提出的分割算法采用的唯一线索是MPEG压缩域中的稀疏分布的运动向量。首先,多帧上的运动向量被累积起来以增强运动信息,并通过空间插值得到密度运动矢量;然后,对密度运动矢量场采用最大期望(Expectation Maximization)算法,基于块的仿射聚类方法用来决定恰当的运动模型;最后,在时间域上进行对象的分割以得到视频对象。V.Mezaris则针对视频检索提出了一种满足实时性要求的压缩域全自动分割算法。由于视频的压缩过程一般会损失某些信息,分割出来的结果一般精度较差。在非压缩域分割时,视频直接以原始视频序列或通过摄像机直接捕获。
按是否需要人工参与分割过程,视频对象分割算法也可分为2类方式:自动方式和半自动方式。自动视频分割算法在分割过程中无需人工的参与,可以自动地从视频序列中分割出运动目标并进行跟踪。然而,在自动视频分割中,由于语义一致性往往采取一些低级特征的组合,作为先验知识隐含在算法中,当自动视频分割算法应用于不同的图像序列时,如果序列中视频对象的语义一致性与先验知识不符,就不可能得到满意的结果。因此,大多数自动视频分割算法只适合于特定的应用场合,而且绝大多数的自动分割算法采用运动信息作为主要的特征。一般来说,基于运动的分割往往计算量大,对噪声很敏感。自动分割算法的主要特点是面向特定应用,预先调整好参数,可完成实时处理任务,如车辆检测系统、大厅监测系统、可视电话和电视会议等。半自动的分割算法需要借助人工的参与来定义语义,如协助定义视频对象的轮廓、位置,所选择的跟踪对象是刚性还是柔性等,然后跟踪后续帧中的初始区域,区域的边界按预先定义的语义特征被修正,以克服由于跟踪带来的误差。因此,半自动分割往往可以获得更好的分割质量。半自动分割方式则适用于复杂场景下对象的分割,虽然分割质量较好,但不具有实时性。主要特点是依赖于人工的交互确定语义级对象并干预分割和跟踪结果,可用于任意对象的分割、操作和高效压缩。
根据分割过程中所利用信息的不同,视频分割算法大致可分为2类:时域分割和时空域联合分割。时域分割通常利用前后帧间对象的运动信息,因为大多数运动对象具有跟背景不同的运动,也可以结合颜色、纹理和边沿等特征。时空分割法则一般先通过时间分割标识出运动对象,然后与空间分割得到的对象边界融合在一起,以得到更精确的分割结果。时空域联合分割由于同时利用时间和空间信息,因此可以取得更好的效果,是目前主流的分割算法。
在视频对象分割的研究领域,虽然提出了很多算法,并且各种算法都有其自身的分割过程。但是其基本的分割策略确是大同小异的,都有其共同之处,分割的一般步骤如图1所示。由于视频对象本身内容特别复杂,同时人工智能技术的现状决定了当前计算机仍然不具有人的观察、识别、理解图像的能力。因此,目前还不存在一种通用并且有效的解决方法。当前视频分割算法的研究趋势之一是寻找更好的基于时域信息的运动分割和时空域信息联合分割方法。
2 基于时域信息的运动分割
基于时域信息的运动分割最早的方法是基于光流场的分割方法。首先估算一个稠密的运动场,然后根据运动信息把场景分割成一系列的视频对象。由于存在孔径问题和遮挡问题,用光流法估算二维运动场的解是不确定的,需要使用附加的假设模型(参数模型和非参数模型)来模拟二维运动场的结构。参数模型受噪声的影响较小,只适用于刚体运动。由于光流法分割对噪声极为敏感,要进行准确的视频对象分割还需要联合对象的颜色、亮度、边缘等空间聚类特征来进行对象分割。文献[1]在形态学算法中结合视频对象的运动特性与空间聚类特征,在分割标记提取步骤中不但考虑亮度聚类信息而且考虑运动聚类信息,然后由密度流场对每个亮度分割标记计算仿射运动参数,仿射模型不够精确的分割标记被进一步分割成较小的标记。这样,由从单特征的分割标记可以得到多特征的分割标记。在分水岭算法中也同时考虑亮度和运动因素。最后,把相似仿射运动的区域合并起来完成分割算法。
对于背景静止或者场景只有简单全局运动的视频图像,可以使用差分或运动补偿的变化检测算法,避免了逐点计算光流估计中的光流场,通过区分时域上相邻2帧图像的变化和未变化区域,再将场景中的像素通过判决归属为不同的区域就可以分割出运动对象。
由于运动的物体可能从当前场景消失或者新物体可能出现在场景中,所有的运动跟踪算法应该包含检测遮挡/去除遮挡的措施。在考虑任何全局缩放的情况下,检测帧间被跟踪区域的面积差别,每帧都用遮挡/去除遮挡信息来更新描述符。跟踪法更适合用于实时性、复杂场景的应用中,这是由于特征的选取使得需要处理的数据量大大减少,因此也影响了视频分割的精度。
3 时空域信息联合分割
这类方法是目前研究最多的分割方法。时空联合分割是将视频看作像素的时空块,同时考虑时间和空间维,基本特点是在对象分割中引入了图像区域分割。首先采用静止图像分割方法获得基于区域的图像表示,然后在区域分割的基础上分割对象,最后将运动区域合并,从而形成需要分割的对象。根据区域合并准则的不同,时空对象分割算法大体可以分为:运动相似性法、区域聚类法、贝叶斯法和区域跟踪法。
基于运动相似性的时空对象分割算法是在区域分割的基础上,计算区域的运动特征,根据区域运动相似性,合并图像区域以形成分割的运动对象。首先利用颜色分割算法将图像分割成颜色一致的区域。然后通过运动聚类,将每个区域指派到相应的运动对象类别中。或者则利用水线分割算法在亮度图像上分割图像区域,通过计算2个区域运动模型参数产生的运动补偿误差来描述2个区域运动的相似性,并在每次迭代中合并最相似的2个运动区域。最后,合并后的运动区域就是分割得到的运动对象。在区域分割的基础上还可以通过聚类算法来实现对象分割。首先利用K均值算法分割图像区域,然后使用K-medoid算法在区域运动模型的参数空间进行聚类,从而获得分割的运动区域。贝叶斯时空对象分割算法是一类在区域级实现的运动对象分割技术。由于图像区域具有颜色、纹理、形状等特征,并可以通过区域运动估计计算区域的运动特征,因此时空贝叶斯对象分割算法集成了图像特征和运动特征共同分割对象。文献[2]将运动对象分割问题描述成一个多线索(空间位置、颜色、运动信息)的分类问题,运用极大似然估计计算对象的类条件概率,从而在MAP准则下实现基于区域的对象分类。文献[3]利用彩色图像分割算法获取图像区域表示,在MRF框架下使用运动特征和区域的位置特征实现区域的运动合并。提出了一种新的区域运动计算方法,使得区域的运动计算和运动相似性测度取得了较好的计算效果。文献[4]在区域邻接图上将对象描述成一个由颜色、运动以及区域尺寸特征相互作用的随机图像。在MRF模型框架下,他们的方法通过集成多种区域特征实现对象的分割。区域跟踪提供了时间轴上区域的运动一致性线索。在一个时间段内,通过对区域时空间关系的分析,可以利用区域的时间一致性分割视频对象。文献[5]提出一种纹理不敏感的区域分割算法来获取图像区域,然后通过种子区域的跟踪和增长实现视频运动对象分割。文献[6]在区域分割的基础上首先检测运动对象,然后建立一个二值对象模型,实现时空联合对象分割。时空域联合分割的算法流程图如图2所示。
在时间域分割中,采用变化检测(Change Detection)的方法。它能够检测出视频序列中运动的对象,同时能够把未覆盖区域给消除。在空间域的分割中,采用分水岭变换进行分割。在进行空间分割以前,首先对原图像进行预处理,以使图像简单化,减少噪音的干扰。然后利用颜色空间的联合梯度图像作为分水岭变换的输入图像进行分水岭变换,把图像分割成不同区域。然后进行时空联合区域合并,形成边缘准确的分割区域。最后,融合时间域与空间域的分割结果。利用时间域分割的结果可以确定出运动物体的大概位置,然后把它投影到空间域分割的结果中去,得到目标的准确边界,产生鲁棒性较好的分割结果,获得边缘定位精确的分割对象。它既利用了帧间时域上的强相关性信息,又利用了帧内空间上的特征,能够取得较好的分割效果。
4 结束语
视频对象分割是面向内容和对象的视频系统中的一项关键技术,是提取关键帧、视频浏览和检索中至关重要的第一步。本文总结了视频分割技术的各种算法,并进一步分析了基于时域信息分割和时空域信息联合分割的方法。最后通过试验举例说明时空联合分割方法能取得较好的分割结果。
视频对象分割最大的难点来自于2个方面:① 现实世界中场景的极度复杂性和多样性,很难建立一个统一的先验模型,这也决定了很难找到一种单一的方法来完成所有的视频对象分割任务;② 对于高层次的语义视频对象,想通过低层次的视觉分割来提取,目前尚很困难。今后应从视频对象分割的实用化出发,充分利用计算机硬件处理图像能力并充分研究视频分割的实时性要求,从人工智能、图像理解及视频内容的先验知识上考虑视频分割,以便推广到任意视频序列的应用上来。
参考文献
[1]CHOI J G,LEE S W,KIM S D.Spatio-temporal Video Segmentation Using a Joint Similarity Measure[J].IEEE Trans Circuits Syst Video Technol,1997(7):279-286.
[2]KHANS,SHAHM.Object Based Segmentation of Video Using Color,Motion and Spatial Information[C]∥Proceedings of IEEEInternational Conference on Computer Vision and Pattern Recognition.Hawaii:Kauai,2001(2):746-751.
[3]CUCCHIARAR,PRATI A,VEZZANI R.Object Segmentation in Videos from Moving Camera with MRFs on Color and Motion Features[C]∥Proceedings of IEEE International Conference on Computer Vision and Pattern Recognition.Wisconsin:Madison,2003(1):405-410.
[4]TSAIG Y,AVERBUCH A.Automatic Segmentation of Moving Objects in Video Sequences:a Region Labeling Approach[J].IEEE Trans.on Circuits Systems for Video Technology,2002,12(7):597-612.
[5]DENG Y,MANJUNATH B S.Unsupervised Segmentation of Color-yexture Regions in Images and Video[J].IEEE Trans.on Pattern Analysis and Machine Intelligence,2001,23(8):800-810.
基于光流场的视频对象分割算法 篇4
随着多媒体信息处理技术的研究发展和数字视频技术的发展, 视频对象分割技术研究的价值和意义显得更加重要, 广阔的应用前景使其一直是国内外多媒体应用领域的研究热点。在视频对象分割处理中计算量非常大, 其算法的实用价值取决于视频对象分割的实时性。细胞神经网络 (Cellular Neural Network, CNN) , 一种大型非线性模拟电路, 其局部联接的结构形式和可达兆兆级的整体运算速度, 具备高速并行处理数据的能力, 可以应用于图像和视频处理领域[1]并满足实时性的要求。
细胞神经网络光流场算法是根据Horn-Schunch光流法[2]的正则化原理提出来的。此光流场算法的CNN输出量值域的有限性和对浮点数运算量化精度不够, 导致所得的光流场精确度会略差一些, 但CNN硬件芯片的优势让其计算速度远大于其他任何光流场算法, 非常适用于对实时性和运算速度要求较高的应用。
1 光流场
光流 (Optical Flow) 表示的是图像中象素运动的瞬时速度, 包含了目标的运动信息[3], 而光流场 (Optical Flow Field) 则是图像中象素运动二维瞬时速度场, 除了运动信息, 还包含了结构信息。视频序列中的运动场可以通过光流场大概计算出来[4], 所以通常认为光流场和运动场基本一致。
2 光流场视频分割法
基于光流场的视频分割算法, 先计算出光流场, 再根据光流场中包含的运动信息对视频中的运动目标进行分割。视频中的运动目标是以背景为参考系的, 计算运动目标的光流场受背景运动情况的影响, 因此视频序列中的背景运动与否直接影响运动目标的分割。背景静止时, 计算出来的光流场集中在运动区域, 光流场的分布用来确定运动目标的相对位置;背景相对运动时, 运动目标和背景都在运动, 图像上每个象素的光流场都不为零, 对于运动目标, 背景的光流场就是噪声。所以在背景相对运动的视频序列中分割运动目标相对复杂, 需要抑制和滤除背景运动信息的干扰, 消除背景的光流场, 只保留分割目标的光流场, 同时增强分割目标的相关信息, 从而将分割目标分割出来。因此, 需要选择合适的滤波器来消除视频序列背景的光流场。
视频序列中的分割目标相对于背景具有运动的连贯性, 其光流场都是完整且独立的连通集, 并且在时空上光流场内部也具有运动的连贯性, 分割目标与背景的光流场在模的数值上存在着差异[5]。因此, 可选取光流的模作为阈值消除背景的光流场。
3 基于细胞神经网络和光流场的视频对象分割算法
本算法是对文献[6]中的光流场视频分割算法的一种改进, 是针对背景相对运动的视频序列中运动对象的分割, 采用CNN光流场算法对光流场进行估算[6]。首先利用CNN边缘叠加模板对视频序列图像进行加强处理, 再对运动目标做运动场估算, 最后根据得到运动的运动场来实现视频对象的分割。本算法在保证分割结果的精确度的同时, 减少了模板的使用, 更加简洁, 处理速度更快。
在算法中, 实验所需的三帧图像分别取视频序列中第m-j帧, 第m帧和第m+j帧, 若视频中运动目标变化不大, 需要增大三幅图像相隔的帧数j。实验目的就是对当前帧中的运动对象进行分割。算法具体步骤如下:
1) 对提取的三幅图像分别利用边缘检测来提取边缘, 再将边缘通过边缘叠加运算分别叠加到原图像上。
2) 利用CNN光流场算法来获得前两帧图像的光流场和后两帧图像的光流场。
3) 利用步骤2的结果计算光流模的均值, 作为消除运动背景的光流场的阈值。
4) 将经过阈值滤波后的光流场点对点的映射为二值图象, 即以光流是否为0作为判断依据。
5) 对步骤4的结果进行空洞填充和膨胀运算等数学形态学操作, 将运动区域完整化。
6) 将二值图象进行逻辑合并与运算, 获得在当前帧中运动目标的位置, 最后利用CNN目标分割模板将运动目标分割出来。
本算法中利用CNN阈值模板来消除视频序列中背景的光流场, 且完成点对点的二值化。CNN阈值模板的输入为各点光流的模, 输出是消除背景光流场后的二值图像。若输出结果为-1, 此象素点进行滤波操作后光流的模是0;若输出结果为1, 则代表此象素点进行滤波操作后光流的模是不变的。
其中, 细胞神经网络阈值模板的I=, 的值是各象素点光流的模的均值, 即光流场阈值, 定义为:
式中x=1, 2, 3, …, M及y=1, 2, 3, …, N, M和N用来表示图像的长和宽。式中及, 和用来表示图像的长和宽。
4 实验与结果分析
本算法通过Matlab仿真工具和CNNVisual Mouse Platform细胞神经网络仿真系统进行仿真实验来验证其正确性和性能。实验中用到视频序列背景是相对运动的, 运动对象和背景在不同视频序列的帧间都存在着微小的变动, 实验目的是从背景相对运动的视频序列中将运动目标分割出来。
分别取视频序列的第110帧、第115帧和120帧作为前一帧、当前帧和后一帧来进行实验。三帧视频序列图像的灰度图像如图1所示。
1) 边缘检测。
利用CNN边缘检测模板分别对第110帧与第115帧、第120帧进行边缘检测操作。结果如图2所示。
2) 边缘叠加。
利用CNN边缘叠加模板在原灰度图像中叠加了步骤1) 得到的边缘, 增强了原灰度图像中运动目标的完整性。结果如图3所示。
3) 光流场估算。
对上步的结果进行光流估算, 由于图像背景是相对运动的, 光流场分布于整个图像区域。结果如下页图4所示。
4) 消除背景光流场和二值化。
通过CNN阈值模板消除视频序列图像中相对运动背景的光流场, 只保留运动目标的光流场, 并以CNN阈值模板输出的值以点对点的方式, 将该光流场映射为二值图象。结果如下页图5所示。
5) 空洞填充。
由于运动目标区域中有的部分缺乏灰度梯度, 使光流场无法正确反映运动场, 运动目标区域不完整, 可以采用内部区域填充来弥补光流场和真实运动场之间的偏差。结果如图6。
6) 数学形态学处理。
数学形态学等图像处理的方法可以进一步完善运动区域。第一步进行两次CNN膨胀模板运算使运动区域扩张, 连通运动区域间断的边缘;第二步利用CNN空洞填充模板对运动区域再次进行空洞填充;第三步再使用两次CNN腐蚀模板, 对因膨胀而扩张的运动区域进行两次收缩, 尽量使运动区域范围精确。结果如图7所示。
7) 逻辑与运算与目标分割。
将上步的结果通过CNN逻辑与操作模板运算获得第115帧中运动目标的位置, 再使用CNN目标分割模板将第115帧中的运动目标分割出来, 实验结束。结果如图8所示。
从仿真实验的结果来看, 本算法可以从背景相对运动的视频序列中分割出运动目标, 处理速度快且精度高, 所得的运动目标在语义层次上也较完整。但目前针对视频对象分割不存在一种适合于所有情况的通用算法, 这将是将来视频对象分割算法的研究方向。
摘要:提出了一种改进的基于光流场的视频对象分割算法, 先用细胞神经网络边缘叠加模板将边缘检测操作所得到的边缘与原灰度图像进行叠加, 完成对原灰度图像的增强处理, 再对运动目标做运动场估算, 最后根据其运动特征实现视频对象的分割。本算法在保证分割结果的精确度的同时, 减少了模板的使用, 更加简洁, 处理速度更快。
关键词:视频对象分割,光流场,细胞神经网络
参考文献
[1]姜庆玲, 刘万军, 张闯.基于CNN的分块自适应彩色图像边缘检测的研究[J].计算机应用研究, 2009, 26 (3) :1 132-1 135.
[2]龚卫国, 桂祖宏, 李正浩, 等.融合Adaboost和光流场算法的视频人脸实时监测[J].仪器仪表学报, 2008, 29 (7) :1 399-1 402.
[3]陶陵.基于光流技术的图像信息获取[D].武汉:华中科技大学, 2005.
[4]卢宗庆.运动图像分析中的光流计算方法研究[D].西安:西安电子科技大学, 2007.
[5]郑南宁.计算机视觉与模式识别[M].北京:国防工业出版社, 1998.
面向对象分割 篇5
图像分割较早就得到人们广泛的重视和研究,也在实际中得到大量的应用,视频分割与图像分割存在着紧密的联系,很多图像分割的方法都可以用到视频分割中去。尽管对图像分割已进行了大量的研究,并已提出了上千种各式各样的算法,但尚没有一种适合于所有图像的通用的分割算法。绝大多数算法都是针对具体问题而提出的。另一方面,给定一个实际要选择适用的分割算法仍是一个很麻烦的问题,由于减少通用的理论指导,常常需要反复的进行实验。本文通过设计基于细胞神经网络的图像分割算法,通过改进参数得到较好视频运动对象分割效果,计算复杂度小,能够得到视频对象的精确边界,不需要依赖太多的人机交互。
1 CNN基础和模板设计
1.1 CNN基础
细胞神经网络是一个大规模非线性模拟系统,结构如图1所示[1,2]。细胞神经网络中,任一细胞仅与邻近细胞相连,彼此之间直接影响;但由于细胞神经网络具有连续时间动力性的传递作用,非邻近细胞之间可以间接相互作用。
定义1一个二维M×N细胞神经网络中处于第i行第j列的细胞记为C(i,j)。
定义2C(i,j)的r领域(影响域)定义为
Nr(i,j)={C(k,l)|max{|k-i|,|l-j|}≤r,
1≤k≤M,1≤l≤N}。
式中:r为正整数。
细胞神经网络的公式推导如式(1)[3]。
状态方程:
输出方程:
1≤i≤M;1≤j≤N (2)
输入方程:
uij=Eij; 1≤i≤M;1≤j≤N (3)
约束条件:
|xij(0)|≤1;1≤i≤M;1≤j≤N。
|uij|≤1; 1≤i≤M;1≤j≤N (4)
对称性:
A(i,j;k,l)=A(k,l;i,j);
1≤i,k≤M;1≤j,l≤N (5)
方程(1)-(5)中各符号定义如下:xij(t)、yij(t)和uij(t)分别是细胞C(i,j)的状态、输出和输入信号(或电压);I是偏差电流(或阈值);C和Rx分别是线性电容和电阻;A(i,j;k,l) 和B(i,j;k,l)分别是反馈算子和控制算子;f为输出函数,由分段线性函数f(v)=0.5(|v+1|-|v-1|)给出。
1.2模板设计
本算法共用了8种模板,分别是:负片模板、标量加合模板、噪声去除模板、边缘检测模板、膨胀模板、区域填充模板、逻辑合并操作模板、目标分割模板。本文主要介绍除噪模板和边缘提取模板对分割的图像进行处理。
1.2.1 除噪处理模板
噪声对分割效果的影响往往很大,所以许多对分割的预处理都是为了减少或消除图像中的噪音。在本文中,选用的是4个CNN基因模板,这四个基因有除噪功能,可以对图像进行边缘光滑化及除噪处理,而且多次经过这种综合处理对图像不会造成太大的变形。设除噪模板为G1、G2、G3、G4,G1的联络模板B分别旋转180、90、270度就得到G2、G3、G4。模板G1联络矩阵及阈值如下:
G2联络矩阵及阈值:
G3联络矩阵及阈值:
G4联络矩阵及阈值:
1.2.2 边缘提取模板
在进行图像边缘提取时,模板A,B,I通常取以下格式[4]:
上式中a,b,c,i的取值很关键,关系到图像边缘提取的效果。但目前还没有文献明确地说明参数值a,b,c,i的确定原则及定量分析这些参数对图像边缘提取效果的影响。本文从实际应用出发,通过反复实验修改模板参数的值,最终模板参数取值如下,边缘提取效果较好:
2基于CNN的视频运动对象分割算法
本文所提出的基于CNN的差分图像合并算法是在三帧图像差分算法的基础上针对CNN的特点提出来的,这一算法借鉴了文献[5]的思想方法。三帧图像差分算法的原理非常简单,即对视频序列中连续三帧图像进行两两差分运算,然后求出差分结果的乘积,从而分割出第二帧中的运动对象[6]。其原理可表达为:
P=[F(x,y,i)-F(x,y,i-k)][F(x,y,i+l)-F(x,y,i)]。
其中F(x,y,i-k)、F(x,y,i)和F(x,y,i+l)分别为连续三帧图像中的第i-k帧、第i帧和第i+l帧,P为第二帧F(x,y,i)中的运动对象。算法流程图如图2。
3仿真结果及分析
用以上算法对一组背景静止的视频序列在仿真平台Matlab 7.0上进行仿真实验。
图3中(a)、(b)、(c)分别是视频序列中第68帧、第88帧和第108帧。各帧图像的尺寸是180×160像素,均为8比特灰度图像。 (a)、(b)、(c)即分别代表F(x,y,i-k)、F(x,y,i)、F(x,y,i+l),实验目的是从图(b)中分割出运动对象。(a)、(b)经L1-L6模板处理,(b)、(c)经N1-N6模板处理,将以上两个结果经逻辑合并操作模板、目标分割模板处理分割出(b)中运动对象。
L1-L6仿真过程如下:
L1 先对图3(a)进行负片处理,负片模板的功能是对输入灰度图像各个像素执行相反操作,使输出图像为数学意义上的负片图像,图4(1)是图3(a)通过负片模板处理后所得。
L2 图3(a)的负片结果与图3(b)一起通过标量加合模板处理后得到图4(2),标量加合是指运算仅对矩阵中的标量元素进行操作,从图上可以看出,运动变化区域被检测到。
L3 由于图像截取和处理过程中,会受到噪声因素的干扰,所以引入噪声去除模板,图4(3)是图4(2)经过噪声去除模板得到的图像。
L4 为了准确分割运动对象,对运动变化区域进行边缘检测,图5(x)是图4(3)经过边缘检测模板处理得到的结果。
L5、L6 接下来进行的是膨胀和区域填充处理,膨胀模板的功能是使分割对象的边缘连贯,填充模板的作用是填黑边缘包围的运动变化区域。图5(x)经过一系列处理后,得到的填充结果如图5(y)。
由L6得到的填充结果跟由N6得到的填充结果一起经过逻辑合并操作模板的处理,就得到了图6,由此图3(b)中运动对象的位置被确定。
最后再通过分割模板对图3(b)进行分割,图7即为分割出来的运动对象。
4结论
本文介绍了CNN的理论及其用于图像分割的处理效果,通过反复实验调整模板参数的取值,可以看到本算法已较好地将运动对象从视频序列中分割出来。本文提出的CNN的简化算法速度大大提高,便于硬件实现,但本算法只适用于背景静止的视频序列。虽然基于细胞神经网络的图像分割算法很多,但是没有一种算法适用于所有场景,我们将在以后工作中继续研究这方面问题。
摘要:提出一种基于细胞神经网络的运动对象分割算法。通过引进除噪模板和改进边缘检测模板,去除了图像采集和处理过程中的噪声影响,得到比较满意的图像边缘信息。实验结果验证了算法的有效性,而且处理速度与图像大小无关,能够实现图像实时处理。
关键词:细胞神经网络,除噪模板,边缘检测模板,运动对象
参考文献
[1]黄立宏,李雪梅.细胞神经网络动力学.北京:科学出版社,2007:1—21
[2] Chua L O,Lin Yang.Cellular neural networks:theory.IEEE Trans-actions on Circuits and Systems,1988;35(10):1257—1272
[3] Chua L O.CNN:a paradigm for complexity.World Scientific Series On Nonlinear Science,Series A,1998;31:3—29
[4] Chua L O,Yang Lin.Cellular neural networks:Applications.IEEE Transactions on Circuits and Systems,1988;35(10):1273—1290
[5] Foldesy P,Linan G,et al.Object oriented image segmentation on the CNNUC3 chip.6thIEEE International Workshop on Cellular Neural Networks and Their Application,2000:283—288
面向对象分割 篇6
1 运动矢量的处理技术
基于压缩域的运动对象分割算法可以利用的特征信息就是运动矢量, 由此可以看出, 运动矢量的处理在压缩域的运动对象分割技术中有着极其重要的作用。但是运动矢量在MPEG视频和H.264视频中都是基于编码目的得到的, 对物体的实际运动并不能实时反映又存在量化噪音, 所以首先就需要消弱或者消除运动矢量中的噪音。常见的运动矢量处理技术主要有以下几种。
1.1 滤波去噪
对现有的基于压缩域的运动对象分割技术进行研究, 从中发现, 滤波去噪成为矢量处理技术的必要步骤, 主要有中值滤波和高斯滤波两类。中值滤波主要是在保护图像边缘的同时达到去除噪声的目的。所谓的中值滤波指的是把以某点为中心的窗口内的所有的像素灰度, 按照从大到小的顺序将之排列, 并把中间值作为那点处的灰度值, 若窗口内的像素数为偶数, 那该点的灰度值为中间两个数值的平均数。高斯滤波又被称为高斯平滑, 也是去除矢量中噪音的一种重要方法, 它指的是通过低频滤波器滤掉图像中的高频分量, 从而达到消弱噪声的目的。基于压缩域的运动对象分割算法中, 为了去除多种不同的噪音, 以上提到的两种滤波技术可以同时使用。
1.2 积累
基于压缩域的运动对象在场景推进的过程中会有局部的突变或者是停滞的现象, 而为了对真正反映视频对象运动矢量的提取, 可以把连续的帧的运动矢量进行累加。在把运动矢量进行积累的时候, 不能只是简单叠加相邻帧的相同位置的运动矢量, 还要考虑相邻帧间宏块偏移的影响。例如投影运动矢量的积累方法就对相邻帧间宏块偏移的影响进行了充分的考虑, 这种方法首先是通过运动矢量找到Pi+1帧在Pi帧中与之对应匹配块的位置, 然后对匹配块占Pi帧中重叠块进行计算。
1.3 致密
在压缩视频中, 一个P帧宏块是和一个运动矢量相对应的。虽然经过上面提到的滤波去噪和积累得到了相对比较可靠的累积运动场, 但是如果只是在此基础上进行运动对象分割, 精度也仅仅只能达到宏块级。所以为了基于压缩域的运动对象分割出像素精度的物体, 可以考虑结合插值等数学方法运用从而得到稠密运动场。比如可以通过三角形空间插值技术的运用, 从而能够获得一个像素与一个运动矢量相对应的稠密运动场, 在此基础上再进行分割, 就能得到精确到像素的运动对象。
1.4 全局运动估计
通常有两种运动存在于视频序列中, 一种是全局运动, 是因为摄像机位置移动或者是摄像机参数的变化导致整个图像发生变化;另一种则是局部运动, 是因为场景中物体在运动所以使得局部图像产生变化。视频压缩、目标跟踪、目标分割、场景分析等这些视频应用都需要对这两种运动进行区分并进行相应的处理。对于全局运动的处理可以先计算光流场, 然后对光流场进行分析并建立运动方程式等方法对全局运动参数进行估计。像素法、块匹配法、特征法等几种光流场计算的方法中, 块匹配法可以不用费力的求光流场就可以得到16×16的块尺度, 甚至是4×4的, 是最适合压缩域的全局运动估计的。例如可以通过使用双线性运动模型来进行全局运动估计, 这样能够很容易的区分出前景和背景。
2 DCT系数所蕴含信息的利用
DCT系数指的是离散余弦变换系数, 现有的视频压缩标准中去掉视频信号空间冗余的必要前提步骤基本都是DCT变换。经过DCT变换后的视频信号中图像的高频分量相对较小, 所以图像中相应的高频成分的系数也大多为零, 并且人眼对高频成分的失真并不是很敏感, 所用可以使用更粗的量化方法, 所以在传动变换系数时多用的码率要比传送图像像素所用的码率小很多。当视频信号到达接收端以后可以通过反离散余弦的方式变换回到样值, 这样虽然会有所失真, 但却在人眼可以接受的范围内。
3 聚类
视频数据挖掘中最常见的一种类型是聚类, 也经常被运用于压缩域的运动对象分割。K均值聚类和模糊聚类都是传统的聚类法, 这两种聚类方法通常都是使用相似度分析以及概率论的方法作为主要手段。除此之外还有一种聚类法叫做运动相似聚类法, 是根据运动的相似性而进行聚类的方法。这个种分割算法中, 每一个聚类都是一个运动对象。目前运动相似聚类法在压缩域的运动对象分割技术中已经被广泛运用。
4 区域增长
图像分割技术中常用的技术还有区域增长, 它是指把具有相似性质的像素集合成一个区域, 就是将图像基于灰度、色彩、纹理、形状或者模型等划分为具有最大一致性的区域。目前, 区域增长在压缩域的运动对象分割中也经常被运用, 但是把区域增长技术运用于压缩域的运动分割技术中, 它的基本操作对象就变成了运动矢量, 而不再是像素。
5 结束语
本文提到了在压缩域的运动分割技术的运动矢量的处理技术、DCT系数所蕴含信息的利用、聚类、区域增长等几种常用的技术。压缩域的运动对象分割技术是在近几年才开始发展的, 虽然取得了一定的发展成果, 但是还是有很广阔的发展前景, 所以我们要不断地对基于压缩域的运动分割技术进行探讨研究, 以便更好地促进该技术的发展进步。
参考文献
[1]孔祥鹏, 邢薇, 马立和.基于H.264压缩域的运动对象快速分割方法[J].智能计算机与应用, 2012, 41 (04) :14-15.
[2]冯杰, 蒋荣欣, 陈耀武.一种新的基于H.264压缩域的运动对象分割算法[J].光电子激光, 2011, 12 (12) :1641-1642.
面向对象分割 篇7
视频运动对象分割被广泛应用于视频编码、视频检索和智能视频监控等。基于运动的对象分割方法主要有三种:第一种是基于变换检测的方法,此方法易受到光照的影响;第二种是同时进行运动估计和运动分割的方法[1],此方法将运动估计和运动分割并行执行,提高了分割质量但运算量较大;第三种是从压缩域提取运动矢量场的方法,最早在MPEG压缩域上提出[2]。近年来H.264视频编码标准以其优良的压缩效率和编码灵活性得到了广泛应用,从H.264未完全解码的视频流中直接提取运动矢量场进行对象分割,作为一类可以提高分割效率的方法得到了广泛的研究[3,4,5,6]。
笔者提出一种基于块特征改进的H.264压缩域分割方法。利用从H.264压缩域提取的稀疏矢量场,首先通过矢量中值滤波和基于块的前向矢量积累等预处理得到更稠密显著的运动场,定义块特征,再采用K均值和EM混合分层聚类方法将对象提取出来。实验结果表明,本方法相比文献[6]的聚类方法,进一步提高了分割效率,且对不同应用场景具有更好的稳健性,实现满足实时要求的较精确分割。
1 运动场预处理
1.1 矢量中值滤波
把H.264压缩视频中的运动矢量场归一化为4×4的块,用矢量中值滤波能够消除孤立矢量噪声并且平滑相邻块之间运动矢量的差异。
使用滑动窗方法进行中值滤波,首先定义N×N窗函数内各元素之间的差异度di为
式中:vi和vj是N×N窗内的运动矢量;L表示欧几里德距离。将{di}升序排列映射到{vi}。最后根据式(2),以排序后的vout作为最后的输出结果。
式中:,v是平均矢量,ρ是预设的阈值。
1.2 基于块的前向矢量累积
文献[5]采用后向运动累积方式,能增强对象运动及摄像机全局运动之类可靠的运动信息,又抑制了单帧运动矢量场通常存在的噪声,其实质是对当前块所在位置及后两帧同一位置上出现的矢量进行累积。本文采用的基于块的前向运动累积方法是针对同一块当前帧及其前两帧的运动矢量进行累积。该方法可以有效解决当前处理帧运动目标内存在静止块不易后续处理的情况,并且通过积累得到了更加显著的矢量场,同时增强了矢量中值滤波无法消除的大块光影噪声矢量,使宏块特征可有效区分两者的差异并消除光影噪声矢量,宏块特征在第2.1节讨论。
为了获得累积运动场,首先采用前向估计的方法重建预测运动场,如图1所示。
利用当前t时刻和t-1时刻的运动场MFt和MFt-1来重建预测运动场PMFt-1。以4×4块为基本处理单元,如图中A块表示的4×4块为例,根据t时刻A块的运动矢量,确定出t-1时刻A块对应的位置。A位置如图1中MFt-1所示,由A所在位置,根据式(3)计算出A块的预测运动矢量。
式中:wi对应MFt-1位置上覆盖i块(如图,i=1,2,3,4)的面积百分比;vi为i块在t-1时刻的运动矢量。
每个块的运动预测矢量都由以上方式得到,就得到了PMFt-1。同理根据MFt-1和MFt-2重建出PMFt-2。最后由式(4)得到最后的累积运动场AMFt。
2 对象分割
2.1 宏块特征定义
把积累后的运动矢量场组织成16×16的宏块形式,以宏块强度,宏块内矢量差异度作为积累后运动场的宏块特征。宏块强度用I表示,宏块内矢量差异度用D表示。
式中:x与y是宏块内4×4块运动矢量的水平和垂直运动分量;q函数以一定阈值将求得的矢量强度归一化。
式中:MB为当前宏块;dif函数计算宏块内不同矢量的个数。
由于H.264编码时运动估计的特性[7],积累后的运动场呈现以下特点:
1)背景的宏块强度为0。运动目标及剧烈光影噪声的宏块强度趋于1,而一般噪声趋于0。
2)运动对象宏块内矢量差异度较大,而背景及噪声的宏块内矢量差异度趋于0。
2.2 宏块层聚类
K均值聚类算法核心思想是找出K个聚类中心,使得每一个数据点和与其最近的聚类中心的平方距离和最小化。它的算法复杂度低,聚类效率高。
本文采用混合多层的聚类方法,首先使用K均值聚类以I和D为特征进行宏块层聚类,经过几次迭代,实现对象初步提取。
算法步骤:
1)初始化宏块级聚类中心;
2)根据每一个宏块数据特征找到离它最近的聚类中心,并将其分配到该中心标明的类;
3)计算新形成类的聚类中心:计算新形成的类中每一个宏块数据特征的平均值作为新的聚类中心,然后重复2),直到聚类中心不发生变化继续4);
4)完成聚类。
2.3 块层聚类
宏块层聚类后,将聚为运动对象类的宏块重新组织成4×4块形式,提取其中每一个4×4块的运动矢量作为块层的特征。接着使用EM聚类来进行块层运动对象分割。EM聚类算法在E步骤和M步骤之间交替直到收敛。
2.3.1 E步骤
定义j个运动模型作为初始聚类中心uj,由式(7)计算每个4×4块运动矢量v(B)到聚类中心uj的距离rj(B),即uj和v(B)的差的平方
再由rj(B)得到运动矢量v(B)属于第j个运动模型uj的后验概率Pj(B)。
式中:n是给出运动模型的个数,σ2逼真度系数。
2.3.2 M步骤
利用最小二乘估计使下列的误差函数最小来更新聚类中心,即运动模型参数ui。
从而得到更新的运动模型参数为
算法步骤:
1)初始化聚类中心(运动模型)u1,u2,…,uN;
2)计算每个运动矢量属于每个运动模型的概率P(jB);
3)按照式(10)更新运动参数;
4)判断更新后的运动参数是否与原来一样,不一样回到2),一样则终止迭代。
最后根据下式将运动矢量分配给每个相应的模型
式中:T为判定运动矢量是否属于第j个矢量模型的阈值。
3 实验结果及分析
选取典型的pairs和hall作为实验测试序列,2个序列均为352×288的CIF格式。实验使用JM8.6版本的H.264编码器对序列进行编码。编码器设置为:Baseline Profile,IPPP。运动估计搜索范围是[-32,32],量化参数为30。EM聚类中T取值在0.7~0.9之间,σ2取值在0.01~0.09之间,实验中根据序列不同略微调整。图2是hall第93帧的分割实验。
图2b是该帧宏块层分割的结果,可以看出对352×288的测试序列,宏块层只需要对22×18个宏块的二维特征数据进行聚类,结果属于运动对象的只有23个宏块,即368(23×16)个4×4块继续进行块层的EM聚类。文献[6]采用对矢量中值滤波后的4×4非零矢量块直接进行EM聚类,由于hall存在剧烈光影噪声,图2c显示了矢量中值滤波后所有非零矢量块,共计1 069块。可见本文采用分层聚类方法需要的数据量仅为文献[6]方法需要数据量的1/3,显著提高了聚类效率。
图3是pair第36帧的分割实验,图3c显示的是该帧矢量中值滤波后的所有非零矢量块,男士左侧身体暂时静止,女士抛的小球运动剧烈,运动估计没有找到匹配块而采用了帧内预测的方式,故块的矢量都为零,文献[6]的方法无法处理此种情况。本文通过基于块的前向运动累积有效地消除了这种情况的影响,图3b和3d分别是宏块层和块层的分割结果。
通过以上比较分析,在文献[6]满足实时处理的前提下,本文改进的分割算法进一步提高了分割效率,并且对有实时要求的不同应用场景有更好的稳健性。
4 结论
笔者提出一种改进的H.264压缩域运动对象分割方法。该方法首先通过对运动矢量场进行矢量中值滤波,基于块的前向运动累积等处理,然后提取块特征采用改进的K均值与EM混合分层聚类方法将运动对象提取出来。实验结果表明,笔者提出的改进的分层混合聚类算法在原有聚类算法的基础上针对不同静止场景获得了更高处理效率和更好的稳健性,且分割质量较好。
摘要:针对H.264压缩域,提出一种改进的运动对象分割方法。首先提取运动矢量场,对该矢量场进行矢量中值滤波,然后基于块进行前向矢量累积获得更加显著的矢量场,最后采用改进的K均值和EM的混合分层聚类方法,基于宏块层、块层两次聚类将运动对象分割出来。实验表明,该方法通过分层聚类,进一步提高了分割效率,能实现满足实时要求的较精确分割。
关键词:H.264,运动对象分割,压缩域,块特征,分层聚类
参考文献
[1]SHEN H F,ZHANG L P,HUANG B,et al.A MAP approach for jointm otion estimation,segmentation,and super resolution[J].IEEE Trans.I mage Processing,2007,16(2):479-490.
[2]VENKATESH B R,RAMAKTLSHNAN K R,SFINIVASAN S H.Videoo bject segmentation:A compressed domain approach[J].IEEE Trans.C ircuits System for Video Technology,2004,14(4):462-474.
[3]ZENG W,DU J,GAO W,et a1.Robust moving object segmentationon H.264/AVC compressed video using the block-based MRF model[J].Real-Time Imaging,2005,11(4):290-299.
[4]LIU Zhi,LU Yu,ZHANG Zhaoyang.Real time spatiotemporalsegmentation of video objects in the H.264compressed domain[J].VisualC ommunication and Image Representation,2007,18(3):275-290.
[5]陆宇,张兆杨,刘志,等.基于运动特征的H.264压缩域对象分割[J].光电子·激光,2009(5):668-671.
[6]刘方青,石旭利,张兆扬.基于EM聚类的H.264压缩域视频对象实时分割算法[J].中国图象图形学报,2007,10(10):1819-1822.
从面向过程到面向对象的变革 篇8
1“软件危机”与面向过程方法
20世纪60年代中期,随着计算机技术的逐步成熟,计算机应用范围的逐渐扩大,软件开发领域急剧膨胀,这时,软件开发人员开始面临一个十分严峻的问题——“软件危机”。
“软件危机”主要表现为三点:第一,开发出来的软件的功能和用户的需求往往“牛头不对马嘴”;第二,软件系统的规模和复杂度的扩大让开发人员力不从心,开发过程中的一些错误已经达到开发人员无法掌控的地步;第三,开发出的软件可维护性很差,要复用已有成果或者对其进行扩展都很困难,软件的进化也很难跟上硬件发展的速度。
追究“软件危机”产生的原因,固然有一部分是因为开发者缺乏对大规模软件的管理经验,缺乏正确的方法学指导或者是开发工具的支持(杨健,张晓玲,周少,2006,135-136),但是最关键的问题在于——当时大多数软件开发工作的全过程,包括分析,设计以及编程实现等,都采用面向过程方法。具体来说,在分析阶段,开发人员根据面临的情况,如用户的需求,软件要求的功能等,做出一个物理模型,其次转换成逻辑模型,再通过数据流分析,把这个模型转化数据流图,记录数据字典。在设计阶段,开发人员根据数据流图划分数据类型,并映射到不同的程序模块类型,通过这样完成分析模型到设计模型的转变,并设计出数据结构图。然后,开发人员在此基础上详细的设计每个程序模块内部的结构和算法。常常是把大模块又分成很多小模块,多次分解,最后再设计完成每个小模块的内容。在实现阶段,利用面向过程的编程语言(如C语言等)进行编程,具体实现整个软件系统。
之所以说这一套方法是导致“软件危机”的关键,是因为它不论是在分析和设计上,还是在编程实现上都存在很大的弊端。
第一,面向过程方法的分析手段是不够妥当的。整个分析和设计阶段可以概括为“需求-数据流-程序模块”的模式,所以对于需要解决的问题,在分析阶段并不能直观的显示出各种事物及其关系,而是映射到数据流中进行分析。因此,当系统比较复杂的时候,很难判断基于数据的分析是否有偏差,是否相对于原本的实际问题有出入,或是否存在理解上的错误。也正是因为所有的分析工作是基于数据流的,开发人员在分析阶段就面临和用户沟通上的困难,他们很难和用户解释数据流图中的内容代表了什么,很难通过沟通发现分析结果和用户需求的差距在哪。并且,如果用户在开发工作的中途想改变一些需求或是外界条件发生了变化,开发人员也不能直接改动分析结果,必须重新映射到数据上再做调整。
第二,从分析阶段到设计阶段的转化是有很大的隐患的。所谓的“数据—程序模块”的转型就是依照一些对应原则,把数据流图转化成程序模块,这两种不同的体系之间的转换是否正确,是否合理是没有保障的。这种“需求-数据流-程序模块”的模式就像多人传话一样,第一个人传话给第二个人,第二个人根据自己的理解把话传给第三个人,第三个人再加上自己的理解,得到的结果和原话已经不是一个意思。原本的内容经每个步骤都被不同的体系“转义”了一遍,这样很可能导致设计出的结果和软件需求的本来面貌相差甚远。
第三,由于面向过程的程序语言本身存在很多不足,导致软件开发的实现阶段出现了很多问题。首先,程序的安全性缺乏保障。很多关键的数据既可以被作用于它们的操作访问,也可以被其他的操作访问。并且,面向过程的程序操作都属于“白盒操作”,所有细节都被暴露在外。一个疏忽的数据修改或者程序调用都可能导致整个系统崩溃。其次,程序员的工作非常繁杂。由于数据和函数是分开来处理的,程序员在编程的时候要考虑的因素就很多,每次编写一个函数都必须把详细的注释添加到数据字典中,对于不同类的数据进行一种操作或者同一类数据进行不同操作都必须写不同的代码。这种编程对程序员的水平要求非常高,仅仅让数据和函数一直保持兼容就已经是程序员沉重的负担。在团体合作中,一个程序员要接手另一个程序员的工作往往需要阅读数十页的数据字典,不同的程序员编写的程序可能还存在着名称重复,风格迥异等冲突,这些问题在复杂的系统中将凭空地加大程序员的工作量。再次,软件的可维护性很差。由于数据和函数代码的分离,每当数据发生改动,所有相关的函数都要重写,想对整个程序进行扩充,升级,或者移植到别的背景下重用都面临着大量的代码修改。
2 面向对象方法
我们可以看到,面向过程方法确实给软件开发工作带来了很多困扰,而面向对象方法正是在这种情况下诞生的。面向对象总的来说有三大特点的:封装性,继承性和多态性。
封装性是面向对象最基本的特点,因为它体现了面向对象最基本的思想:客观世界是由各种对象组成的,复杂的对象可以由比较简单的对象以某种方式组合而成(符于江,2008,451-456)。所有的对象都具有静态属性和动态行为,把相似对象的属性和行为抽象出来,用这些共同的属性(数据)和行为(方法)构成类,作为创建具体对象的模板。封装性就是指把关于一个类的所有数据和方法一起封装在类的内部,只通过一些方法作为对外沟通的接口,外界只能通过这些接口和对象进行联系,而对象内部的很多数据和具体操作是对外不可见的。
继承性是指对于一些具有一般意义的类,可以创建它们的子类,子类可以继承一般类的所有属性和方法,同时可以根据自己的特性,修改继承得来的属性和方法或者添加自己独有的属性和方法。比如对于一般类“亚洲人”,我们可以创建子类“中国人”,“韩国人”等。
多态性有两种形式。第一种是一个类中同名字的方法可以接受不同类型的参数,对于不同类型的参数的处理是不同的。比如在一个类中定义“add”方法实现数的相加,它既可以处理整形的参数,也可以处理浮点型的参数,还可以处理一些自定义类的参数,但是针对每个类型都有各自的处理操作。第二种多态和继承性有关。由于某个父类可以有多个子类,每个子类都可以根据自己的特征修改父类中的属性和方法,当把这些子类当成父类来用的时候(如JAVA中的上转型对象或是接口回调),相同的父类方法就会有不同的实现方式。例如一个JAVA程序中,对于父类“动物”中的方法“叫”,用子类“狗”的上转型对象实现该方法则输出“汪汪”,用子类“猫”的上转型对象实现该方法则输出“喵喵”。
基于以上三大特点,面向对象方法导致了对整个软件开发过程的彻底变革。在软件开发的分析,设计和实现阶段都和面向过程方法截然不同。开发人员首先按照需求分析出软件的每个必备功能。然后归纳属性,确定对象及对象之间的关系。再进一步把功能分配给每个对象,构建对象的行为。接下来对每个对象的方法和对象之间的交互作进一步的细化。再接着确定可重用的类和部件,用结构图画出各个类,部件的结构和相互依赖关系。最后再对软硬件的相互依赖关系进行描述。在以上分析和设计工作完成之后,开发人员利用面向对象程序语言进行编程来达到软件功能的实现。
3 面向对象方法的优越性
面向对象方法之所以能把软件开发带入了一片新天地,是因为它在以下三个方面都有卓越之处。
3.1 整体开发思维
抛开具体操作流程不说,面向对象方法首先对解决问题的整体思维进行了人性化的革新。其人性化主要体现在以下四点:首先,人们生活的现实世界是个体,群体及各种关系组成的,面向对象的系统也是如此。对象代表个体,类代表群体,对象之间,类之间,类与对象之间通过方法调用建立各种关系。其次,从大众个体中总结出一类共同的属性和行为,从而形成类的手段正是人类抽象思维的应用。抽象思维是人类最基本,最习惯的思维之一。再次,面向对象允许开发人员一开始只拟定系统的大致框架,即确定主要的类及其关系,之后再逐步对其进行细化和拓展。这和人类逐步深入的思考习惯是相一致的。最后,面向对象方法大大简化了开发人员思考问题的复杂度。比如对于一个子类,开发人员可以理所当然的认定它已经拥有父类的所有一般特征,只要把精力放在思考子类的特性上就可以了。面向过程要求程序员必须从数据流动的角度思考待解决的问题,而面向对象的这些人性化因素让开发人员摆脱了这种被迫的“机器化”思考的尴尬境地,用自然贴切的思维考虑问题。
3.2 分析和设计
面向对象方法是分析和设计阶段的合理性有了很好的改善。面向对象的分析和设计采用的是“需求-对象-类”的模式,用对象和类直观地描述系统中的事物及其关系,这样就解决了面向过程方法所导致的一系列问题。在分析过程中,这种直观性原本的保留了所有事物及其关系的原貌,因此在构建对象和抽象出类的时候,很容易被发现在理解上的偏差。同时,开发人员也很容易向用户解释各个类和对象的含义,可以及时得到用户的反馈。处理需求的改变或是外部条件的改变时,也可以直接修改相应的类和对象。除此之外,对于问题的描述和对于问题的解决都应用同一套类和对象系统,因此软件开发的分析工作和设计工作是连续的,甚至是部分重叠的,不存在面向过程中从数据流到程序模块的转化,不用担心因为一个系统到另一个系统的映射不当导致结果和目标的偏离。
3.3 编程实现
面向对象编程语言的应用使得软件工程的实现过程有了很大的改进。
首先,程序的安全性有了明显的提高。由于类的封装,对象中只有少数的成员和方法可以被外接直接调用,对象内部的实现细节也是被隐藏的。这样有效降低了程序各部分间的依赖性,整个系统一般不会因为某处变动而引发整体混乱。
其次,面向对象把开发人员的编程工作变得比较轻松和方便。每个对象的数据和操作都被封装在一起,因此开发人员很容易保持数据和方法的兼容性,并且编程时只需要对每个类进行说明,不需把对于每个数据,每个方法的描述都写进数据字典。对于被封装的方法,只要依据访问规则就可以使用,不必了解实现细节。类中描述了一类个体的共有特征,在创建对象的时候这些描述不需要一遍又一遍的重复。类和对象的设置还易于分类,管理和查找。这些改变都在很大程度上降低了开发工作对程序员编程水平的要求。
再次,面向对象让团体合作的编程更加顺畅。归功与类和对象的直观性,当某程序员利用别人的成果时不必面临复杂的查阅,学习过程。继承性和多态性允许开发团队先行确定主要的类及关系,事先统一编程标准和风格,然后再把具体的细节交给不同的人员实现,这样最终得到的结果不会面临很多麻烦的冲突问题。
最后,面向对象语言最强大之处表现为可复用性和可扩充性。通过继承已有的类可以实现可复用性,让很多类的性质可以被共享。在开发过程中,复用自己或是他人已有的成果,等于是站在巨人的肩膀上,省去了大量的工作,加速了开发进程。另外,被重用过的代码都是经过测试的,这样大大减少了编程中发生错误的机会。面向对象的三大特点使程序具有良好的可扩充性。封装性使程序各部分间的独立性很强,继承性使类程序具有层次结构,多态性是程序能够实现问题的复杂多样。当开发人眼对已有的问题有了新的认识的时候,通过继承和多态的方式,无需修改原来的父类代码,就可以再创建新的子对象类的过程中增加新属性,或删除过时无用的属性,操作或对象,达到高效的功能扩充。可复用性和可扩充性让整个软件有很强的可维护性。在修改程序的过程中,修改某个对象对别的对象影响很小,新增或修改某功能对其他功能的影响很小。同时,开发出的软件也有很好的可移植性。对于不同的使用条件,只要修改很少的代码就可以让软件重装上阵。
4 面向对象方法的局限
虽然说面向对象方法给软件工程带来了很多好处,但是它也存在自己的局限性。第一,面向对象方法对支撑它的工具和环境的要求比较高。第二,利用对象和类对问题的描述存在不足。由于客观世界中很多事物的界限并不是很清晰,这给创建对象和抽象出类的正确性和精准性都带来了困难。并且,对于同一个客观事物,不同的人从不同的角度观察分析可能会映射出不同的对象属性和方法,有的时候开发团队之间或是开发人员与用户之间可能存在分歧。第三,面向对象程序的运行效率可能比较低,由于通过继承引入了层级,过多的祖宗类和父类势必会影响运行效率。所以在实现软件的时候应该遵循“多组合,少继承”的原则。第四,封装性带来的程序内部不可见可能给软件的维护带来不便。
由于这些局限性,在处理问题的时候不能盲目采用面向对象方法,必须先分析要解决的问题类型来决定是采用面向对象方法,面向过程方法还是其他方法,或是几种方法的综合运用。
参考文献
[1]郑莉,董源,张瑞丰.C++程序设计[M].3版.北京:清华大学出版社,2004.
[2]耿祥义,张跃平.Java面向对象程序设计[M].北京:清华大学出版社,2010.
[3]张孝祥.Java就业培训教程[M].北京:清华大学出版社,2003.
[4]杨健,张晓玲,周少云.软件危机及其应对措施探讨[J].电脑知识与技术,2006(35):135-136.
[5]符于江.程序设计中结构化方法和面向对象方法的比较[J].电脑知识与技术,2008(21):451-456.
[6]郭溪川.对比分析面向对象方法与结构化方法[J].农业网络信息,2006(11):100-104.
[7]张莉,裘国永.结构化方法与面向对象方法的比较分析[J].陕西师范大学学报:自然科学版,2006(6):29-32.