Python灰度變換中伽馬變換分析實現

1. 介紹

伽馬變換主要目的是對比度拉伸,將圖像灰度較低的部分進行修正

伽馬變換針對的是對單個像素點的變換,也就是點對點的映射

形式為:

其中,s為輸出的像素點的灰度值,r為輸入像素點的灰度值。c 、 γ 為常數

γ 值不同的時候,對應的變換曲線如圖,這裡我們不關註具體函數的取值,而隻是關註變換曲線的形狀

通過觀察可以發現

  • γ > 1 的時候,會壓縮暗區的對比度,抬高亮區的對比度。並且γ越大,效果越明顯
  • γ < 1 的時候,會提升暗區的對比度,壓縮亮區的對比度。並且γ越小,效果越明顯
  • γ = 1 的時候,圖像的灰度不變(c 也為1)

2. 代碼實現

import cv2
import numpy as np
def grammar(x, r):
    y = pow(x / 255 , r) * 255
    return y.astype(np.uint8)
img  = cv2.imread('./f.jpg',0)
img_grammar = grammar(img,0.6)
cv2.imshow('img',np.hstack((img,img_grammar)))
cv2.waitKey()
cv2.destroyAllWindows()

原圖和 γ = 0.6 的效果

這裡需要進行歸一化處理,因為整數的小數次方可能會丟失精度,我們將灰度值變為(0,1)之間,轉換成小數與小數的次方會更加準確。

3. 提升視頻的亮度

import numpy as np
import cv2
def grammar(x , r):   #  grammar 變換
    y = pow(x / 255 , r) * 255
    return y.astype(np.uint8)
video = cv2.VideoCapture('./hand.mp4')   # 讀取視頻
while video.isOpened():        # 如果視頻/攝像頭 讀取成功
    ret,frame = video.read()    # 讀取每一幀
    img = grammar(frame,0.6)    # 將每一幀進行進行grammar變換
    if ret == True :           # 讀取到frame的話
        cv2.imshow('img',np.hstack((frame,img)))
    key=cv2.waitKey(1)
    if key == ord('q'):        # q 退出
        break
    if key == 32:              # 空格鍵 暫停
        cv2.waitKey(0)
        continue
video.release()
cv2.destroyAllWindows()

視頻效果:

到此這篇關於Python灰度變換中伽馬變換分析實現的文章就介紹到這瞭,更多相關Python伽馬變換內容請搜索WalkonNet以前的文章或繼續瀏覽下面的相關文章希望大傢以後多多支持WalkonNet!

推薦閱讀: