分为两个部分对比度校正和颜色校正
对比度校正
① 均衡G和B通道
②使用与原始图像的强度分布和水下不同颜色的波长衰减相关的动态参数重新分布每个RGB通道
颜色校正
通过拉伸“L”分量来修正并修改ab分量
挑战
1.水下环境和水体浊度影响
2.光的吸收、散射和反射
水下模型和直方图拉伸两个方面论述
对比度校正
在对比度校正步骤中,我们对RGB通道分解后的图像应用颜色均衡和相对全局直方图拉伸
双边滤波器bilateral filter
双边滤波器用于保存所需彩色水下图像的细节时消除上述变换后的噪声。这将中和低对比度,并减少由于光散射和吸收而产生的颜色投射效果。
颜色校正
我们对图像的“L”分量应用简单的全局直方图拉伸,并在CIE Lab颜色空间中调整“a”和“b”分量。
“L”“a”“b”自适应拉伸将提高图像的饱和度和亮度,以获得更生动的颜色。
我们根据GW假设理论修正G和B通道。这里不考虑R通道,因为水中的红光很难通过简单的颜色均衡进行补偿,这可能会导致红色过饱和。
从各种浅水图像的直方图分布可以看出,R-G-B通道的直方图分布类似于的瑞利分布的变化,这是正值随机变量的连续概率分布。
由于水下图像受各种因素的影响,为了减少某些极端像素对相对全局直方图拉伸的影响,通常将拉伸范围取在直方图的0.1%到99.9%之间。然而,如果直方图不是正态分布的,那么这种从直方图的两个尾部移除相等数量像素的方法可能是不合理的。
对于水下图像,全局直方图拉伸范围为[0,255]通常会带来过多的蓝绿色照明。
在RGB颜色模型中进行对比度校正后,图像将进行颜色校正处理。在此过程中,将水下图像转换为CIE Lab颜色模型,以提高颜色性能。在CIE实验室颜色模型中,“L”分量相当于图像亮度,表示L=100时的最亮值和L=0时的最暗值。当a=0和b=0时,颜色通道将显示真实的中性灰色值。因此,修改“a”和“b”分量的输出颜色梯度以准确地获得颜色校正,同时使用“L”分量调整整个图像的亮度。首先,将CIE-Lab颜色模型中的浅水图像分解为各个通道。
import numpy as np
def global_stretching(img_L,height, width):
length = height * width
R_rray = (np.copy(img_L)).flatten()
R_rray.sort()
# print('R_rray',R_rray)
I_min = int(R_rray[int(length / 100)])
I_max = int(R_rray[-int(length / 100)])
# print('I_min',I_min)
# print('I_max',I_max)
array_Global_histogram_stretching_L = np.zeros((height, width))
for i in range(0, height):
for j in range(0, width):
if img_L[i][j] < I_min:
p_out = img_L[i][j]
array_Global_histogram_stretching_L[i][j] = 0
elif (img_L[i][j] > I_max):
p_out = img_L[i][j]
array_Global_histogram_stretching_L[i][j] = 100
else:
p_out = int((img_L[i][j] - I_min) * ((100) / (I_max - I_min)))
array_Global_histogram_stretching_L[i][j] = p_out
return (array_Global_histogram_stretching_L)