基于纹理块连贯性的纹理合成技术

2009-03-23 02:40罗仕鉴
计算机时代 2009年1期

朱 涛 罗仕鉴

摘要:纹理合成是当前计算机图形学、计算机视觉和图像处理领域的研究热点之一。文章对基于样图的二维纹理合成技术进行了研究,有机结合了前人的一些观点,在此基础上提出了一种新的算法:在Efros和Liang提出的块拼接纹理合成算法的基础上融入Ashikhmin提出的基于位置相对性的合成技术,并加入与视觉相关的权值,得到了很好的视觉效果。

关键词:纹理合成;纹理连贯性;MRF模型;块拼接

0引言

纹理映射是绘制复杂场景真实感图形最为常用的技术,但由于采样区域的局限,所获取的纹理样本通常为小块纹理,若将小块纹理直接映射到大的曲面上,它将导致映射后表面纹理模糊不清,若采用重复映射技术,则可能出现表面纹理接缝走样等问题。

基于样图的纹理合成,是近几年迅速发展起来的一种新的纹理合成技术。它基于给定的小区域纹理样本,按照表面的几何形状,拼合生成整个曲面的纹理,纹理在视觉上是相似而连续的。基于样图的纹理合成技术不仅可以克服传统纹理映射方法的缺点,而且避免了过程纹理合成调整参数的繁琐,因而受到越来越多的研究人员的关注,成为计算机图形学、计算机视觉和图像处理领域的研究热点之一。本文的算法就是基于Ashi-khmin提出的基于位置相对性的合成技术和Efros和Liang同时分别提出的基于MRF模型和块拼接的纹理合成算法。

早期纹理合成技术有金字塔模型、多分辨率模型、MRF模型、层次法表示等,但效果均不太理想。在1999年的ICCV会议上,Efros基于MRF模型,提出了以邻近点相关为基本准则的非参数采样合成算法,取得了很好的合成效果。紧接着,在2000年的SIGGRAPH会议上,Wei和Levoy提出了一种改进的算法:邻域改为L形状,而非矩形。这种改进大大减小了计算量,加快了合成速度。在2001年,Ashikhmin利用相关性原理,根据位置的相对关系,在待选点中寻找最佳匹配点,这种方法对绝大多数的自然纹理合成都能取得很好的效果,而且速度比文献[11]还要快;同样是2001年,Efros和Liang同时分别提出了基于MRF模型和块拼接的纹理合成算法,在纹理的合成质量和合成速度上比以前的算法都有显著提升。这些使得纹理合成技术发展到了一个新的高度。

本文提出了一种新的纹理合成算法。算法思想与文献[2-3]类似,但加入了文献[1]的特点,在搜索匹配块时采用了新的搜索规则,加速了匹配过程;同时在边界重叠区的匹配误差计算时采用了与视觉相关的权值,使合成结果更符合视觉要求。

1相关工作

在2001年,Ashikhmin提出了一种新的简单有效的搜索匹配方法,该方法对于合成自然纹理有着非常理想的效果。与Wei和Levoy的算法在整个样本图中搜索匹配点不同,Ashikhmin利用相关性原理,根据输出图像中当前点的L邻域中的点(如图1输出图像所示),找到与其匹配的输入图像中对应点的位置(如图1中的箭头所指点),然后偏移相应量后获得待选点(如图1输入图像中的黑块)。以输出图像中当前点P的右上角邻点A为例,A是已合成的点,其在输入图像中的匹配位置为A′,由于输出图像中,当前点P与A在x方向相差-1,在y方向相差1,即P=A+(-1,1),对应地,在样本图中,待选点A″由A′+(-1,1)获得。其它待选点的计算类似。图1中输入图像中的黑点为当前点P的所有待选点,比较各待选点与P点的L邻域的误差,选取误差最小的点作为P点的匹配点。

在2001年的SIGGRAPH会议上,Efros提出一种基于块拼接的纹理合成算法。比起以往的算法,该算法使用纹理块作为纹理合成的单元,这是在文献[10]基础上的一个拓展。该算法在纹理合成的时间、合成纹理的视觉效果方面都得到了很大的提高,避免了以往的算法容易引起的模糊,纹元错位严重等问题。如图2所示,该方法按扫描线顺序从左至右、从上至下逐块合成纹理(图2演示了合成顺序),其中阴影块为当前待合成纹理块,其他正方形块为已合成纹理块,红色轮廓线区域不仅是当前待合成纹理块的边界,而且也是与已合成部分的重叠区域。在合成过程中,所谓重叠区域匹配是指重叠区域的误差小于某给定的阀值。重叠区域的误差指它们重叠区域中对应像素的RGB值误差之和。这里RGB值误差定义为它们间的L2距离。例如,N1,N2若为重叠区域,则它们的误差为:其中函数R(pixel),G(pixel),B(pixel)分别表示纹理图像的红、绿、蓝三原色。

