技术领域:
本发明属于图像识别及提取技术领域,具体涉及图像识别算法在剪纸效果的应用。
背景技术:
:
剪纸是一种用剪刀或刻刀在纸上剪刻花纹,用于装点生活或配合其他民俗活动的民间艺术。在中国,剪纸具有广泛的群众基础,交融于各族人民的社会生活,是各种民俗活动的重要组成部分。而现有技术无法方便的将图像处理成剪纸效果,更无法将剪纸与图像识别算法相结合。
本发明首次将图像识别及提取算法应用在传统文化剪纸中,通过科技手段将剪纸从线下转移到线上,用平时研究的图像处理算法融入生活,采用了图像分割的边缘检测算法,用五种算子叠加处理,能够提取到精度较高的目标图像。
技术实现要素:
:
针对上述问题,本发明提供了图像识别算法在剪纸效果的应用,包括以下步骤:
a.进行图像预处理:对原图去噪滤波,将彩色图转为灰度图;
b.实现边缘检测:采用图像分割的边缘检测算法通过微分算子对灰度图进行边缘检测;
c.生成素描图:将进行边缘检测的图像矩阵中的数字更换为灰色所代表的数字,得到素描颜色线条,生成素描图;
d.实现剪纸阳刻、印刻效果:对生成的素描图进行着色,阳刻效果为边缘红色,背景白色,印刻效果为边缘白色,背景红色;
e.线条后期处理:根据边缘平均宽度,对目标图像进行腐蚀或膨胀处理,得到较平滑的轮廓。
优选的,所述步骤(1)中对原图去噪滤波是通过高斯滤波器滤波去噪,将彩色图进行二值化处理,转换为灰度图像。
优选的,所述步骤(2)中的边缘检测是利用物体和背景在某种图像特性上的差异来实现检测,所述差异包括灰度、颜色或纹理特征。
本发明有益效果:本发明通过进行图像预处理、实现边缘检测、生成素描图、实现剪纸阳刻、印刻效果及线条后期处理,首次将图像识别及提取算法应用在传统文化剪纸中,通过科技手段将剪纸从线下转移到线上,将平时研究的图像处理算法融入生活,同时采用了图像分割的边缘检测算法,用五种算子叠加处理,能够提取到精度较高的目标图像。
附图说明:
图1为进行图像预处理后得到的灰度图像。
图2为roberts算子进行边缘处理后得到的matlab仿真图。
图3为sobel算子进行边缘处理后得到的matlab仿真图。
图4为prewitt算子进行边缘处理后得到的matlab仿真图。
图5为canny算子进行边缘处理后得到的matlab仿真图。
具体实施方式:
为使本发明的目的、技术方案和优点更加清楚明了,下面通过附图中示出的具体实施例来描述本发明。但是应该理解,这些描述只是示例性的,而并非要限制本发明的范围。此外,在以下说明中,省略了对公知结构和技术的描述,以避免不必要地混淆本发明的概念。
本发明提供的图像识别算法在剪纸效果的应用,包括以下步骤:
a.进行图像预处理:先对输入图像原图进行预处理,为后面算法计算速度与效果达到最优做准备。对图像原图使用高斯滤波器滤波去噪,将彩色图进行二值化处理,转换为灰度图像,如图1。
b.实现边缘检测:边缘检测在图像处理与计算机视觉中占有特殊的位置,它是底层视觉处理中最重要的环节之一,也是实现基于边界的图像分割的基础。在图像中,边界表明一个特征区域的终结和另一个特征区域的开始,边界所分开区域的内部特征或属性是一致的,而不同区域内部的特征或属性是不同的,边缘的检测正是利用物体和背景在某种图像特性上的差异来实现的。这种差异包括灰度、颜色或者纹理特征。边缘检测实际上就是检测图像特性发生变化的位置。函数导数反映图像灰度变化的显著程度,一阶导数的局部极大值和二阶导数的过零点都是图像灰度变化极大的地方。因此可将这些导数值作为相应点的边界强度,通过设置门限的方法,提取边界点集。
基于一阶导数的边缘检测,梯度是图像对应二维函数的一阶导数:
可以用以下三种范数衡量梯度的幅值:
梯度方向为函数最大变化率方向:
常用的边缘检测算子有roberts算子、sobel算子、prewitt算子、log算子和canny算子,由于图像由离散的像素点组成,这些算子将用差分近似偏导数。
以下为基于一阶导数的四种算子边缘检测:
1)roberts交叉算子
roberts边缘检测算子是一种利用局部差分算子寻找边缘的算子,robert算子图像处理后结果边缘不是很平滑。经分析,由于robert算子通常会在图像边缘附近的区域内产生较宽的响应,故采用上述算子检测的边缘图像常需做细化处理,边缘定位的精度不是很高。
roberts算子的两个卷积核分别为
采用1范数衡量梯度的幅度:
roberts算子对具有陡峭的低噪声的图像效果较好。
roberts算子处理后得到的matlab仿真图如图2。
2)sobel算子
索贝尔算子(sobeloperator)是图像处理中的算子之一,主要用作边缘检测。在技术上,它是一离散性差分算子,用来运算图像亮度函数的梯度之近似值。在图像的任何一点使用此算子,将会产生对应的梯度矢量或是其法矢量。
sobel算子的两个卷积计算核分别为:
采用∞范数衡量梯度的幅度
sobel算子对灰度渐变和噪声较多的图像处理得较好。
sobel算子处理后得到的matlab仿真图如图3。
在边沿检测中,常用的一种模板是sobel算子。sobel算子有两个,一个是检测水平边沿的;另一个是检测垂直平边沿的。与prewitt算子相比,sobel算子对于象素的位置的影响做了加权,可以降低边缘模糊程度,因此效果更好。
sobel算子另一种形式是各向同性sobel(isotropicsobel)算子,也有两个,一个是检测水平边沿的,另一个是检测垂直平边沿的。各向同性sobel算子和普通sobel算子相比,它的位置加权系数更为准确,在检测不同方向的边沿时梯度的幅度一致。由于建筑物图像的特殊性,我们可以发现,处理该类型图像轮廓时,并不需要对梯度方向进行运算,所以程序并没有给出各向同性sobel算子的处理方法。
由于sobel算子是滤波算子的形式,用于提取边缘,可以利用快速卷积函数,简单有效,因此应用广泛。美中不足的是,sobel算子并没有将图像的主体与背景严格地区分开来,换言之就是sobel算子没有基于图像灰度进行处理,由于sobel算子没有严格地模拟人的视觉生理特征,所以提取的图像轮廓有时并不能令人满意。在观测一幅图像的时候,我们往往首先注意的是图像与背景不同的部分,正是这个部分将主体突出显示,基于该理论,我们给出了下面阈值化轮廓提取算法,该算法已在数学上证明当像素点满足正态分布时所求解是最优的。
3)prewitt算子
prewitt算子是一种一阶微分算子的边缘检测,利用像素点上下、左右邻点的灰度差,在边缘处达到极值检测边缘,去掉部分伪边缘,对噪声具有平滑作用。其原理是在图像空间利用两个方向模板与图像进行邻域卷积来完成的,这两个方向模板一个检测水平边缘,一个检测垂直边缘。
prewitt算子的两个卷积计算核分别为
与sobel算子一样,采用∞范数作为输出。
prewitt算子对灰度渐变和噪声较多的图像处理得较好。
prewitt算子处理后得到的matlab仿真图如图4。
4)canny算子
canny算子的梯度是用高斯滤波器的导数计算的,检测边缘的方法是寻找图像梯度的局部极大值。canny方法使用两个阈值来分别检测强边缘和弱边缘,而且仅当弱边缘与强边缘相连时,弱边缘才会包含在输出中。因此此方法不容易受噪声的干扰,能够检测到弱边缘。
canny算法步骤:
a)用高斯滤波器平滑图像;
b)计算滤波后图像梯度的幅值和方向;
c)对梯度幅值应用非极大值抑制,其过程为找出图像梯度中的局部极大值点,把其他非局部极大值点零以得到细化的边缘;
d)用双阈值算法检测和连接边缘,使用两个阈值t1和t2(t1>t2),t1用来找到每条线段,t2用来在这些线段的两个方向上延伸寻找边缘的断裂处,并连接这些边缘。
canny的关键理论:
降噪:任何边缘检测算法都不可能在未经处理的原始数据上很好地工作,所以第一步是对原始数据与高斯mask作卷积,得到的图像与原始图像相比有些轻微的模糊(blurred)。这样,单独的一个像素噪声在经过高斯平滑的图像上变得几乎没有影响。
寻找图像中的亮度梯度:图像中的边缘可能会指向不同的方向,所以canny算法使用4个mask检测水平、垂直以及对角线方向的边缘。原始图像与每个mask所作的卷积都存储起来。对于每个点我们都标识在这个点上的最大值以及生成的边缘的方向。这样我们就从原始图像生成了图像中每个点亮度梯度图以及亮度梯度的方向。
在图像中跟踪边缘:较高的亮度梯度比较有可能是边缘,但是没有一个确切的值来限定多大的亮度梯度是边缘多大又不是,所以canny使用了滞后阈值。
滞后阈值需要两个阈值-高阈值与低阈值。假设图像中的重要边缘都是连续的曲线,这样我们就可以跟踪给定曲线中模糊的部分,并且避免将没有组成曲线的噪声像素当成边缘。所以我们从一个较大的阈值开始,这将标识出我们比较确信的真实边缘,使用前面导出的方向信息,我们从这些真正的边缘开始在图像中跟踪整个的边缘。在跟踪的时候,我们使用一个较小的阈值,这样就可以跟踪曲线的模糊部分直到我们回到起点。一旦这个过程完成,我们就得到了一个二值图像,每点表示是否是一个边缘点。一个获得亚像素精度边缘的改进实现是在梯度方向检测二阶方向导数的过零点。
它在梯度方向的三阶方向导数满足符号条件
其中lx,ly...lyyy表示用高斯核平滑原始图像得到的尺度空间表示l计算得到的偏导数。用这种方法得到的边缘片断是连续曲线,这样就不需要另外的边缘跟踪改进。滞后阈值也可以用于亚像素边缘检测。
canny参数:
canny算法包含许多可以调整的参数,它们将影响到算法的计算的时间与实效。高斯滤波器的大小:第一步所有的平滑滤波器将会直接影响canny算法的结果。较小的滤波器产生的模糊效果也较少,这样就可以检测较小、变化明显的细线。较大的滤波器产生的模糊效果也较多,将较大的一块图像区域涂成一个特定点的颜色值。这样带来的结果就是对于检测较大、平滑的边缘更加有用,例如彩虹的边缘。阈值:使用两个阈值比使用一个阈值更加灵活,但是它还是有阈值存在的共性问题。设置的阈值过高,可能会漏掉重要信息;阈值过低,将会把枝节信息看得很重要。很难给出一个适用于所有图像的通用阈值。目前还没有一个经过验证的实现方法。
canny算子核心公式:
取gaussian函数为
canny算子建立在二维卷积
将
式中
可见
然后把这两个模板分别与f(x,y)进行卷积,得到
令
则a(i,j)反映边缘强度,a(i,j)为垂直于边缘的方向。
canny算子处理后得到的matlab仿真图如图5。
5)laplacianofgaussian算法(拉普拉斯算子,简称log算子定义)
log算子定义:
对于标量场函数f,为该标量场梯度的散度的一个标量,即对于矢量场函数,f为该矢量场散度的梯度减去该矢量场旋度的一个矢量,即拉普拉斯算子。
拉普拉斯算子是n维欧几里德空间中的一个二阶微分算子,定义为梯度(▽f)的散度(▽·f)。因此如果f是二阶可微的实函数,则f的拉普拉斯算子定义为:
f的拉普拉斯算子也是笛卡儿坐标系xi中的所有非混合二阶偏导数:
作为一个二阶微分算子,拉普拉斯算子把c函数映射到c函数,对于k≥2。表达式(1)(或(2))定义了一个算子δ:c(r)→c(r),或更一般地,定义了一个算子δ:c(ω)→c(ω),对于任何开集ω。
函数的拉普拉斯算子也是该函数的黑塞矩阵的迹:
log算子推广:
拉普拉斯算子可以用一定的方法推广到非欧几里德空间,这时它就有可能是椭圆型算子,双曲型算子,或超双曲型算子。
在闵可夫斯基空间中,拉普拉斯算子变为达朗贝尔算子:
达朗贝尔算子通常用来表达克莱因-高登方程以及四维波动方程。第四个项前面的符号是负号,而在欧几里德空间中则是正号。因子c是需要的,这是因为时间和空间通常用不同的单位来衡量;如果x方向用寸来衡量,y方向用厘米来衡量,也需要一个类似的因子。
拉普拉斯-贝尔特拉米算子
主条目:拉普拉斯-贝尔特拉米算子
拉普拉斯算子也可以推广为定义在黎曼流形上的椭圆型算子,称为拉普拉斯-贝尔特拉米算子。达朗贝尔算子则推广为伪黎曼流形上的双曲型算子。拉普拉斯-贝尔特拉米算子还可以推广为运行于张量场上的算子(也称为拉普拉斯-贝尔特拉米算子)。
另外一种把拉普拉斯算子推广到伪黎曼流形的方法,是通过拉普拉斯-德拉姆算子,它运行于微分形式。这便可以通过weitzenbö;ck恒等式来与拉普拉斯-贝尔特拉米算子联系起来。
由上述四种算子可看出,canny方法使用两个阈值来分别检测强边缘和弱边缘,此方法不容易受噪声的干扰,能够检测到弱边缘,在噪声抑制和边缘检测之间取得了较好的平衡,边缘最清晰,噪点最少,比roberts算子、prewitts算子、sobel算子得到的效果更好。
c.生成素描图:将进行边缘检测的图片矩阵中的0和1进行调换位置,得到新的图片,把得到的新的图片矩阵中的数字改变为灰色所代表的数字,所得到的新的图片为白底灰色线条的铅笔画效果。灰色由浅到深所代表数字为:238、229、220、210、201、191、181、170、160,将原有图片矩阵中的数字更换为灰色所代表的数字,得到素描颜色线条,生成素描图。
d.实现剪纸阳刻、印刻效果:动态寻找阈值,对素描图进行反色、换色,阳刻为边缘红色,背景白色,印刻则相反。
e.线条后期处理:在轮廓线提取的步骤中,由于需要对目标图像进行腐蚀或膨胀操作,还要对二值化的边缘图像做闭运算,这会细微影响图像灰度以及边缘的分布情况,所提取出来的轮廓线关键点有可能并不在原图像的轮廓线上,并与轮廓线有一定的偏离。因此可根据边缘平均宽度,在提取边缘,阳刻、印刻效果处理后,在图像轮廓线条有突出的部分或者突然凹进去这种边缘噪声,对线条进行加粗(膨胀处理)、变窄(腐蚀处理),得到较平滑的轮廓。
本发明将目标图像分割后,进行边缘提取,提取的效果和准确度大大地影响了最后剪纸的还原度,本发明尝试了已有的边缘检测算法,模拟了roberts算子、prewitt算子、sobel算子、canny算子四种不同算法处理的效果图,前三种差异不大,第四种canny算子效果更好。
以上显示和描述了本发明的基本原理和主要特征和本发明的优点。本行业的技术人员应该了解,本发明不受上述实施例的限制,上述实施例和说明书中描述的只是说明本发明的原理,在不脱离本发明精神和范围的前提下,本发明还会有各种变化和改进,这些变化和改进都落入要求保护的本发明范围内。本发明要求保护范围由所附的权利要求书及其等效物界定。