数字摄影/放大图像
想要从一张数码照片中抹去你的前任,并在空白处填充,就像什么都没发生过一样?想要让你的电脑模仿一小块样本图片来填满你的巨大桌面背景?那么纹理合成就是你的选择武器。学习关于放大图像的知识,这是一种古老而缓慢但令人惊讶地强大的方法,可以将小图片放大。
想象一下,我们有一张小尺寸的木质表面的照片
我们想从这张图片中制作一张电脑桌面的壁纸,满足以下要求
- 结果图像可以是任何我们想要的尺寸。
- 结果图像应类似于样本。
- 结果图像应看起来光滑且没有重复。
- Why don't we just stretch the sample? 拉伸是一件可怕的事情。图片是由像素组成的,在最终图像中会显示为难看的方形块
Why don't we use the desktop's option that says "Tile image"? 这和拉伸一样可怕。平铺意味着重复图像并将它一遍又一遍地粘贴在它旁边。这对于“图案纹理”可能效果不错,因为它们的边界相互匹配。对于上面的枫木树根来说,它看起来很无聊且不合适
满足我们前两个要求很简单,但是很难满足最后一个要求。
为了解决我们的任务,最好仔细看看是什么让纹理成为纹理。比较以下两行图片,思考一下纹理和“普通”图像的区别
纹理 | |||
非纹理 |
最终,你会想到以下一些想法
- 纹理是一种表面结构,具有一定的或多或少的规律图案,比如覆盖桌子的木质树根。
- 无论你在纹理中将目光投向何处,它看起来都一样,不像一张脸,每个部分都有自己的位置。
- 单个物体,缩小并以类似的方式重复了一遍又一遍,就成了纹理,比如一块砖头在砖墙中就变成了纹理。
Texture looks the same, no matter what part of the picture you look at. 这被称为平稳性,正是这个想法最好地概括了以令人不安的名称Markov Random Field为人所知的思想。
想象一下,我把枫木树根图像中的一个像素涂黑了,然后让你设置该像素的颜色,使结果图像看起来光滑。你会把它设置为绿色吗?显然不会,因为绿色在图像中任何地方都没有出现,肯定不会让结果看起来光滑。最终,你会选择某种棕色。但是哪种棕色呢?如果该像素位于一片白色像素的中间,你会选择棕色吗?
随机场的想法是这样的:每个像素的颜色仅取决于其相邻像素的颜色.
这是我们将要仔细研究的算法的核心思想
通过在样本图像中搜索具有相似邻域的像素来设置涂黑像素的颜色。 |
首先,创建一个具有所需宽度和高度的空图片,即“场地”。在本例中,这是一个与桌面尺寸相似的图像。
现在,我们将填充空图片。为此,我们需要从某个地方开始,即“种子”。因此,我们将样本图像中随机选择的一小块复制到空场地中。
现在,我们将使种子生长,逐个像素地生长,直到它充满整个图像。首先,列出所有与已填充像素相邻的空像素。一开始,这些是与种子相邻的像素。
随机选择该列表中的一个像素。现在,我们将确定该像素的颜色。因此,我们不需要像素本身,而是需要它的邻域。
将该邻域与样本图像中所有像素的邻域进行比较,一个接一个。每当找到一个相似的邻域时,将相应的样本图像的像素添加到“良好匹配”列表中。
当我们完成比较后,我们将得到一个候选像素列表,它们具有相似的邻域。现在,随机选择其中一个候选像素,并将空像素的颜色设置为候选像素的颜色。
继续下一个空像素。如果我们的列表中没有更多空像素,就该创建一个新的空像素列表并重新开始。如果“场地”中没有更多空像素,我们就完成了。