跳轉到內容

數字攝影/放大影像

來自華夏公益教科書,開放的書籍,開放的世界

想要從一張數碼照片中抹去你的前任,並在空白處填充,就像什麼都沒發生過一樣?想要讓你的電腦模仿一小塊樣本圖片來填滿你的巨大桌面背景?那麼紋理合成就是你的選擇武器。學習關於放大影像的知識,這是一種古老而緩慢但令人驚訝地強大的方法,可以將小圖片放大。

我們想要做什麼?

[編輯 | 編輯原始碼]

想象一下,我們有一張小尺寸的木質表面的照片

我們想從這張圖片中製作一張電腦桌面的桌布,滿足以下要求

  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為人所知的思想。

想象一下,我把楓木樹根影像中的一個畫素塗黑了,然後讓你設定該畫素的顏色,使結果影像看起來光滑。你會把它設定為綠色嗎?顯然不會,因為綠色在影像中任何地方都沒有出現,肯定不會讓結果看起來光滑。最終,你會選擇某種棕色。但是哪種棕色呢?如果該畫素位於一片白色畫素的中間,你會選擇棕色嗎?

隨機場的想法是這樣的:每個畫素的顏色僅取決於其相鄰畫素的顏色.

重點是什麼?

[編輯 | 編輯原始碼]

這是我們將要仔細研究的演算法的核心思想

透過在樣本影像中搜索具有相似鄰域的畫素來設定塗黑畫素的顏色。

開發演算法

[編輯 | 編輯原始碼]

準備場地

[編輯 | 編輯原始碼]

首先,建立一個具有所需寬度和高度的空圖片,即“場地”。在本例中,這是一個與桌面尺寸相似的影像。

現在,我們將填充空圖片。為此,我們需要從某個地方開始,即“種子”。因此,我們將樣本影像中隨機選擇的一小塊複製到空場地中。

影像生長

[編輯 | 編輯原始碼]

現在,我們將使種子生長,逐個畫素地生長,直到它充滿整個影像。首先,列出所有與已填充畫素相鄰的空畫素。一開始,這些是與種子相鄰的畫素。

隨機選擇該列表中的一個畫素。現在,我們將確定該畫素的顏色。因此,我們不需要畫素本身,而是需要它的鄰域。

尋找匹配

[編輯 | 編輯原始碼]

將該鄰域與樣本影像中所有畫素的鄰域進行比較,一個接一個。每當找到一個相似的鄰域時,將相應的樣本影像的畫素新增到“良好匹配”列表中。

生長一個畫素...

[編輯 | 編輯原始碼]

當我們完成比較後,我們將得到一個候選畫素列表,它們具有相似的鄰域。現在,隨機選擇其中一個候選畫素,並將空畫素的顏色設定為候選畫素的顏色。

... 然後重新開始

[編輯 | 編輯原始碼]

繼續下一個空畫素。如果我們的列表中沒有更多空畫素,就該建立一個新的空畫素列表並重新開始。如果“場地”中沒有更多空畫素,我們就完成了。

華夏公益教科書