在计算机图形学中,纹理滤波(Texture filtering)是一种针对一个使用材质贴图的像素,使用临近的一个或多个纹素计算其纹理颜色的方法。从数学上来说,纹理滤波是抗锯齿的一种,但它更着重于滤掉纹理中的高频,而不像其他抗锯齿技术那样着重于改善边界显示效果。简单来说,它使得同一个纹理可以被用于不同的形状,尺寸和角度,同时尽可能减少显示时的模糊和闪烁。用户可以权衡计算复杂度和图像质量,在许多种纹理滤波方法中进行选择。
简介图像传递着丰富的视觉信息,许多自然图像和人造艺术图像都包含纹理,例如一些墙壁和地铁上的徐鸦和绘画,地毯、毛衣等工艺品上包含的各种重复的图案。在人类历史上,拼接一直是一种表示人物或者动物等场景的艺术形式,往往使用的石头、玻璃、陶瓷等材料也构成了大量纹理区域。心理学认为,人类观察图像时,最先感知的是图像的整体结构,而不是纹理细节,可见图像的结构对于目标识别有着更重要的意义。但是很多图像本身都含有丰富的纹理,而且对比度可能很高,识别工作面临严峻挑战。而纹理滤波算法能够在一定程度上抑制不必要的纹理信息,突出图像的主干结构,该特性使得纹理滤波被更广泛地应用在细节增强、图像抽象、逆半调、结构提取等领域中。纹理滤波的核如是结构层和纹理层的分离,这也是图像处理与模式识别领域的一个难点问题。
近十几年,不断有一些新的边缘保持的滤波算法被提出。从宏观来看,可以大致分为两大类,第一类主要是基于局部的滤波方法,早期的工作包括各项异性扩散和双边滤波,研宄人员的不断努力,改进了双边滤波的效率,同时也产生了一些基于不同理论的滤波加速算法。虽然这些算法的效果在一定程度上有些改善,但是依然摆脱不了它们的局限性。另外一类方法是基于全局优化的技术框架,这类方法都有一个类似的框架,即都含有一个结构保真项和一个正则项,通过求解能量函数的最优解来实现。保真项约束输入和输出的偏差不能太大,使得平滑后的图像在结构上要和输入图像相类似;正则项又叫平滑项,目的是尽可能的平滑纹理。虽然这类基于全局的优化方法能取得优于其它局部滤波方法的效果,但是不可避免的会增加计算成本。即使一些加速技术不断发展,全局优化的效率仍比局部滤波要低一个数量级。另外,全局优化框架的效果很大程度上依赖于结构保真项和正则项两项的权值,参数很难设置。此外,在机器学习和人工智能的火热背景下,一些基于学习的滤波算法也相继被提出,并取得了不错的进展。总的来说不同的滤波方式适用于不同的纹理图像1。
滤波方式最近邻插值
最近邻插值是最快速,也是最粗糙的滤波方式。最邻近像素中心的纹素颜色将被作为像素的颜色。在纹理放大时,这种方式会导致色块;而在纹理缩小时,则会导致闪烁和锯齿。
最近邻Mipmapping
这种方式先根据距离选择最近的mipmap层级,再从其中选择最靠近像素中心的纹素。这对闪烁和锯齿很有效,但不能减少色块。Mipmapping是一种常见的通过预计算减小渲染时所需滤波工作的方法。在纹理放大中,所参与计算一个像素的纹理值的纹素一般是四个或更少;而在纹理缩小中,随着目标表面远离视点,整个纹理尺寸可能最终将比一个像素还小,这将造成需要其上的所有纹素进行计算,这样造成的计算量和带宽在实时渲染中是不现实的。Mipmapping通过进行预计算,并将结果存储在一系列更小尺寸的纹理中,避免了这种情况的发生。当目标表面逐渐远离时,更小尺寸的纹理将自动被选用参与计算。
双线性滤波
双线性滤波会从最近的mipmap层次上,选择最靠近像素中心的四个纹素,再根据他们靠近像素中心的具体进行权重插值。这时如果进行纹理放大,当像素相对于纹素移动时,像素颜色会从逐渐从一个纹素颜色变化到相邻的纹素颜色,而不是像最近邻插值那样,在穿过两个纹素的边界时发生突变,这样就消除色块。双线性滤波经常与mipmapping一起使用,但也可以单独使用,但这时会出现闪烁和锯齿化的问题。
三线性滤波
在使用mipmapping双线性滤波时,当目标表面的距离变化时,会从一个mipmap层次突变到相邻的层次。三线性滤波被用来解决这个问题,方法是在最相邻的两个mipmap层次上分别进行双线性滤波,再用得到的两个值进行线性插值。值得注意的是,当距离小于mipmap的零层次时(即纹素大小超过像素大小时),三线性插值退化为双线性插值。
各向异性滤波
各向异性过滤是现有消费级显卡所提供的图像质量最佳的滤波方式。传统的各项同性滤波中只是在正方形的mipmap层次间进行双线性或三线性插值,但是当一个目标表面和摄像机之间角度较大时,纹理的填充面积并不是正方形,这样便引入了模糊和闪烁等瑕疵。 于是,各向异性滤波需要对一个非方形纹理进行采样。在一些简单的实现中,显卡使用长方形的纹理取代方形纹理,达到了较好的近似效果。但是这种方式在处理边界时效果依然不理想,原因是在倾斜的表面上,近端边界比远端边界拥有更多的像素。于是一些高端显卡使用了梯形纹理,当然这也要求更大的运算量。
反锯齿反锯齿,也译为抗锯齿或边缘柔化、消除混叠、抗图像折叠有损等。它是一种消除显示器输出的画面中图物边缘出现凹凸锯齿的技术,那些凹凸的锯齿通常因为高分辨率的信号以低分辨率表示或无法准确运算出3D图形坐标定位时所导致的图形混叠(aliasing)而产生的,反锯齿技术能有效地解决这些问题。它通常被用在在数字信号处理、数字摄影、计算机绘图与数码音效等方面,柔化被混叠的数字信号。由于高分辨率下的来源信号或连续的类比信号能够存储较多的数据,但在透过取样(sampling)时将较多的数据以较少的数据点代替,部分的数据被忽略造成取样结果有损,当机器把取样后的数字信号转换为人类可辨别的类比信号时造成彼此交叠且有损,在声音中,便会出现刺耳、不和谐的音调或是噪音。同样,在3D绘图时,每个图形由像素组成,每段瞬间画面由帧组成,因为屏幕上的像素有限,如果要表现出多边形的位置时,因技术所限,使用绝对坐标定位法是无法做到的,只能使用在近似位置采样来进行相对定位。由于没有足够的采样来表现出3D世界中的所有物品的图形,所以在最后图像显示上,这些现象便会造成在物品与物品中过渡的边缘就会产生波浪状、圆形、锯齿和闪烁等有损现象,严重影响了画面的质量。
有关联系结构和平坦:结构反映了图像的显著性信息,其梯度较大;平坦区域一般是图像的背景或是填充在不同结构之间的光滑区域,其梯度很小。因,利用梯度信息就可以将二者进行区分。纹理和平坦:首先,两者都是指一片区域,不能说某个像素是纹理或平坦。
两者的主要区别还是在梯度上。纹理是一种重复模式的区域,这些区域的像素颜色值是波动的,表现为图像中就是梯度变化幅值较大,而平坦区域几乎波动不大。此外,若纹理的尺度足够小,纹理区域就近似于平坦区域。
结构和纹理:二者从梯度上很难进行区分,有强梯度的纹理,也有弱梯度的结构。两者的差异主要反映在重复模式上。纹理是重复模式的区域,结构是稀疏的单一线条。而且纹理和结构都是相对而言的,同一块区域,近处看是结构,远看可能就是纹理。所以,在区分结构和纹理时,需要考虑尺度信息,这是度量结构纹理差异性的重要因素。
本词条内容贡献者为:
孔祥杰 - 副教授 - 大连理工大学软件学院