IA7&PS9 - 貝氏推論下的圖像修復技術
一張被亂塗鴉的臭貓貓照片 將刮花或是有噪點的圖像修復是一個有意思個課題,已經有許多的算法來幫助將受損的圖像復原,例如使用流體動力學的Navier-Stokes方程將像素色彩視為是一種流,這是 python-OpenCV 內建的修復方式 ( cv2.inpaint )。而在在這篇文章中我們要另闢蹊徑,採用機率的觀點,從鄰邊像素的值來建立一個簡單圖像修復的方法,除了灰階的照片外,更將之應用於彩色照片上。對於那些不感興趣怎麼建立復原的方式,但感興趣直接使用修復的腳本,我建立的一個 python 的 class 叫 imres ( IM age RES toration的縮寫) 存放在 imtools.py 中,可以直接將受損的照片輸入並修復,操作方法可以直接跳第四節的部份,執行實作的腳本需要 python-OpenCV 套件 cv2 來讀取並做初步的圖像操作。本文也是IA和PS兩系列的交叉集,其中需要有統計力學配分函數 (partition function) 的概念,但我想就算不懂,還是不影響閱讀的 😂 一、都是像素惹的禍 在本文開始的cover image顯示了一張加菲貓在舔冰淇淋的圖片,但當中有部份被青色的塗鴉刮花了,我們的目的便是想修復這張受損的圖片,補齊缺失的像素值。 我們都知道數位圖片是由像素構成的,每個像素給定一個顏色,例如cover image就由1000⨉773個像素構成 (通常是寬W⨉高H)。這個成像可以視為是當初入射的光子打在感光元件CCD上並被紀錄輸出成一張數位相片,假定每個像素是由一個帶有顏色的光子 (頻率) 所構成 1 ,我們可以問一個問題:當給定某個位置的像素顏色時,其周圍的像素最有可能是什麼顏色? 圖1. 觀測到像素\(z_i\),對應到真正乾淨但未知圖片的\(x_i\)像素,而\(x_i\)與它鄰邊像素\(x_j\)是有關連的,這關連的連通關係構成了一張馬可夫毯 (Markov blanket) 這個問題我想從看圖著手會比較容易點,在圖1中心的\(z_i\)是觀測到的像素,它可能是有雜訊或被刮花,總之是corrupted,不過我們相信他來自一個真正但未知的像素\(x_i\),而\(x_i\)與其鄰邊 (周遭) 的顏色必然是有一定相關連的,比如說\(x_i\)是黃色,那麼他就有很高的機率是被黃