计算机图形学论文文档格式.docx

上传人:b****6 文档编号:21122545 上传时间:2023-01-27 格式:DOCX 页数:11 大小:520.05KB
下载 相关 举报
计算机图形学论文文档格式.docx_第1页
第1页 / 共11页
计算机图形学论文文档格式.docx_第2页
第2页 / 共11页
计算机图形学论文文档格式.docx_第3页
第3页 / 共11页
计算机图形学论文文档格式.docx_第4页
第4页 / 共11页
计算机图形学论文文档格式.docx_第5页
第5页 / 共11页
点击查看更多>>
下载资源
资源描述

计算机图形学论文文档格式.docx

《计算机图形学论文文档格式.docx》由会员分享,可在线阅读,更多相关《计算机图形学论文文档格式.docx(11页珍藏版)》请在冰豆网上搜索。

计算机图形学论文文档格式.docx

Graphcuts是一种十分有用和流行的能量优化算法,GraphCuts理论最早是出现在流网络优化领域的,比如说水管网络,通信传输网络,城市车流网络等。

而GrabCut是在GraphCut基础上改进的一种图像分割算法,它并非基于图像形态学,而是基于图割理论。

在使用GrabCut时,需要人工给定一定区域的目标或者背景,然后算法根据设定的参数来进行分割。

GrabCut适合从静态图像中提取前景照片的应用。

在计算机视觉领域普遍应用于前背景分割(Imagesegmentation)、立体视觉(stereovision)、抠图(Imagematting)等。

OpenCV中提供了cv:

:

grabcut函数,因此只需提供图像并标记背景像素和前景像素,基于局部的标记,算法即可将图像中的像素进行分割。

【关键词】图像分割GraphCutGrabCut背景分割抠图OpenCV

GrabCutimagesegmentationalgorithm

Abstract

Imagesegmentationisthetechnologyandprocessofdividingtheimageintoanumberofspecific,uniqueandinterestingregions..Itisthekeystepofimageprocessingtoimageanalysis..Existingimagesegmentationmethodsaremainlydividedintothefollowingcategories:

Basedonthethresholdsegmentationmethodbasedonregionsegmentationmethod,basedonedgebasedsegmentationmethodandsegmentationalgorithmsbasedonaparticulartheory.Since1998,researchershaveimprovedtheexistingimagesegmentationmethodandappliedsomenewtheoriesandnewmethodstoimagesegmentation..Theobjectextractedfromtheimagesegmentationcanbeusedforimagesemanticrecognition,imagesearchandsoon..

Graphcutsisaveryusefulandpopularenergyoptimizationalgorithm,graphcutstheorytheearliestisappearedinthenetworkflowoptimizationfield,forexamplewaterpipenetwork,communicationnetwork,urbantrafficnetwork.GrabCutisanimagesegmentationalgorithmbasedonGraphCut,whichisnotbasedonimagemorphology,butbasedongraphcuttheory..IntheuseofGrabCut,theneedtomanuallygivenacertainregionofthetargetorbackground,andthenthealgorithmaccordingtotheparametersofthesetofsegmentation.GrabCutissuitableforextractingforegroundimagesfromstaticimages..Inthefieldofcomputervision,andwidelyusedintheforegroundandbackgroundsegmentation(imagesegmentation,stereovision,stereovision),mattingmatting(image).Cv:

providestheOpenCV:

grabcutfunction,sosimplyprovidetheimageandthebackgroundpixelsandforegroundpixels,basedonlocalmarkers,thealgorithmcanthensegmentthepixelsintheimage.

【Keywords】ImagesegmentationGraphcutsGrabCutOpenCV

1.绪论

1.1选题目的

数字图像处理技术是一个跨学科的领域。

随着计算机科学技术的不断发展,图像处理和分析逐渐形成了自己的科学体系,新的处理方法层出不穷,尽管其发展历史不长,但却引起各方面人士的广泛关注。

首先,视觉是人类最重要的感知手段,图像又是视觉的基础,因此,数字图像成为心理学、生理学、计算机科学等诸多领域内的学者们研究视觉感知的有效工具。

其次,图像处理在军事、遥感、气象等大型应用中有不断增长的需求。

图像分割是图像识别和计算机视觉至关重要的预处理。

没有正确的分割就不可能有正确的识别。

但是,进行分割仅有的依据是图像中像素的亮度及颜色,由计算机自动处理分割时,将会遇到各种困难。

