2010-07-13 161 views
0

我没有太多的经验做图像分析,所以我认为我会问比较开明的人:)什么是分析图像颜色(Java)的最佳方式?

基本上就是我想要做的是分析图像并找出什么是最常见的颜色有(这些会显然是平均值)。

有没有人知道有效的方法来做到这一点?如果可能,我想避免使用任何第三方库,但至少会考虑一切。

就像我说的,我没有太多的图像分析经验,所以如果我不能正确理解你的答案,请耐心等待我!

我试过谷歌,但似乎没有任何类似于我之后的东西。也许我的Google-Fu今天不够好。

我真的很感谢你们可以给的任何指针!

感谢, 汤姆

+0

@Justian:不在这些部分:P – Beardy 2010-07-13 16:36:35

+0

有趣的oO。你住在哪里?编辑:啊。英国。疑难杂症。有时我最终会写Color而不是Color,因为这就是我被培养的方式。欧洲的血统 - 不是英国。凉!抱歉抱负时间:P – 2010-07-13 16:43:17

回答

1

考虑一个 “彩色立方体” 与RGB,而不是XYZ。将立方体拆分成子立方体,但使它们全部重叠。确保他们都是相同的大小。一个容易记忆/计算的立方体模式应该是从所有方向0-127,64-191,128-255,总共27个立方体。对于每个立方体,找出图像中的哪些颜色落入其中。

随着您将立方体变得越来越小,结果会变得越来越少,并开始在最流行的颜色范围上趋于一致。一旦你有了这种收敛,取平均值来得到“实际颜色”。

这是对尽可能多的细节,我可以去与我的老板附近徘徊cubefarm :-)

+0

我认为这似乎是迄今为止最好的方式。我在另一个网站上阅读了这个方法(为了一个稍微不同的目的),我认为这个吸引力的一部分是它听起来很酷:P 我仍然想尝试几种不同的方法,看看哪个最好结果,但无论如何,我会先试试你的:) – Beardy 2010-07-13 16:48:18

2

你如何能够做到这一点粗略的想法:
你可以使用java.awt.image.PixelGrabber抢来自图像的二维RGB数组,每个像素一个像素。

已填充此阵列时,你可以通过和不过你想要的那种(听起来这将是内存密集型),并进行简单的功能命令他们,指望他们等

然后你可以查看java.awt.Color,并使用Color(int, int, int)构造函数创建具有这些颜色的框(作为可视占位符),并在其下面显示出现的出现次数。

要获取颜色的十六进制值,你可以使用一个字符串,像这样:

String rgb = Integer.toHexString(color.getRGB()); 
    rgb = rgb.substring(2, rgb.length()); 

(子是必要的,否则你会得到8个字符)

希望这对让你正确的轨道!

资源:Color ClassImage Class

1

我知道你想避免第三方库,但做看一看OpenCV的。他们有一些好的东西w.r.t图像处理和分析。也许这可以为你工作。

相关问题