1

我正在尝试创建一个真正的马赛克应用程序。目前我有一张马赛克图像,即马赛克所基于的一张,以及来自我的 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 中,然后根据颜色十六进制从库表中提取适当的图像。我的麻烦是我已经喝了太久了,可能喝了太多能量饮料,所以没有正确集中注意力,如果不存在适当的十六进制代码,我无法找出最近的颜色邻居。

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

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

更新亮度比较。

有亮度

替代文字
(来源:buggedcom.co.uk

没有亮度

替代文字
(来源:buggedcom.co.uk

4

2 回答 2

1

最小化颜色之间差异(就其 RGB 分量而言)的一种方法是您将单独最小化每个分量的差异。因此,您正在寻找最低的条目

(targetRed - rowRed)^2 + (targetGreen - rowGreen)^2 + (targetBlue - rowBlue)^2
于 2010-05-07T00:40:09.287 回答
0

我认为使用HSL而不是RGB作为色彩空间可能会更好。从 RGB 计算 HSL 的公式可在 Internet 上找到(以及链接的 Wikipedia 文章),它们可能会为您提供计算最佳匹配所需的内容。

于 2010-05-07T00:34:14.487 回答