我正在使用机器人截取屏幕截图,然后在这些屏幕截图中搜索较小的图像。由于 Gamma 校正,这适用于 Windows 但不适用于 OS X。我能想到的最佳解决方案是简单地匹配相似的颜色,而不是完全匹配颜色。
我担心匹配相似的颜色将意味着超越 getRGB,因此会减慢我的程序(因为它会截取多个屏幕截图并将它们与较小的图像进行比较以非常快速地搜索匹配项)。
我的问题是,假设我有 BufferedImage Screenshot 和 BufferedImage smallImage,我将如何确定 Screenshot.getRGB(1,1) 和 smallImage.getRGB(1,1) 是否相似颜色?
最佳答案
关于这个问题有一篇有趣的论文:
用于基于内容的图像和视频检索的具有相关颜色相似性度量的新感知均匀颜色空间 M. Sarifuddin 和 Rokia Missaoui
您可以使用 Google 或特别是 Google Scholar. 轻松找到它
总而言之,一些颜色空间(例如 RGB、HSV、Lab)和距离度量(例如几何平均数和欧氏距离)比其他颜色空间更能代表人类对颜色相似性的感知。该论文讨论了一种新的颜色空间,它比其他颜色空间要好,但它也很好地比较了常见的现有颜色空间和距离度量。定性*,似乎使用常用颜色空间的最佳感知距离度量是:HSV 颜色空间和圆柱距离度量。
*至少,根据引用论文中的图 15。
圆柱距离度量是(用 Latex 表示法):
D_{cyl} =\sqrt{\Delta V^{2}+S_1^{2}+S_2^{2}-2S_1S_2cos(\Delta H)}
另请注意,有一些解决相同问题的类似问题:
finding similar colors programatically
"Distance" between colours in PHP
最后,在 Java 中,有任何简单的方法可以将 RGB 值转换为其他颜色空间:
关于java - 如何使用 getRGB 在 Java 中匹配相似的颜色,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8688716/