快速估算颜色差异的方法

时间:2014-02-28 11:04:01

标签: java

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

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

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

2 个答案:

答案 0 :(得分:1)

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

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);
}

答案 1 :(得分:0)

另一种变体有点快,但仍可用于比较多个颜色对之间的差异:

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