我正在实现一个图像处理任务,我在其中比较像素的颜色巨大次,我需要比较代码尽可能快地执行。目前图像采用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)));
}
因此,我感兴趣的是如何更快地制作现有算法,或者使用不同的色差测量,或者甚至将整个图像转换为不同的颜色表示作为预处理,然后允许不同的色差要使用的算法。
答案 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 );
}