Skip to content

Latest commit

 

History

History
55 lines (51 loc) · 3.07 KB

2014-12-08-zh-rabbit-find-color.md

File metadata and controls

55 lines (51 loc) · 3.07 KB
layout title
post
Rabbit 颜色差异计算实现细节

Rabbit 主旨在模拟“人的操作”,人眼看是个非常主要的操作,用电脑很难模拟。 Rabbit 提供两个基本的 API 1、指定范围找色 2、指定范围找图 这里是找色相关的原理。

第一个版本

找色的原理,最基本的就是给你3个色,ABC,得知道AB差异大,还是AC差异大。 普遍的做法当然是做 RGB 比较 = abs(A.r - B.r) + abs(A.g - B.g) + abs(A.b - B.b) 下面为了方便,都把 A.r - B.r 记作 ABr,abs(A.r - B.r) 记作 [ABr],上述公式就是。 = [ABr] + [ABg] + [ABb] 我发现一个问题,如: ABr = 10, ABg = 20, ABb = 20; ABr = 30, ABg = 10, ABb = 10; 两者看上去,显然第二排的波动更明显,我想当然的认为这个地方应该使用方差之类,必须得体现出均匀差异和锯齿差异。 但实际测验发现,方差的话,效果并不是明显,有些采样数值有点夸大。 所以我的第一个版本的算法是这样 = pow([ABr],1.5) + pow([ABg],1.5) + pow([ABb],1.5) 实测能用。

第二个版本

上述算法在我采样范围内很好用,但是。。。总觉得不是个事。。。 无凭无据,干嘛 pow(1.5) 于是我仔细分析这个问题,并且增加了采样数量,发现 pow(1.5),实际效果跟不做 pow 差别有限。 或者说,另外一个因素影响更大。 ABr = 30, ABg = 30, ABb = 30; ABr = 30, ABg = -30, ABb = 30; 实际上第一种情况看出来的是,整体的色偏。而第二种情况则是另一种颜色。 所以我的第一个版本的算法是这样 = [ABr] + [ABg] + [ABb] - 色偏补偿 色偏补偿为 abs((ABr + ABg + ABb)/3)*??? ??? 为色偏容错参考值,为 0-3 色偏容错参考值为1:也就是第一个情况色偏补偿是 30,整体数值为 60。第二个色偏补偿是 10,整体数值是 80。 色偏容错参考值为2:也就是第一个情况色偏补偿是 60,整体数值为 30。第二个色偏补偿是 20,整体数值是 70。 色偏容错参考值为3:也就是第一个情况色偏补偿是 90,整体数值为 0。 第二个色偏补偿是 30,整体数值是 60。 色偏容错参考值为1,适合通常情况,实测很好用。 如果能容忍偏色,完全可以设定为3。

实例

假如颜色为 (50,100,150) 那么 左:(50,100,150) + (60,60,60) 和 右:(50,100,150) + (30,60,90) [img]http://ww4.sinaimg.cn/large/73740544jw1en2can12llj205k05kglk.jpg[/img] 哪个差异大? 数据角度出发,第一个情况出现了灰度变化,而第二个角度,颜色变鲜艳,变亮了,接近于类似于亮度对比度变了。 我姑且可以认为他们差异是一样的,因为没有特殊需求。但我私以为从实际眼睛看的角度出发,能看出来第一个还是那种颜色。 第一个默认获得了一定的色偏补偿,所以最终是第一个颜色更接近。我在第一个版本里使用了 pow(1.5),其实也就是处理这种情况。

这东西,非要说为什么,我也不知道,我也不是学这种玩意儿的,带到样例里实验效果好,我就用了。