LBP:local binary pattern 原理 & 接口 & 代码实现

一、LBP及原理

原理部分参考:https://www.jianshu.com/p/47ec293bf55d

作者:顽皮的石头7788121
链接:https://www.jianshu.com/p/47ec293bf55d
来源:简书

       LBP(Local Binary Pattern,局部二值模式)是一种用来描述图像局部纹理特征的算子;它具有旋转不变性灰度不变性等显著的优点。用于纹理特征提取。而且,提取的特征是图像的局部的纹理特征。

  原始的LBP算子定义为在3*3的窗口内,以窗口中心像素为阈值,将相邻的8个像素的灰度值与其进行比较,若周围像素值大于中心像素值,则该像素 点的位置被标记为1,否则为0。这样,3*3邻域内的8个点经比较可产生8位二进制数(通常转换为十进制数即LBP码,共256种),即得到该窗口中心像 素点的LBP值,并用这个值来反映该区域的纹理信息。

       对LBP特征向量进行提取的步骤:

     (1)首先将检测窗口划分为16×16的小区域(cell);

     (2)对于每个cell中的一个像素,将相邻的8个像素的灰度值与其进行比较,若周围像素值大于中心像素值,则该像素点的位置被标记为1,否则为0。这样,3*3邻域内的8个点经比较可产生8位二进制数,即得到该窗口中心像素点的LBP值;

     (3)然后计算每个cell的直方图,即每个数字(假定是十进制数LBP值)出现的频率;然后对该直方图进行归一化处理。

     (4)最后将得到的每个cell的统计直方图进行连接成为一个特征向量,也就是整幅图的LBP纹理特征向量;


 

二、接口

1. Matlab()

features = extractLBPFeatures(I)
features = extractLBPFeatures(I,Name,Value)

 

三、代码实现

brickWall = imread('bricks.jpg');
[r, c] = size(brickWall);


LBP_data = [];
count = 1;


for i = 2:r-1
    for j = 2:c-1
        threshold = brickWall(i, j);
        cell_data = [];
        cell_data(1) = brickWall(i-1, j-1) > threshold;
        cell_data(2) = brickWall(i-1, j) > threshold;
        cell_data(3) = brickWall(i-1, j+1) > threshold;
        cell_data(4) = brickWall(i, j+1) > threshold;
        cell_data(5) = brickWall(i+1, j+1) > threshold;
        cell_data(6) = brickWall(i+1, j) > threshold;
        cell_data(7) = brickWall(i+1, j-1) > threshold;
        cell_data(8) = brickWall(i, j-1) > threshold;
        
        cell_value = zeros(1, 8);
        for k = 1:8
            for kk = 0:7
                index = kk + k;
                if index<=8
                    cell_value(k) = cell_value(k) + cell_data(index) * 2^(8-kk-1);
                else
                    index = index - 8;
                    cell_value(k) = cell_value(k) + cell_data(index) * 2^(8-kk-1);
                end
            end
        end
        
        LBP_data(count) = min(cell_value);
        count = count + 1;
    end
end


freq = zeros(1, 255);
for i = 0:255
   freq(i+1)=length(find(LBP_data == i));
end
freq = freq ./ sqrt(sum(freq .^2));

figure, histogram(freq, 59);

 

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值