溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

如何利用OpenCV實現圖像修復

發(fā)布時間:2021-07-23 18:04:45 來源:億速云 閱讀:396 作者:chen 欄目:大數據

這篇文章主要講解了“如何利用OpenCV實現圖像修復”,文中的講解內容簡單清晰,易于學習與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學習“如何利用OpenCV實現圖像修復”吧!

圖像修復技術應用在什么地方呢?

想想一下,我們有一張非常棒的相片,但是由于時間比較久遠,沒有電子版留底,而紙質版的又十分不便于保存。因此長采用掃描的方式獲得電子版。但是非常不幸,掃描過程中落入了一根頭發(fā),或者是機器出現故障,對相片造成了影響,這個時候就可以通過圖像修復技術解決這個問題。

強大的OpenCV庫里集成了兩種用與圖像修復的方法

INPAINT_NS: 基于Navier-Stokes的圖像修復

該方法在2001年提出,其神奇之處竟然是基于流體力學理論提出的方法。根據其作者提出,我們需要解決的問題可以抽象成在一個鞋子圖片上有一個黑色的區(qū)域,通過填充黑色區(qū)域,使得最佳的恢復鞋子的樣子。

如何利用OpenCV實現圖像修復

對于如何填補這個黑色區(qū)域,可以抽象成存在一條曲線,使得由A到B將黑色區(qū)域分開,并且保證在曲線的一側是藍色,另一側是白色。這個曲線應具有如下的約束:

  1. 保持邊緣特征

  2. 在平滑區(qū)域中保持顏色信息

通過構建一個偏微分方程來更新具有上訴約束的區(qū)域內的圖像強度,同時利用拉普拉斯算子估計圖像平滑度信息,并沿著等照度傳播。

由于這些方程與Navier-Stokes方程(流體力學中的方程,感興趣的小伙伴可以自行百度)相關且類似,因此可以通過流體力學中的方法進行求解。

由于小白對流體力學不是很了解,具體就不詳細解釋了,感興趣的小伙伴可以閱讀該論文了解詳情。

論文地址:http://www.math.ucla.edu/~bertozzi/papers/cvpr01.pdf

INPAINT_TELEA:基于快速行進方法的圖像修復

該方法中沒有使用拉普拉斯算子作為平滑度的估計,而是使用像素的已知圖像鄰域上的加權平均值來描述。同時利用鄰域像素和梯度恢復填充區(qū)域像素的顏色。

當像素被修復之后,通過快速行進方法更新邊界。

論文地址:

https://pdfs.semanticscholar.org/622d/5f432e515da69f8f220fb92b17c8426d0427.pdf

相關API介紹

C++:

void inpaint(
       Mat&src,
       Mat& inpaintMask,
    Mat& dst,
    double inpaintRadius,
    int flags)

Python:

dst =cv2.inpaint(
                src,
                inpaintMask,
                inpaintRadius,
                flags)

其中各參數的含義如下:

src =源圖像

inpaintMask =二進制掩碼,指示要修復的像素。

DST =目標圖像

inpaintRadius =像素周圍的鄰域補繪。通常,如果要修復的區(qū)域很薄,使用較小的值會產生較少的模糊。

flags: INPAINT_NS(基于Navier-Stokes的方法)或INPAINT_TELEA(基于快速行進的方法)

示例

 

如何利用OpenCV實現圖像修復

左邊的第一個圖像是輸入圖像,第二個圖像是掩模,第三個圖像是INPAINT_TELEA的結果,最終結果是INPAINT_NS

關于這個圖片有一個小小的故事,1865年2月5日星期日,在華盛頓特區(qū)的加德納畫廊,亞歷山大·加德納拍攝了幾張總統(tǒng)的多鏡頭照片。在本屆會議結束之前,加德納請求為總統(tǒng)拍攝最后一個姿勢。他把相機拉得更近,拍了一張林肯頭部、肩膀和胸部的照片。但是玻璃板在這個時候突然破裂,對拍攝圖像產生影響。加德納小心翼翼地將它帶到了他的黑暗房間,制作一張相片,發(fā)現在林肯的臉上有一個不祥的裂縫。這張相片,即O-118,至今仍然存在。多年來,許多人認為這一裂縫是10周后林肯中彈的預言。

讓我們看一個更復雜的例子,在圖片上寫上英文單詞,之后通過opencv函數去修復該單詞。

如何利用OpenCV實現圖像修復

左:帶有Scribbles的原始圖像。中:使用快速行進方法修復,右:使用Navier-Stokes方法修復。

該程序的源碼和使用的圖片鏈接為:

https://github.com/spmallick/learnopencv/tree/master/Image-Inpainting

感謝各位的閱讀,以上就是“如何利用OpenCV實現圖像修復”的內容了,經過本文的學習后,相信大家對如何利用OpenCV實現圖像修復這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是億速云,小編將為大家推送更多相關知識點的文章,歡迎關注!

向AI問一下細節(jié)

免責聲明:本站發(fā)布的內容(圖片、視頻和文字)以原創(chuàng)、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI