《数字图像处理-OpenCV/Python》连载(50)非线性灰度变换
本书京东优惠购书链接:https://item.jd.com/14098452.html
本书CSDN独家连载专栏:https://blog.csdn.net/youcans/category_12418787.html
第 7 章 图像的灰度变换
灰度变换按照灰度级的映射函数修改像素的灰度值,从而改变图像灰度的动态范围。灰度变换可以使图像的动态范围扩大、图像对比度增强,使图像更清晰、特征更明显。
本章内容概要
- 介绍图像的线性灰度变换,理解线性拉伸对灰度动态范围的影响。
- 介绍常用的非线性灰度变换方法,如对数变换、幂律变换和分段线性变换。
- 通过灰度变换调整图像色阶,理解和校正图像的色调范围和色彩平衡。
7.3 非线性灰度变换
非线性灰度变换是指运用非线性函数调整原始图像的灰度范围。常用方法有对数变换和幂律变换。对数变换与幂律变换的映射关系如图7-4所示。
非线性灰度变换在运算过程中,像素值要按实数来计算,计算结果也是实数,要注意图像数据类型的转换。
7.3.1 对数变换
对数变换是指将输入范围较窄的低灰度级映射为范围较宽的灰度级,使较暗区域的对比度增强,提升图像的暗部细节。
对数变换可以由以下公式描述:
d s t = c ∗ l o g ( 1 + s r c ) dst = c*log(1+src) dst=c∗log(1+src)
式中,src和dst分别表示原始图像和变换图像的灰度值;c是比例系数。
对数变换实现了扩展低灰度级而压缩高灰度级的效果,广泛应用于频谱图像的显示,典型应用是傅里叶频谱的显示。
7.3.2 幂律变换
幂律变换也称伽马变换,可以提升暗部细节,对发白(曝光过度)或过暗(曝光不足)的图片进行校正。
伽马变换可以由以下公式描述:
d s t = c ∗ s r c γ , γ > 0 dst = c*src^{\gamma}, \gamma>0 dst=c∗srcγ,γ>0
式中,src和dst分别表示原始图像和变换图像的灰度值; γ \gamma γ是伽马系数;c是比例系数。
当 0 < γ < 1 0<\gamma<1 0<γ<1时,拉伸了图像的低灰度级,压缩了图像的高灰度级,减弱了图像的对比度;当 γ \gamma γ>1时,拉伸了图像的高灰度级,压缩了图像的低灰度级,增强了图像的对比度。
伽马变换通过非线性变换对人类视觉特性进行补偿,可以最大化地利用灰度级的带宽,很多拍摄、显示和打印设备的亮度曲线都符合伽马曲线,因此伽马变换被广泛应用于显示设备的调校,称为伽马校正。
【例程0704】灰度变换之对数变换
本例程为图像灰度变化之对数变换在傅里叶频谱显示中的应用。
python
# 【0704】灰度变换之对数变换
import cv2 as cv
import numpy as np
from matplotlib import pyplot as plt
if __name__ == '__main__':
gray = cv.imread("../images/Fig0602.png", flags=0) # 读取为灰度图像
fft = np.fft.fft2(gray) # 傅里叶变换
fft_shift = np.fft.fftshift(fft) # 将低频部分移动到图像中心
amp = np.abs(fft_shift) # 傅里叶变换的频谱
ampNorm = np.uint8(cv.normalize(amp, None, 0, 255, cv.NORM_MINMAX)) # 归一化为 [0,255]
ampLog = np.abs(np.log(1.0 + np.abs(fft_shift))) # 对数变换, c=1
ampLogNorm = np.uint8(cv.normalize(ampLog, None, 0, 255, cv.NORM_MINMAX))
plt.figure(figsize=(9, 3.2))
plt.subplot(131), plt.title("1. Original"), plt.axis('off')
plt.imshow(gray, cmap='gray', vmin=0, vmax=255)
plt.subplot(132), plt.title("2. FFT spectrum"), plt.axis('off')
plt.imshow(ampNorm, cmap='gray', vmin=0, vmax=255)
plt.subplot(133), plt.title("3. LogTrans of FFT"), plt.axis('off')
plt.imshow(ampLogNorm, cmap='gray', vmin=0, vmax=255)
plt.tight_layout()
plt.show()
程序说明:
(1)运行结果,傅里叶频谱的对数变换如图7-5所示。图7-5(2)所示为图7-5(1)的傅里叶频谱图,图7-5(3)所示为图7-5(2)的对数变换图像。
(2)由于傅里叶频谱的动态范围很宽,图7-5(2)只能显示图像中心的一个亮点(亮点只有一个像素,其实也看不出来),丢失了大量的暗部细节。
(3)图7-5(3)使用对数变换将图7-5(2)的动态范围进行了非线性压缩,因此清晰地显示了频谱特征。
图7-5 傅里叶频谱的对数变换
版权声明:
youcans@xupt 原创作品,转载必须标注原文链接:(https://blog.csdn.net/youcans/article/details/134726151)
Copyright 2023 youcans, XUPT
Crated:2023-12-01
欢迎关注本书CSDN独家连载专栏
《数字图像处理-OpenCV/Python》连载: https://blog.csdn.net/youcans/category_12418787.html