跳转到内容

数字摄影/放大图像

来自维基教科书,开放的书籍,开放的世界

想要从一张数码照片中抹去你的前任,并在空白处填充,就像什么都没发生过一样?想要让你的电脑模仿一小块样本图片来填满你的巨大桌面背景?那么纹理合成就是你的选择武器。学习关于放大图像的知识,这是一种古老而缓慢但令人惊讶地强大的方法,可以将小图片放大。

我们想要做什么?

[编辑 | 编辑源代码]

想象一下,我们有一张小尺寸的木质表面的照片

我们想从这张图片中制作一张电脑桌面的壁纸,满足以下要求

  1. 结果图像可以是任何我们想要的尺寸。
  2. 结果图像应类似于样本。
  3. 结果图像应看起来光滑且没有重复。

问题是什么?

[编辑 | 编辑源代码]
  • 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为人所知的思想。

想象一下,我把枫木树根图像中的一个像素涂黑了,然后让你设置该像素的颜色,使结果图像看起来光滑。你会把它设置为绿色吗?显然不会,因为绿色在图像中任何地方都没有出现,肯定不会让结果看起来光滑。最终,你会选择某种棕色。但是哪种棕色呢?如果该像素位于一片白色像素的中间,你会选择棕色吗?

随机场的想法是这样的:每个像素的颜色仅取决于其相邻像素的颜色.

重点是什么?

[编辑 | 编辑源代码]

这是我们将要仔细研究的算法的核心思想

通过在样本图像中搜索具有相似邻域的像素来设置涂黑像素的颜色。

开发算法

[编辑 | 编辑源代码]

准备场地

[编辑 | 编辑源代码]

首先,创建一个具有所需宽度和高度的空图片,即“场地”。在本例中,这是一个与桌面尺寸相似的图像。

现在,我们将填充空图片。为此,我们需要从某个地方开始,即“种子”。因此,我们将样本图像中随机选择的一小块复制到空场地中。

图像生长

[编辑 | 编辑源代码]

现在,我们将使种子生长,逐个像素地生长,直到它充满整个图像。首先,列出所有与已填充像素相邻的空像素。一开始,这些是与种子相邻的像素。

随机选择该列表中的一个像素。现在,我们将确定该像素的颜色。因此,我们不需要像素本身,而是需要它的邻域。

寻找匹配

[编辑 | 编辑源代码]

将该邻域与样本图像中所有像素的邻域进行比较,一个接一个。每当找到一个相似的邻域时,将相应的样本图像的像素添加到“良好匹配”列表中。

生长一个像素...

[编辑 | 编辑源代码]

当我们完成比较后,我们将得到一个候选像素列表,它们具有相似的邻域。现在,随机选择其中一个候选像素,并将空像素的颜色设置为候选像素的颜色。

... 然后重新开始

[编辑 | 编辑源代码]

继续下一个空像素。如果我们的列表中没有更多空像素,就该创建一个新的空像素列表并重新开始。如果“场地”中没有更多空像素,我们就完成了。

华夏公益教科书