gusucode.com > 精通Matlab数字图像处理与识别源码程序 > 精通Matlab数字图像处理与识别源码程序/chapter12/code/LBP/makeLBPMap.m
function vecLBPMap = makeLBPMap % 生成(8,2)临域uniform LBP直方图的映射关系,即将256个灰度值映射到59个收集箱中, % 所有的非 uniform 放入一个收集箱中 vecLBPMap = zeros(1, 256); %初始化映射表 bits = zeros(1, 8); %8位二进模式串 nCurBin = 1; for ii = 0:255 num = ii; nCnt = 0; % 获得灰度num的二进制表示bits while (num) bits(8-nCnt) = mod(num, 2); num = floor( num / 2 ); nCnt = nCnt + 1; end if IsUniform(bits) % 判断bits是不是uniform模式 vecLBPMap(ii+1) = nCurBin;% 每个uniform模式分配一个收集箱 nCurBin = nCurBin + 1; else vecLBPMap(ii+1) = 59;%所有非uniform模式都放入第59号收集箱 end end % 保存映射表 save('Mat/LBPMap.mat', 'vecLBPMap'); function bUni = IsUniform(bits) % 判断某一个位串模式 bits 是否是 uniform 模式 % % 输入:bits --- 二进制LBP模式串 % % 返回值:bUni --- =1,if bits 是uniform模式串;=2,if bits 不是uniform模式串 n = length(bits); nJmp = 0; % 位跳变数(0->1 or 1->0) for ii = 1 : (n-1) if( bits(ii) ~= bits(ii+1) ) nJmp = nJmp+1; end end if bits(n) ~= bits(1) nJmp = nJmp+1; end if nJmp > 2 bUni = false; else bUni = true; end