低成本的數位影像修復 (OpenCV Inpainting)

低成本的數位影像修復 (OpenCV Inpainting)


        影像的數位修復一向是個昂貴的工作。造成其價格居高不下的,除了高效能的硬體外,還有不便宜的軟體成本。目前市面上常見的數位修復軟體包括:Phoenix (DigitalVision)Diamant (HS-ART)PFClean (The Pixel Farm),以及較小眾的 DRS Nova (MTI),與部份使用特效軟體如 AE (Adobe)來進行影像修復。這些產品通常都所費不貲,對於修復需求較小的個人或小型典藏單位而言並不是好的投資目標。如果透過外包給服務商的方式來處理,也是筆不小的花費。

        面對這樣的問題,開源程式會是很好的解決方案。在 "Japan as destination in 20th century visual and material culture (2013-2016)" 這個計畫中,便使用 Python 程式語言的 OpenCV 函式庫,用其來進行影像中刮痕,髒點的修復與區域性降噪處理。

Inpainting

        在使用這種方式進行數位修復前,需先安裝 PythonOpenCV 函式庫。OpenCV 函式庫中,使用 cv2.inpaint() 這個函式來進行影像修復。修復影像的方式使用了兩種演算法:cv2.INPAINT_TELEAcv2.INPAINT_NS

        第一種演算法 TELEA 是由Alexandru Telea在2004年提出的演算法,使用快速行進算法來回溯需修復的區域。這種演算法會從修復區域的邊界開始,並向內填補。演算法的權重對於演算結果會相當大的影響,越往區域內部也可能有越大的誤差。

        第二種演算法 NS 於 2001 年由 Bertalmio 等人提出的,使用用來描述流體的 Navier-Stokes 方程式,透過偏微分程式,由修復區域邊緣開始向內計算。由於流體的特性,會延續其周圍區域的等距線(類似等高線,由相同強度的點所組成),並符合修復區域的邊界的強度變化。以這個方式,預期以最小差異的方式填補修復區域。

編寫程式碼

        使用 Inpaint 的基本程式碼如下:

import numpy as np

import cv2


img  = cv2.imread("image.tif", cv2.IMREAD_COLOR)

mask = cv2.imread("mask.tif", 0)


dst_TELEA = cv2.inpaint(img,mask,3,cv2.INPAINT_TELEA)

dst_NS = cv2.inpaint(img,mask,3,cv2.INPAINT_NS)


cv2.imwrite("ns.tif",dst_NS)

cv2.imwrite("telea.tif",dst_TELEA)


        運算過程中,會需要來源影像,與區別修復的遮罩。加上兩種不同演算法的輸出,看起來會像下圖:

   OpenCV 說明文件中參考圖,左上為來源影像,右上為遮罩,下方為修復後影像
Source: https://opencv-python-tutroals.readthedocs.io/en/latest/_images/inpaint_result.jpg

額外資訊

       在使用 Inpaint 時會需要使用 Mask 來區分出修復區域,若處理區域不多,可個別建立。但若在處理程式中加入 OpenCV 中的 selectROI() 其他技巧,使得製做遮罩的過程能變成互動式,能有效減少製作遮罩及加強其精確度。 

       Inpaint 是一種使用空間資訊修復的技巧,雖然比內插或外插法的效果要好,但還是與時間修復的技巧不同。在不少修復軟體中也有這種功能,例如 Diamant 中的 InpaintExInpaint (Exemplar-based Inpainting)。針對單張圖的缺陷修復時,缺點並不明顯。但當大量使用時,還是可以看出 artifact。如果要強化修復效果,還需要使用程式,使前後格資訊來讓突兀的感覺減輕。

       相較於一般商用影像修復軟體,由於電影/影片是連續性的影像,因此大部份會使用時間資訊來做為主要修復手段,加上動態預測,通常可以處理大部份的缺陷。或者會有可以調整空間與時間兩者的權重來提高修復效果的特性,如 Phoenix 中的 Spatial / Temporal / Mixed Filters。OpenCV 的 Inpaint 雖然不完美,但可做為後續修復的更佳基礎,或不需完美修復的替代方案。

        對這種大範圍連續缺陷 (如字幕),使用 Inpaint 的效果:

含字幕影片

使用 Inpaint 去除字幕後的影像

原始影像
       

留言

這個網誌中的熱門文章

影音類載體 -- 聲音類 -- 8軌匣式錄音帶(8 track tape)

影音數位典藏所需的自動化腳本(Bash Script)--函式