找到相似颜色的图像

Sha*_*han 7 algorithm colors image-processing python-imaging-library

根据@ SO的建议,我已经编制了一组库存图像的平均颜色.
r,g,b = image.convert("RGB").resize((1,1),Image.ANTIALIAS).getpixel((0,0))

现在,我想向用户呈现一个色轮,并对我的目录运行搜索,以查找与所选颜色最匹配的图像.

我已经阅读了这里发布的几个问题,建议"找到两种颜色之间的距离",并参考Flickr Hacks一书.

Flickr Hack距离算法似乎基本上是:


diffr = checkImage.r - search_r
diffg = checkImage.g - search_g
diffb = checkImage.b - search_b
distance =(diffr*diffr + diffg*diffg + diffb*diffb)
如果距离<threshold则匹配.


这种方法需要我计算搜索颜色和每个图像的颜色指纹之间的距离.我想知道是否有办法以某种方式根据所选颜色(中心点)和预定阈值(或搜索半径)指定"搜索区域".然后构造一个类似SQL的查询来返回属于该区域的所有图像.

这可能吗??

顺便说一下,我正在使用PIL和相关库在Python中实现它.

谢谢你的帮助!

SR

Pyl*_*lyp 5

色差 (Delta E) - 两种颜色之间的差异或距离是颜色科学中感兴趣的度量标准。

你可以找到Python代码在这里

注意计算前需要转换RGBLabDelta E

RGB -> XYZ -> 实验室

附加信息:

布鲁斯·贾斯汀·林德布卢姆网站

颜色转换数学和公式

颜色增量/比较数学


Kai*_*Kai 3

您可以通过对每个分量进行比较而不是平方来查找距离,从而显着节省计算量。

if abs(check.r - search.r) < threshold and
   abs(check.g - search.g) < threshold and
   abs(check.b - search.b) < threshold 
Run Code Online (Sandbox Code Playgroud)

将其与缓存表相结合可能足以满足您所做的任何事情。