各参数的含义及取值还没完全搞懂
在低照度场景下进行目标检测任务,常存在图像RGB特征信息少、提取特征困难、目标识别和定位精度低等问题,给检测带来一定的难度。使用图像增强模块对原始图像进行画质提升,恢复各类图像信息,再使用目标检测网络对增强图像进行特定目标检测,有效提高检测的精确度。
SSR
原理
I(X,Y)表示相机捕获的图像(计算机存储的实际图像)
L(X,Y)表示入射分量
R(X,Y)表示反射分量
目标:已知I和L,求R
公式:
I=R*L
其中L可以直接由I用高斯卷积估计得到
因此L,I已知,可以求R
方便起见,用对数表示公式:
log(R)=log(I)-log(L)
所求得logR后直接放缩到0-255
代码
# sigma:高斯模糊的sigma参数
def SSR(src_img, sigma):
# 即所求L
L_blur = cv2.GaussianBlur(src_img, (0, 0), sigma) # 高斯函数
dst_Img = np.log10(src_img+0.01) # 归一化取log
dst_Lblur = np.log10(L_blur+0.01) # 归一化取log
log_R = dst_Img-dst_Lblur # 减 log(R(x,y))=log(I(x,y))-log(L(x,y))
dst_R = cv2.normalize(log_R, None, 0, 255, cv2.NORM_MINMAX) # 放缩到0-255
log_uint8 = cv2.convertScaleAbs(dst_R) # 取整
return log_uint8
MSR
原理
1、需要对原始图像进行每个尺度的高斯模糊,得到模糊后的图像Li(x,y),其中小标i表示尺度数。
2、对每个尺度下进行累加计算 MSR(x,y)=w1*SSR(x,y,sigma1)+w2*SSR(x,y,sigma2)+w3*SSR(x,y,sigma3)…
其中Weight(i)表示每个尺度对应的权重,要求各尺度权重之和必须为1,经典的取值为等权重。
代码
def SSR(src_img, sigma):
L_blur = cv2.GaussianBlur(src_img, (0, 0), sigma) # 高斯函数
dst_Img = np.log10(src_img + 0.01) # 归一化取log
dst_Lblur = np.log10(L_blur + 0.01) # 归一化取log
return dst_Img - dst_Lblur # 减 log(R(x,y))=log(I(x,y))-log(L(x,y))
def MSR(img, sigma_list):
retinex = np.zeros_like(img * 1.0)
for sigma in sigma_list:
retinex += SSR(img, sigma)
retinex /= len(sigma_list)
for i in range(retinex.shape[2]):
retinex[:, :, i] = (retinex[:, :, i] - np.min(retinex[:, :, i])) / (
np.max(retinex[:, :, i]) - np.min(retinex[:, :, i])) * 255
img_msr = np.uint8(np.minimum(np.maximum(retinex, 0), 255))
return img_msr
MSRCR
原理
在前面的增强过程中,图像可能会因为增加了噪声,而使得图像的局部细节色彩失真,不能显现出物体的真正颜色,整体视觉效果变差。针对这一点不足,MSRCR在MSR的基础上,加入了色彩恢复因子C来调节由于图像局部区域对比度增强而导致颜色失真的缺陷.
先看一组公式:
RMSRCR(x,y)‘=G⋅RMSRCR(x,y)+b
RMSRCR (x,y)=C(x,y)RMSR(x,y)
C(x,y)=f[I’(x,y)]=f[I(x,y)/∑I(x,y)]Ci(x,y)=f[Ii′(x,y)]=f[Ii(x,y)∑j=1NIj(x,y)]
f[I’(x,y)]=βlog[αI’(x,y)]=β{log[αI’(x,y)]−log[∑I(x,y)]}
如果是灰度图像,只需要计算一次即可,如果是彩色图像,如RGB三通道,则每个通道均需要如上进行计算
G表示增益Gain(一般取值:5)
b表示偏差Offset(一般取值:25)
I (x, y)表示某个通道的图像
C表示某个通道的彩色回复因子,用来调节3个通道颜色的比例;
f(·)表示颜色空间的映射函数;
β是增益常数(一般取值:46);
α是受控制的非线性强度(一般取值:125)
MSRCR算法利用彩色恢复因子C,调节原始图像中3个颜色通道之间的比例关系,从而把相对较暗区域的信息凸显出来,达到了消除图像色彩失真的缺陷。 处理后的图像局部对比度提高,亮度与真实场景相似,在人们视觉感知下,图像显得更加逼真;但是MSRCR算法处理图像后,像素值一般会出现负值。所以从对数域r(x, y)转换为实数域R(x, y)后,需要通过改变增益Gain,偏差Offset对图像进行修正。
另外:介绍下什么是颜色的简单白平衡(simplest Color Balance)
白平衡的意思就是:是图片中最亮的部分为白色,最暗的部分为黑色。其余部分进行拉伸
简单的说就是:在RGB三通道上分别统计每个像素值的出现次数。将1%的最大值和最小值设置为255和0。其余值映射到(0,255),这样使得每个值通道的值在RGB中分布较均匀。达到颜色平衡的结果
代码
def SSR(src_img, sigma):
L_blur = cv2.GaussianBlur(src_img, (0, 0), sigma) # 高斯函数
dst_Img = np.log10(src_img + 0.01) # 归一化取log
dst_Lblur = np.log10(L_blur + 0.01) # 归一化取log
return dst_Img - dst_Lblur # 减 log(R(x,y))=log(S(x,y))-log(L(x,y))
def MSR(img, sigma_list):
retinex = np.zeros_like(img * 1.0)
for sigma in sigma_list:
retinex += SSR(img, sigma)
retinex /= len(sigma_list)
return retinex
# 即求色彩恢复因子C或f
def colorRestoration(img, alpha, beta):
img_sum = np.sum(img, axis=2, keepdims=True)
return beta * (np.log10(alpha * (img+0.01)) - np.log10(img_sum+0.01))
# 简单白平衡,low_clip:0.01,high_clip:0.99
# 将最小的前0.01像素值映射到0,最大的后0.01映射到255
# low_val:前0.01像素值的分界点,high_val:后0.01像素值的分界点
# 其他像素值放缩到[low_val,high_val]之间
def simplestColorBalance(img, low_clip, high_clip):
total = img.shape[0] * img.shape[1]
for i in range(img.shape[2]):
unique, counts = np.unique(img[:, :, i], return_counts=True)
current = 0
for u, c in zip(unique, counts):
if float(current) / total < low_clip:
low_val = u
if float(current) / total < high_clip:
high_val = u
current += c
img[:, :, i] = np.maximum(np.minimum(img[:, :, i], high_val), low_val)
return img
def MSRCR(img, sigma_list, G, b, alpha, beta, low_clip, high_clip):
C = colorRestoration(img, alpha, beta)
RMSRCR = C * MSR(img, sigma_list)
img_msrcr = G * RMSRCR + b
for i in range(img_msrcr.shape[2]):
img_msrcr[:, :, i] = (img_msrcr[:, :, i] - np.min(img_msrcr[:, :, i])) / (
np.max(img_msrcr[:, :, i]) - np.min(img_msrcr[:, :, i])) * 255
img_msrcr = np.uint8(np.minimum(np.maximum(img_msrcr, 0), 255))
img_msrcr = simplestColorBalance(img_msrcr, low_clip, high_clip)
return img_msrcr
效果
原图:
SSR:
MSR:
MSRCR:
参考: https://blog.csdn.net/weixin_43334693/article/details/135168674
https://www.cnblogs.com/wangyong/p/8665434.html#!comments