我志愿参与的一个社区项目,旨在创建收藏集换式卡片的高分辨率图像。这些卡片由其他贡献者使用具有不同品牌、型号和颜色偏差的扫描仪扫描。
我需要一种算法,将一台扫描仪的一叠卡片与另一台扫描仪的同一叠卡片(颜色目标)进行比较,以创建一个颜色配置文件,使第一台扫描仪的颜色偏差正常化。配置文件应包含可手动记录的 Photoshop 调整设置。
即.
Hue/Sat Adjustment | Red , Hue +5 , Sat -10
Levels Adjustment | Black Point , 10
我可以使用 PHP 或 Javascript。
在我的第一次尝试中,我将扫描中的每个像素都转换为 HSB,并将结果分类为红色、黄色、绿色、青色、蓝色和洋红色的数组。然后我对颜色组进行平均并计算扫描之间的差异。我使用不良扫描上的差异色相和饱和度量创建了 Photoshop 色相/饱和度调整。结果不够准确。
我应该使用什么具体过程来比较扫描以创建这些颜色配置文件?
谢谢!
最佳答案
1.我不认为HSV是方式
- 我知道的所有常用扫描仪/照相机都通过带通滤波器扫描 R、G、B
- 因此您必须管理 R、G、B(很可能是分开的)而不是整个颜色空间
- 改用 RGB 空间!!!
2.归一化
- 你必须获得每个色带(R,G,B)的传输函数
- 并从中获得多项式(饱和度、亮度、 Gamma 校正)
通常对每个波段来说这就足够了:
R(ir) = R0 + R1*ir + R2*ir*ir G(ig) = G0 + G1*ig + G2*ig*ig B(ib) = B0 + B1*ib + B2*ib*ib
R,G,B 为非标准化图像颜色
- ir,ig,ib为归一化图像中对应的颜色
- 获取常量R(0,1,2),G(0,1,2),B(0,1,2)
- 扫描一些测试图像(比如卡片的边框......)
- 在那里找到 R、G、B 渐变(在引用扫描仪上是颜色 ir、ig、ib)
- 并在标准化扫描仪上从相同位置取色(R(ir),G(ig),B(ib))
- 现在只需为每个扫描仪创建转换表 R -> ir , G -> ig , B -> ib
- 或者创建反向传输函数
- 并将所有图像转换为标准化强度
如果所有卡片的测试图片不一样
- 卡片边框可能因卡片而异
- 不仅在颜色上而且在位置上
- 然后您必须通过在测试图像中搜索正确的区域来进行调整...
关于image - 编写颜色配置文件以跨多个扫描仪标准化颜色,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22949642/