亮度变换
亮度变换
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}\)
如图所示:








浙公网安备 33010602011771号