用于确定最近颜色匹配的Mysql算法

时间:2010-05-07 00:19:10

标签: algorithm mysql colors closest

我正在尝试创建一个真正的马赛克应用程序。目前我有一个马赛克图像,即马赛克所基于的图像,以及来自iPhoto图库的大约4000个图像,它们充当图像库。我已经完成了我的研究并分析了马赛克图像。我已将其转换为64x64切片,每个切片为8个像素。我计算了每个切片的平均颜色,并确定了r,g,b和亮度(Luminance (perceived option 1) = (0.299*R + 0.587*G + 0.114*B))值。我为每张图片库照片都做了同样的事情。

马赛克切片表看起来像这样。

slice_id, slice_image_id, slice_slice_id, slice_image_column, slice_image_row, slice_colour_hex, slice_rgb_red, slice_rgb_blue, slice_rgb_green, slice_rgb_brightness

图像库表就是这样。

upload_id, upload_file, upload_colour_hex, upload_rgb_red, upload_rgb_green, upload_rgb_blue, upload_rgb_brightness

所以基本上我正在将切片表中的图像切片读入PHP,然后根据颜色十六进制从库表中提取相应的图像。我的麻烦是,我已经这么长时间,可能有太多的能量饮料,所以没有正确集中,如果不存在适当的十六进制代码,我无法找出找出最近的颜色邻居的方法。

关于完美查询的任何想法?

NB:我知道逐个拉出切片是不理想的,但马赛克只是定期重建,所以mysql加载中的突然爆发并没有真正打扰我,但是如果我们有办法将图像拉出来这一切也将是一个巨大的奖金。

更新亮度比较。

有亮度

alt text

没有亮度

alt text

2 个答案:

答案 0 :(得分:1)

最小化颜色之间差异(根据RGB组件)的一种方法是单独最小化每个组件的差异。因此,您正在寻找最低

的条目
(targetRed - rowRed)^2 + (targetGreen - rowGreen)^2 + (targetBlue - rowBlue)^2

答案 1 :(得分:0)

我认为您最好使用HSL代替RGB作为色彩空间。可以在互联网上(以及链接的维基百科文章中)获得从RGB计算HSL的公式,它们可以为您提供计算最佳匹配所需的内容。