基于二维照片的线图填充方法研究.docx
- 文档编号:23886756
- 上传时间:2023-05-21
- 格式:DOCX
- 页数:22
- 大小:1,022.79KB
基于二维照片的线图填充方法研究.docx
《基于二维照片的线图填充方法研究.docx》由会员分享,可在线阅读,更多相关《基于二维照片的线图填充方法研究.docx(22页珍藏版)》请在冰豆网上搜索。
基于二维照片的线图填充方法研究
题目:
基于二维照片的线图填充方法研究
摘要
基于二维照片的线图填充技术是根据二维照片中的信息,从中提取出轮廓之后,根据照片原本所表现的信息,对其轮廓进行填充。
由于人工手动填充费时费力并且不能够十分精确的根据原图片进行描绘。
本文提出了计算机辅助填充技术,选取合适的阈值对图像进行分割,并根据梯度值对线图人为的填充胡椒噪声,使线图更具有立体感。
主要的研究内容包括:
1)根据图像的噪声的类型选择合适的降噪平滑的方法。
本文经过多种方法的实践和对比,最终选定用高斯滤波和二值开运算对图像进行降噪平滑处理。
2)基于大津算法选取最优阈值对图像进行分割,并对分割出来的前景图的梯度值进行计算,根据其梯度值所划分出的区域对线图填充胡椒噪声。
关键字:
线图填充,图像分割,非真实感处理,OpenCV
Abstract
Fillingtechnologybaseon2Dphotos,accordingtotheinformationfrom2Dphotos,itscontourisfilledin.Atpast,theyfillingitbymanualandittakealongtimeandcannotgetaveryaccurateresult.So,thisthesisproposesalgorithmsofcomputeraidedfillingtechnology.
1)Usingamethodofsmoothingaccordingtothetypeofthenoise.Wetrysomemethodstosmooththeimage,finallyselectedGaussianfiltertosmoothimagenoise.
2)UsingamethodofimagesegmentationbasedonOstualgorithm.Selecttheoptimalthresholdforimagesegmentation,andtheprospectofpartitiongraphgradientvalueiscalculated,accordingtotheimagegradientmaptothedivisionoftheforegroundimagearea,tofillthedifferentdensityofpeppernoise.
Keywords:
LineDrawing,FillingTechnology,NPR,OpenCV
目录
1.引言1
1.1研究背景及内容1
1.2研究的意义及应用领域1
1.3论文的组织结构1
1.4本章小结1
2.开发环境2
2.1开发环境2
2.1.1VisualC++6.0编译器2
2.1.2OpenCV简介2
2.2本章小结3
3.系统设计3
3.1模块介绍3
3.2系统流程介绍4
3.3本章小结5
4.图像预处理与边缘检测5
4.1图像的预处理5
4.1.1加载图像5
4.1.2降噪,平滑处理5
4.2边缘检测9
4.3本章小结10
5.分割图像与线图填充10
5.1分割图像10
5.2线图填充12
5.3本章小结14
6.功能实现14
6.1系统实验结果14
6.2本章小结14
总结与展望14
本文工作总结14
前景展望15
参考文献16
致谢....................................................17
1.引言
1.1研究背景及内容
线图填充是基于二维照片,从中提取出轮廓之后,根据找照片原本所表现的信息,根据其轮廓进行填充。
这项技术,是图像处理的一部分。
基于二维照片的线图填充目前有两种方法。
手工填充和计算机辅助填充。
手工填充的过程就是通过人用自己视觉感官以及自身的经验从一张图片中逐步描绘出其物体的轮廓,同时结合原照片,并根据其物体的材质,以及表面的纹理,用黑色像素点或是其他线条进行填充,使其具有非真实性渲染。
手工填充耗费的时间长,而且培养一个有经验的画师很不容易。
计算机辅助填充就是由计算机通过其灰度值以及梯度等信息提取出其轮廓,在根据一定的规则对物体进行填充。
本文是基于数字图像位图,对物体进行轮廓提取和表面的填充。
最后填充的效果既保留了物体的特点,还简化的图像,方便查看。
并且可以大大加快了图像处理的时间,而且精确度很高。
1.2研究的意义及应用领域
在当前的社会发展和信息技术深入应用的背景下,基于二维照片的线图填充方法的研究科学意义十分深远。
尤其在考古挖掘中,可以用填充过的图来代替原始的照片,简单明了的记录了所需要的信息,而且大大的减小了所占的空间。
1.3论文的组织结构
本文首先介绍了基于二维照片的线图填充技术的应用领域,研究背景和其研究意义。
第二部分介绍了系统的开发环境。
第三部分介绍了系统的模块以及流程。
第四部分介绍了图像预处理和边缘检测的方法。
第五部分较少了分割图像和线图填充的方法。
最后总结了填充过程中存在的不足和还需要进一步的研究方向。
1.4本章小结
本章首先介绍了基于二维照片的线图填充方法的相关研究背景和研究意义,本文的研究内容和研究应用的领。
随后介绍了本文所用的开发环境。
最后总结了本文的组织结构。
2.开发环境
2.1开发环境
本文程序是在Windows7的操作环境下,采用VisualC++6.0和OpenCV软件包结合开发的。
2.1.1VisualC++6.0编译器
VisualC++6.0由Microsoft开发,它不仅是一个C++编译器,而且是一个基于Windows操作系统的可视化集成开发环境(integrateddevelopmentenvironment,IDE)。
VisualC++6.0由许多组件组成,包括编辑器、调试器以及程序向导AppWizard、类向导ClassWizard等开发工具。
这些组件通过一个名为DeveloperStudio的组件集成为和谐的开发环境。
Microsoft的主力软件产品。
VisualC++是一个功能强大的可视化软件开发工具。
2.1.2OpenCV简介
OpenCV的全称是Open Source Computer Vision Library,由Intel微处理器研究实验室(Intel’s Microprocessor Research Lab)的视觉交互组(The Visual Interactivity Group)开发,是专门用于数字图像处理的函数库,能够在Windows、Linux、Mac平台中运行。
它由一系列C函数和少量C++类构成,提供了针对各种格式的视频图像源文件(如:
bitmap图像,video文件和实时摄像机视频流)的帧提取函数和多种标准图像处理算法,这些函数在具体的开发项目中直接调用,即可完成复杂庞大的开发任务。
OpenCV为Intel Integrated Performance Primitives (IPP)供了透明接口,如果有为特定处理器优化的IPP库,OpenCV将在运行时自动加载这些库。
在具备多核处理器的计算机上,OpenCV能够通过IPP库发挥多核处理器的并行处理能力和多线程计算的功能【1】。
作为开源软件,OpenCV的优势就是在于它有400多个免费的图像处理函数,而且涉及的面很广,从图像处理到模式识别、从静态图像到运动视频、从二维平面到相机的三维标定以及三维重建。
由于是开源的代码,方便我们进一步的了解其原理学习其经典算法,也方便了我们根据自己的需要对其算法进行进一步的优化。
2.2本章小结
本章主要对程序所开发的环境MicsoftVisualC++6.0以及OpenCV软件包进行了简单的介绍。
3.系统设计
3.1模块介绍
本系统中主要有三个模块,分别为:
图像预处理模块,轮廓提取模块和线图填充模块。
图像预处理模块,主要是根据图像的噪声类型对图像进行降噪,平滑的处理方法。
尝试了简单滤波,中值滤波,高斯滤波的方法,以及二值开闭运算。
最终,选定用高斯滤波结合二值开运算对原始图像进行处理,以得到一个噪点少且平滑的图,方便之后的轮廓提取及填充。
轮廓提取模块,是在预处理之后,开始对进行轮廓提取。
图像轮廓检测技术有很多种,本文主要研究的轮廓检测方法为轮廓提取法。
具体的两个方法为canny算子和sobel算子。
Canny算子检测基本步骤如图3.1所示:
图3.1canny算子处理步骤
Sobel算子的检测步骤如图3.2所示:
图3.2sobel算子处理步骤
线图填充模块,这个大模块分为两个部分。
第一个部分是分割图像,也就是根据一个合适的阈值将图像分割成前景图和背景图,简化图像。
第二个部分是计算前景图中各像素的梯度值,根据梯度值对线图进行胡椒噪声的填充。
3.2系统流程介绍
本系统的流程很简单,每一个模块和每一个模块紧密相连。
如图3.3所示。
图3.3系统流程图
3.3本章小结
本章具体介绍了系统模块,以及系统整体流程和各个模块中的关系。
4.图像预处理与边缘检测
4.1图像的预处理
4.1.1加载图像
不同类型的图像有着不同的类型的结构用来存储图像的数据。
所以,在加载图像的时候会根据其类型来选择不同的方法将图像的内容读进内存中。
OpenCV中有这样一个库函数,cvLoadImage();它可以读入各种类型的图像包括”.BMP/DIB”,”.JPEG/JPG/JPE”,”.PNG”,”.PBM/PGM/PPM”等等。
cvLoadImage(constchar*filename,intflags),其中filename是包括后缀的文件名,flags是指定读入图像的颜色和深度[1]。
其中flag=-1,表示默认读取图像的原通道数,flag=0,表示强制转化读取灰度图,flag=1,表示读取彩色图。
4.1.2降噪与平滑处理
在图像的采集和传输的过程中往往会产生噪声,尤其是数码相机,当在光线暗的地方拍摄,提高数码相机的ISO(感光度)以期获得较高的快门速度时噪声就产生了。
而这些噪点会对之后的图像的重构和提取轮廓产生一定的干扰。
所以,必须要对图像进行降噪,消除这种随机噪声,同时保留原始图像的细节。
主要的去噪技术有简单模糊,中值滤波,高斯滤波[8]。
简单滤波就是对每一个像素在一个param1xparam2的邻域求和并做尺度的变换1/(param1xparam2)。
图4.2是对图4.1进行简单模糊处理之后的效果。
图4.1原图图4.2简单模糊
中值滤波,把该点值用该点的一个邻域中各点的值的中值代替,让周围的像素接近进真实值,消除孤立的噪声。
采用是函数是g(x,y)=med{f(x-k,y-l),(k,l∈W)},一般来说W采用的是2*2或者是3*3的方型邻域,当然也可以是不同的形状,比如圆形,圆环,线型等等。
图4.3是对图4.1进行中值滤波处理后的效果。
图4.3中值滤波
高斯滤波,用高斯滤波对图像进行平滑处理可以有效的除去服从正态分布的噪声,而且可以很好的保留边缘效果。
其函数表达式如公式4.1
(4.1)
其中,√u²+v²表示的是高斯模糊半径,σ表示的是正态分布的标准差。
由此表达式计算用于做图像平滑处理的卷积矩阵。
其中,最中心的点具有最大的权值,而邻域中的各点的权值随着距离的增大而减小。
这样的好处是,平滑处理的图像卷积只对其作用域的中心有较大的影响,随着距离的增大,邻域内的其他像素点的平滑作用大大减小,使得边缘的特征得到的保留。
图4.4高斯滤波
由图4.2,图4.3可以发现,简单模糊和中值滤波使得原本的图像连带边缘都变得模糊,没有很好的保留局部信息,而图4.4即高斯滤波处理后的图像保证了图像的局部特征,满足了之后对图像进行轮廓提取的局部性要求。
在OpenCV中可以使用cvSmooth()方法对图像进行处理。
进一步去噪还可以使用数学形态学中的二值开闭运算,二值开运算是指对一幅二值图像进行腐蚀操作再进行膨胀操作(使用同一个结构元)。
二值闭运算刚好相反。
二值腐蚀其定义为:
erosion(A,B)={p|(p+b)∈A,a∈A,b∈B},腐蚀是对集合元素采用向量减法,将两个集合合并,腐蚀是膨胀的对偶运算。
是指二值图像A经二值图像B腐蚀后,在p点仍为1的充分必要条件是:
B平移到p后,B中像素值为1的像素也是A中像素值为1的像素。
通俗的说就是将线条变细了。
二值膨胀和腐蚀相反,其定义为:
dilation(A,B)={a+b|a∈A,b∈B},即膨胀运算是两个集合中所有向量之和的集合。
是指值图像A如果经过图像B变换后的图像A是由二值图像B中像素值为1的点平移得到的,则定义为A由B平移,并称为A被B膨胀。
通俗的说就是讲线条变粗了。
图4.5灰化图
图4.6腐蚀处理图4.7膨胀处理
图4.8二值开运算图4.9二值闭运算
二值开运算可以有效的将小于结构元的区域去掉而保留其余的部分,对于图像中存在大量小面积的噪点有很好的去噪效果。
二值闭运算是可以将小于结构元的空白区域填满,对空域特征进行抑制。
OpenCV库中分别用cvErode()来实现数学形态学中的腐蚀操作,用cvDilate()来实现数学形态学中的膨胀操作。
这两个库函数都是包含了好几种结构元,一般常用的是3x3的像素矩阵作为腐蚀,膨胀操作的结构单元。
当然也可以自定义的结构单元对图像进行滤波。
本文最后使用的是3x3的像素矩阵对图像进行二值开运算。
4.2边缘检测
在OpenCV中,Canny边缘检测算法[7]的步骤有4步:
4.2.1降噪
任何边缘检测算法都不可能在未经处理的原始数据上很好地工作,前面已经讲过,所以第一步是对原始数据与高斯mask作卷积,得到的图像与原始图像相比有些轻微的模糊。
这样,对服从正态分布的像素噪声在经过高斯平滑的处理之后不见了。
4.2.2寻找图像中的亮度梯度
图像中的边缘可能会指向不同的方向,所以Canny算法使用4个mask检测水平、垂直以及对角线方向的边缘。
原始图像与每个mask所作的卷积都存储起来。
对于每个点我们都标识在这个点上的最大值以及生成的边缘的方向。
这样我们就从原始图像生成了图像中每个点亮度梯度图以及亮度梯度的方向。
4.2.3在图像中跟踪边缘
较高的亮度梯度比较有可能是边缘,但是没有一个确切的值来限定多大的亮度梯度是边缘多大又不是,所以Canny使用了滞后阈值。
滞后阈值需要两个阈值——高阈值与低阈值。
假设图像中的重要边缘都是连续的曲线,这样我们就可以跟踪给定曲线中模糊的部分,并且避免将没有组成曲线的噪声像素当成边缘。
所以我们从一个较大的阈值开始,这将标识出我们比较确信的真实边缘,使用前面导出的方向信息,我们从这些真正的边缘开始在图像中跟踪整个的边缘。
在跟踪的时候,我们使用一个较小的阈值,这样就可以跟踪曲线的模糊部分直到我们回到起点。
一旦这个过程完成,我们就得到了一个二值图像,每点表示是否是一个边缘点。
一个获得亚像素精度边缘的改进实现是在梯度方向检测二阶方向导数的过零点,它在梯度方向的三阶方向导数满足符号条件。
图4.10Canny轮廓提取
OpenCV之中提供了直接调用canny算法检查图片边缘的函数接口cvCanny来直接进行边缘的提取。
在open1.2以及更新的版本之中,边缘检测的方法更加多样化,内部集成的算法实质是多种边缘检测算法共同作用之后的最优选择,OpenCV提供的接口为laplace算法以及sobel算法。
4.3本章小结
本章详细介绍了简单滤波,中值滤波和高斯滤波的原理以及对图像的处理结果,通过比较,最后选择高斯滤波作为降噪的方法。
并介绍了Canny算子提取轮廓的步骤。
5.分割图像与线图填充
5.1分割图像
在图像处理当中,灰度直方图是最简单最基础的工具。
灰度直方图展示了图像的一维信息,反应了每一个灰度级和该灰度级像素出现的频率之间的相对应关系。
一个图像都有其唯一可以确定与之相对应的直方图。
但是,灰度直方图并不能唯一的确定图像,这是因为,很有可能不同的图像但是其灰度直图是一样的。
一维直方图的结构表示如公式5.1:
(5.1)
其实直方图的本质是一个数据结构,OpenCV中有cvCreateHist()可以用来创建一个一维直方图,cvCalcHist()用来计算灰度图像的一维直方图,用cvNormalizeHist()来归一化直方图。
最终绘制出来的一维灰度直方图,其横坐标是灰度级,纵坐标表示图像中该灰度级出现的个数(频率)。
如图5.1:
图5.1经过处理的灰度图
图5.2其对应的一维灰度直方图
接下来就要对图像,根据灰度级的进行图像的分割。
应用二值化进行图像的分割,最终的目的是把目标从背景中分割出来,也就是说最后将图像分成了两个区域:
目的区域和背景区域。
所以,在一幅含有多灰度图像中,必然存在一个灰度T,以T作为阈值,可以使图像得到最佳的二值化分割。
本文采用Otsu算法。
Otsu是1979年日本学者大津展之提出一种对灰度图像进行分割的方法,也叫大津算法[9],使用的是聚类的思想,把图像的灰度数按灰度级分成2个部分,使得两个部分之间的灰度值差异最大,每个部分之间的灰度差异最小,通过方差的计算来寻找一个合适的灰度级用来划分。
所以,可以在二值化的时候,采用Otsu算法来自动选取阈值进行二值化。
Otsu算法被认为是图像分割中阈值选取的最佳算法,计算简单,不受图像亮度和对比度的影响。
因此,使类间方差最大的分割意味着错分概率最小。
首先,其实Otsu算法就是对图像的灰度级进行聚类,所以要计算这个图像的灰度直方图。
然后从每一个灰度级遍历每一个的灰度值,当某一灰度值为阈值的时候,前景和背景的方差最大。
所以,如何求这个阈值,就成了重中之重。
其次,计算完图像的直方图后,设w0为前景所占整幅图像的比重,w1为背景所占整幅图像的比重,u0为当前前景的平均灰度,u1为当前背景的平均灰度,u为图像的平均灰度。
Var为最大类间方差。
然后遍历每一个灰度值,并求出当此灰度值为阈值的时候,其w0,w1,u0,u1的值,然后根据var=w0*pow((u0-u),2)+w1*pow((u1-u),2)这个方差公式来计算出当前灰度值得方差,然后比较每一个灰度值的方差,选出最大方差所对应的的灰度值。
这个值就是最后的阈值。
就用此阈值来分割图像。
5.2线图填充
从背景中分割出了目标之后,接下来就要根据本来物体的表面信息,重新填充像素点,填充的原则就是能简单的表现出原有表面的信息。
首先,求出前景图个像素点的梯度。
像素点的梯度代表了像素的变化其陡峭程度,梯度的计算可以由差分算子通过卷积完成,例如Sobel算子,
图5.3X方向参数图5.4Y方向参数
Sobel算子包括了两个3X3的像素模板,一个用来计算中心点x方向的梯度分量,另一个用来计算中心点y方向的梯度分量fy。
则这个像素点梯度的幅度为Gs=√fx²+fy²。
OpenCV中有cvSobel()函数可以变相的求出像素点的梯度值。
首先要分别创建类型为X方向和Y方向的梯度图像变量gradx,grady。
然后利用cvSobel()函数求出gradx和grady,并通过cvConvertScaleAbs()函数来求出gradx,grady的绝对值。
梯度值的平方就等于gradx的平方与grady的平方的和。
并把这个值放到输出图像的数组中。
根据其像素的梯度值可以将前景图像划分出更多的区域,越是接近轮廓边缘的地方,其梯度值越大,而中间变化较为平滑的地方,其梯度值就越小。
根据其梯度值的不同,为每一个区域进行不同的填充方法。
梯度值大的区域,人为的添加随机胡椒噪声密度大一些。
梯度值小的地方添加的随机胡椒噪声密度小一点。
图5.5空白填充图5.6少量填充图5.7密集填充
这上面三幅图表示了随机填充胡椒噪声的三个阶段。
其中,图5.7中的噪声最多,适合于梯度值大的区域,图5.5为不填充噪声。
以此类推,将前景图像分为3层,被分别照图5.5,图5.6,图5.7进行处理。
5.3本章小结
本章具体介绍了从图像的预处理,轮廓的提取以及图像的分割到最后的填充所用的方法及算法。
并根据自身选择合适的方法算法,以达到最好的效果。
6.功能实现
6.1系统实验结果
从最开始载入的图片,经过了一系列的处理并填充之后的效果,如图6.2和图6.4:
图6.1原图图6.2填充结果
图6.3文物碎片原图
图6.4进行线图填充后的图
可以发现图6.2的填充效果比较好,这是由于原图图6.1的颜色比较多,色彩差异大,利于分割和填充。
而文物碎片如图6.3,由于背景色与目标相近,并且文物碎片上有泥点覆盖,这些泥点都干扰了对图像的提取。
本次实验并没有能对于物体表面的暗示性轮廓线进行很好的提取。
但是基本可以将文物碎片从背景中提取出来,并根据梯度进行填充。
根据文物碎片的特点,需要继续改进算法,提取出更清晰准确的轮廓。
6.2本章小结
本章介绍了基于二维照片的线图填充方法研究的实验结果。
总结与展望
本文工作总结
线图填充的研究是十分有意义的,拥有着广阔的前景。
本文在此方面主要做个这样几个工作。
首先,通过对比不同的降噪平滑的方法,选择了对本实验来说最优的处理方法高斯滤波进行降噪平滑。
第二,根据Canny算子从图像中提出了物体的轮廓。
第三,根据灰度直方图,找到图像的分割阈值,并根据提取出的轮廓进行了填充。
前景展望
由于对图形图像学习的还不够透彻,对OpenCV的众多用法也还在探索中,对于线图的填充还有许多要改进的地方。
第一,轮廓提取还有待进一步的加强,现今提取出的轮廓中存在轮廓不连续的情况,而且,有一些不是轮廓的地方也被提取出来了。
这一点在日后会继续的对轮廓提取办法继续优化,提高提取轮廓的效率。
第二,目前,所有的面都是用黑色像素点进行填充的。
但是,一般的物体,尤其是文物,都会分外表面,内表面,剖面,断面等等。
所以,接下来要对着些不同的面进行不同方法的填充。
第三,现在这个程序是拿控制台运行的,十分的不方便,所有的操作都在程序里面设定好了,我希望继续优化UI,提高人机交互的性能。
参考文献
[1]刘丽梅郑新武,基于OpenCV的图像处理程序开发方法研究[J]《机电技术》2010年第5期。
[2]SzymonRusinkiewicz,PrcetonUniversityLineDrawingClass[R](IV):
185
[3]肖超云,朱伟兴,基于Otsu准则及图像熵的阈值分割算法[J]计算机工程,2007年7月
[4]宋佳慧,基于遗传算法的最大熵阈值的图像分割[J]电子工程,2005年2月
[5]PunT.EntropicThresholding)ANewApproach[J].
ComputerGraphicsImageProcess,1981,(16):
210)239
[6]匿名,图像梯度域的计算及应用[D]北京林业大学
[7]韦海萍,赵保军,Cann
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 二维 照片 线图 填充 方法 研究
![提示](https://static.bdocx.com/images/bang_tan.gif)