使用Python,OpenCV进行去水印,图像修复
圖像修復是圖像保存和圖像恢復的一種形式,其歷史可以追溯到1700年代,當時意大利威尼斯的公共圖片修復總監(jiān)彼得·愛德華茲(Pietro Edwards)應用這種科學方法來修復和保存著名作品(資料來源)。
圖像修復技術顯著提高了圖像繪畫的質量,使我們能夠:
- 恢復舊的,降級的照片
- 修復因損壞和老化而缺少區(qū)域的照片
- 遮罩并從圖像中刪除特定對象(并以美觀的方式進行)
今天,我們將研究OpenCV開箱即用提供的兩種圖像修復算法。 要了解如何使用OpenCV和Python執(zhí)行圖像修復,請繼續(xù)閱讀!
1. Python,OpenCV內置的修復算法
- cv2.INPAINT_TELEA:基于快速行進方法的圖像修復技術(Telea,2004年)
- cv2.INPAINT_NS:Navier-stokes,流體動力學以及圖像和視頻修復(Bertalmío等,2001)
倆種修復算法簡述:引自openCV 文檔:
cv2.INPAINT_TELEA 簡稱Telea,基于快速行進方法(Fast Marching Method,簡稱FMM)考慮圖像中要修復的區(qū)域。算法從該區(qū)域的邊界開始,并進入該區(qū)域內部,然后逐漸填充邊界中的所有內容。在要修復的鄰域上的像素周圍需要一個小的鄰域。用附近所有已知像素的歸一化加權總和替換該像素。權重的選擇很重要。那些位于該點附近,邊界法線附近的像素和那些位于邊界輪廓線上的像素將獲得更大的權重。修復像素后,將使用快速行進方法將其移動到下一個最近的像素。
FMM確保首先修復已知像素附近的那些像素,以便像手動啟發(fā)式操作一樣工作。
cv2.INPAINT_NS: 基于流體動力學(fluid dynamics)并利用偏微分方程(partial differential equations)。基本原理是啟發(fā)式的。它首先沿著邊緣從已知區(qū)域移動到未知區(qū)域(因為邊緣是連續(xù)的)。它延續(xù)了等距線(isophotes)(線條連接具有相同強度的點,就像輪廓線連接具有相同高程的點一樣),同時在修復區(qū)域的邊界匹配梯度矢量(gradient vectors)。為此使用了一些流體動力學方法。獲得它們后,將填充顏色以減少該區(qū)域的最小差異。
- 在使用OpenCV應用修復時,我們需要提供兩個圖像,
output = cv2.inpaint(image, mask, radius,flags) 返回是修復后的圖像 - image:我們希望修復和恢復的輸入圖像。該圖像以某種方式被“損壞”,我們需要應用修復算法對其進行修復。
- maks:遮罩圖像,高亮出了圖像中被損壞的區(qū)域。該圖像應具有與輸入圖像相同的空間尺寸(寬度和高度)。非零像素對應于應該修復(即固定)的區(qū)域,而零像素被認為是“正常”并且不需要修復;
- radius:修復半徑以像素為單位(算法考慮的每個修補點的圓形鄰域)
- flags:修復的算法(cv2.INPAINT_TELEA or cv2.INPAINT_NS)
手動干預是使用OpenCV內置的修復算法的主要限制之一。每次都需要我們提供與原圖寬高一致且突出顯示被毀壞區(qū)域的mask圖。每次手動去構建mask是一個乏味而冗繁的過程,可以利用機器學習訓練全卷積模型等去“學習以修復”,來解決這個問題。
2. python內置算法修復效果對比
1. 使用FMM方法得到的mask,原圖,輸出的修復圖像
應用快速前進方法。可以看到文本已成功刪除,但是您可以看到許多圖像偽像,尤其是在高紋理區(qū)域,例如混凝土人行道和皮帶。
2. 使用Navier Stokes修復
左側原圖,中間mask蒙版,右側顯示了Navier-Stokes修復方法的輸出。通過使用這種OpenCV修復方法,我們已經(jīng)能夠部分修復損壞的舊照片。
3. 最后一個示例
左邊是原始圖像,中間是相應的蒙版。 可以看到mask蒙版有兩個區(qū)域,我們將嘗試“修復”:右下角的水印,圓形區(qū)域對應于其中一棵樹。
在此示例中,我們將OpenCV修復視為一種從圖像中刪除對象的方法,其結果可以在底部看到。不幸的是,結果并不如我們期望的那樣好。我們希望刪除的樹顯示為圓形模糊,而水印也模糊。
3. 怎么提升水印修復的效果
OpenCV內置的修復算法的最大問題之一是它們需要人工干預,這意味著我們必須手動提供希望修復和恢復的遮罩區(qū)域。
手動提供口罩很繁瑣-有沒有更好的方法? 其實有。
使用基于深度學習的方法,包括全卷積神經(jīng)網(wǎng)絡和生成對抗網(wǎng)絡(GANs),我們可以“學習修補”。 這些網(wǎng)絡:
- 要求零人工干預
- 可以生成自己的訓練數(shù)據(jù)
- 產(chǎn)生比傳統(tǒng)計算機視覺修復算法更美觀的結果
基于深度學習的修復算法不在本教程的范圍內,但將在以后的博客文章中介紹。
參考:
- https://www.pyimagesearch.com/2020/05/18/image-inpainting-with-opencv-and-python/
總結
以上是生活随笔為你收集整理的使用Python,OpenCV进行去水印,图像修复的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 他来了,请闭眼电视剧百度云资源1080P
- 下一篇: 使用Python,OpenCV和Houg