纹理合成

这里讲得纹理合成指的是合成图片纹理,也就是二维纹理合成,并不是指将纹理直接合成到三维模型上面。虽然从本质上面来说,三维纹理合成和二维纹理是一样的。
纹理合成基本上是用的非参数化的采样方法,也就是Li-Yi-Wei的那篇纹理合成的论文所使用的方法。基本思路就是为当前要合成的像素在样图中寻找一个最佳的邻域,至于这个邻域的形状是可以变化的。合成像素选取的顺序也是可以变化的。这些或多或少都会影响合成的最终结果。LiYiWei的论文里面选取的是L形状的邻域,并且使用扫描线的顺序。
在LiYiWei的三维纹理合成论文居然又提到了合成顺序对合成结果影响不大,这个好像没那么正确。因为,合成纹理像素的使用,需要匹配邻域,而且这些邻域最好是已经合成的像素,如果不是就不会得到较好的结果。这个是最关键的一点。所以说,合成顺序对合成结果还是有一定的影响的。
为什么L邻域能够得到较好的结果了,那是因为扫描线顺序下,L邻域里面的像素都是已经合成的像素。所以,如果打算对合成纹理算法进行局部的修改就需要注意邻域和合成顺序的设定,必须尽可能使用已经合成的像素。
为什么说三维纹理的合成和二维纹理的合成,本质是一致的了?因为三维纹理合成需要局部铺平,来构造邻域,然后的匹配和二维的思想是完全一致的。
下面是我自己实现代码的合成结果。纹理合成的代码网上还是能够找到的,虽然不是那么好找,这也只限于二维合成的代码。最好不要看csdn上面那个自以为写了加速的代码。
样本纹理:
合成纹理: