Overview
這是一篇比較經典的exemplar-based的inpainting算法,算法思路比較簡單,是一種貪心算法,主要分爲以下幾步:
1、在需要填充區域的輪廓上計算權重,選擇權重最大的輪廓點作爲待填充點
2、在該點周圍領域取一個一定大小的patch塊,在圖像其他區域內找該patch快的最近鄰patch
3、將最近鄰patch塊對應到需要填充區域的部分複製到等待填充的區域,再重複上述步驟,直至所有點都填充完畢。
從上述算法流程來看,算法比較簡單,是一個基於填充區域輪廓優先級的算法,算法是一個貪心算法。存在的一個明顯弊端就是無法保證最終整體填充效果。
Impletion Detail
1. filling order
paper中着重講述了填充順序的關鍵性,也是本片paper的主要創新點,輪廓點上的優先級由兩部分組成,其中C(p)是confidence term, D§是data term.
1、confidence term: 表明該點的可靠度
2、data term: 根據patch周圍數據進行計算的項
1.1 confidence term
condidence 項可視爲圍繞在點周圍點的可信度,目的是優先填充那些周圍有更多已知點的patch快。
其計算公式如下,表示以點爲中心的patch快,其中 是整個patch的面積,
1.2 data term
數據項的目的是優先填充有較強紋路結構的點,其計算方式如下
其意義如下圖,在點處獲得待填充輪廓的法線方向, 則表示其梯度方向旋轉90度,從而可以找到具有比較強結構特徵的點。從該項可以看出那些梯度方向和輪廓垂直,且梯度比較大的點,擁有更高的優先級。
propagate texture and structure information
在找到優先級最高的點後,以爲中心的patch塊, 在已知圖像區域中尋找一個相似的最高的patch塊。
Updating confidence values
使用 填充後,confidence的值也需要進行更新,對於新填充的點,統一使用點處的confidence值進行填充。
更新confidence從而可以動態的評估邊界上各個patch塊的相對優先級,而不需要和圖像相關的參數。隨着填充的進行,confidence值會不斷減少,表明我們對於目標中心區域的像素點更不確定。
review of the algorithm
下表爲整個算法的流程,正如先前所說,該算法是一個貪心算法,每次尋找邊界上的一個最優點進行patch塊的生長,直到所有點都被填充。
缺點
- 基於樣例算法的共有缺陷:無法應對沒有合適填充樣例的圖片
- 無法保證最終填充圖像整體的consistence.
some improvement method
filling order
填充次序對於該算法來說至關重要,是該算法能work的重要條件.也有一些對於填充順序進行改良的算法,如下一個是基於樣例稀疏性的。
本算法中data term 是利用輪廓的法線方向和梯度垂直向量的點積作爲其數據項,[1]的算法則使用了patch塊的稀疏性作爲度量,提出優先填充稀疏性更高的patch塊,從而改善一些情況下填充的效果。
Result
其算法實際運行圖例如下面gif所示,對於需要填充的建築物,沿着其輪廓線尋找優先級高的點,依次不斷填充,最終獲得了不錯的一個效果。
對於圖像中有較多可以copy的patch塊的場景,修復效果都還不錯,但是無法保證最終整體填充效果,容易出現到最後怎麼找patch塊都會出現不連續的問題,所以後來大牛們又提出了很多基於全局優化的inpainting/Image completion算法。