为了使重叠区域平滑过渡,文章还提出了裁剪线的概念。在匹配的重叠区域每一行中,找到偏差最小的像素点,由这些像素点就构成了裁剪线。如图3所示,把裁剪线作为B2的边缘,把B2贴入合成图中,反复重复以上过程,就获得了合成纹理图。此算法虽然简单,但合成效果很好。该算法存在的问题是有时纹理出现过多的重复,有些边界不匹配。

2本文的算法

Ashikhmin巧妙地运用了如下事实:对当前待合成点的邻域内的已知点在样本图中的匹配点做相应的平移变换可导出当前待合成的点。这种性质可称之为“纹理的连贯性”。Efros和Liang提出的块拼接合成算法中,没有利用这个性质。同时,由于L2距离并不是衡量两个纹理块之间视觉相似性的最好的手段,我们根据人的视觉系统对图像中颜色变化尖锐的地方反应敏感,对颜色变化平缓的地方反应较为迟钝的特点,对L(sub)2(/sub)距离给出了相应的视觉权值,进一步提高了合成效果。本文基于[1—2]提出了一种新的纹理合成算法,它有以下特点:

(1)根据当前待合成纹理块的L邻域(将Wei中像素的L邻域概念中的像素推广成像素块)内的已合成纹理块在样本图中的位置找到相应的待选纹理块(类似文献[1]方法),将待选块先进行匹配检查,加速匹配搜索。

(2)采用部分的MRF模型。如果搜索过程中找到边界误差小于阀值的纹理块,则马上停止搜索,将其作为当前待合成纹理块;如果没有发现误差小于阀值的纹理块,则采用MRF模型,得到当前待合成纹理块。

(3)在计算两个纹理块边界重迭区的误差时,引入与视觉相关的权值,使合成结果更符合视觉特性。

本文算法可简述如下:首先确定当前要合成的纹理块,确定其L邻域,根据L邻域中已合成纹理块的位置搜索记录匹配纹理块位置的数组,找到匹配块,偏移相应位置后,得到当前待选纹理块。然后比较待选纹理块的边界匹配误差,如果误差小于给定阀值,则直接选择它作为当前待合成纹理块;否则搜索整个样本图中的纹理块,直到找到边界误差小于阀值的纹理块,或者根据边界误差最小的纹理块“估计”匹配纹理块。同时在计算误差的时候加入视觉相关的权值。

下面我们对算法作详细介绍。

2.1搜索匹配纹理块

搜索匹配纹理块的过程吸收了算法[1]和[2]的特点,具体来说分为两步:

(1)由当前待合成纹理块P确定其L邻域N(p)中的纹理块,得到在样本图中所对应的待选纹理块集合T(p),在T(p)中搜索。

(2)在样本图中所有纹理块集合T(all)中搜索。

先讨论第一步搜索过程。为了提高合成速度,通常采用3×3的L邻域(这里以一个纹理块长度为一个单位)。此时邻域纹理块集合N(p)最多包含当前待合成纹理块P的正左边、左上角、正上方、右上角四个相邻纹理块(即图4左边绿色轮廓线所包含的纹理块)。查找匹配纹理块位置数组,得到这四个邻域纹理块在样本图像中的匹配位置(如图4右边绿色填充的纹理块),偏移相应量后即为当前待选纹理块。以输出图像中当前待合成纹理块P的左上角邻域纹理块A为例,A在样本图中的匹配纹理块为A′,指定纹理块大小为Wpatch×Wpatch,边界重迭区宽度为Woverlap,A′左上角的坐标为(x,Y),则由A产生的待选纹理块A′的左上角的坐标为(X+Wpatch-Woverlap,Y+Wpatch-Woverlap)。其它待选纹理块的计算类似。如图4所示,输入图像中的粗边方块即为待选纹理块。得到T(p)后,比较其中各待选纹理块与当前待合成纹理块L邻域的边界误差,如果存在误差小于给定阈值得的待选纹理块Tmatch,则选择它作为当前待合成的纹理块。

