數字圖像處理:一些基本灰度變換


包括圖像反轉、對數變換、冪律(伽馬)變換、分段線性變換函數,測試圖選的不咋地

import cv2
import numpy as np

#灰度圖反轉
def grayReversal(gray):
    gray_reversal = 255 - gray #灰度圖反轉
    return gray_reversal

#彩色圖像反轉
def imgReversal(img):
    img_reversal = np.zeros(img.shape, np.uint8)#初始模板
    for i in range(img.shape[0]):
        for j in range(img.shape[1]):
            b, g, r = img[i, j] #注意是bgr,不是rgb
            img_reversal[i, j] = 255 - b, 255 - g, 255 - r
    return img_reversal

#對數變換
def logTrans(gray, c):
    gray_log = np.uint8((c * np.log(1.0 + gray)))
    return gray_log

#冪律(伽馬)變換
def powerTrans(gray, c, y):
    gray_power = np.uint8(c * (gray ** y))
    return gray_power

path = "_kdy.jpg"
img = cv2.imread(path)
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) #轉換為灰度圖
gray_reversal = grayReversal(gray)
img_reversal = imgReversal(img)
gray_log = logTrans(gray, c=30)
gray_power = powerTrans(gray, c=30, y =0.35)

cv2.imshow("img", img)
cv2.imshow("gray", gray)
cv2.imshow("gray_reversal", gray_reversal)
cv2.imshow("img_reversal", img_reversal)
cv2.imshow("gray_log", gray_log)
cv2.imshow("gray_power", gray_power)

cv2.waitKey(0)

(圖分別為原圖、灰度圖、灰度反轉圖、對數變換圖、冪律(伽馬)變換圖)

————————————————————————————————————

分段線性變換函數

就是用拉格朗日插值法實現分段線性變換函數,然后,注意數據類型的轉換就完事了,可用來對比度拉伸和灰度級分層

import cv2
import numpy as np

#拉格朗日插值法,對比度拉伸
def plf(x, X, Y):
    x = np.float32(x)#得把數據類型給轉換下
    y = 0
    for i in range(len(X)):
        t = 1
        for j in range(len(Y)):
            if j != i:
                t = t * ((x - X[j]) / (X[i] - X[j]))
        y = np.uint8(y + t * Y[i])#再把數據類型換下
    return y

path = "_plf.jpg"
img = cv2.imread(path)
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) #轉換為灰度圖

#參數設置
X = [0, 60, 190, 255]
Y = [0, 30, 230, 255]

gray_plf = plf(gray, X, Y)

cv2.imshow("gray", gray)
cv2.imshow("gray_plf", gray_plf)
cv2.waitKey(0)

左圖是灰度圖,右圖是對比圖拉伸圖


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM