首页 分享 低照度图像增强(传统方法)

低照度图像增强(传统方法)

来源:花匠小妙招 时间:2024-12-06 12:44

        当下信息技术迅速发展,其中图像信息在各个领域都得到了广泛的应用,同时对图像也需要更高的图像质量和更准确的图像信息。在部分拍摄条件下,由于自然环境存在复杂的光照条件,如:阴雨天、地下环境、夜晚的拍摄环境,得到的图像会受到较差的光照条件的限制,此类在光照不足条件下拍摄的图像称为低照度图像。低照度环境下得到的图像会存在较高的噪声,且存在纹理信息模糊、对比度低、色彩还原不正确等问题,不仅会导致视觉观感上收获较差,也会在图像信息传递上产生一些错误,给后续的图像处理造成一定的困难。

        当前的低照度图像增强的方法主要有两种,一是传统的图像增强方法,可分为空域、频域和混合域三类,通过对图像的像素值直接进行空间域上处理的方法,如直方图均衡以及伽马变换;像小波变换一样通过变换域进行频域处理的操作;以及结合前两种方法而进行的混合与方法。二是基于深度学习的图像增强的方法,例如:零参考深度曲线估计(Zero-Reference Deep Curve Estimation,Zero-DCE)的核心是其轻量级的神经网络模型,该模型无需任何手动调整的参数,仅通过学习来自大量数据集的照明和对比度变化,就能自适应地增强图像。

        传统低照度图像增强在一定程度上可以提高视觉效果和图像信息的准确传输,但是存在过程复杂、时间较长、亮度调整不灵活、色彩失真、细节丢失等问题。与之相比,基于深度学习的低照度图像增强可以通过大规模数据提取得到更强的适应性、鲁棒性、处理速度。其中,鲁棒性是指系统或算法在非正常状况、噪声、其他变化的条件下的的稳定能力。具体来说,这指的就是系统在面对各种异常情况时能够保持稳定的能力。

1.直方图均衡化

        直方图均衡化的基本原理是对灰度值图像的各个像素的灰度级进行再分配,使得图像整体像素分布的灰度平均化,从而增强整体的对比度。该方法通过对图像的像素值进行变换,拉伸或压缩原始图像的像素值范围,使得图像的直方图更加平坦,从而达到图像的增强效果。该方法的使用可以提高图像像素的对比度、去除光照不均匀,适用于灰度图像和低照度图像。然而,直方图均衡化容易导致图像过度增强或细节丢失的问题,对于低照度图像的增强效果有限,对于噪声较多的图像,直方图均衡化可能会增强噪声,需结合去噪处理。Python代码如下:

import cv2

import numpy as np

from matplotlib import pyplot as plt

img = cv2.imread("7.jpg")

B, G, R = cv2.split(img)

b = cv2.equalizeHist(B)

g = cv2.equalizeHist(G)

r = cv2.equalizeHist(R)

equal_img = cv2.merge((b, g, r))

hist_b = cv2.calcHist([equal_img], [0], None, [256], [0, 256])

hist_B = cv2.calcHist([img], [0], None, [256], [0, 256])

plt.subplot(1, 2, 1)

plt.plot(hist_B, 'b')

plt.title('原图B通道的直方图', fontdict={'family': 'KaiTi', 'size': 10})

plt.subplot(1, 2, 2)

plt.title('均衡化后B通道的直方图', fontdict={'family': 'KaiTi', 'size': 10})

plt.plot(hist_b, 'b')

plt.show()

cv2.imwrite("image.jpg", equal_img)

cv2.imshow("orj", img)

cv2.imshow("equal_img", equal_img)

cv2.waitKey(0)

结果图如下,左图为低照度图像,右图为直方图均衡化增强后的图像:

        

2.伽马变换

        在低照度图像增强中,伽马变换的原理是通过对图像的灰度值进行非线性变换,以提高图像的对比度和清晰度。在低照度条件下,图像的亮度可能较低,细节不够清晰。通过应用伽马变换,可以调整图像的灰度级别,使得暗部细节更加突出,整体图像变得更清晰。伽马变换可以增强图像的局部对比度,使图像更具有视觉吸引力和信息量。Python代码如下:

import numpy as np

import matplotlib.pyplot as plt

import cv2

img = cv2.imread('image1.jpg')

img = img.astype(np.float32) / 255.0

def gamma_correction(img, gamma):

return np.power(img, gamma)

gamma = 0.5

img_gamma = gamma_correction(img, gamma)

plt.subplot(1, 2, 1)

plt.imshow(cv2.cvtColor(img, cv2.COLOR_BGR2RGB))

plt.title('原图像', fontdict={'family': 'KaiTi', 'size': 10})

plt.subplot(1, 2, 2)

plt.imshow(cv2.cvtColor(img_gamma, cv2.COLOR_BGR2RGB))

plt.title('伽马变换后图像', fontdict={'family': 'KaiTi', 'size': 10})

plt.show()

cv2.imwrite("image2.jpg", img_gamma * 255)

 结果图如下,左图为低照度图像,右图为伽马变换增强后的图像:

3.Retinex算法

        Retinex理论:Retinex算法的好处是光正常情况下不会使得图像中各个像素相对的亮度关系产生影响,并且可以使得收到光照影响的图像质量得以改善其影响程度,借此增强图片的效果,让整体图片的视觉效果更好。其基本思想是去除照射光影响,保留物体自身的反射属性,再调整对比度和亮度,主要包括单尺度视网膜算法(Singal Scale Retinex,SSR)、多尺度视网膜算法(Multi-Scale Retinex,MSR)和带色彩恢复的多尺度视网膜增强算法(Multi-Scale Retinex with Color Restoration,MSRCR)三种算法。Python代码如下:

import cv2

import numpy as np

def single_scale_retinex(img, sigma):

retinex = np.log10(img) - np.log10(cv2.GaussianBlur(img, (0, 0), sigma))

return retinex

def multi_scale_retinex(img, sigma_list):

retinex = np.zeros_like(img)

for sigma in sigma_list:

retinex += single_scale_retinex(img, sigma)

retinex = retinex / len(sigma_list)

return retinex

def color_restoration(img, alpha, beta):

img_sum = np.sum(img, axis=2, keepdims=True)

color_restoration = beta * (np.log10(alpha * img) - np.log10(img_sum))

return color_restoration

def retinex_process(img, sigma_list, G, b, alpha, beta):

img = np.float64(img) + 1.0

img_retinex = multi_scale_retinex(img, sigma_list)

img_color = color_restoration(img, alpha, beta)

img_retinex = G * (img_retinex * img_color + b)

for i in range(img_retinex.shape[2]):

img_retinex[:, :, i] = np.clip(img_retinex[:, :, i], 0, 255)

img_retinex = np.uint8(img_retinex)

return img_retinex

def main():

img = cv2.imread('image1.jpg')

sigma_list = [15, 80, 250]

G = 5.0

b = 25.0

alpha = 125.0

beta = 46.0

img_retinex = retinex_process(img, sigma_list, G, b, alpha, beta)

cv2.imshow('image1', img)

cv2.imshow('Retinex', img_retinex)

cv2.waitKey(0)

cv2.imwrite('image2.jpg', img_retinex)

if __name__ == "__main__":

main()

 结果图如下,左图为低照度图像,右图为伽马变换增强后的图像:

相关知识

基于光照过强过弱条件下的图像增强研究
图像增强——传统算法伽马校正实现暗光增强(附Python代码)
光环境中入睡检判系统及被照平面照度检测装置制造方法及图纸
照度均匀度多少最好?
灯光照度多少合适
马铃薯典型病虫害图像特征融合与识别算法研究
基于图像的植物病害识别与分类
基于光谱图像的森林病虫害自动检测方法
隧道洞内外照度检测器
机车前照灯光照度自动检测系统的制作方法

网址: 低照度图像增强(传统方法) https://www.huajiangbk.com/newsview916713.html

所属分类:花卉
上一篇: 紫叶酢浆草的养殖方法和注意事项
下一篇: 长寿花怎么养才开花,及时补充光照

推荐分享