在双色标尺上获取颜色的定量值
Get quantitative value for color on two-color scale
我有一个 运行 化学测试,它根据样品中给定化学物质的含量产生颜色。如果没有化学物质,它是绿色的,如果有饱和量的化学物质,它是黄色的。我用我的相机拍了几个样品的照片,还制作了标准曲线,我在测试中添加了已知量的化学物质,然后拍下结果照片,将我的样品结果的颜色与这些标准进行比较。
我想做的是开发一种算法来创建双色标尺。一种颜色是没有任何化学品(绿色)的测试,另一种颜色是饱和化学品(黄色)的测试。然后当我输入样本颜色时,算法会给我一个 % Yellow 输出。
我见过有人试图在颜色之间创建渐变,但从未读过有人试图将颜色放置到该渐变上。
我已经能够获取所有样本的 RGB 颜色值,因此 actaul 算法完全独立于任何编程语言(尽管我熟悉 C、C#、VBA 和 python).
有人可以给我指点资源来做我想做的事吗?
谢谢,
迈克尔
创建table/functionRGB = f(concentration)
这与你想做的相反。这个想法是将一些连续的标量变量 (concentration
) 转换为 RGB 颜色(具有一些物理意义)。这里有一些我的例子:
- RGB values of visible spectrum
- Star B-V color index to apparent RGB color
相机校准
正如 Mark Ransom 所建议的那样,此步骤是必要的。我会尝试在视图区域放置一些标记来帮助解决这个问题。例如:
现在选择角标记中的颜色,计算它们与标记真实颜色的匹配程度,然后对整个图像进行双线性插值。如果您需要双三次(更好的结果),则使用 16 个标记。这个过程与此非常相似:
您需要试验使用哪些标记(仅黑与白,或仅绿与黄,或黑与红与绿与蓝或组合...),以便您的结果在不同的光照条件下保持相同。此外,您还必须进行依赖性拍摄,您将再次使用标记将 #1 作为基础,因为如果没有它们,您可能会在结果中出现错误...
只有当您的相机经过预校准时,才能避免校准步骤,指示器始终是相同的颜色,material,粗糙度,反光度,......并且图像是在均匀恒定的照明条件下拍摄的(在某个盒子里,相同的灯泡,相同的曝光,相同的瞳孔......)没有任何阴影,斑点等......这样的设置非常昂贵。低成本手持设备约为 10000 美元(通常用于颜色 detection/testing 在制造中校准机器)。
转换concentration = f(RGB)
如果#1中的依赖是某种简单的函数,那么你可以对其进行代数求逆并直接使用。如果您按照链接的 QA 构建 RGB 图,您将看到要使用哪个通道作为输入(有时您只需要一个).
如果依赖太复杂或者不是函数那么你可以使用:
- approximation search
- LUT(查找table)找到2个最接近的匹配项并插值
如果依赖严格非递增或非递减你也可以使用二进制搜索为此。
我有一个 运行 化学测试,它根据样品中给定化学物质的含量产生颜色。如果没有化学物质,它是绿色的,如果有饱和量的化学物质,它是黄色的。我用我的相机拍了几个样品的照片,还制作了标准曲线,我在测试中添加了已知量的化学物质,然后拍下结果照片,将我的样品结果的颜色与这些标准进行比较。
我想做的是开发一种算法来创建双色标尺。一种颜色是没有任何化学品(绿色)的测试,另一种颜色是饱和化学品(黄色)的测试。然后当我输入样本颜色时,算法会给我一个 % Yellow 输出。
我见过有人试图在颜色之间创建渐变,但从未读过有人试图将颜色放置到该渐变上。
我已经能够获取所有样本的 RGB 颜色值,因此 actaul 算法完全独立于任何编程语言(尽管我熟悉 C、C#、VBA 和 python).
有人可以给我指点资源来做我想做的事吗?
谢谢,
迈克尔
创建table/function
RGB = f(concentration)
这与你想做的相反。这个想法是将一些连续的标量变量 (
concentration
) 转换为 RGB 颜色(具有一些物理意义)。这里有一些我的例子:- RGB values of visible spectrum
- Star B-V color index to apparent RGB color
相机校准
正如 Mark Ransom 所建议的那样,此步骤是必要的。我会尝试在视图区域放置一些标记来帮助解决这个问题。例如:
现在选择角标记中的颜色,计算它们与标记真实颜色的匹配程度,然后对整个图像进行双线性插值。如果您需要双三次(更好的结果),则使用 16 个标记。这个过程与此非常相似:
您需要试验使用哪些标记(仅黑与白,或仅绿与黄,或黑与红与绿与蓝或组合...),以便您的结果在不同的光照条件下保持相同。此外,您还必须进行依赖性拍摄,您将再次使用标记将 #1 作为基础,因为如果没有它们,您可能会在结果中出现错误...
只有当您的相机经过预校准时,才能避免校准步骤,指示器始终是相同的颜色,material,粗糙度,反光度,......并且图像是在均匀恒定的照明条件下拍摄的(在某个盒子里,相同的灯泡,相同的曝光,相同的瞳孔......)没有任何阴影,斑点等......这样的设置非常昂贵。低成本手持设备约为 10000 美元(通常用于颜色 detection/testing 在制造中校准机器)。
转换
concentration = f(RGB)
如果#1中的依赖是某种简单的函数,那么你可以对其进行代数求逆并直接使用。如果您按照链接的 QA 构建 RGB 图,您将看到要使用哪个通道作为输入(有时您只需要一个).
如果依赖太复杂或者不是函数那么你可以使用:
- approximation search
- LUT(查找table)找到2个最接近的匹配项并插值
如果依赖严格非递增或非递减你也可以使用二进制搜索为此。