通常在可控光源环境(灯箱/实验室/实景)里拍摄色卡可用于测试相机如下图像质量指标:
(1)手机/相机正对色卡拍摄,并保证色卡占预览面积的70%左右,光源包括D65、TL84、CWF、A光等;
(2)导出图片到Imatest Master工具中,点击"Colorcheck",
(3)依次选择①→⑦,
上图中,
①——选择被拍摄色卡的基准参考,默认X-rite default,具体看所购买的色卡注明。
②——色彩空间,根据被测相机/手机的色彩空间而定,近几年上市的主流旗舰手机如iphone 13系列均采用的P3色域。
③——噪声fig展示,可按需选择需要展示的噪声指标如SNR等。
④——偏色误差展示,可按需选择CIE1976, CIE1994, CIE2000等标准下的△C, △E。CIE1976, CIE1994, CIE2000均为CIE(国际照明委员会)定义的色彩空间,他们计算偏色误差的标准不同,CIE1976是直接计算的理想落点与实际落点的欧氏距离,致使△E1976数值偏大,但在高饱和场景时△E的计算结果就不会太准确;而CIE1994和CIE2000在计算时就会考虑到人眼在高饱和色彩时减弱敏感度的真实感受,相对而言CIE2000更精准。
⑤——容许椭圆展示,可按需在a*b* -color error图上选择对应容许椭圆进行展示(结果如Fig 3.3(a)所示)。
关于容许椭圆,需要知道SDCM(色彩匹配标准差)反映的是色彩空间中两个颜色点之间的色差,麦克亚当椭圆(MacAdam ellipses)定义了色彩空间中两个点之间的色差标准(一般可称为容许椭圆),以24色卡为例,当色块实际落点位于理想落点所在的容许椭圆外,表明实际落点超出了容许范围,客观上意味着当前色块色差偏离大;反之亦然。类似地Delta-C 94 ellipses,Delta-C 2000 ellipses都是类似解读。
实际上,各手机/相机厂商/第三方检测机构(Imatest/IE/DXO等)都可以针对各色块定义自己的容许椭圆,椭圆中心以色卡各色块理想落点为中心,椭圆长短轴则根据厂商需求去自定义,理论上椭圆半径越小说明对色差的容许越苛刻,在有效的管控下出来的色彩就会越接近想要的理想落点。
⑥——ROI选取(针对下一次运行时而言)。官方推荐是选2或3或4,三者的区别就是,2是一个半自动的粗略ROI提取,会展示各个色块的提取框如下;3是全自动ROI检测,但会提供展示及确认的步骤;4就是全自动提取并跳过ROI确认。实测2,3,4最后都会需要确认,个人感觉2或3还是会稳妥些。如下Fig 2.5为colorchecker在提取到色块后的confirm过程。
⑦——按需plot相应的图表。
色彩精度反映的是手机/相机对色彩的还原能力,用Imatest工具可以测得色卡各色块的实际落点,某一色块实际落点与理想落点之间的差异大小即代表了该色块的色精度水平。通常用△E(色差)或△C(彩度差)来衡量,以Lab色彩空间为例,△E的值取决于L,a,b三个通道共同作用;△C则主要跟a,b两个通道的值相关(即不考虑亮度的影响故而也称彩差)。如Fig 3.1所示,通常测色卡前18个色块的色彩精度作参考。
白平衡误差反映的手机/相机对白色被摄物的颜色还原能力,如Fig 3.1所示,通常测色卡最后一行19-24色块的WB Error作参考。
即色彩的鲜艳程度,包括各色块的Chroma值及1-18色块的平均饱和度。
如下主要截取色彩相关指标进行解读。
上图中, meas代表measured,即实测结果;ideal即理想结果。
①——表示各色块测得的平均RGB值(归一化后),各色块被统计的像素源于Fig 2.5中各个青色方框所框选到的像素:
[R, G, B] = np.divide(RGB, 255.0)
②——表示转换到Lab空间下的色彩表示(sRGB→XYZ→Lab),公式如下(代码实现见附录[【A1】色彩空间转换](#【A1】色彩空间转换(RGB→XYZ, XYZ→Lab, XYZ→xyY))):
③——表示转换到xyY空间下的色彩表示(sRGB→XYZ→xyY),XYZ→xyY公式如下:
④——各色块饱和度Chroma计算公式如下:
⑤——为色卡出厂时各色块的参考(理想)RGB值。
Delta-E*ab和Delta-C默认是采用的CIE-1976标准,公式如下(代码实现见附录【A2】):
Delta-E*94和Delta-C94采用的是CIE-1994标准,公式如下(代码实现见附录[【A2】Delta-E&Delta-C](#【A2】Delta-E, Delta-C(CIE1976, CIE1994, CIE2000, CMC))):
Delta-E*00和Delta-C00采用的是CIE-2000标准,公式如下:
WB ERR S列所代表的就是HSV色彩模型下19-24色块对应的S值作白平衡误差,计算公式如下:
S = M a x ( R , G , B ) − M i n ( R , G , B ) M a x ( R , G , B ) S = frac{Max(R,G,B)-Min(R,G,B)}{Max(R,G,B)} S=Max(R,G,B)Max(R,G,B)−Min(R,G,B)
Mean camera chroma%单元格对应的就是平均饱和度,计算公式如下(代码实现见附录【A3】):
M e a n C h r o m a = 100 % × m e a n ( a i _ m e a s 2 + b i _ m e a s 2 ) m e a n ( a i _ m e a s 2 + b i _ m e a s 2 ) Mean Chroma =100% times frac{mean(sqrt{a^2_{i_meas}+b^2_{i_meas}})}{mean(sqrt{a^2_{i_meas}+b^2_{i_meas}})} Mean Chroma=100%×mean(ai_meas2+bi_meas2 )mean(ai_meas2+bi_meas2 )
上图说明了设备无关的CIELAB色彩空间的a*b*平面上的颜色误差,其中a*是横轴(绿-红),b*是纵轴(蓝-黄)。
Fig 3.3(b)图中上半部分,每个色块内部都嵌套了2个小矩形块,如下图
其含义如下:
图Fig 3.3(d)是Fig 3.3(b)图中的下半部分,反映了当前色卡图像的白平衡误差,该误差以4种方式量化如下,
在图像质量管控中,客观国标测试是检验当前产品是否达到国家标准合格上市的重要一环。国内终端厂商主要在《YD/T1607-2016 移动终端图像及视频传输特性技术要求和测试方法》的基础上制定自家的客观质量标准,并基于此进行客观图像质量管控。
在该国标中关于色精度、饱和度、白平衡的标准如下:
测试项 | 测试图卡 | 标准 | 测试条件 |
---|---|---|---|
色彩还原误差(色精度) | ColorCheck | △C<=35, △E<=35 | D65,TL84,A光 |
色彩饱和度 | ColorCheck | D65、TL84光:95%<饱和度<130%; A光:90%<饱和度<125% | D65、TL84、A光源 700~1200Lux 图卡亮度均匀性 10%以内 |
白平衡误差 | ColorCheck | D65、TL84:≤0.15 A:≤0.4 | D65、TL84、A光源 700~1200Lux 图卡亮度均匀性 10%以内 |
imatest有提供批量图像处理分析的功能(Pass/Fail Monitor如上图),但操作和解读个人感觉较繁琐。本人基于前述理论自行开发了一套批量色卡识别并输出判断结果报表的解决方案,色卡分析全流程演示如下:
def RGB2XYZ(self, RGB):var_R = RGB[0] / 255var_G = RGB[1] / 255var_B = RGB[2] / 255var_R = ((var_R + 0.055) / 1.055)**2.4 if var_R > 0.04045 else var_R / 12.92var_G = ((var_G + 0.055) / 1.055)**2.4 if var_G > 0.04045 else var_G / 12.92var_B = ((var_B + 0.055) / 1.055)**2.4 if var_B > 0.04045 else var_B / 12.92var_R = var_R * 100var_G = var_G * 100var_B = var_B * 100X = var_R * 0.4124 + var_G * 0.3576 + var_B * 0.1805Y = var_R * 0.2126 + var_G * 0.7152 + var_B * 0.0722Z = var_R * 0.0193 + var_G * 0.1192 + var_B * 0.9505return [X, Y, Z]def XYZ2Lab(self, XYZ, ref_XYZ=[0.9504, 1.0, 1.0889]):[X,Y,Z] = XYZ[ref_X, ref_Y, ref_Z] = ref_XYZvar_X = X/ref_Xvar_Y = Y/ref_Yvar_Z = Z/ref_Zvar_X = var_X**(1./3) if var_X > 0.008856 else (7.787 * var_X) + (16/116)var_Y = var_Y**(1./3) if var_Y > 0.008856 else (7.787 * var_Y) + (16/116)var_Z = var_Z**(1./3) if var_Z > 0.008856 else (7.787 * var_Z) + (16/116)L = (116 * var_Y) - 16a = 500 * (var_X - var_Y)b = 200 * (var_Y - var_Z)return [L, a, b] def XYZ2xyY(self, XYZ):[X,Y,Z] = XYZY = Yx = X/(X+Y+Z)y = Y/(X+Y+Z)return [x,y,Y]
def delta_C_and_E(self, lab, ideal_lab, method='CIE 1976'):delta_l, delta_a, delta_b = lab[0] - ideal_lab[0], lab[1] - ideal_lab[1], lab[2] - ideal_lab[2]delta_E = np.sqrt(np.square(delta_l) + np.square(delta_a) + np.square(delta_b))delta_C = np.sqrt(np.square(delta_a) + np.square(delta_b))return delta_C, delta_Edef delta_E_CIE1994(Lab_1, Lab_2, textiles=False):L_1, a_1, b_1 = tsplit(to_domain_100(Lab_1))L_2, a_2, b_2 = tsplit(to_domain_100(Lab_2))k_1 = 0.048 if textiles else 0.045k_2 = 0.014 if textiles else 0.015k_L = 2 if textiles else 1k_C = 1k_H = 1C_1 = np.hypot(a_1, b_1)C_2 = np.hypot(a_2, b_2)s_L = 1s_C = 1 + k_1 * C_1s_H = 1 + k_2 * C_1delta_L = L_1 - L_2delta_C = C_1 - C_2delta_A = a_1 - a_2delta_B = b_1 - b_2delta_H = np.sqrt(delta_A ** 2 + delta_B ** 2 - delta_C ** 2)L = (delta_L / (k_L * s_L)) ** 2C = (delta_C / (k_C * s_C)) ** 2H = (delta_H / (k_H * s_H)) ** 2d_E = np.sqrt(L + C + H)return d_E
...
Delta-E(CIE2000, CMC)等在colour-science包里有详尽的代码实现。
def mean_camera_chroma(self, lab_list, ideal_lab_list):lab_list, ideal_lab_list = np.array(lab_list), np.array(ideal_lab_list)chroma_list = np.sqrt(np.square(lab_list[:, 1]) + np.square(lab_list[:, 2]))ideal_chroma_list = np.sqrt(np.square(ideal_lab_list[:, 1]) + np.square(ideal_lab_list[:, 2]))mean_chroma = np.mean(chroma_list) / np.mean(ideal_chroma_list) * 100# mean_chroma = np.mean(chroma_list[:17]) / np.mean(ideal_chroma_list[:17]) * 100return np.around(chroma_list, 4), np.round(mean_chroma, 4)def WB_error(self, RGB_list):grey_list = np.array(RGB_list)[18:, ]maximum, minimum = np.max(grey_list, axis=1), np.min(grey_list, axis=1)WB_error_list = np.divide((maximum - minimum), maximum)return np.around(WB_error_list, 4)
本文发布于:2024-02-02 08:45:46,感谢您对本站的认可!
本文链接:https://www.4u4v.net/it/170683474542661.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
留言与评论(共有 0 条评论) |