快速查表法 FLUT

来源:互联网 发布:java 获取spring容器 编辑:程序博客网 时间:2024/04/28 05:50

对快速查表算法的理解 :来源《机器视觉自动检测技术》

表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,则是第几种颜色。


0 0