一种面向动物照片的二值图画设计算法
2015-07-13王晓迎张慧娥
王晓迎 张慧娥
摘要:针对“动物照片转化为矢量图”和“动物具象标志设计”这两种应用所需要的二值图画(具有“保留主干、便于识别和美观的特点),本文提出一种“面向动物照片的二值图画设计算法”。本算法应用图像形态学的“闭运算”使照片动物造型趋于简化(保留主干、便于识别),再对未检测出的动物关键轮廓点,通过交互程序将其拟合为最小二乘曲线,使构图完整和美观。实验表明,该算法的适应性较好且方便易行。
关键词:二值图画; 结构元素; 闭运算; 拟合多项式; 拐点
中图分类号:TP311 文献标识码:A 文章编号:1009-3044(2015)13-0182-02
Abstract: For "animal photos converted into vector graphics" and "animal figurative logo design" ,both the applications require a binary picture (with "keep the trunk、identify easily and beautiful" features),an algorithm of binary pictures design based on photos of animals is developed. First the image morphology "closing operation" makes the animal picture shapes tend to simplify (keep the trunk, identify easily), and then the animal key contour points that do not detected, through an interactive program to fit to a least-squares curve, making complete composition and beautiful. It is shown in the experiments that this algorithm is flexible and simple to apply.
Key words: binary pictures; structural elements; closing operation; polynomial fitting; inflection points
图画一般是指用线条、色彩描绘出来的形象[1]。二值图画属于计算机中的二值图像,可以用黑白两种像素表示。二值图像是特征提取和模式识别的重要预处理过程,它不仅在字符识别、医学成像等图像检测领域有着广泛的应用,而且在广告媒体领域的标志图形设计、位图转换为矢量图应用中有着不可替代的重要作用。
本文所提出的一种“面向动物照片的二值图画设计算法”,主要是针对“动物照片转化为矢量图”和“动物具象标志设计”这两种应用所需要的二值图画设计的。该种二值图画具有对照片原图的高度概括(去掉细节保留主干)和便于人眼快速识别以及美观的特点。按照此特点,本文所设计的算法由两个部分构成:① 通过图像形态学的“闭运算”使照片中的动物形态趋于简化,然后用二维Otsu法将图像分割为二值化图像,使其具有“保留主干、便于识别”的特点。② 对于动物未检测出的关键轮廓点,通过交互程序将其拟合为最小二乘曲线,使动物构图完整和美观。本算法的运行环境为Matlab7,选取的动物照片长和宽均为600像素,分辨率为300dpi,采用灰度模式。
1 图像形态学“闭运算”简化图像
图像形态变换实际上是在图像中移动一个结构元素,与图像进行交集、并集等集合运算。基本的形态运算是腐蚀和膨胀运算。用[B(x)]表示结构元素,对图像空间[E]中的每一个点[x],腐蚀和膨胀运算的定义分别为:
腐蚀:[X=x:B(x)?E]
膨胀:[Y=y:B(y)?E≠空集]
用[B(x)]对[E]进行腐蚀的结果就是把结构元素[B]平移后使[B]包含于[E]的所有点构成的集合;用[B(x)]对[E]进行膨胀的结果就是把结构元素[B]平移后使[B]与[E]的交集非空的点构成的集合[2]。“腐蚀”和“膨胀”可以组成多种运算,本文采用的是“闭运算”(即先膨胀再腐蚀),这是因为“闭运算”可以去掉目标内的孔,使照片中的动物形态更易于趋向简化。
本文选择的结构元素为“圆盘形”,因为“圆盘形”较“直线形”、“菱形”等结构元素更接近动物的曲线形态和纹理特点。本文将动物照片分为“细节较少”(如图1大象原图)和“细节较多”(如图1老虎原图)两种情况。实验显示“细节较少”的照片,“圆盘形”结构元素的半径r=5为宜;“细节较多”的照片,“圆盘形”结构元素的半径r=3为宜。
本文算法,在对于照片中动物像素值较背景像素值低的情况(如图1大象原图及其直方图所示,其背景像素值多分布在灰度值高的区域),需进行反相处理后再进行“闭运算”。这是因为该种情况的照片进行“膨胀”运算后会导致动物像素减小而背景像素增大,产生动物像素失真和其轮廓与背景混淆。而进行反相处理后,“膨胀”运算后的动物像素增大而背景像素减小,动物像素失真会明显降低并且动物轮廓较变换前清晰许多。从图1的“局部放大”对比图(“r=5,反向”对比“r=5,不反向”)中我们可以明显的看到这一点。由于老虎原图不属于此类情况,所以不需要反相。对于“闭运算”后的图像再用二维Otsu法将图像分割为二值化图像,使其具有“保留主干、便于识别”的特点,结果如图1中A、B所示。
2 最小二乘多项式拟合曲线
对于动物照片在上述“2”中未检测出的关键轮廓点(虽然这种点很少,但是在构图上又比较关键,影响动物造型的完整性和美观性),如图1中A、B所示的老虎左耳朵、大象象牙的上轮廓。对于这种情况,本文在最小二乘曲线拟合算法的基础上结合应用实例,提出了轮廓点分段拟合和拐点判断的算法,实现轮廓点最小二乘多项式曲线线条的拟合和绘制。该算法可以消除高次拟合正规方程组的病态和由曲线凸凹变化所引起的拟合误差。
最小二乘曲线拟合算法原理如下:对于给定数据点[(xi,yi)][(i=1,2,…,m+1)],[φ]为所有次数不超过[n(n≤m)]的多项式构成的函数类,求[fn(x)=k=0nakxk∈?],使得[e=k=0mfn(xi)-yi2=i=0mk=0nakxki-yi2]最小,称[fn(x)]为最小二乘拟合多项式。通过[?e?aj=2i=0m(k=0nakxki-yi)xji=0] [(j=1,2,…,n+1)],可求出拟合多项式[fn(x)][3]。
下面以图1中A左边老虎的一个耳朵为例,说明本文最小二乘拟合多项式算法的过程。
①使用ginput函数获得必要的轮廓点a、b、c、d、e、f点的坐标,如图2“+”处所示。
②为了避免拟合多项式次数较高时其正规方程组为病态,本文尽量减少高次拟合的多项式,作不同分段的低次拟合。令a到e点为一段,e到h点为一段。
③对上述每一段拟合为最小二乘多项式并要求每一段曲线中不能有拐点。为了判断是否存在拐点,对于每一段拟合出来的多项式[fn(x)],需将本段两两拟合点之间的中点横坐标代入[fn(x)]中,算出[f''(x)]。如果[f''(x)]>0,则[f(x)]在两拟合点区间的图形是凹的;如果[f''(x)]<0,则[f(x)]在两拟合点区间的图形是凸的。根据[f''(x)]的凹凸性来判断该段曲线有无拐点[4],有拐点的拟合多项式给予排除。
本文算法的最高次方定为6,在无拐点的多项式中选择次数最高的一个即为所求多项式[fn(x)]。如图2“ae拟合曲线”中所示,“虚线4次多项式”出现拐点,所以 “实线3次多项式”为所求多项式[fn(x)];“eh拟合曲线”中,“虚线6次多项式”没有出现拐点(本例“虚线6次多项式”与“实线5次多项式”几乎重合),所以“虚线6次多项式”为所求多项式[fn(x)]。对每段求得的[fn(x)]通过程序描画出来,如图2所示。图2中C、D为最终二值图画。
3 结束语
本文提出的“面向动物照片的二值图画设计算法”,经过多张动物照片的实际测试,结果表明该算法的适应性较好且方便易行,符合“动物照片转换为矢量图”和“动物具象标志设计”这两种应用所需要的二值图画具备“保留主干、便于识别和美观”的特性要求。
参考文献:
[1]百度百科.图画[EB/OL].(2014-11-29)[2015-01-01]. http://baike.baidu.com/view/185666.html
[2] 张德丰.详解MATLAB图像数字处理[M].北京:电子工业出版社,2010.
[3]陈岚峰,杨静瑜,崔崧, 等.基于MATLAB的最小二乘曲线拟合仿真研究[J].沈阳师范大学学报:自然科学版,2014,32(1):75-79.
[4]同济大学数学系.高等数学[M].7版.北京:高等教育出版社,2014.