欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

圆形LBP特征-matlab

程序员文章站 2022-05-22 14:09:57
...

由于原始LBP特征使用的是固定邻域内的灰度值,因此当图像的尺度发生变化时,LBP特征的编码将会发生错误,LBP特征将不能正确的反映像素点周围的纹理信息,因此研究人员对其进行了改进[3]。基本的 LBP 算子的最大缺陷在于它只覆盖了一个固定半径范围内的小区域,这显然不能满足不同尺寸和频率纹理的需要。为了适应不同尺度的纹理特征,并达到灰度和旋转不变性的要求,Ojala 等对 LBP 算子进行了改进,将 3×3 邻域扩展到任意邻域,并用圆形邻域代替了正方形邻域,改进后的 LBP 算子允许在半径为 R 的圆形邻域内有任意多个像素点。从而得到了诸如半径为R的圆形区域内含有P个采样点的LBP算子:
圆形LBP特征-matlab


matlab源码

function imglbp = getCircularLBPFeature(img, radius, neighbors)
    imgSize = size(img);
    if numel(imgSize) > 2
        imgG = rgb2gray(img);
    else
        imgG = img;
    end
    [rows, cols] = size(imgG);
    rows=int16(rows);
    cols=int16(cols);
    imglbp = uint8(zeros(rows-2*radius, cols-2*radius));

    for k=0:neighbors-1
%       计算采样点对于中心点坐标的偏移量rx,ry        
        rx = radius * cos(2.0 * pi * k / neighbors);
        ry = -radius * sin(2.0 * pi * k / neighbors);
%       对采样点偏移量分别进行上下取整        
        x1 = floor(rx);
        x2 = ceil(rx);
        y1 = floor(ry);
        y2 = ceil(ry);
%       将坐标偏移量映射到0-1之间        
        tx = rx - x1;
        ty = ry - y1;
%       根据0-1之间的x,y的权重计算公式计算权重,权重与坐标具体位置无关,与坐标间的差值有关
        w1 = (1-tx) * (1-ty);
        w2 = tx * (1-ty);
        w3 = (1-tx) * ty;
        w4 = tx * ty;

        for i=radius+1:rows-radius
            for j=radius+1:cols-radius
                center = imgG(i, j);
%               根据双线性插值公式计算第k个采样点的灰度值                
                neighbor = imgG(i+x1, j+y1)*w1 + imgG(i+x1, j+y2)*w2 + imgG(i+x2, j+y1)*w3 + imgG(i+x2, j+y2)*w4;
%               LBP特征图像的每个邻居的LBP值累加,累加通过与操作完成,对应的LBP值通过移位取得
                if neighbor > center
                    flag = 1;
                else
                    flag = 0;
                end
                imglbp(i-radius, j-radius) = bitor(imglbp(i-radius, j-radius), bitshift(flag, neighbors-k-1));
            end
        end
    end
end

效果图

原图
圆形LBP特征-matlab
radius=3,neighbors=8
圆形LBP特征-matlab
radius=2,neighbors=8
圆形LBP特征-matlab
radius=1,neighbors=8
圆形LBP特征-matlab
radius=2,neighbors=4
圆形LBP特征-matlab