Java 快速估算颜色差异的方法

Java 快速估算颜色差异的方法,java,Java,我正在执行一项图像处理任务,在该任务中,我要对像素的颜色进行大量比较,并且我需要比较代码以尽可能快的速度执行。目前该图像为ARGB_8888格式:我忽略透明度。因此,我使用红色、绿色和蓝色的绝对差异之和作为颜色差异的度量,尽管这种差异度量的选择不是一成不变的(例如,在某种意义上,差异的平方和可能更好) 因此,我感兴趣的是如何使我现有的算法更快,或者使用不同的色差度量,或者甚至将整个图像转换为不同的颜色表示,作为一个预处理,然后允许使用不同的色差算法。这真的是一个瓶颈吗?我能想到的是减少轮班操作的

我正在执行一项图像处理任务,在该任务中,我要对像素的颜色进行大量比较,并且我需要比较代码以尽可能快的速度执行。目前该图像为ARGB_8888格式:我忽略透明度。因此,我使用红色、绿色和蓝色的绝对差异之和作为颜色差异的度量,尽管这种差异度量的选择不是一成不变的(例如,在某种意义上,差异的平方和可能更好)


因此,我感兴趣的是如何使我现有的算法更快,或者使用不同的色差度量,或者甚至将整个图像转换为不同的颜色表示,作为一个预处理,然后允许使用不同的色差算法。

这真的是一个瓶颈吗?我能想到的是减少轮班操作的数量,如:

int coldif(int c1,int c2)
{
    return (Math.abs((c1&0x0000ff) - (c2&0x0000ff))      ) +
           (Math.abs((c1&0x00ff00) - (c2&0x00ff00)) >>  8) +
           (Math.abs((c1&0xff0000) - (c2&0xff0000)) >> 16);
}

另一种速度稍快但仍有助于比较多个颜色对之间的差异的变体:

int coldif( int c1, int c2 ) {
    int d = c1 ^ c2;
    return ( d & 0xff ) + ( ( d >>> 8 ) & 0xff ) + ( ( d >>> 16 ) & 0xff );
}

你需要什么样的“差异”?例如,“return c1==c2”的明显解决方案只提供相同/不相同的差异。你需要知道“有多大不同”的颜色,还是比较(c1,c2)和(c1,c3)的差异?@Oleg Estekhin:我需要某种程度的差异度量。所以只需使用==或!=还不够好。它似乎没有产生与OP相同的值(只是在我的程序中尝试了它)。。。这是一个错误,或者你是说这只是一种不同的衡量标准。这是一种不同的衡量标准。
int coldif( int c1, int c2 ) {
    int d = c1 ^ c2;
    return ( d & 0xff ) + ( ( d >>> 8 ) & 0xff ) + ( ( d >>> 16 ) & 0xff );
}