計算機視覺(三):空間域濾波基礎
一、背景知識
1.空間域
術語空間域指影象平面本身,這類影象處理方法直接操作影象中的畫素。
2.運算元
空間域處理可由下式表示:
式中,
是輸入影象,
是處理後的影象,
是在點
的鄰域上定義的關於
的一種運算元。運算元可應用於單幅影象或影象集合。
3.變換函式
上式(1)中的
可寫成一個灰度(也稱為灰度級或對映)變換函式:
式中,為表達方便,令
和
分別表示變數,即
和
在任意點
處的灰度。
二、一些基本的灰度變換函式
以下討論影象灰度級範圍為 ,其中 歸一化為1。
1.影象反轉
使用圖1所示的反轉變換,可得到灰度級範圍為
的一副影象的反轉影象,該反轉影象由下式給出:
使用這種方式反轉一副影象的灰度級,可得到等效的照片底片。
2.對數變換
對數變換的通用形式為
反對數變換的形式為
式中
是常數,並假設
。圖中對數曲線的形狀表明,該變換將輸入中範圍較窄的低灰度值對映為輸出中範圍較寬的灰度值,或將輸入中範圍較寬的高灰度值對映為輸出中範圍較窄的灰度值。我們使用這種型別的變換來擴充套件影象中的暗畫素值,同時壓縮更高灰度級的值。
3.冪律(伽馬)變換
冪律變換的基本形式為
式中
和
為正常數。影象如圖3所示。
三、基本的灰度變換程式碼實現(Python+OpenCV)
import cv2
import numpy as np
# 影象反轉
img1 = cv2.imread('img1.jpg', 0)
new_img1 = np.ones(img1.shape) * 255 - img1
cv2.imwrite('new_img1.jpg', new_img1)
# 對數變換(c = 1,v = 10)
img2 = cv2.imread('img2.jpg', 0)
img2 = img2 / 255 # 歸一化為範圍[0,1]
new_img2 = np.log10(1+10 * img2)
new_img2 = new_img2 * 255 # 轉換為範圍[0,255]
cv2.imwrite('new_img2.jpg', new_img2)
# 伽馬變換(c = 1,γ = 0.6)
img3 = cv2.imread('img3.jpg', 0)
img3 = img3 / 255 # 歸一化為範圍[0,1]
new_img3 = np.power(img3, 0.6)
new_img3 = new_img3 * 255 # 轉換為範圍[0,255]
cv2.imwrite('new_img3.jpg', new_img3)
四、空間濾波機理
1.空間濾波器
空間濾波器由一個鄰域(通常是一個較小的矩形)和對該鄰域所包圍影象畫素執行的預定義操作組成。
濾波產生一個新畫素,新畫素的座標等於鄰域中心的座標,畫素的值是濾波操作的結果。濾波器的中心訪問輸入影象中的每個畫素後,就生成了出了(濾波)後的影象。如果在影象畫素上執行的是線性操作,則該濾波器稱為線性空間濾波器,否則,濾波器就稱為非線性空間濾波器。
2.線性空間濾波表示式
一般來說,使用大小為
的濾波器對大小為
的影象進行線性空間濾波,可由下式表示:
式中,
和
是可變的,以便
中的每個畫素可訪問
中的每個畫素。
五、空間相關與卷積
1.定義
相關是濾波器模板移過影象並計算每個位置乘積之和的處理。卷積的機理相似,但濾波器首先要旋轉180° 。
2.表示式
一個大小為
的濾波器
與一副影象
做相關操作,可表示為
:
這一等式對所有位移變數
和
求值,以便
的所有元素訪問
的每個畫素,其中我們假設
已被適當地填充。
類似地,
和
的卷積表示為
: