1. 程式人生 > >學習OpenCV-Python——影象增強

學習OpenCV-Python——影象增強

影象增強

影象增強可以分為兩種:

  • 領域處理技術。對畫素點及其周圍的點進行處理,即使用卷積核。
  • 點處理技術。只對單個畫素進行處理。

歸一化

cv2.normalize(src, dst, alpha, beta, norm_type, dtype, mask) → dst

src: 原影象物件

dst: 經過轉化後的影象物件

alpha: 歸一化後灰度畫素最小值,一般為0

beta: 歸一化後灰度畫素最大值,一般為255

norm_type: 歸一化的型別,可以取以下值

(1) cv2.NORM_MINMAX: 陣列的數值縮放到一個指定的範圍,線性歸一化,一般較常用
(2) cv2.NORM_INF:歸一化陣列的C-範數(絕對值的最大值)
(3) cv2.NORM_L1 : 歸一化陣列的L1-範數(絕對值的和)
(4) cv2.NORM_L2: 歸一化陣列的(歐幾里德)L2-範數

型別轉換

dst = cv2.convertScaleAbs(src)

將影象資料型別轉化為uint8

點處理技術

線性變換

影象增強線性變換主要對影象的對比度亮度進行調整,線性變換公式如下:
y = a x +

b y = a*x+b
引數 a 影響影象的對比度,引數 b 影響影象的亮度,具體分為可分為以下幾種情況:

a>1: 增強影象的對比度,影象看起來更加清晰
a<1: 減小了影象的對比度, 影象看起來變模糊
a<0 and b=0:影象的亮區域變暗,暗區域變亮
a=1 and b≠0:影象整體的灰度值上移或者下移,也就是影象整體變亮或者變暗,不會改變影象的對比度,b>0時影象變亮,b<0時影象變暗
a=-1 and b=255:影象翻轉

分段線性變換

公式
{ y = a 1 x + b x &lt; x 1 y = a 2 x + b x 1 &lt; x &lt; x 2 y = a 1 x + b x 2 &lt; x \begin{cases} y = a_1*x+b &amp; x&lt;x_1 \\ y = a_2*x+b &amp; x_1&lt;x&lt;x_2 \\ y = a_1*x+b &amp; x_2&lt;x \end{cases}
即對處於某個感興趣的區域的x,將其對比度係數a增大或減小,從而增大或減小這個區域的對比度。

對數變換

對數變換將影象的低灰度值部分擴充套件,將其高灰度值部分壓縮,以達到強調影象低灰度部分的目的;同時可以很好的壓縮畫素值變化較大的影象的動態範圍,目的是突出我們需要的細節。

公式
y = c l o g ( 1 + x ) y =c* log(1+x)

冪律變換/gamma變換

冪律變換主要用於影象的校正,對漂白的圖片或者是過黑的圖片進行修正,冪律變換的公式如下:
y = c x γ y = c*x^γ
根據 γ的大小,主要可分為以下兩種情況:

γ > 1: 處理漂白的圖片,進行灰度級壓縮

γ < 1: 處理過黑的圖片,對比度增強,使得細節看的更加清楚

影象直方圖均衡化

影象直方圖:反應影象強度分佈的總體概念,寬泛的來說直方圖給出了影象對比度、亮度和強度分佈資訊。

觀察不同影象的直方圖:

從上圖中我們注意到: 在暗影象中,直方圖的分佈都集中在灰度級的低(暗)端; 亮影象直方圖的分佈集中在灰度級的高階;低對比度影象具有較窄的直方圖,且都集中在灰度級的中部;而高對比度的影象直方圖的分量覆蓋了很寬的灰度範圍,且畫素分佈也相對均勻,此時圖片的效果也相對很不錯。於是我們可以得出結論:若一幅影象的畫素傾向於佔據整個可能的灰度級並且分佈均勻,則該影象有較高的對比度並且影象展示效果會相對好,於是便引出影象直方圖均衡化,對影象會有很強的增強效果。

計算新的畫素對映過程:

影象濾波

影象濾波包括空間域濾波和頻率域濾波。

而空間域濾波包括:

1.平滑濾波

2.銳化濾波

平滑濾波

平滑濾波包括均值濾波,加權均值濾波,中值濾波,最值濾波,高斯濾波等。

#均值濾波
blur_img = cv2.blur(img, 5)
#中值濾波
blur_img = cv2.medianBlur(img, 5)
#高斯濾波
blur_img = cv2.gaussianBlur(img,5)

銳化濾波

銳化濾波比較常用的是拉普拉斯濾波。

點選檢視原理