王勝波,王秀友,劉華明,時(shí)如夢(mèng),畢學(xué)慧
(阜陽(yáng)師范大學(xué)計(jì)算機(jī)與信息工程學(xué)院)
數(shù)字圖像修復(fù)在圖像處理中占有重要地位。自從Bertalmio 等[1]提出數(shù)字圖像修復(fù)后。隨著科技發(fā)展,其普遍應(yīng)用到人們生活中的不同領(lǐng)域。例如醫(yī)學(xué)圖像分割、舊照片修復(fù)、及移除圖片中不感興趣的目標(biāo)物。雖然圖像的修復(fù)結(jié)果不具有唯一性,但是修復(fù)的效果應(yīng)滿足在輪廓結(jié)構(gòu)上具有一致性和紋理清晰,對(duì)于人們的觀察給予視覺(jué)上的真實(shí)感。
在2001 年B.Bowen 等人[2]提出一種基于各向同性擴(kuò)散模型的簡(jiǎn)單快速修復(fù)算法。該算法使用已知圖像的矩陣信息,填充未知目標(biāo)區(qū)域,修復(fù)時(shí)對(duì)待填充區(qū)域采用逐步迭代的卷積運(yùn)算。此算法適用于局部小區(qū)域填充,對(duì)于較大的修復(fù)域出現(xiàn)攜帶虛假信息進(jìn)入此區(qū)域。Criminis 等[3]提出一種基于樣本塊對(duì)圖像目標(biāo)區(qū)域進(jìn)行修復(fù)方法。該方法通過(guò)數(shù)據(jù)項(xiàng)和置信度的乘積,判斷目標(biāo)區(qū)域邊緣輪廓的填充次序即填充優(yōu)先級(jí)。針對(duì)優(yōu)先級(jí)高的像素點(diǎn),在原圖已知區(qū)域?qū)ふ易罴哑ヅ鋲K對(duì)其進(jìn)行填充。然而該算法在修復(fù)過(guò)程中會(huì)出現(xiàn)局部結(jié)構(gòu)不清晰或誤修復(fù)。對(duì)于這類問(wèn)題,該領(lǐng)域研究者分別提出自己的改進(jìn)方法。Marcelo 等[4]提出對(duì)圖像分解、紋理合成、圖像修復(fù)方法。實(shí)現(xiàn)對(duì)圖像紋理與結(jié)構(gòu)的同時(shí)修復(fù)。Jia-Bin 等[5]提利用一種利用圖像場(chǎng)景結(jié)構(gòu)方法進(jìn)行對(duì)缺失區(qū)域修復(fù)。該方法利用圖像中層結(jié)構(gòu)線索,基于塊的情況下對(duì)圖像平面和規(guī)律性進(jìn)行檢測(cè),進(jìn)一步引導(dǎo)圖像補(bǔ)全。Telea 等[6]提出一種快速匹配算法,優(yōu)點(diǎn)在于明確的維持一個(gè)狹窄的通道,即當(dāng)前待修復(fù)區(qū)域的邊界。使得已知區(qū)域與未知區(qū)域被明顯分割開(kāi)來(lái),同時(shí)他指定了下一個(gè)待修復(fù)的像素點(diǎn)。Igor 等[7]提出TreeCANN 算法。其使用降維與松散kd 樹(shù)搜索結(jié)合,提高搜索效率,采用積分圖像方法加快圖像傳播,從而更快的匹配兩副圖像中的所有塊。Alasdair 等[8]提出基于塊迭代多尺度圖像修復(fù)方法。該算法是基于最小化的全局泛函。從而提高修復(fù)的質(zhì)量。
近年來(lái),圖像修復(fù)在智能交通、醫(yī)學(xué)、攝影等方面有著廣泛應(yīng)用。隨著連接主義的興起,圖像修復(fù)隨之加入神經(jīng)網(wǎng)絡(luò)的潮流。Deepak 等[9]首個(gè)使用GAN 圖像補(bǔ)全框架。文中提出基于圖像上下文已知像素進(jìn)行預(yù)測(cè)驅(qū)動(dòng)的一種無(wú)監(jiān)督的學(xué)習(xí)算法。編碼器只對(duì)破損區(qū)域上下文進(jìn)行編碼,并使用結(jié)果特征,進(jìn)一步從數(shù)據(jù)集中檢索最近的相鄰像素,生成的塊在語(yǔ)義上與原始?jí)K相似。解碼器對(duì)縮小后的特征圖像進(jìn)行上采樣,對(duì)上采樣圖像進(jìn)行卷積處理,目的是完善物體的幾何形狀。Wei 等[10]提出一種新的具有前景感知圖像修復(fù)系統(tǒng)。該系統(tǒng)能夠明確進(jìn)行結(jié)構(gòu)推理與內(nèi)容補(bǔ)全。雖然基于神經(jīng)網(wǎng)絡(luò)對(duì)圖像修復(fù)有一定優(yōu)勢(shì),但部分修復(fù)框架,其將目標(biāo)區(qū)域使用隨機(jī)噪聲來(lái)填充,這樣修復(fù)的結(jié)果會(huì)出現(xiàn)部分不合理的圖像塊。
為了提高圖像修復(fù)的質(zhì)量,本文采用Barnes等[12]提出的快速隨機(jī)搜索塊匹配算法。并在此基礎(chǔ)上進(jìn)行改進(jìn),改進(jìn)后的算法可同時(shí)移除多個(gè)目標(biāo)物,對(duì)于不同目標(biāo)物分別計(jì)算其輪廓面積,當(dāng)移除物過(guò)于接近時(shí),避免出現(xiàn)輪廓重疊現(xiàn)象,處理過(guò)程中引入PCA,提取出目標(biāo)物的方向及中心點(diǎn),并計(jì)算面積的均值。求均值與各個(gè)面積比值,并對(duì)其進(jìn)行累加求和。得到的數(shù)值與移除目標(biāo)個(gè)數(shù)的一半進(jìn)行比較,計(jì)算塊的大小。原圖像進(jìn)行下采樣構(gòu)建圖像金字塔,通過(guò)上采樣將各層圖像相融合,在此過(guò)程中依據(jù)每層圖像破損區(qū)域輪廓梯度信息與面積的比值作為當(dāng)前層塊大小選擇依據(jù),來(lái)提高圖像的修復(fù)效果。
Patchmatch 核心思想通過(guò)圖像中部分已知信息,去填充未知目標(biāo)區(qū)域。根據(jù)目標(biāo)區(qū)域的邊緣信息,計(jì)算出像素的優(yōu)先級(jí)。依據(jù)某點(diǎn)像素優(yōu)先級(jí),判斷像素位置p 優(yōu)先級(jí)值是否最大,若是則確定像素所屬塊P。其次在鄰近目標(biāo)區(qū)域邊緣尋找最相似匹配塊S,對(duì)塊P 缺失部分進(jìn)行像素補(bǔ)全。最后更新優(yōu)先級(jí)權(quán)重,直到所有像素都被修復(fù)。
1.1.1 初始化
初始化即將數(shù)組中設(shè)置的初值通過(guò)插值映射公式,將其隨機(jī)填充到映射表中。圖像A 的每個(gè)像素。采用偏移量矩陣中相應(yīng)的隨機(jī)值為其賦值,同時(shí)在圖像B 中查找對(duì)應(yīng)的像素。本文算法以當(dāng)前層為A 圖,上一個(gè)級(jí)清晰圖像為B 圖,在圖A 目標(biāo)物邊緣部分,依照其輪廓梯度變化,判斷優(yōu)先級(jí)較高的塊T。使用T 塊中已知像素信息,尋找在B 圖中對(duì)應(yīng)的塊,填補(bǔ)T 塊中未知信息。初始猜測(cè)時(shí)算法偶爾陷入局部最優(yōu),所以每次循環(huán)都調(diào)用從源到目標(biāo),從目標(biāo)到源兩個(gè)不同函數(shù),來(lái)盡可能防止算法局部最優(yōu)。
1.1.2 傳播
圖1 相似塊傳播示意圖
首先以A 圖塊3 和B 圖中對(duì)應(yīng)的偏移塊3’做相似度比較并記錄為simliar1。之后將塊3 和B 圖塊1’和2’分別進(jìn)行相似度比較,記錄為simliar2,simliar3,比較記錄中的數(shù)值,其中最大者,對(duì)應(yīng)B 圖中的塊與A 圖塊3 最相似。最后將A 圖中相應(yīng)塊偏移量值賦予塊3。如果simliar1 最大,則A 圖中塊3 偏移量值不變,其仍對(duì)應(yīng)B 圖中的塊3’。如果simliar2 最大,則將A 圖中塊1 所屬偏移量值賦予塊3,此時(shí)塊3 與B 圖中塊1’對(duì)應(yīng)。如果simliar3 最大,則將A 圖中塊2 所屬偏移量值賦予塊3,此時(shí)塊3 與B 圖中塊2’對(duì)應(yīng)。
1.1.3 隨機(jī)搜索
首先圖像中每一像素點(diǎn)以當(dāng)前偏移量為中心,在搜索范圍內(nèi)尋找最佳匹配的偏移量,替代當(dāng)前偏移量。其次搜索的直徑,開(kāi)始為圖片高寬最小尺寸。搜索半徑大小為前一次的1/2,半徑小于1 時(shí)結(jié)束本次搜索。設(shè)v0=f(x,y)嘗試通過(guò)測(cè)試候選偏移序列來(lái)改善f(x,y),該序列與v0呈指數(shù)遞減距離,偏移序列公式為:
其中Ri是[-1,1]x[-1,1]中均勻隨機(jī)數(shù),w是最大搜索”半徑”,并且α是搜索窗口大小長(zhǎng)寬比例。其中i=0,1,2…的切塊,直到當(dāng)前搜索半徑wαi小于1 像素。w為圖像寬高中的最小尺寸。α=1/2。
主成分分析(PCA)是圖像處理中常用的數(shù)據(jù)降維方法。可以處理圖像中圖形平移旋轉(zhuǎn)事件的發(fā)生,主要思想是n維特征映射成k維特征,這k維特征是在原n維特征基礎(chǔ)上正交得到。其實(shí)質(zhì)是通過(guò)已知矩陣計(jì)算其協(xié)方差矩陣,進(jìn)一步得到矩陣的特征向量及特征值,從中選出k個(gè)最大的特征值,提取與它們相關(guān)的特征向量組成相應(yīng)矩陣。因此,PCA 可以找到數(shù)據(jù)變化最大的方向。其目的是將給定的維度p 的數(shù)據(jù)集x 轉(zhuǎn)化為較小維度L 的可選數(shù)據(jù)集y。其中Y 是矩陣X 的霍特林變換[13(]KLT):
若要恢復(fù)X 矩陣做逆霍特林變換即可。
在一開(kāi)始對(duì)圖像檢測(cè),獲得不同目標(biāo)輪廓,之后使用PCA 方法獲得所有輪廓點(diǎn)的集合的中點(diǎn),主方向等信息。將目標(biāo)物的輪廓在掩模區(qū)域標(biāo)出,但為防止輪廓出現(xiàn)重疊現(xiàn)象,獲得輪廓角度后,轉(zhuǎn)換輪廓并獲得最小外接矩形。為了獲得單點(diǎn)進(jìn)行轉(zhuǎn)換后的精確坐標(biāo)使用公式:
Px為旋轉(zhuǎn)后輪廓某點(diǎn)對(duì)應(yīng)的x坐標(biāo),Ix是輪廓上某點(diǎn)的x坐標(biāo),Cx是某點(diǎn)所屬輪廓的中心x坐標(biāo),A為設(shè)定的旋轉(zhuǎn)角度,Iy為輪廓上某點(diǎn)的y坐標(biāo),Cy是某點(diǎn)所屬輪廓的中心y坐標(biāo),Py是旋轉(zhuǎn)后輪廓某點(diǎn)對(duì)應(yīng)的y坐標(biāo)。
塊大小的初次計(jì)算,在圖像金字塔構(gòu)造之前,根據(jù)不同目標(biāo)物輪廓面積之和與個(gè)數(shù)比值,在兩個(gè)候選塊中做出相應(yīng)選擇。首先,檢測(cè)移除目標(biāo)物輪廓,統(tǒng)計(jì)輪廓總面積和個(gè)數(shù)后,求出面積均值,其次,對(duì)每個(gè)目標(biāo)物進(jìn)行比較并計(jì)算出比值之和,最后,比值之和與目標(biāo)物個(gè)數(shù)二分之一相比選擇塊大小。具體方式如下:
Si為第i個(gè)輪廓面積,n為目標(biāo)物個(gè)數(shù),sum為輪廓面積之和,mean為面積均值。S為均值與圖片中各輪廓面積之比的和。Ps為初次選擇塊大小。
原始圖像采用構(gòu)建金字塔方式進(jìn)行分解,金字塔每層圖像分辨率大小不同。在上采樣過(guò)程中進(jìn)行對(duì)破損區(qū)域進(jìn)行修復(fù)。圖像上采樣融合過(guò)程中,根據(jù)不同層圖像破損區(qū)域相應(yīng)輪廓梯度變化計(jì)算塊大小。梯度信息提取使用Sobel 邊緣檢測(cè)算子,計(jì)算當(dāng)前層目標(biāo)區(qū)域輪廓像素梯度。Sobel算子對(duì)于噪聲較多及灰度變化輕的圖像有較好處理效果。本文方法與之前遍歷整幅圖像修復(fù)區(qū)域邊緣,統(tǒng)計(jì)輪廓梯度信息方法,有更佳的適應(yīng)性。算法依據(jù)當(dāng)前層目標(biāo)區(qū)域輪廓的梯度信息,計(jì)算出相應(yīng)塊。公式如下:
其中i代表當(dāng)前圖像所在金字塔中的層數(shù),SGi為當(dāng)前層目標(biāo)輪廓區(qū)域梯度之和。Si+1 代表目標(biāo)輪廓面積其至少為1。MGi為平均梯度,vari為當(dāng)前層標(biāo)準(zhǔn)差。
其中:Ps為樣本塊大小,e-i和d是經(jīng)過(guò)反復(fù)試驗(yàn)確定的測(cè)量標(biāo)準(zhǔn)。以上公式依據(jù),不同層目標(biāo)區(qū)域輪廓梯度信息,計(jì)算出每一層最合適的塊,從而使修復(fù)較為理想。
圖2 角點(diǎn)、邊緣、紋理相應(yīng)斑塊的梯度信息與周圍輪廓比值
第一組顯示了矩形的塊及周圍區(qū)域。第二組計(jì)算塊Ψa,Ψb,Ψc 的梯度值與相應(yīng)層目標(biāo)輪廓區(qū)域面積之比,用來(lái)判斷紋理結(jié)構(gòu)變化。以d 值為依據(jù)對(duì)每層進(jìn)行塊大小選擇。
在Windows 10 平臺(tái)上,使用CLion 2019 語(yǔ)言編譯器,采用Opencv 4.1.1 版本進(jìn)行實(shí)驗(yàn)。本文開(kāi)始設(shè)定塊大小是根據(jù)移除多個(gè)目標(biāo)物時(shí),缺失區(qū)域平均大小,在塊5x5、7x7,之間選擇。圖像下采樣過(guò)程中,特定卷積核的使用,在采樣效果上對(duì)于高斯卷積核更清晰。圖像上采樣進(jìn)行修復(fù)時(shí),依據(jù)當(dāng)前層的目標(biāo)區(qū)域輪廓梯度信息計(jì)算塊大小。
為了測(cè)試文中方法的實(shí)際效果,實(shí)驗(yàn)過(guò)程中選取多幅圖片,并且與其它算法進(jìn)行比較如下圖所示。
圖3 為目標(biāo)物移除修復(fù)。文獻(xiàn)[6]結(jié)果在目標(biāo)區(qū)域出現(xiàn)凸起現(xiàn)象。文獻(xiàn)[12]修復(fù)后出現(xiàn)較大模糊區(qū)域。其它文獻(xiàn)的結(jié)果修復(fù)區(qū)域后模糊狀態(tài)降低。圖(e)與圖(f)雖然避免了較大模糊區(qū)域的出現(xiàn)但也不能使得黑色線條連貫,本文方法解決了目標(biāo)物中心區(qū)域線條連貫性,使得在視覺(jué)上具有連通性。
圖3 消防栓消去結(jié)果
圖4 顯示多個(gè)目標(biāo)消去的結(jié)果。文獻(xiàn)[6]結(jié)果在目標(biāo)區(qū)域出現(xiàn)多處模糊現(xiàn)象,使圖像部分失真。文獻(xiàn)[12]在修復(fù)后部分填充區(qū)域,海水中出現(xiàn)白色斑塊。文獻(xiàn)[15]、文獻(xiàn)[16],它們?cè)谛迯?fù)效果上類似。但也出現(xiàn)一些模糊區(qū)域。本文方法較好的避免在填充區(qū)域出現(xiàn)斑塊、模糊現(xiàn)象,在視覺(jué)上體現(xiàn)圖像的真實(shí)性。
圖4 人物消去修復(fù)結(jié)果
圖5 顯示方塊的修復(fù)結(jié)果。根據(jù)對(duì)圖(c)-(g)比對(duì),可以看出文獻(xiàn)[6],修復(fù)時(shí)斑塊出現(xiàn)錯(cuò)誤填充現(xiàn)象。其它文獻(xiàn)雖然在一定程度上減少模糊現(xiàn)象,但也出現(xiàn)黑色塊邊緣有一定的突出。本文方法對(duì)目標(biāo)區(qū)域修復(fù)后出現(xiàn)模糊及錯(cuò)誤填充現(xiàn)象,有抑制作用,提高圖像修復(fù)質(zhì)量。
圖5 方塊消去修復(fù)結(jié)果
圖6 對(duì)消除直線區(qū)域進(jìn)行修復(fù)。文獻(xiàn)[6]在圖像頂端部分,出現(xiàn)塊的錯(cuò)誤填充。天空中部分塊,覆蓋山體原有塊。文獻(xiàn)[12]修復(fù)效果剛好與其相反。此類現(xiàn)象使得圖像部分結(jié)構(gòu)與原圖不對(duì)稱。圖(e)與圖(g)在修復(fù)結(jié)果上出現(xiàn)部分模糊現(xiàn)象。本文算法在一定程度上避免圖像目標(biāo)區(qū)域模糊和塊填充錯(cuò)誤現(xiàn)象。
圖6 直線消去修復(fù)結(jié)果
圖7 展示對(duì)不同目標(biāo)物的移除后的修復(fù)效果。文獻(xiàn)[6]修復(fù)結(jié)果中目標(biāo)區(qū)域出現(xiàn)模糊及失真現(xiàn)象。文獻(xiàn)[12]雖然減少目標(biāo)區(qū)域模糊現(xiàn)象,但出現(xiàn)明顯錯(cuò)誤填充。文獻(xiàn)[15]、文獻(xiàn)[16],在修后都出現(xiàn)不同程度模糊現(xiàn)象。本文不僅降低去除目標(biāo)的模糊現(xiàn)象,而且在消去磚塊部分對(duì)紋理修復(fù)具有視覺(jué)可信性。
圖7 相機(jī)與磚塊同時(shí)消去修復(fù)效果
根據(jù)表1、2、3 中數(shù)據(jù)對(duì)比。文獻(xiàn)[12]、文獻(xiàn)[15]和本文方法有較高修復(fù)效率。本文方法不僅在結(jié)構(gòu)相似度上與文獻(xiàn)[12],有明顯提高,而且減少修復(fù)時(shí)長(zhǎng)。使用峰值信噪比對(duì)文中方法與文獻(xiàn)[15]、文獻(xiàn)[12]比較,圖像失真現(xiàn)象有所降低。文獻(xiàn)[12]在破損區(qū)域出現(xiàn)模糊及塊的錯(cuò)誤填充,文獻(xiàn)[15]也出現(xiàn)局部模糊情況。本文方法在圖像修復(fù)結(jié)果上模糊狀態(tài)減少,提高修復(fù)效果。在金字塔圖像每層進(jìn)行選擇時(shí),合適的塊大小不僅有利于提高修復(fù)效果,還可以縮短修復(fù)時(shí)間。
表1 不同圖象修復(fù)方法的耗時(shí)對(duì)比(秒)
表2 不同圖象修復(fù)方法的結(jié)構(gòu)相似度對(duì)比
表3 不同圖象修復(fù)方法的峰值信噪比對(duì)比
本文依據(jù)圖像金字塔中每層圖像包含目標(biāo)區(qū)域輪廓梯度信息,在上采樣過(guò)程中進(jìn)行塊大小的自適應(yīng)選擇。此外在進(jìn)行多個(gè)目標(biāo)消除時(shí),采用對(duì)目標(biāo)進(jìn)行輪廓檢測(cè),計(jì)算修復(fù)區(qū)域面積及個(gè)數(shù),進(jìn)行初次塊選擇。在此過(guò)程中為了防止不同目標(biāo)輪廓出現(xiàn)重疊現(xiàn)象,采用PCA 方法對(duì)修復(fù)區(qū)域進(jìn)行中心及方向提取。本文方法由于塊自適應(yīng)選擇,在移除多個(gè)目標(biāo)時(shí)降低了修復(fù)結(jié)果模糊狀況,在移除單個(gè)目標(biāo)時(shí)結(jié)果具有較好的視覺(jué)真實(shí)性。