補全演算法
1. 什麼是圖像的高頻、低頻部分,圖像補全的方法是
圖像的頻率:灰度值變化劇烈程度的指標,是灰度在平面空間上的梯度。
低頻就是顏色緩慢地變化,也就是灰度緩慢地變化,就代表著那是連續漸變的一塊區域,這部分就是低頻. 對於一幅圖像來說,除去高頻的就是低頻了,也就是邊緣以內的內容為低頻,而邊緣內的內容就是圖像的大部分信息,即圖像的大致概貌和輪廓,是圖像的近似信息。
反過來, 高頻就是頻率變化快.圖像中什麼時候灰度變化快,就是相鄰區域之間灰度相差很大,這就是變化得快.圖像中,一個影像與背景的邊緣部位,通常會有明顯的差別,也就是說變化那條邊線那裡,灰度變化很快,也即是變化頻率高的部位.因此,圖像邊緣的灰度值變化快,就對應著頻率高,即高頻顯示圖像邊緣。圖像的細節處也是屬於灰度值急劇變化的區域,正是因為灰度值的急劇變化,才會出現細節。
另外雜訊(即噪點)也是這樣,在一個像素所在的位置,之所以是噪點,就是因為它與正常的點顏色不一樣了,也就是說該像素點灰度值明顯不一樣了,,也就是灰度有快速地變化了,所以是高頻部分,因此有雜訊在高頻這么一說。
圖像補全的方法:
第一種:Region Filling and Object Removal by Exemplar-Based Image Inpainting
演算法大致流程:
1)對待補全區域邊界的像素依次計算補全的優先度(priority),這個優先度主要考慮2個因素。一個是周圍像素可信度高的位置要優先補,另一個是位於圖像梯度變化劇烈的位置要優先補。綜合二者得到所有優先度之後,挑選優先度最高的像素來補
2)對於上一步找到的待補全像素,考慮它周圍的一個小patch(比如3*3)。在圖像已知部分搜索所有的patch,找到最相似的patch
3)用找到的best match來補全未知部分,並更新相關數值
但是我們也不難發現這個方法存在的問題:如果圖像已知部分找不到相似的patch,那演算法將無法進行;這個方法只適用於補全背景以低頻信息和重復性紋理為主的圖像;搜索相似的patch計算復雜度非常高,演算法運行效率低。
第二種:Scene Completion Using Millions of Photographs
演算法大致流程:
1)從Flickr上下載兩百萬圖片構建資料庫,以」landscape」」city」」park」等關鍵詞搜索戶外場景的圖片。
2)對於一張待補全圖像,從資料庫中挑選200個場景最相似的圖片,這里使用gist scene descriptor和圖像下采樣到4*4作為匹配的特徵向量。
3)將補全區域邊界外80個pixel的區域作為context。對於每一張匹配的圖像,搜索所有的平移空間和3個尺度的scale空間,根據context部分的匹配誤差,選擇最佳的補全位置;之後利用graph-cut演算法求解最佳的融合邊界。
4)利用標準的泊松融合處理融合邊界。
5)將前幾步的匹配cost和graph-cut的cost加起來,返回cost最小的20的結果供用戶挑選。
Context Encoders: Feature Learning by Inpainting
文章提出的網路結構如下,包括3個部分:Encoder, Channel-wise fully-connected layer, Decoder。Encoder的結構直接借鑒了AlexNet前5層的卷積層結構,具體結構如下。輸入的crop尺寸是227Í227,卷積之後得到的feature map結構是256層6 Í 6。所有的weight都隨機初始化。
Channel-wise fully-connected layer是對普通fc層的一種改進。之所以加入fc層是為了使feature map每一層的信息可以在內部交流。但傳統的fc層參數太多,因此作者提出可以在fc中去掉feature map層間的信息交流,從而減少參數規模。在fc之後會接一個stride為1的卷積層,來實現層間的信息交流。