基于Retinex模型和多尺度融合的低光照图像增强技术 提出了一种亮度调整、锐化和多尺度融合相结合的算法。 首先对原图像分解出光照图,基于Retinex模型进行估计,并进行伽马矫正,得到亮度均衡的图像;为补偿伽马矫正导致过曝区域的细节丢失,对原图像进行锐化处理,以提升图像细节部分;最后在多尺度融合金字塔模型下,根据计算两个输入图像的权重进行多尺度融合,得到最终的增强图像。 此外,还计算了五个非参考图像质量评价指标(BRISQUE,CEIQ,ENIQA,NIQE,PIQE)。
在图像处理领域,低光照图像增强一直是个热门且具有挑战性的话题。今天咱们来聊聊一种将亮度调整、锐化和多尺度融合相结合的算法,它基于Retinex模型与多尺度融合技术,能有效提升低光照图像的质量。
1. 基于Retinex模型估计光照图并伽马矫正
Retinex模型的核心思想是将图像的亮度信息分解为反射分量和光照分量。咱们先从原图像中分解出光照图。假设原图像为img,在Python中,利用OpenCV库读取图像:
import cv2 img = cv2.imread('low_light_image.jpg')接下来估计光照图。这里可以使用高斯滤波来平滑图像,近似得到光照分量。
import numpy as np # 将图像转换到灰度图 gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) # 使用高斯滤波估计光照图 blurred = cv2.GaussianBlur(gray, (21, 21), 0)得到光照图blurred后,基于Retinex模型的简单做法是通过原图像与光照图的运算,分离出反射分量。但这里我们还要进行伽马矫正。伽马矫正主要用于调整图像的亮度分布,公式为:$I{corrected}=I{original}^{\frac{1}{\gamma}}$ ,其中$\gamma$是伽马值。
gamma = 0.5 corrected = np.power(gray / 255.0, gamma) * 255.0 corrected = np.uint8(corrected)这样我们就得到了亮度均衡的图像corrected。
2. 锐化处理补偿细节丢失
伽马矫正虽然能均衡亮度,但可能会导致过曝区域细节丢失。为了补偿这部分细节,需要对原图像进行锐化处理。锐化通常可以通过卷积操作实现,比如使用拉普拉斯算子。
laplacian = cv2.Laplacian(gray, cv2.CV_64F) laplacian = np.uint8(np.absolute(laplacian)) sharpened = float(1.5) * gray - float(0.5) * laplacian sharpened = np.maximum(sharpened, 0) sharpened = np.minimum(sharpened, 255) sharpened = np.uint8(sharpened)上述代码中,先通过拉普拉斯算子计算出图像的高频信息,然后通过权重运算增强高频部分,从而锐化图像,提升细节。
3. 多尺度融合得到最终增强图像
多尺度融合金字塔模型是关键。我们要根据计算两个输入图像(亮度均衡后的图像和锐化后的图像)的权重来进行多尺度融合。首先构建高斯金字塔和拉普拉斯金字塔。
# 构建高斯金字塔 gaussian_pyramid_1 = [corrected] gaussian_pyramid_2 = [sharpened] for i in range(6): corrected = cv2.pyrDown(corrected) sharpened = cv2.pyrDown(sharpened) gaussian_pyramid_1.append(corrected) gaussian_pyramid_2.append(sharpened) # 构建拉普拉斯金字塔 laplacian_pyramid_1 = [gaussian_pyramid_1[5]] laplacian_pyramid_2 = [gaussian_pyramid_2[5]] for i in range(5, 0, -1): size = (gaussian_pyramid_1[i - 1].shape[1], gaussian_pyramid_1[i - 1].shape[0]) laplacian_1 = cv2.subtract(gaussian_pyramid_1[i - 1], cv2.pyrUp(gaussian_pyramid_1[i], dstsize = size)) laplacian_2 = cv2.subtract(gaussian_pyramid_2[i - 1], cv2.pyrUp(gaussian_pyramid_2[i], dstsize = size)) laplacian_pyramid_1.append(laplacian_1) laplacian_pyramid_2.append(laplacian_2)然后根据权重计算融合后的金字塔。
# 计算权重并融合 weighted_laplacian_pyramid = [] for i in range(6): weight = np.mean(laplacian_pyramid_1[i]) / (np.mean(laplacian_pyramid_1[i]) + np.mean(laplacian_pyramid_2[i])) weighted_lap = weight * laplacian_pyramid_1[i] + (1 - weight) * laplacian_pyramid_2[i] weighted_laplacian_pyramid.append(weighted_lap)最后通过重建金字塔得到最终增强图像。
# 重建图像 reconstructed = weighted_laplacian_pyramid[0] for i in range(1, 6): size = (weighted_laplacian_pyramid[i].shape[1], weighted_laplacian_pyramid[i].shape[0]) reconstructed = cv2.pyrUp(reconstructed, dstsize = size) reconstructed = cv2.add(reconstructed, weighted_laplacian_pyramid[i])reconstructed就是我们最终得到的增强图像。
4. 非参考图像质量评价指标
此外,为了衡量增强效果,计算了五个非参考图像质量评价指标:BRISQUE,CEIQ,ENIQA,NIQE,PIQE。在Python中,可以使用scikit - image库来计算部分指标。例如NIQE指标:
from skimage.measure import niqe niqe_score = niqe(reconstructed) print(f"NIQE score: {niqe_score}")这些指标能从不同角度评估图像质量,帮助我们了解增强算法的有效性。
基于Retinex模型和多尺度融合的低光照图像增强技术 提出了一种亮度调整、锐化和多尺度融合相结合的算法。 首先对原图像分解出光照图,基于Retinex模型进行估计,并进行伽马矫正,得到亮度均衡的图像;为补偿伽马矫正导致过曝区域的细节丢失,对原图像进行锐化处理,以提升图像细节部分;最后在多尺度融合金字塔模型下,根据计算两个输入图像的权重进行多尺度融合,得到最终的增强图像。 此外,还计算了五个非参考图像质量评价指标(BRISQUE,CEIQ,ENIQA,NIQE,PIQE)。
基于Retinex模型和多尺度融合的这种算法,通过亮度调整、锐化和多尺度融合的有机结合,为低光照图像增强提供了一种有效的解决方案,并且通过非参考图像质量评价指标能更好地优化和评估算法效果。