影像增強(Image Enhancement)可以定義為:「針對數位影像進行運算處理,符合特定需求的技術。」
影像增強的目的基本上都是增強影像品質,例如:增加對比度、去雜訊等。
影像增強技術所採用的方法包含以下幾種:
也可以根據數位影像處理所在的域(Domain)分為:
而我們主要以空間域為主,也就是說,我們將直接對數位影像中的像素進行運算處理。使用頻率域須用到傅立葉轉換,會牽涉到較多的數學層面。
強度轉換為最基本的影像增強技術。可以定義為:
g(x,y) = T * {f(x,y)}
其中,f(x,y)為輸入強度,g(x,y)為輸出強度,T稱為轉換涵式(Transformation Function)。
影像負片(Image Negative)是最基本的強度轉換,其灰階或色彩值與原始影像相反。可以定義為:
程式碼如下:
import numpy as np
import cv2
img1 = cv2.imread("D:\Desktop\IThome\lena.bmp", -1)
def image_negative(f):
g = 255 - f
return g
img2 = image_negative(img1)
cv2.imshow("After", img2)
cv2.waitKey()
此技術可以用來調整數位影像的亮度,通常是用來解決拍攝相片時產生的過度曝光(Over Exposure)或曝光不足(Under Exposure)現象。
伽瑪矯正可以定義如下:
上述定義中,輸入與輸出強度須介於0~255之間,因此,c會隨著gamma的值有所改變。
gamma矯正的轉換函數,如下圖所示:
當gamma=1時表示強度不變,gamma < 1 會使影像變亮,可改變曝光不足,gamma > 1 會使影像變暗,可改善過曝現象。
程式碼如下:
import numpy as np
import cv2
img1 = cv2.imread("D:\Desktop\IThome\lena.bmp", -1)
def gamma_correction(f, gamma = 2.0):
g = f.copy()
nr,nc = f.shape[:2]
c = 255.0 / (255.0 ** gamma)
table = np.zeros(256)
for i in range(256):
table[i] = round(i ** gamma * c, 0)
if f.ndim != 3:
for x in range(nr):
for y in range(nc):
g[x, y] = table[x, y]
else:
for x in range(nr):
for y in range(nc):
for k in range(3):
g[x, y, k] = table[f[x, y, k]]
img2 = gamma_correction(img1, 0.1)
cv2.imshow("After", img2)
cv2.waitKey()
上述範例中,Gamma矯正的函式是根據Gamma值計算對應的常數c,並計算強度轉換函數,同時以table儲存,最後再根據table轉換成輸出的強度。