例如,光照不均匀、噪声的影响、图像中存在不清晰的部分,以及阴影等,常常发生分割错误。

因此图像分割是需要进一步研究的技术。

人们希望引入一些人为的知识导向和人工智能的方法,用于纠正某些分割中的错误,是很有前途的方法。

而Grabcut是一种十分有用和流行的能量优化算法,所以我选择研究这种算法。

1.2简单介绍

GrabCut是微软研究院的一个课题,主要功能是分割和抠图。

而对于彩色图片的Grabcut算法,提取连续的相同颜色作为边界,一般有下面三个步骤。

1.降低噪声

降低图像噪声的算法那就不是一般多了。

例如最常用的卡尔曼滤波就不少变种。

关于这方面可以参考信号与系统的书籍以及相关论文,这里不再赘述。

2.相同颜色的边缘提取

关于这方面论文也是很多,我就我说说身边人使用的方法吧。

我们有一个老师在做项目的时候用的方法是模糊化处理方法。

那就是,拿一个RGB表,从中人工识别所要的颜色。

计算机记录RGB范围,在RGB向量空间中画出一个立方体,以后凡是落入这个立方体的都算作这种颜色。

结果证明使用这种方式可以较大程度上减小噪声带来的影响。

但是这种方法对光线高度敏感,光亮度一变,不好意思,重新来过。

而且这种方法画出来的立方体不小,其中包含不少明显不是这种颜色的RGB值(因为RGB任何一个分量和颜色直接不是线性关系)。

再加上这个对人工的工作精确度要求不小,劳动强度不小。

所以不太推荐。

我们有些大牛引入机器学习的k临近算法,结果如何我没有太了解。

3.插值

有的时候噪声太厉害,使得有些点明显大幅偏离应有的RGB值。

使得边缘不连续。

这样,可以引入插值算法使得边缘成为封闭的边缘。

常用的有H插值算法、多项式插值算法等等。

关于这方面论文也是很多,可以加以参考。

以上三个步骤做完以后,基本上就差不多了。

如果还是不行,要么是某个方面效果不好,要么是噪声太大。

它的卖点在于:

(1)你只需要在目标外面画一个框,把目标框住,它就可以完成良好的分割:

(2)如果增加额外的用户交互(由用户指定一些像素属于目标),那么效果就可以更完美:

当然了,它也有不完美的地方,一是没有任何一个算法可以放之四海而皆准,它也不例外,如果背景比较复杂或者背景和目标相似度很大,那分割就不太好了;

二是速度有点慢。

当然了,现在也有不少关于提速的改进。

2.算法实现

2.1算法原理

OpenCV中的GrabCut算法是依据《"

GrabCut"

-InteractiveForegroundExtractionusingIteratedGraphCuts》这篇文章来实现的。

该算法利用了图像中的纹理(颜色)信息和边界(反差)信息,只要少量的用户交互操作即可得到比较好的分割结果。

我们首先理解GrabCuts中的Grab和Cuts的意思。

此处的Graph和普通的Graph稍有不同。

普通的图由顶点和边构成,如果边的有方向的,这样的图被则称为有向图,否则为无向图,且边是有权值的,不同的边可以有不同的权值,分别代表不同的物理意义。

而GrabCuts图是在普通图的基础上多了2个顶点,这2个顶点分别用符号”S”和”T”表示,统称为终端顶点。

其它所有的顶点都必须和这2个顶点相连形成边集合中的一部分。

所有GrabCuts中的边也分为两种,一种是普通顶点与相邻点或者与之有关联的点之间的连线,一种是刚讲的普通顶点和2个终端顶点之间的连线。

GrabCuts中的Cuts是指这样一个边的集合,很显然这些边集合包括了上面2种边,该集合中边的断开会导致残留”S”和”T”图的分开,且这些边的集合中所有权值之和是最小的。

因此也称为最小割。

在参考了iccv2001的文章Interactivegraphcutsforoptimalboundary&

regionsegmentationofobjectsinNDimages后,或许能够找到上述问题的一点答案。

首先,一张image可以看作是一个矩阵,图中的每个像素就是矩阵中的一个位置,这个像素可以看做是图中的一个顶点。

然后我们把相邻顶点之间用短线(有向或无向都行)连接起来,这就形成了边,现在这幅image有顶点和边了,也就构成一幅Graph了。

至于边的权值怎么计算,则是很理论的东西。

看了下论文中的解释,图像中边的权值一般由2部分构成,平滑项和数据项,这2部分的比重用1个系数来平衡,其中平滑项主要体现顶点像素和其相邻区域像素之间值的变化强度,如果变化剧烈说明这两者很有可能出于边缘部分,则被分割开的可能性比较大,而按照最小割的分割原理,这时2者的平滑项权值应该较小。

而数据项部分则表示对应顶点属于前景或者背景的惩罚项。

其论文中的数学公式为:

其中R(A)表示的是区域数据项,B(A)表示的是边界平滑项,E(A)表示的是权值,即损失函数,也叫能量函数,图割的目标就是优化能量函数使其值达到最小。

另外由于GrabCuts需要有2个终端节点”S”和”T”,分别表示初始的目标区域和背景区域,在计算机视觉的图像分割领域时,需要人工指定初始的s顶点和t顶点,如果有HCI的话,可以用鼠标分别直接点这2个区域。

其中一个区域代表所需分割目标上的一个像素位置,另一个为背景上的一个像素位置。

有了能量函数的定义和初始的终端顶点,就可以采用图割理论来不断迭代对目标进行分割了。

2.2算法效果

在函数cv:

grabCut中,最后一个参数表示我们使用的是包围盒模式,而该算法支持的输入/输出分割图像可以有四种数值,如函数cv:

compare函数中的参数:

cv:

GC_BGD:

确定属于背景的像素;

GC_FGD:

确定属于前景的元素;

GC_PR_BGD:

可能属于背景的元素;

GC_PR_FGD:

可能属于前景的元素。

在上图中,GrabCut算法通过指定方框区域来提取前景物体。

同时,也可将数值cv:

GC_BGD和cv:

GC_FGD赋予分割图像的某些特定像素,并且把这类分割图像作为cv:

grabcut函数的第二个参数(此时需要指定GC_INIT_WITH_MASK作为输入模式)。

基于这些信息,GrabCut通过以下主要步骤创建分割:

1.前景标签(cv:

GC_PR_FGD)被临时赋予所有为标记的像素。

基于当前的分类,算法将像素归类为颜色或灰度值相似的聚类。

2.通过引入背景与前景像素的边界进行分割。

这个优化的过程尝试将标签相似的像素相连接,这里利用了在强度相对已知的区域之间的边界像素。

这个最优化问题通过GrabCut算法得到高效解决。

3.对获取的分割结果产生新的像素标签,重复聚类过程,找到新的最优解。

根据场景的复杂度,得到最佳结果,对于简单的场景,有时只需要一次迭代。

2.3代码实现

在OpenCV的源码目录的samples的文件夹下,有grabCut的使用例程,参考:

opencv\samples\cpp\grabcut.cpp。

而grabCut函数的API说明如下:

voidcv:

grabCut(InputArray_img,InputOutputArray_mask,Rectrect,

InputOutputArray_bgdModel,InputOutputArray_fgdModel,

intiterCount,intmode)

/*

****参数说明:

img——待分割的源图像,必须是8位3通道(CV_8UC3)图像,在处理的过程中不会被修改;

mask——掩码图像,如果使用掩码进行初始化,那么mask保存初始化掩码信息;

在执行分割的时候,也可以将用户交互所设定的前景与背景保存到mask中,然后再传入grabCut函数;

在处理结束之后,mask中会保存结果。

mask只能取以下四种值:

GCD_BGD(=0),背景;

GCD_FGD(=1),前景;

GCD_PR_BGD(=2),可能的背景;

GCD_PR_FGD(=3),可能的前景。

如果没有手工标记GCD_BGD或者GCD_FGD,那么结果只会有GCD_PR_BGD或GCD_PR_FGD;

rect——用于限定需要进行分割的图像范围,只有该矩形窗口内的图像部分才被处理;

bgdModel——背景模型,如果为null,函数内部会自动创建一个bgdModel;

bgdModel必须是单通道浮点型(CV_32FC1)图像,且行数只能为1,列数只能为13x5;

gdModel——前景模型,如果为null,函数内部会自动创建一个fgdModel;

fgdModel必须是单通道浮点型(CV_32FC1)图像,且行数只能为1,列数只能为13x5;

iterCount——迭代次数,必须大于0;

mode——用于指示grabCut函数进行什么操作,可选的值有:

GC_INIT_WITH_RECT(=0),用矩形窗初始化GrabCut;

GC_INIT_WITH_MASK(=1),用掩码图像初始化GrabCut;

GC_EVAL(=2),执行分割。

*/

