我正在做一个项目,我需要计算各种纸条上的颜色渐变。我使用 RGB 颜色检测器应用程序(可在 Google PlayStore 上获得)来获取 RGB 值。现在要绘制它,我简单地平均 RGB 值:(R+G+B)/3 并获得单个值作为强度。可以使用它还是我应该使用其他方法来获得单个强度值。
我得到的颜色渐变是从深黄色到白色。随着所用化学品浓度的增加,纸张会发生变色。[化学不能透露,抱歉]
我正在做一个项目,我需要计算各种纸条上的颜色渐变。我使用 RGB 颜色检测器应用程序(可在 Google PlayStore 上获得)来获取 RGB 值。现在要绘制它,我简单地平均 RGB 值:(R+G+B)/3 并获得单个值作为强度。可以使用它还是我应该使用其他方法来获得单个强度值。
我得到的颜色渐变是从深黄色到白色。随着所用化学品浓度的增加,纸张会发生变色。[化学不能透露,抱歉]
(R+G+B)/3 几乎在每次使用时都是不正确的数学。它恰好被用作设置颜色的“HSI”控件的一部分,但该控件与感知均匀性相去甚远。
正确的数学是相当直接的——但是由于您没有明确定义您需要或正在尝试做什么,因此很难猜测最适合您的方法。
我会做一些假设。听起来您正在扫描某种类型的石蕊试纸,并试图将数据转化为某种可用的形式,以了解它们在特定化学浓度下的变暗程度。
听起来您正在寻找一些绝对值,而不是与条带 A 和条带 B 的差异。色差数学与一些更绝对的测量值有些不同。
但是,对于研究,条带和受保护的主参考样品之间的色差可能是更好的做法,尤其是当您没有在校准的观察/测试环境中使用真正的校准分光光度计时。
数据采集的质量与数据可用性有很大关系,采集室照明和相机或仪表的质量是其中很大一部分。
房间颜色 理想情况下,这意味着房间漆成平面或哑光中性灰色,LRV 约为 20,例如这个 Glidden:
一致的照明 然后您希望从房间或至少测量区域阻挡杂散光。没有自然光!!理想情况下,您将拥有经过校准的光源,但至少具有与高 CRI 一致的光源。
一致的样品照明 光线需要与样品表面保持相同的距离,并且必须控制环境光条件,以便样品始终接收相同的光线。
一致的测量和设备 如果您使用手机拍摄图像,您可能会受到自动曝光的支配。如果您使用的 Google 应用程序接管并提供一致的曝光率,这很重要。否则,您最好购买尼康 dSLR,并在手动曝光模式下使用它(总是!)并始终设置为相同的曝光。
同时采集样本和参考 ,换句话说,参考样本最好位于平均样本的 LRV 附近。18% 的灰卡可能对此非常有用,如果没有其他原因,它们价格便宜且易于更换且具有良好的一致性。
如果涉及颜色,那么您需要一个 XRite colorChecker 图表。
当您拍摄样品 时 如果您正在拍照,那么您希望图像帧中的参考样品(即灰卡或颜色检查图表)每次都处于相同的位置和相同的照明。
如果您是通过摄影进行此操作,那么您希望尽可能保持一致、相同的曝光,并在相机中使用sRGB 配置文件(不要使用 Adobe98,因为它的色域更大,因此 delta E 误差较高,因此精度较低.)
将图像带入图像应用程序并采样颜色。再次使用 sRGB 配置文件,将颜色选择器设置为对大约 10 像素 X 10 像素(总共 100 像素)的区域进行平均采样。
sRGB 颜色数据是伽马编码的——您需要它在线性亮度 (Y) 或可能像 CIELAB 这样的感知空间中。
如果您只想对每个样本的亮度进行绝对测量,则可以将 sRGB 数据转换为亮度(CIEXYZ 中的 Y),然后使用该数字进行比较。但是请注意,亮度相对于光是线性的,因此在感知上并不均匀。
对于感知均匀性,您需要 CIELAB,而在 CIELAB 中,您可以准确计算两种颜色之间的差异。
将十六进制或整数颜色值转换为浮点数,0 表示黑色,1.0 表示白色。
线性化 sRGB 颜色数据(即去除伽玛曲线)
将光谱加权系数应用于每个通道,然后将它们相加得到 Y(亮度)。
我在这篇文章中详细描述了这三个步骤。
如果要使用高质量的色差方程,则需要从 CIEXYZ 转换为 CIELAB。
进入 LAB 空间后,使用 CIEDE2000 方程计算色差。
第 4 步和第 5 步的数学运算可在此处作为代码片段获得。