UIQM论文 (不知道怎么插入pdf,给个名字在这0.0)
原理转自:https://blog.csdn.net/weixin_47169667/article/details/108156530
UICM
采用Lab颜色空间(Lab基于人对颜色的感受),其三要素:亮度(L),表示色彩的两个参量a,b。a表示洋红色到绿色,b表示黄色到蓝色。
计算过程:
1、RG即a,YB即b
RG=R-G;
YB=(R+G)/-B
2、图片像素数K=M*N,对于所有的像素按从小到大排序X1<=X2……<=XK。(此处计算仅以RG为例,YB同理)
3、令TαL=[αLK] (向上取整)TαR=[αRK] (向下取整)【取一部分的像素】(TαL表示去除掉部分数据)
4、计算平均值:
5、计算方差:
6、分析:μ越接近0则平衡越好,σ2越大色彩对比度越好
7、(系数由线性回归得到)
简单python代码实现
import cv2
import math
import numpy as np
img = cv2.imread('MSRCR_retinex.tif') #读取图像
b, r, g = cv2.split(img)
RG = r - g
YB = (r + g)/2 - b
m, n, o = np.shape(img) #img为三维 rbg为二维 o并未用到
K = m*n
alpha_L = 0.1
alpha_R = 0.1 #参数α 可调
T_alpha_L = math.ceil(alpha_L*K) #向上取整 #表示去除区间
T_alpha_R = math.floor(alpha_R*K) #向下取整
RG_list = RG.flatten() #二维数组转一维(方便计算)
RG_list = sorted(RG_list) #排序
sum_RG = 0 #计算平均值
for i in range(T_alpha_L+1, K-T_alpha_R ):
sum_RG = sum_RG + RG_list[i]
U_RG = sum_RG/(K - T_alpha_R - T_alpha_L)
squ_RG = 0 #计算方差
for i in range(K):
squ_RG = squ_RG + np.square(RG_list[i] - U_RG)
sigma2_RG = squ_RG/K
#YB和RG计算一样
YB_list = YB.flatten()
YB_list = sorted(YB_list)
sum_YB = 0
for i in range(T_alpha_L+1, K-T_alpha_R ):
sum_YB = sum_YB + YB_list[i]
U_YB = sum_YB/(K - T_alpha_R - T_alpha_L)
squ_YB = 0
for i in range(K):
squ_YB = squ_YB + np.square(YB_list[i] - U_YB)
sigma2_YB = squ_YB/K
uicm = -0.0268*np.sqrt(np.square(U_RG) + np.square(U_YB)) + 0.1586*np.sqrt(sigma2_RG + sigma2_YB)
print(uicm)