方法一:
计算两个像素点的rgb的两个三维向量的夹角:
l1 = Math.sqrt(r1 * r1 + g1 * g1 + b1 * b1);
l2 = Math.sqrt(r2 * r2 + g2 * g2 + b2 * b2);
cos(a) = (r1 * r2 + g1 * g2 + b1 * b2) / (l1 * l2);
方法二:
转HSI,计算两个三维向量距离:
Math.sqrt((r1 - r2) * (r1 - r2) + (g1 - g2) * (g1 - g2) + (b1 - b2) * (b1 - b2))
即颜色空间的距离。距离越大,差距就越大
方法三:
LAB颜色空间,两个颜色之见的色差:ΔE=( ΔL^2 + ΔA^2 + ΔB^2 ) ^ (1/2)
ΔE 表示色差,ΔL/ΔA/Δb分别表示两个颜色之间在不同分量的差值。为了简化计算在RGB空间上通过公式计算出加权的欧式距离。
def ColourDistance(rgb_1, rgb_2):
R_1,G_1,B_1 = rgb_1
R_2,G_2,B_2 = rgb_2
rmean = (R_1 +R_2 ) / 2
R = R_1 - R_2
G = G_1 -G_2
B = B_1 - B_2
return math.sqrt((2+rmean/256)*(R**2)+4*(G**2)+(2+(255-rmean)/256)*(B**2))