图像灰度线性变换
图像的灰度线性变换是通过建立灰度映射来调整原始图像的灰度,从而改善图像的质量,凸显图像的细节,提高图像的对比度。灰度线性变换的计算公式如下所示:
该公式中
表示灰度线性变换后的灰度值,
表示变换前输入图像的灰度值,
和
为线性变换方程
的参数,分别表示斜率和截距。
当α=1,b=0时,保持原始图像
当α=1,b!=0时,图像所有的灰度值上移或下移
当α=-1,b=255时,原始图像的灰度值反转
当α>1时,输出图像的对比度增强
当0
当α<0时,原始图像暗区域变亮,亮区域变暗,图像求补
1.图像灰度上移变换
该算法将实现图像灰度值的上移,从而提升图像的亮度,其实现代码如下所示。由于图像的灰度值位于0至255区间之内,所以需要对灰度值进行溢出判断。
图像的所有灰度值上移50,图像变得更白了。注意,纯黑色对应的灰度值为0,纯白色对应的灰度值为255。
import cv2
import numpy as np
import matplotlib.pyplot as plt
#读取原始图像
img = cv2.imread('data/test3.jpg')
#图像灰度转换
grayImage = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
#获取图像高度和宽度
height = grayImage.shape[0]
width = grayImage.shape[1]
#创建一幅图像
result = np.zeros((height, width), np.uint8)
#图像灰度上移变换 DB=DA+50
for i in range(height):
for j in range(width):
if (int(grayImage[i,j]+50) > 255):
gray = 255
else:
gray = int(grayImage[i,j]+50)
result[i,j] = np.uint8(gray)
#显示图像
titles = ['Gray Image', 'result']
images = [grayImage, result]
plt.figure(figsize=(10, 4))
for i in range(2):
plt.subplot(1, 2, i+1)
plt.imshow(images[i], 'gray')
plt.title(titles[i])
plt.xticks([]), plt.yticks([])
plt.show()
image.png
2.图像对比度增强变换