[英]Find images with similar color palette with Python
假设图库中有10,000个JPEG,PNG图像,如何找到具有相似调色板的所有图像到选定图像,并按降序相似度排序?
为每个图像构建颜色直方图。 然后,当您想要将图像与集合匹配时,只需按照直方图与所选图像的直方图的接近程度对列表进行排序。
桶的数量取决于您想要的准确度。 组合成一个存储桶的数据类型将定义您如何确定搜索的优先级。
例如,如果您对色调最感兴趣,那么您可以定义图像的每个像素所在的桶:
def bucket_from_pixel(r, g, b):
hue = hue_from_rgb(r, g, b) # [0, 360)
return (hue * NUM_BUCKETS) / 360
如果您还需要通用匹配器,则可以根据完整的RGB值选择存储桶。
使用PIL,您可以使用内置histogram
功能。 可以使用您想要的任何距离测量来计算“接近度”直方图。 例如,L1距离可以是:
hist_sel = normalize(sel.histogram())
hist = normalize(o.histogram()) # These normalized histograms should be stored
dist = sum([abs(x) for x in (hist_sel - hist)])
L2将是:
dist = sqrt(sum([x*x for x in (hist_sel - hist)]))
Normalize
只是强制直方图的总和等于某个常数值(1.0工作正常)。 这很重要,因此可以将大图像与小图像进行正确比较。 如果您要使用L1距离,那么您应该在normalize
使用L1度量。 如果L2,那么L2。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.