2021-11-03

lbp特征提取

一幅图像的纹理是在图像计算中经过量化的图像特征。图像纹理描述图像或其中小块区域的空间颜色分布和光强分布。

纹理特征的提取分为基于结构的方法和基于统计数据的方法。一个基于结构的纹理特征提取方法是将所要检测的纹理进行建模,在图像中搜索重复的模式。该方法对人工合成的纹理识别效果较好。但对于交通图像中的纹理识别,基于统计数据的方法效果更好。

LBP纹理特征

LBP方法(Local binary patterns)是一个计算机视觉中用于图像特征分类的一个方法。LBP方法在1994年首先由T. Ojala, M.Pietikäinen, 和 D. Harwood 提出,用于纹理特征提取。后来LBP方法与HOG特征分类器联合使用,改善了一些数据集[45]上的检测效果。

LBP纹理特征向量,一般以图像分块LBP直方图表示。具体步骤如下:

图像划分若干为N × N的图像子块(如16 × 16),计算每个子块中每个像素的LBP值;

对每个子块进行直方图统计,得到N × N图像子块的直方图

对所有图像子块的直方图进行归一化处理;归一化就是要把需要处理的数据经过处理后(通过某种算法)限制在你需要的一定范围内

连接所有子块的归一化直方图,便得到了整幅图像的纹理特征。

LBP算法的核心思想,是以某个像素点为中心,与其邻域像素点共同计算。

原始的LBP算子定义的是在3*3的窗口内,以窗口中心像素为阈值,将相邻的8个像素点灰度值与其进行比较;

后来的LBP算法也将相邻8个像素点的位置改成了环形邻域内8个点(也可能是环形邻域多个点),进行顺时针或逆时针的比较。

%均匀LBP纹理特征提取<pre name="code" class="plain">

picture=imread('图片1.jpg');

imread从图形文件读取图像全页折叠

语法

A = imread(filename) 从 filename(文件名) 指定的文件读取图像,并从文件内容推断出其格式。如果 filename 为多图像文件,则 imread 读取该文件中的第一个图像。

%列x=size(picture,1);

如果在size函数的输入参数中再添加一项n,并用1或2为n赋值,则 size将返回矩阵的行数或列数。其中r=size(A,1)该语句返回的是矩阵A的行数, c=size(A,2) 该语句返回的是矩阵A的列数。

%行y=size(picture,2);

texture=uint8(zeros(x,y));

RR = uint8(zeros(height,width))

建一个 高度*宽度大小的矩阵,所有元素的值为 8bit 无符号整型 0,矩阵名RR。

%初始化table表

table=uint8(zeros(2,256));         // 建一个 2*256大小的矩阵table,所有元素的值为 8bit 无符号整型 0

%temp3=uint8(1);                   

 num=uint8(0);                            //uint8将类型转换为无符号8位数,即256位。与256色值一致

for index=0:1:255             

%变为相应的二进制数

    temp1=uint8(zeros(1,8));

    index1=1;

    temp2=index;

    while temp2

          temp1(1,index1)=mod(temp2,2);

两个异号整数求余

1.函数值符号规律(余数的符号)

mod(负,正)=正

mod(正,负)=负

结论:两个整数求余时,其值的符号为除数的符号。

2.取值规律先将两个整数看作是正数,再作除法运算

①能整除时,其值为0

②不能整除时,其值=除数×(整商+1)-被除数

例:mod(5,-4)=-3

即:5除以4的整数商为1,加1后为2;其与除数之积为8;再与被除数之差为(5-8=-3);取除数的符号。所以值为-3。

          temp2=floor(temp2/2);

loor(x),也写做Floor(x),其功能是“向下取整”,或者说“向下舍入”,即取不大于x的最大整数(与“四舍五入”不同,下取整是直接取按照数轴上最接近要求值的左边值,即不大于要求值的最大的那个整数值)。

   头文件:#include <cmath>

  实例:
floor(3.14) = 3.0

floor(9.999999) = 9.0

floor(-3.14) = -4.0

floor(-9.999999) = -10

与floor函数对应的是ceil 函数,即上取整函数。

          index1=index1+1;

INDEX函数是返回表或区域中的值或对值的引用。函数INDEX()有两种形式:数组形式和引用形式。数组形式通常返回数值或数值数组;引用形式通常返回引用。

返回特定行和列交叉处单元格的引用。如果该引用是由非连续选定区域组成的,则可以选择要用作查找范围的选定区域。

    end

%计算跳数count

    count=0;

    for index1=1:1:7

        if temp1(1,index1)~=temp1(1,index1+1)  //就是‘非’,‘取反’的意思

            count=count+1;

        end

    end

    if temp1(1,1)~=temp1(1,8)

        count=count+1;

    end

    if count<=2

       table(1,index+1)=index;

       if(index<59)

          num=num+1;

       end

    else table(1,index+1)=59;

end    

end

temp=1;

for index=1:1:256

    if(table(1,index)~=59)

      if(temp==num+1)

       temp=temp+1;       

      end

       table(2,index)=temp;

      temp=temp+1;

    else table(2,index)=num+1;

    end

end

%初始化table完毕

初始化就是把变量赋为默认值,把控件设为默认状态,把没准备的准备好。 但是如果是整个系统初始化那就不一样了。在汇编语言中,为变量分配空间时,初始化过的变量的初值位于可执行文件代码段数据后,会占用一定空间,不必要的初始化会造成磁盘空间的浪费。在C语言等高级语言中,为每一个变量赋初值被视为良好的编程习惯,有助于减少出现Bug的可能性。因此,是否对不必要的变量初始化依情况而定。

数组初始化的方式:

特殊初始化,必须在数组创建的地方。int[] a1 = { 1, 2, 3, 4, 5 };

在其他地方。 a = new Integer[10];

我们可以将一个数组分配给另一个数组。能使用这个语句a2 = a1。

基本数据类型的数组元素会自动初始化为“空”值(对于数值,空值是零,对于char,是null,对于boolean,是false)。

%计算均匀的LBP算子

for i=2:1:x-1

    for j=2:1:y-1

        neighbor=uint8(zeros(1,8));

        neighbor(1,1)=picture(i-1,j-1);

        neighbor(1,2)=picture(i-1,j);

        neighbor(1,3)=picture(i-1,j+1);

        neighbor(1,4)=picture(i,j+1);

        neighbor(1,5)=picture(i+1,j+1);

        neighbor(1,6)=picture(i+1,j);

        neighbor(1,7)=picture(i+1,j-1);

        neighbor(1,8)=picture(i,j-1);

        center=picture(i,j);

        temp=uint8(0);

        for k=1:1:8

             temp =temp+ (neighbor(1,k) >= center)* 2^(k-1);

        end

        texture(i,j)=table(1,temp+1);       

    end

end

imshow(texture);

L bp算法已广泛应用于我们的日常生活中, 并且随着科技的发展,也有很多人改进了他的不足,日后的l bp算法将更加的完备,我们期待着新时代的到来

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

白自

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值