目前,我使用灰度来比较像素,我认为这并不是很理想,因为它丢失了大量信息。执行此操作的常见算法有哪些?例如,欧几里得距离通常被认为是一个好的度量吗?我确信有很多,我想知道一种方法来为我处理的图像类型(铁路轨道)选择最好的一个。
我正在考虑在两张图像上采样一千个点,一张有火车,一张没有。然后我可以计算它们之间的差异(使用任何通用指标),然后为初学者绘制分布图。理想情况下,一旦我有了这个分布,我就可以执行某种统计测试来确定哪种算法表现最好。
使用欧氏距离的主要优点之一是计算简单。然而,RGB 空间并不是比较颜色差异的良好颜色空间。它的灰度投影更不适应。
基于这些前提,历史上已经提出了几种颜色空间,以便用欧氏距离来衡量人类感知的颜色差异。
然而,人类感知的复杂性与使用简单公式来映射相对于不同颜色空间的坐标的尝试相冲突。这导致了许多解决方案的激增,这些解决方案平衡了近似人类感知的目标与公式的简单性。
CIELAB 是用于评估色差的最广泛使用的色彩空间之一。根据维基百科
CIELAB 旨在作为一个感知均匀的空间,其中给定的数值变化对应于类似的感知颜色变化。
仅使用欧几里德距离的原始定义可以追溯到 1976 年。另一个维基百科页面解释说,历史上已经发布了各种改进,以纠正后来发现的不均匀性。
总而言之,为了评估两种颜色之间人类感知的差异,我建议您按照以下方式进行:
CIEDE2000是你的朋友:
from skimage.color import rgb2lab, deltaE_ciede2000
deltaE_ciede2000( rgb2lab( np.array([120, 105, 64])/255 ),
rgb2lab( np.array([ 68, 71, 90])/255 ) )
30.00295900989531
请注意
rgb2lab
期望值来自 [0, 1],而不是 [0, 255]。