亮度变换

亮度变换

1.图像亮度反转

图像亮度反转变换公式:
\(S=L-1-r\)
其中L为亮度自身亮度,如8bit灰度级,L值为256,r为当前亮度值。

import cv2
img = cv2.imread('lena.png', cv2.IMREAD_GRAYSCALE)
cv2.imshow('Original Image', img) 
cv2.waitKey(0)
img = 256 - 1 - img  #灰度图像黑白图取反
cv2.imshow('Reverse Image', img) 
cv2.waitKey(0)
cv2.destroyAllWindows()

原始图像

反转后图像

反转后图像

2.对数变换

对数变换公式:
\(S=c*log(1+r)\)
其中c为常数,假设r值大于零,r为当前灰度图像值。

import cv2 as cv
import numpy as np
import matplotlib.pyplot as plt

# 读取灰度图像
x = np.arange(256)
y = 50 * np.log(1 + x)
plt.plot(x, y)
plt.title('Logarithmic Transformation')
plt.xlabel('Input Intensity')
plt.ylabel('Output Intensity')
plt.show()
img = cv.imread('lena.png', cv.IMREAD_GRAYSCALE) #采用灰度图像进行读取
cv.imshow('Original Image',img)
cv.waitKey(0)
# 处理后的图像需要转换数据类型
img_process = 50 * np.log(1 + img)
img_process = np.uint8(img_process)  #将数据小数转换成整数
cv.imshow('Processed Image', img_process)  # 确保显示处理后的图像
cv.waitKey(0)
cv.destroyAllWindows()

结果如图所示:


3.伽马变换

伽马变换公式:
\(S=c*r^e\)
其中c为常数,假设r值大于零,r为当前灰度图像值。通过调整e大小调整整个变换公式。

import cv2 as cv
import numpy as np
import matplotlib.pyplot as plt

# 读取灰度图像
gain = [0.3, 0.5, 0.8, 1.2, 1.5]
x = np.arange(256)
for i in gain:
    y = 0.7 * np.power(x, i)
    plt.plot(x, y)
plt.title('Logarithmic Transformation')
plt.xlabel('Input Intensity')
plt.ylabel('Output Intensity')
plt.show()
img = cv.imread('lena.png', cv.IMREAD_GRAYSCALE) #采用灰度图像进行读取
cv.imshow('Original Image',img)
cv.waitKey(0)
# 处理后的图像需要转换数据类型
for i in gain:
    img_process = 0.7 * np.power(img, i)
    img_process = np.uint8(img_process)  #将数据小数转换成整数
    cv.imshow('Processed Image', img_process)  # 确保显示处理后的图像
    cv.waitKey(0)
cv.destroyAllWindows()

其中结果如图所示:

对数图像 原始图像 0.3参数
0.5 0.8 1.2

4.分段线性变换

对比度拉伸函数:
\(S=T(r)=\frac{1}{1+(r/m)^E}\)
如图所示:

posted @ 2025-04-03 21:09  heyuikn  阅读(44)  评论(0)    收藏  举报