很久之前一直被两个像素点如何正确比对色彩相似度困扰,百度的方案都不太理想,直到自己动手把算法专研出来,实测效果还是非常理想的。
int 最终差异值 = Math.Max(亮度差异, Math.Max(色调差异值, 色彩浓度差异)); //这句就是核心的思想,取三者最大值就OK了
根据算法,测试得到最终差异值【0-21】一般可以视为两个颜色相似,【21-42】有丁点相似,【42-64】基本不相似色。接近或大于85则是绝对的不相似色彩。例如(255,128.0)和(255,0.0)最终差异=42.5,纯黄色和纯红色最终差异=85,红色和青色最终差异=255(反色都是255)
相似的比较的方案一:测试黑色和纯红色返回255,纯红色和纯青色返回512,值越小越相似,经跟测试看起来也不错。
private int 两点相似度(rgbClassRef a, rgbClassRef b) //传入两个像素点对象
{//取值范围【0-512】
int 亮度差异 = Math.Abs(a.X - b.X);//取得亮度差异
int 色彩差异 = 0;
if (a.SPname == b.SPname) 色彩差异 += Math.Abs(a.SP - b.SP) ; else 色彩差异 += (int)(a.SP + b.SP); //红绿蓝之间,同色分量相减,异色分量相加
if (a.ZHname == b.ZHname) 色彩差异 += Math.Abs(a.ZH - b.ZH) ; else 色彩差异 +