grabcut函数,因此只需提供图像并标记背景像素和前景像素,基于局部的标记,算法即可将图像中的像素进行分割。

在这里使用的局部标记方法是定义一个矩形。

grabcut的函数定义如下:

grabCut(image,//输入图像

result,//分割输出结果

rectangle,//包含前景物体的矩形

bgModel,fgModel,//模型

1,//迭代次数

GC_INIT_WITH_RECT);

//使用矩形进行初始化

在main函数添加:

//GrabCut算法

Matimage=cv:

imread("

c:

/Fig8.04(a).jpg"

);

//设定矩形

Rectrectangle(50,70,image.cols-150,image.rows-180);

cv:

Matresult;

//分割结果(4种可能取值)

MatbgModel,fgModel;

//模型(内部使用)

//进行GrabCut分割

grabCut(image,result,rectangle,bgModel,fgModel,1,cv:

//得到可能为前景的像素

compare(result,cv:

GC_PR_FGD,result,cv:

CMP_EQ);

//生成输出图像

Matforeground(image.size(),CV_8UC3,cv:

Scalar(255,255,255));

image.copyTo(foreground,result);

//不复制背景数据

//包含矩形的原始图像

rectangle(image,rectangle,cv:

Scalar(255,255,255),1);

namedWindow("

OrginalImage"

imshow("

image);

//输出前景图像结果

ForegroundOfSegmentedImage"

foreground);

3.总结

这学期学了计算机图形学,感觉学到了很多有用的东西,对于图形的处理方面也了解了很多,对于grabcut,是我自己想要去了解的,对于抠图这种常见的图形学操作来学,grabcut是一种还算不错的算法,这个算法利用的是图像中的纹理(颜色)信息和边界(反差)信息,只要少量的用户交互操作就可以得到比较好的分割结果。

Grabcut是一种energyminimization的方法,用来解first-ordermarkovRandomField比用BeliefPropagation感觉更好,比用dynamicprogramming(只用1D求解),gradientdecedent,simulatedannealing,etc要好得更多;

特别是使用a-b-swap,和a-expansion的时候。

刚开始看Grabcut的时候不着门道,走了很多弯路,现在总结起来可以这样学习:

1.学习algorithm课本里的关于graph那一节,或者googlemaxflow/mincut相关的内容,有介绍mincut的两种解法;

2.然后就开始看用graphcut解决computervision里的问题,首先要看的是《InteractiveGraphCutsforOptimalBoundary&

RegionSegmentationofObjectsinN-DImages》iccv01。

这篇paper讲怎么用graphcut来做imagesegmentation。

如果前景和背景之间的颜色反差不大,分割的效果不好;

不过,这种情况下允许手工标记一些前景或背景区域,这样能得到较好的结果。

经我测试,GrabCut算法的效率还好,初始化341x326大小的矩形窗大约需要2.11秒,处理需要0.6秒;

而论文中宣称初始化450x300大小的矩形窗仅0.9秒,处理只要0.12秒;

结果还是有一些差距。

参考文献

[1][基础算法]GraphCutandItsApplicationinComputerVision

[2][论文笔记]CUDACuts:

FastGraphCutsontheGPU

[3]《“GrabCut”—InteractiveForegroundExtractionusingIteratedGraphCuts》[4]

[5]http:

//www.cs.cornell.edu/~rdz/graphcuts.html

[6]FastApproximateEnergyMinimizationviaGraphCuts 

(Boykov,VekslerandZabih,PAMI'

01)

XX大学本科学年论文成绩评定表

项目

权重

分值

具体要求

得分

文献阅读与调查论证

0.20

100

能独立查阅文献和从事其它调研,有收集、加工各种信息的能力

论文撰写质量

0.40

论文结构严谨,逻辑性强;

语句通顺,语言准确;

论文完全符合规范化要求,用A4复印纸打印成文

学习态度

0.30

学习态度认真,科学作风严谨,严格按要求开展各项工作,按期完成任务

学术水平与创新

0.10

论文有创意,有一定的学术水平或实用价值

总分

评语:

等级:

指导教师:

年月日

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 工程科技 > 兵器核科学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1