發表文章

目前顯示的是 4月, 2019的文章

IA10 - 機率方法在圖像去噪之應用Part 2: Color image

圖片
一張帶有高斯噪聲的Lena相片 這個專題將延續IA8的內容,但我們將跳脫黑白兩色並探討彩色照片的去噪方法,因為色彩充斥著我們日常的生活,這個世界上僅有非常少數的人因為先後天的因素不能感知色彩,或大腦對色彩的反應發生錯誤。所以色彩,併同聲音、觸覺等皆佔了人類日常生活中非常重要的一部份。有別於IA像素的毀損,噪聲代表的是該處的像素值 (被認為) 偏離了真正的值,這可能是肇因於多種因素,在這篇文章裡我們將著重於如何重建出真正的像素值。在這篇專題中對應的notebook和檔案皆儲存在IA10這個資料夾內請將其全部下載下來。 一、去噪: A naïve way 1.1 來自IA4的啟發 以一張灰階的圖片為例,我們可以將這張圖片表示為一個二維的陣列\(\mathbf{P}\): \[ \mathbf{P}=\left(\begin{array}{cccc} p_{11} & p_{12} & \cdots & p_{1W}\\ p_{21} & p_{22}\\ \vdots & & \ddots\\ p_{H1} & & & p_{HW} \end{array}\right) \] 其中W和H表示圖片的寬和高,而\(p_{ij}\)表示在位置\((i,j)\)處的像素值,對灰階圖片而言則表示強度值,通常介於0~255的整數,因為共有\(2^8=256\)階,又稱8-bit或256色。補充一點,上式中的\(\mathbf{P}\)是灰階照片,所以陣列對應的shape是(H,W),如果是彩色照片則含有3通道,對應的shape則變為(H,W,3),最後一個3表示RGB三通道,而在 python 中的OpenCV套件 cv2 所讀入的彩色照片三通道的順序是BGR,如何轉換到 matplotlib.pyplot 的 imshow 可參考IA7或notebook的內容。之後為了方便我們將\(p_{ij}\)表示成\(p_i\),表示在第\(i\)處的像素值,這是因為在正統圖像處理領域時常會將一個二維的圖像陣列重新reshape成\(WH\times 1\)的row vector,而這種排序又稱為lexicographical order,不過這裡我不探討這些技術細節。  原則上\(p_