文章目录
- 什么是图像增强 ?
- 一、亮度和对比度调整
- 1.1、线性方法
- 1.1.1、灰度反转(Gray Inversion)
- 1.1.2、对比度拉伸(Contrast Stretching)
- 1.1.3、对比度和亮度增强(Contrast and Brightness)
- 1.2、非线性方法
- 1.2.1、指数变换(Exponential Transformation)
- 1.2.2、伽马变换(Gamma Transformation)
- 1.2.3、对数变换(Logarithmic Transformation)
- 二、直方图均衡化
- 2.1、直方图均衡化(Histogram Equalization,HE)
- 2.2、限制对比度自适应直方图均衡化(Contrast Limited Adaptive Histogram Equalization,CLAHE)
- 三、空间域(增强)
- 3.1、线性滤波(Linear Filtering)
- 3.2、非线性滤波(Non-linear Filtering)
- 3.3、边缘检测(Edge Enhancement)
- 四、频率域(增强)
- 4.1、傅里叶变换(Fourier Transform)
- 4.2、小波变换(Wavelet Transform)
- 五、深度学习
- 5.1、卷积神经网络 (Convolutional Neural Networks, CNNs)
- 5.2、生成对抗网络 (Generative Adversarial Networks, GANs)
- 5.3、变分自编码器 (Variational Autoencoders, VAEs)
- 5.4、注意力机制 (Attention Mechanism)
- 5.5、变换网络 (Transformers)
- 5.6、自监督学习 (Self-Supervised Learning)
什么是图像增强 ?
图像增强:通过一系列技术和方法对图像进行处理,以改善其视觉效果和特征表现。
主要指标包括:
- 亮度(Brightness):影响图像的整体光照程度,确保图像在视觉上既不过暗也不过亮。
对比度(Contrast)
:增强图像中亮部和暗部之间的差异,使得细节更加明显,高对比度有助于更清晰地展示图像的纹理和特征。- 清晰度(Sharpness):提高图像边缘的清晰度,使物体轮廓更加鲜明,便于细节识别。
- 色彩饱和度(Color Saturation):增强颜色的丰富性,使图像色彩更加鲜艳,提升视觉吸引力。
纹理(Texture)
:突出图像中的纹理细节,增强表面特征,对于医学影像和材料检测等领域尤为重要。去噪(Denoising)
:降低图像中的噪声,提高信号质量,减少噪声对重要细节的干扰。增强特征(Feature Enhancement)
:提高重要特征的可见性,方便观察和分析。- 视觉一致性(Visual Consistency):确保图像不同区域在亮度、对比度和色彩表现上的一致性,便于用户进行全面分析。
图像增强技术广泛应用于多个领域,包括:
- 医学影像:改善X光、CT和MRI图像,以辅助医生诊断。
- 卫星和遥感图像:增强地理数据,支持土地利用分类和环境监测。
- 安防监控:提升监控视频质量,促进人脸识别和行为分析。
- 工业检测:提高质量控制中的产品检测精度。
- 图像搜索和检索:改善图像搜索结果的准确性和相关性。
一、亮度和对比度调整
1.1、线性方法
1.1.1、灰度反转(Gray Inversion)
import cv2
if __name__ == '__main__':
import tifffile
image = tifffile.imread(r"F:\py\YH220_235.tif")
# image = cv2.imread('image.jpg', cv2.IMREAD_GRAYSCALE)
inversion_image = 255 - image # 灰度取反
import matplotlib.pyplot as plt
plt.subplot(1, 2, 1), plt.imshow(image, cmap='gray'), plt.title('image'), plt.axis('off')
plt.subplot(1, 2, 2), plt.imshow(inversion_image, cmap='gray'), plt.title('inversion_image'), plt.axis('off')
plt.show()
1.1.2、对比度拉伸(Contrast Stretching)
效果:适合亮度范围狭窄的图像,通过简单拉伸提升整体对比度。
import cv2
import numpy as np
def contrast_stretching(image):
# 对比度拉伸
I_min = np.min(image) # 输入图像的最小像素值
I_max = np.max(image) # 输入图像的最大像素值
O_min = 0 # 输出图像的最小像素值设定为 0
O_max = 255 # 输出图像的最大像素值设定为 255
# 公式:y=a*x+b.(1)x归一化到[0, 1]; (2)a:拉伸到 [0, 255]; (3)b:亮度调整
stretched = (image - I_min) / (I_max - I_min) * (O_max - O_min) + O_min
stretched = np.clip(stretched, 0, 255).astype(np.uint8)
return stretched
if __name__ == '__main__':
import tifffile
image = tifffile.imread(r"F:\py\YH220_235.tif")
# image = cv2.imread('image.jpg', cv2.IMREAD_GRAYSCALE)
stretched_image = contrast_stretching(image)
import matplotlib.pyplot as plt
plt.subplot(1, 2, 1), plt.imshow(image, cmap='gray'), plt.title('image'), plt.axis('off')
plt.subplot(1, 2, 2), plt.imshow(stretched_image, cmap='gray'), plt.title('stretched_image'), plt.axis('off')
plt.show()
1.1.3、对比度和亮度增强(Contrast and Brightness)
对比度增强:通过乘以一个对比度因子 α 来线性放大或压缩图像的灰度值。
# O(x,y)=α*I(x,y)+β。其中:O(x,y) 是增强后的像素值,I(x,y) 是输入图像的像素值。
# α 是对比度增益因子。α > 1:增强对比度,0 < α < 1:降低对比度
# β 是亮度调整参数。正值增加亮度,负值降低亮度
import cv2
if __name__ == '__main__':
import tifffile
image = tifffile.imread(r"F:\py\YH220_235.tif")
# image = cv2.imread('image.jpg', cv2.IMREAD_GRAYSCALE)
C_and_B = cv2.convertScaleAbs(image, alpha=2.0, beta=30)
import matplotlib.pyplot as plt
plt.subplot(1, 2, 1), plt.imshow(image, cmap='gray'), plt.title('image'), plt.axis('off')
plt.subplot(1, 2, 2), plt.imshow(C_and_B, cmap='gray'), plt.title('contrast_and_brightness'), plt.axis('off')
plt.show()
1.2、非线性方法
1.2.1、指数变换(Exponential Transformation)
原理:使用指数函数进行非线性变换,增强图像中较暗或较亮的部分。
# 公式如下:O(x,y)=c*(e^I(x,y)−1)
# 其中: O(x,y) 是增强后的像素值
# I(x,y) 是输入图像的像素值
# e 是自然对数的底数,约等于 2.71828。
# c 是常数,控制图像的亮度增强的强度。
# (1)较大的 c 值会使输出图像的亮度显著增加,尤其是对暗部细节的增强。
# (2)较小的 c 值则会减小增强效果,适用于细微调整。
# 常用的经验值:如果输入图像的像素值范围是 [0,255],将 c 设置为 255 有助于将输出值调整到合适的范围,避免图像过暗。
import cv2
import numpy as np
def exponential_transformation(image, c=255):
# 指数变换
normalized_image = image / 255.0
exp_image = c * (np.exp(normalized_image) - 1)
exp_image = np.clip(exp_image, 0, 255).astype(np.uint8)
return exp_image
if __name__ == '__main__':
import tifffile
image = tifffile.imread(r"F:\py\YH220_235.tif")
# image = cv2.imread('image.jpg', cv2.IMREAD_GRAYSCALE)
exp_image = exponential_transformation(image, c=255)
import matplotlib.pyplot as plt
plt.subplot(1, 2, 1), plt.imshow(image, cmap='gray'), plt.title('image'), plt.axis('off')
plt.subplot(1, 2, 2), plt.imshow(exp_image, cmap='gray'), plt.title('exp_image'), plt.axis('off')
plt.show()
1.2.2、伽马变换(Gamma Transformation)
原理:非线性调整图像灰度值,通过控制伽马值 γ 调节图像亮度。
# 公式如下:O(x,y)=c*I(x,y)^γ
# 其中: O(x,y) 是输出图像的像素值
# I(x,y) 是输入图像的像素值(通常归一化到 [0, 1] 区间)
# c 是常数,用于保持输出范围适合显示(例如 [0, 255])。
# γ 是伽马值,控制图像的亮度和对比度调整。
# (1)0 < γ < 1 使图像的暗部变亮,适合处理偏暗的图像。
# (2)γ > 1 使图像的亮部变,适合处理过曝光的图像。
# 常见伽马值推荐:
# γ≈0.4−0.7:适合亮度偏低的图像,使暗部变亮。
# γ≈1.5−2.5:适合亮度过高的图像,压缩高亮度区域。
import cv2
import numpy as np
def gamma_transformation(image, gamma=1.0):
# 伽马变换
inv_gamma = 1.0 / gamma
gamma_table = np.array([((i / 255.0) ** inv_gamma) * 255 for i in np.arange(0, 256)]).astype("uint8")
return cv2.LUT(image, gamma_table)
if __name__ == '__main__':
import tifffile
image = tifffile.imread(r"F:\py\YH220_235.tif")
# image = cv2.imread('image.jpg', cv2.IMREAD_GRAYSCALE)
gamma_image = gamma_transformation(image, gamma=2.0)
import matplotlib.pyplot as plt
plt.subplot(1, 2, 1), plt.imshow(image, cmap='gray'), plt.title('image'), plt.axis('off')
plt.subplot(1, 2, 2), plt.imshow(gamma_image, cmap='gray'), plt.title('gamma_image'), plt.axis('off')
plt.show()
1.2.3、对数变换(Logarithmic Transformation)
原理:对灰度值取对数,压缩高亮度区域,提升暗部细节。
# 公式如下:O(x,y)=c*log(1+I(x,y))
# 其中: O(x,y) 是输出图像的像素值
# I(x,y) 是输入图像的像素值
# log 是自然对数函数
# c 是比例常数。(1)c 的值越大,图像的整体亮度越高;(2)较小的 c 值会使图像变得更暗。
# 常用的经验值:若输入图像的灰度值范围是 [0, 255],则通常 c=255/log(256)≈45.98,以确保变换后像素值仍保持在[0, 255]。
import cv2
import numpy as np
def logarithmic_transformation(image, c=1):
# 对数变换
log_image = c * (np.log1p(image.astype(np.float32))) # log1p 是 log(1 + x)
log_image = np.clip(log_image, 0, 255).astype(np.uint8)
return log_image
if __name__ == '__main__':
import tifffile
image = tifffile.imread(r"F:\py\YH220_235.tif")
# image = cv2.imread('image.jpg', cv2.IMREAD_GRAYSCALE)
log_image = logarithmic_transformation(image, c=40)
import matplotlib.pyplot as plt
plt.subplot(1, 2, 1), plt.imshow(image, cmap='gray'), plt.title('image'), plt.axis('off')
plt.subplot(1, 2, 2), plt.imshow(log_image, cmap='gray'), plt.title('log_image'), plt.axis('off')
plt.show()
二、直方图均衡化
2.1、直方图均衡化(Histogram Equalization,HE)
效果:自动调整图像的对比度,适合亮度分布不均匀的图像。
import cv2
import numpy as np
if __name__ == '__main__':
import tifffile
image = tifffile.imread(r"F:\py\YH220_235.tif")
# image = cv2.imread('image.jpg', cv2.IMREAD_GRAYSCALE)
equalized_image = cv2.equalizeHist(image)
import matplotlib.pyplot as plt
plt.subplot(1, 2, 1), plt.imshow(image, cmap='gray'), plt.title('image'), plt.axis('off')
plt.subplot(1, 2, 2), plt.imshow(equalized_image, cmap='gray'), plt.title('equalized_image'), plt.axis('off')
plt.show()
2.2、限制对比度自适应直方图均衡化(Contrast Limited Adaptive Histogram Equalization,CLAHE)
- 局部均衡化:CLAHE 将图像分成小块(称为“tiles”),对每个小块进行直方图均衡化。
- 插值平滑:CLAHE 在局部均衡化后,通过插值技术将不同块的结果合并,避免明显的边界和不连续性。
- clipLimit:用于限制对比度的阈值,值越小,对比度增强越少,值越大则对比度增强越多。
- tileGridSize:指定划分的小块大小(例如,(8, 8)表示将图像划分为8x8的块),影响局部均衡化的效果。
import cv2
import numpy as np
if __name__ == '__main__':
import tifffile
image = tifffile.imread(r"F:\py\YH220_235.tif")
# image = cv2.imread('image.jpg', cv2.IMREAD_GRAYSCALE)
clahe = cv2.createCLAHE(clipLimit=2.0, tileGridSize=(8, 8))
clahe_image = clahe.apply(image)
import matplotlib.pyplot as plt
plt.subplot(1, 2, 1), plt.imshow(image, cmap='gray'), plt.title('image'), plt.axis('off')
plt.subplot(1, 2, 2), plt.imshow(clahe_image, cmap='gray'), plt.title('clahe_image'), plt.axis('off')
plt.show()
三、空间域(增强)
在图像处理中,空间域增强方法直接操作图像的像素值,常用于提高图像的可视性和特征表现。
3.1、线性滤波(Linear Filtering)
- 方框滤波(Box Filtering)
- 均值滤波器(Mean Filter)
- 高斯滤波器(Gaussian Filter)
- 锐化滤波器(Sharpening Filter)
3.2、非线性滤波(Non-linear Filtering)
- 中值滤波器(Median Filter)
- 双边滤波器(Bilateral Filter)
- 最小/最大滤波器(Min/Max Filter)
- 自适应中值滤波(Adaptive Median Filtering)
- 形态学滤波(Morphological Filtering)
3.3、边缘检测(Edge Enhancement)
- Prewitt算子:通过 cv2.filter2D 函数来应用 Prewitt 算子
- Roberts算子:通过 cv2.filter2D 函数来应用 Prewitt 算子
- Sobel算子:cv2.sobel()
- Scharr算子:cv2.Scharr()
- 拉普拉斯算子:cv2.Laplacian()
- Canny边缘检测:cv2.Canny()
四、频率域(增强)
在图像处理中的频率域增强方法,通常是将图像先转换到频率域,通过修改频率分量来增强图像中的特定特征,再将其转换回空间域得到增强效果。常见的频率域增强方法包括滤波和频谱调整,如低通滤波、高通滤波、带通滤波等。
以下是频率域增强方法的主要步骤:
- 傅里叶变换:使用傅里叶变换将空间域图像转换到频率域。
- 滤波器设计:根据需要增强的特征(如边缘或噪声),设计频域滤波器。
- 低通滤波器:保留低频成分,抑制高频成分,用于去噪或平滑处理。
- 高通滤波器:保留高频成分,抑制低频成分,用于边缘增强。
- 带通滤波器:保留特定频率区间的成分,适用于增强特定频率范围的细节。
- 频谱滤波:将设计好的滤波器应用于频率域图像。
- 逆傅里叶变换:将处理后的频率域图像转换回空间域,得到增强后的图像。
4.1、傅里叶变换(Fourier Transform)
- 傅里叶变换(Fourier Transform)
- 快速傅里叶变换(Fast Fourier Transform, FFT)
- 离散傅里叶变换(Discrete Fourier Transform, DFT)
- 傅里叶逆变换(Inverse Fourier Transform)
- 短时傅里叶变换(Short-time Fourier Transform, STFT)
- 带通滤波(Band-pass Filtering)
- 高通滤波(High-pass Filtering)
- 低通滤波(Low-pass Filtering)
4.2、小波变换(Wavelet Transform)
- 小波变换(Wavelet Transform)
- 离散小波变换(Discrete Wavelet Transform, DWT)
- 连续小波变换(Continuous Wavelet Transform, CWT)
- 小波包变换(Wavelet Packet Transform, WPT)
- 小波逆变换(Inverse Wavelet Transform)
- 多分辨率分析(Multiresolution Analysis, MRA)
- Haar 小波变换(Haar Wavelet Transform)
- Daubechies 小波变换(Daubechies Wavelet Transform)
五、深度学习
图像增强旨在改善图像的视觉质量,强调细节、对比度和清晰度等,以提升图像的视觉效果或为后续的计算机视觉任务提供支持。(1)传统图像增强方法多基于像素层面的操作;(2)深度学习方法则依靠数据驱动,通过复杂的神经网络结构对图像特征进行非线性处理,提升增强效果。
5.1、卷积神经网络 (Convolutional Neural Networks, CNNs)
- 特点:CNN 具有强大的局部特征提取能力,适合处理图像增强任务。它们通过卷积层提取图像的局部信息,再通过多个卷积和池化层逐步获得高级特征。
- 去噪:DnCNN(Denoising Convolutional Neural Network)模型采用卷积网络结构,有效去除高斯噪声、混合噪声。
- 超分辨率重建:SRCNN(Super-Resolution CNN)通过简单的卷积网络结构,将低分辨率图像恢复到高分辨率。
- 去模糊:DeblurGAN 使用生成对抗网络 (GAN) 框架结合 CNN 模型来消除图像模糊,恢复图像清晰度。
5.2、生成对抗网络 (Generative Adversarial Networks, GANs)
- 特点:GAN 由生成器和判别器组成,通过相互博弈生成逼真的图像增强结果。生成器生成图像,判别器判断生成图像的真实性,经过不断对抗优化,使生成器输出的图像逐渐逼真。
- 图像修复:SRGAN(Super-Resolution GAN)用于图像超分辨率,生成更加逼真的高分辨率图像。
- 图像去雨、去雾:DeRainGAN 和 DehazeGAN 分别针对下雨、雾霾等特殊天气条件,通过对抗生成使图像清晰可见。
- 风格转换:CycleGAN 实现图像风格转换(如白天到夜晚、晴天到雨天等),保持内容不变的情况下,增强图像的特定风格。
5.3、变分自编码器 (Variational Autoencoders, VAEs)
- 特点:VAE 通过在编码器和解码器之间加入噪声的方式对输入图像进行分布建模,可生成多种可能的增强效果。
- 图像补全:使用部分破损的图像生成完整图像,VAE 模型通过生成不同潜在空间的样本来推测丢失区域。
- 图像去噪:CVAE(Conditional VAE)模型能去除不同类型的噪声,生成更干净的图像。
- 图像增强:将输入低质量图像的潜在特征分布与高质量图像对齐,以增强图像质量。
5.4、注意力机制 (Attention Mechanism)
- 特点:注意力机制可引导模型关注图像中的重要区域,以便对这些区域进行重点增强,从而提高增强效果的针对性。
- 去模糊:使用注意力机制加权模糊区域,选择性去除模糊,如 DMPHN(Deep Multi-Patch Hierarchical Network)。
- 超分辨率重建:SAN(Second-order Attention Network for Image Super-resolution)在图像超分辨率中利用注意力机制提升局部清晰度。
- 低光增强:通过注意力模块识别低光区域,增强其亮度和对比度,使暗光图像更加清晰。
5.5、变换网络 (Transformers)
- 特点:变换网络基于自注意力机制,可以捕获图像全局信息,对复杂图像内容的增强处理尤其有效。
- 去模糊:Uformer 和 Restormer 是基于变换器的模型,能够高效处理去模糊和去噪任务。
- 图像恢复:SwinIR(Swin Transformer for Image Restoration)在超分辨率、去噪等任务中表现优异,可通过长距离的自注意力机制获得精细化的恢复效果。
- 图像超分辨率:ViT(Vision Transformer)模型通过全局信息捕获提升超分辨率结果,避免细节丢失。
5.6、自监督学习 (Self-Supervised Learning)
- 特点:自监督方法通过设定伪标签,在不需要大量人工标注的情况下增强图像,并在任务中学习图像的特征和结构。
- 图像去噪和修复:Noise2Void 和 Noise2Self 模型利用自监督机制在不需要干净标签的情况下完成去噪。
- 图像增强:SimCLR 和 MoCo 等自监督方法提取增强图像特征,用于对比学习以提升增强效果。
- 低光增强:通过自监督生成高质量的低光图像,提升图像的亮度、对比度和细节。