數字攝影/放大影像
想要從一張數碼照片中抹去你的前任,並在空白處填充,就像什麼都沒發生過一樣?想要讓你的電腦模仿一小塊樣本圖片來填滿你的巨大桌面背景?那麼紋理合成就是你的選擇武器。學習關於放大影像的知識,這是一種古老而緩慢但令人驚訝地強大的方法,可以將小圖片放大。
想象一下,我們有一張小尺寸的木質表面的照片
我們想從這張圖片中製作一張電腦桌面的桌布,滿足以下要求
- 結果影像可以是任何我們想要的尺寸。
- 結果影像應類似於樣本。
- 結果影像應看起來光滑且沒有重複。
- 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為人所知的思想。
想象一下,我把楓木樹根影像中的一個畫素塗黑了,然後讓你設定該畫素的顏色,使結果影像看起來光滑。你會把它設定為綠色嗎?顯然不會,因為綠色在影像中任何地方都沒有出現,肯定不會讓結果看起來光滑。最終,你會選擇某種棕色。但是哪種棕色呢?如果該畫素位於一片白色畫素的中間,你會選擇棕色嗎?
隨機場的想法是這樣的:每個畫素的顏色僅取決於其相鄰畫素的顏色.
這是我們將要仔細研究的演算法的核心思想
|
透過在樣本影像中搜索具有相似鄰域的畫素來設定塗黑畫素的顏色。 |
首先,建立一個具有所需寬度和高度的空圖片,即“場地”。在本例中,這是一個與桌面尺寸相似的影像。
現在,我們將填充空圖片。為此,我們需要從某個地方開始,即“種子”。因此,我們將樣本影像中隨機選擇的一小塊複製到空場地中。
現在,我們將使種子生長,逐個畫素地生長,直到它充滿整個影像。首先,列出所有與已填充畫素相鄰的空畫素。一開始,這些是與種子相鄰的畫素。
隨機選擇該列表中的一個畫素。現在,我們將確定該畫素的顏色。因此,我們不需要畫素本身,而是需要它的鄰域。
將該鄰域與樣本影像中所有畫素的鄰域進行比較,一個接一個。每當找到一個相似的鄰域時,將相應的樣本影像的畫素新增到“良好匹配”列表中。
當我們完成比較後,我們將得到一個候選畫素列表,它們具有相似的鄰域。現在,隨機選擇其中一個候選畫素,並將空畫素的顏色設定為候選畫素的顏色。
繼續下一個空畫素。如果我們的列表中沒有更多空畫素,就該建立一個新的空畫素列表並重新開始。如果“場地”中沒有更多空畫素,我們就完成了。