如果没有找到Tmatch,才进行第二步搜索。此时计算样本图中所有纹理块的边界误差,并记录误差值。如果存在边界误差值小于给定阈值的纹理块Pmatch,则停止搜索,将Pmatch作为当前待合成纹理块;如果搜索完整个样本图,都没有找到边界误差小于阈值的纹理块,则选择边界误差最小的纹理块作为当前待合成的纹理块。经过上述两步搜索得到的纹理块,我们可以按[2]中提到的图像缝合方式或[3]中提到的颜色混合方式合成到结果图中。

2.2与视觉相关的权值计算

已有算法在计算两个边界区的误差时,用到了距离L2,这种误差度量方法将每个像素置于同等的地位对待,并不恰当。从视觉的角度观察图像,每个像素对人眼睛和心理的刺激是不同的,人往往对图像中颜色变化尖锐的地方反应敏感,而对颜色变化平缓的地方反应相对迟钝。基于这一点,本文提出给样本图和边界区中的像素设定权值,来搜索更符合视觉要求的匹配纹理块。图5中:(a)是一张图像;(b)是像素权值的示意图,其中像素颜色深的地方权值较大。

下面介绍权值的计算方法。对图像中的某像素点P,我们给定以该点为中心的窗口Mw×Nw,对于窗口中的任一点Q,我们定义P和Q的RGB颜色误差为:

这里N是窗口中除P点以外的像素个数,γ是用来控制像素点的权值受周围像素影响程度的因子。在合成前,首先对样本纹理中每一个像素计算其权值,把结果保存在权值数组中。在合成纹理块时,对当前合成边界区的像素计算权值,再用如下方法计算边界区误差:

这里Bin指边界重迭区在样本图中的部分,Bout指边界重迭区在合成图中的部分,Bin是Bin中的第i个像素,Bout是Bout中的第i个像素,Winj指像素Bin的权值,Woutj指像素Bout的权值,N指边界重迭区的像素总数。值得注意的是:加入了像素权值以后,如果两个像素的颜色相同,但权值不同,那么这两个像素之间也将产生相似性误差。

3结果和分析

我们用PC机(PⅢ667/256M)对一些纹理进行合成。图6是本算法与[2]算法合成结果的对比。图6中左边一列为样本图,按从上至下其分辨率分别为108×108像素、108×108像素和138×138像素;中间一列是用本算法合成的结果图,大小为164×164像素;右边一列为用[2]算法合成的结果图,大小为164×164像素。从图6我们可以看到用本算法合成的结果比用[2]算法合成的结果视觉效果要好。同时本文算法的合成速度也得到了很大的提高。表1列出图中各纹理合成的一些实验数据,可以看出,在合成所用纹理块大小相同的情况下,本算法的合成时间比[2]算法要短20%到30%大小。

在实验中我们发现如下规律:

(1)纹理块越大,合成时间越短,纹理块越小,合成时间越长;但纹理块的大小与样本图相关,通常情况下,纹理块要比“纹元”略大。如果纹理块过大,块与块之间的接缝较明显;如果纹理块过小,则有可能引起纹理特征变形。

(2)边界区的宽度一般取纹理块宽度的1/4到1/6较为合适。本文取纹理块宽度的1/6。

(3)γ是用来控制像素点的权值大小的可调节变量,过大或过小都会降低合成质量。本文所用的γ大小为0.05。

(4)对于确定当前待合成纹理块的误差阈值,一般取为0,即要求纹理块边界完全吻合,但实验中发现取阈值为20以下对合成质量影响不大。本文所用的阈值为10。

4结束语

本文提出了一种新的纹理合成算法。算法吸收了文献[1—3]等多个算法的特点;利用“纹理块的连贯性”,加快了纹理合成的速度;同时算法在进行纹理块边界误差的计算时对每个像素加入了与视觉相关的权值,得到了较好的合成结果。由此可以看出,每个像素的重要性确实是不一样的。

纹理合成是当前计算机图形学和计算机视觉领域的研究热点。其潜在的应用包括高维纹理合成、纹理的压缩和解压缩、视频的合成和编辑、几何纹理的建模和合成、网格纹理直接合成、网络数据的快速传输、计算机动画、影视特技和虚拟现实等方面。