对快速查表算法的理解 :来源《机器视觉自动检测技术》
表FLUT是一个3X256字节的二位矩阵,FLIT[0][256],FLIT[1][256],FLIT[2][256]分别表示R,G,B的索引序号。每个位表示一种颜色,最多可以表示八种颜色,如需表示更多颜色则可以定义更多位。如:FLUT[0][120]=10001011,表示对于R的值为120时,可能的颜色为第7、3、1、0种。
FLUT表的建立。
首先应该建立每种颜色的的RGB范围,以红色为例,假设其RGB范围为Rmax,Rmin,Gmax,Gmin,Bmax,Bmin。且假设字节的第一位表示红色。则对于红色,FLUT的迭代过程为:
for(int i=0;i<256;i++)
{
if((i<RED.Rmax)&&(i>RED.Rmin))
FLUT[0][i]=FLUT[0][i]|0x1; //表示把第一位置1
if((i<RED.Gmax)&&(i>RED.Gmin))
FLUT[1][i]=FLUT[1][i]|0x1;
if((i<RED.Bmax)&&(i>RED.Bmin))
FLUT[2][i]=FLUT[2][i]|0x1;
}
对其它颜色也进行同样的迭代,则完成FLUT表的建立。
FLUT表检验:
for(int i=0;i<256;i++)
{
for(int j=0;j<256;j++)
{
for(int k=0;k<256;k++)
{
d=FLUT[0][i]&FLUT[1][j]&FLUT[2][k];
if(!(d==0x1||d==0x2||d==0x4||d==0x8||d==0x10||d==0x20||d==0x40||d==0x80))
//则该RGB同时可以表示两种颜色,区域重叠,错误。
}
}
}
颜色查找方法:输入RGB值(R,G,B):则颜色为
FLUT[0][R]&FLUT[1][G]&FLUT[2][B],其结果第几位为1,则是第几种颜色。