【发布时间】:2015-03-31 22:45:33
【问题描述】:
在图像分析过程中比较颜色时,您很快就会发现您可以只使用灰度图像。为什么?因为通常你会这样做:
double average = (color.r+color.g+color.b)/3;
基于grascale的平均颜色,我做了一个算法,在屏幕上找到对象时实际上是相当令人满意的(我使用了整个桌面,但是,这已经足够了):
按平均颜色搜索耗时 67 毫秒,而按精确像素匹配(蓝框)搜索耗时 1.255 秒! (前者在找到第一个匹配后立即终止,而平均颜色算法循环整个图像)。
但我想提高 GUI 的精度。在 GUI 中,红色按钮看起来就像蓝色按钮,可能匹配错误。这就是我实现颜色敏感积分图像的原因。现在我发现我不知道如何正确比较颜色总和以获得一些真实色差。
假设您有 2 个包含 3 个元素的数组。
//Summed colors on the image you're looking for
double sumOnSearchedImage[3];
//Summed colors on currently checked rectangle (in some loop we'll not bother with here)
double sumOnBigImage[3];
数组中的每个数字分别代表红色、蓝色和绿色的总和(不是平均值)。您如何比较这些以使rgb(0, 255, 255) 和rgb(255,255,255) 之间的差异大于 rgb(170,170,170) 和rgb(255,255,255) 之间的差异?
【问题讨论】:
-
鉴于颜色存在于 r、g 和 b 形成三个轴的 3 维空间中,您是否考虑过计算从一种颜色到另一种颜色的向量,然后比较向量的长度/方向而不是每个轴上差异的总和?
-
我在想也许使用像小波这样的变换可能会大大提高速度和准确性,你为什么要使用简单的 rgb 格式?!
-
@AliAmiri 我是一个简单的学习者。您必须从 something 开始。
标签: java algorithm image-processing colors