首页 > 编程知识 正文

lbp提特征python(lbp的优点)

时间:2023-12-06 11:46:56 阅读:312451 作者:WANL

本文目录一览:

  • 1、lbp是什么意思?
  • 2、怎样把lbp直方图连接成特征向量
  • 3、图像的特征提取都有哪些算法
  • 4、纹理特征提取方法:LBP, 灰度共生矩阵
  • 5、python opencv怎么创建一个cascadeobjectdetector对象
  • 6、怎么根据直方图得到特征向量

lbp是什么意思?

lbp是Local Binary Patterns的缩写,中文名字叫做“线性反投影算法”,指局部二值模式,最初功能为辅助图像局部对比度,并不是一个完整的特征描述子。

lbp线性反投影算法又称累加法,是最早使用的一种简单成像算法。它将通过某点的所有投影射线进行累加,再反向估算出该点的密度值,从成像观点分析,它是不完全的雷登逆变换。

lbp算法计算步骤:

1、基于均质灵敏度信息,利用线性反投影算法获得初始图像。

2、利用已获得的介电常数分布,求解正问题,得到一组仿真电容值,将该值与测量电容值进行比较,若误差已达到满意值,算法结束,否则进行下步。

3、修正灵敏度信息。

4、根据上步已经修正后的灵敏度信息,利用测量电压重新进行线性反投影;返回第二步,并进行循环迭代,直到获得满意的结果为止,迭代结束。

怎样把lbp直方图连接成特征向量

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

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

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

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

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

然后便可利用SVM或者其他机器学习算法进行分类了。

图像的特征提取都有哪些算法

图像的经典特征提取方法:

1 HOG(histogram of Oriented Gradient,方向梯度直方图)

2 SIFT(Scale-invariant features transform,尺度不变特征变换)

3 SURF(Speeded Up Robust Features,加速稳健特征,对sift的改进)

4 DOG(Difference of Gaussian,高斯函数差分)

5 LBP(Local Binary Pattern,局部二值模式)

6 HAAR(haar-like ,haar类特征,注意haar是个人名,haar这个人提出了一个用作滤波器的小波,为这个滤波器命名为haar滤波器,后来有人把这个滤波器用到了图像上,就是图像的haar特征)

图像的一般提取特征方法:

1 灰度直方图,颜色直方图

2 均值,方差

3 信号处理类的方法:灰度共生矩阵,Tamura纹理特征,自回归纹理特征,小波变换。

4 傅里叶形状描述符,小波描述符等,

纹理特征提取方法:LBP, 灰度共生矩阵

搬运自本人 CSDN 博客: 《纹理特征提取方法:LBP, 灰度共生矩阵》

注:本文中大量行内 Latex 公式在中不支持,如果想要仔细参阅,请移步上面的 CSDN 博客链接。

在前面的博文 《图像纹理特征总体简述》 中,笔者总结了图像纹理特征及其分类。在这里笔者对其中两种算法介绍并总结。

参考网址:

《纹理特征提取》

《【纹理特征】LBP 》

《灰度共生矩阵(GLCM)理解》

《灰度共生矩阵的理解》

《图像的纹理特征之灰度共生矩阵 》

参考论文:

《基于灰度共生矩阵提取纹理特征图像的研究》——冯建辉

《灰度共生矩阵纹理特征提取的Matlab实现》——焦蓬蓬

LBP方法(Local binary patterns, 局部二值模式)是一种用来描述图像局部纹理特征的算子;它的作用是进行特征提取,提取图像的局部纹理特征。

LBP是一个计算机视觉中用于图像特征分类的一个方法,用于纹理特征提取。后来LBP方法与HOG特征分类器与其他机器学习算法联合使用。

LBP算法的核心思想,是以某个像素点为中心,与其邻域像素点共同计算。关于邻域像素点的选择方法,其实并不唯一:

这里选择环形邻域的方法进行说明:

窗口中心的像素点作为中心,该像素点的像素值作为阈值。然后将周围8个像素点的灰度值与该阈值进行比较,若周围某像素值大于中心像素值,则该像素点位置被标记为1;反之,该像素点标记为0。

如此这样,该窗口的8个点可以产生8位的无符号数,这样就得到了该窗口的LBP值,该值反应了该窗口的纹理信息。如下图所示:

图中,中心像素点的像素值作为阈值,其值v = 3;周围邻域8个像素值中,有3个比阈值小的像素点置0,5个比阈值大的像素点置1。

LBP算法的计算公式如下:

$$ LBP_{P, R}(x_{c},y_{c}) = sum_{p=0}^{P-1}s(g_{p} - g_{c})2^p, s(x)=left{begin{matrix}1 : x geq 0 0 : x leq 0 end{matrix}right. $$

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

得到了整幅图像的LBP纹理特征后,便可以利用SVM或者其他机器学习算法进行分类了。

这两天笔者将会对源码进行测试封装,以后会上传到我的GitHub网站上。

灰度共生矩阵法(GLCM, Gray-level co-occurrence matrix),就是通过计算灰度图像得到它的共生矩阵,然后透过计算该共生矩阵得到矩阵的部分特征值,来分别代表图像的某些纹理特征(纹理的定义仍是难点)。灰度共生矩阵能反映图像灰度关于font color = red 方向、相邻间隔、变化幅度等 /font综合信息,它是分析图像的局部模式和它们排列规则的基础。

对于灰度共生矩阵的理解,需要明确几个概念:方向,偏移量和灰度共生矩阵的阶数。

计算纹理特征第一步,就是将多通道的图像(一般指RGB图像)转换为灰度图像,分别提取出多个通道的灰度图像。

纹理特征是一种结构特征,使用不同通道图像得到的纹理特征都是一样的,所以可以任意选择其一。

一般在一幅图像中的灰度级有256级,从0--255。但在计算灰度共生矩阵时我们并不需要256个灰度级,且计算量实在太大,所以一般分为8个灰度级或16个灰度级。

而且当分成8个灰度级时,如果直接将像素点的灰度值除以32取整,会引起影像清晰度降低,所以进行灰度级压缩时,首先我们会将图片进行直方图均衡化处理,增加灰度值的动态范围,这样就增加了影像的整体对比效果。

注:笔者后文中的例子中,为了简要说明,所以灰度等级简单设置为4。

计算特征值前,先选择计算过程中的一些参数:

下面分部且适当的使用一些例子说明计算过程:

为了达到简单说明计算纹理特征值的目的,笔者此处做简要的假设:灰度被分为4阶,灰度阶从0--3;窗口大小为6 × 6;

窗口A的灰度矩阵A如下:

窗口B的灰度矩阵B如下:

此处以左上角元素为坐标原点,原点记为(1, 1);以此为基础举例,第四行第二列的点记为(4, 2);

情景1:d = 1,求0°方向矩阵A的共生矩阵:

则按照0°方向(即水平方向 从左向右,从右向左两个方向 ),统计矩阵值(1, 2),则如下图所示:

$$

P_{A}(d=1, theta =0^o)=begin{vmatrix}

0 8 0 7

8 0 8 0

0 8 0 7

7 0 7 0

end{vmatrix}

$$

情景2:d = 1,求45°方向矩阵A的共生矩阵:

按照情景1,同理可得此时的统计矩阵结果如下:

$$

P_{A}(d=1, theta =45^o)=begin{vmatrix}

12 0 0 0

0 14 0 0

0 0 12 0

0 0 0 12

end{vmatrix}

$$

情景3:d = 1,求0°与45°方向矩阵B的共生矩阵:

与前面同理,可以得到矩阵B的统计及矩阵结果如下:

$$

P_{B}(d=1, theta =0^o)=begin{vmatrix}

24 4 0 0

4 8 0 0

0 0 12 2

0 0 2 4

end{vmatrix}

$$

$$

P_{B}(d=1, theta =45^o)=begin{vmatrix}

18 3 3 0

3 6 1 1

3 1 6 1

0 1 1 2

end{vmatrix}

$$

矩阵A, B的其余90°、135°矩阵与上面同理,所以笔者偷懒略去。

这样,我们就已经计算得到了单个窗口的灰度共生矩阵的各个方向的矩阵,下面就要用刚才算出的矩阵计算灰度共生矩阵特征值。

用P表示灰度共生矩阵的归一化频率矩阵,其中i, j表示按照某方向同时出现于两个像素的某两个级别的灰度值,所以P(i, j)表示满足这种情况的两个像素出现的概率。

以上述情景2中的矩阵为例:

原矩阵为:

$$

P(d=1, theta =45^o)=begin{vmatrix}

12 0 0 0

0 14 0 0

0 0 12 0

0 0 0 12

end{vmatrix}

$$

归一化后,矩阵形式变为:

$$

P(d=1, theta =45^o)=begin{vmatrix}

12/50 0 0 0

0 14/50 0 0

0 0 12/50 0

0 0 0 12/50

end{vmatrix}

$$

灰度共生矩阵理论的前辈Haralick等人用灰度共生矩阵提出了14中特征值,但由于灰度共生矩阵的计算量很大,所以为了简便,我们一般采用四个最常用的特征来提取图像的纹理特征:font color=red 能量、对比度、相关度、熵 /font。

$ ASM = sum_{i} sum_{j}P(i, j)^2 $

能量是灰度共生矩阵各元素的平方和,又被称角二阶距。它是图像纹理灰度变化均一的度量,反映了图像灰度分布均匀程度和纹理粗细程度。

$ CON = sum_{i} sum_{j} (i-j)^2 P(i,j) $

对比度是灰度共生矩阵主对角线附近的惯性矩,它体现矩阵的值如何分布,反映了图像的清晰度和纹理沟纹的深浅。

$ CORRLN = [sum_{i} sum_{j}((ij)P(i,j)) - mu_{x} mu_{y}]/ sigma_{x} sigma_{y} $

相关度体现了空间灰度共生矩阵元素在行或列方向上的相似程度,反映了图像局部灰度相关性。

$ ENT = - sum_{i} sum_{j} P(i,j) log P(i,j) $

熵体现了图像纹理的随机性。若共生矩阵中所有值都相等,取得最大值;若共生矩阵中的值不均匀,则其值会变得很小。

求出该灰度共生矩阵各个方向的特征值后,再对这些特征值进行均值和方差的计算,这样处理就消除了方向分量对纹理特征的影响。

一个滑动窗口计算结束后,该窗口就可以移动一个像素点,形成另一个小窗口图像,重复进行上一步的计算,生成新窗口图像的共生矩阵和纹理特征值;

以此类推,滑动窗口遍历完所有的图像像素点后,整个图像就形成了一个由纹理特征值构成的一个纹理特征值矩阵。

之后,就可以将这个纹理特征值矩阵转换成纹理特征图像。

笔者已经对源码进行测试了封装,并上传到了笔者的GitHub网站上。

GitHub:

python opencv怎么创建一个cascadeobjectdetector对象

OpenCV中有两个程序可以训练级联分类器: opencv_haartraining 和opencv_traincascade。opencv_traincascade 是一个新程序,使用OpenCV 2.x API 以C++ 编写。这二者主要的区别是 opencv_traincascade 支持 Haar、Hog和 LBP(Local Binary Patterns) 三种特征,并易于增加其他的特征。与Haar特征相比,LBP特征是整数特征,因此训练和检测过程都会比Haar特征快几倍。LBP和Haar特征用于检测的准确率,是依赖训练过程中的训练数据的质量和训练参数。训练一个与基于Haar特征同样准确度的LBP的分类器是可能的。

opencv_traincascade and opencv_haartraining 所输出的分类器文件格式并不相同。注意,新的级联检测接口(参考 objdetect 模块中的 CascadeClassifier 类)支持这两种格式。 opencv_traincascade 可以旧格式导出训练好的级联分类器。但是在训练过程被中断后再重启训练过程, opencv_traincascade and opencv_haartraining 不能装载与中断前不同的文件格式。

opencv_traincascade 程序使用TBB来处理多线程。如果希望使用多核并行运算加速,请使用TBB来编译OpenCV。还有一些与训练相关的辅助程序。

怎么根据直方图得到特征向量

对LBP特征向量进行提取的步骤(1)首先将检测窗口划分为16×16的小区域(cell);(2)对于每个cell中的一个像素,将相邻的8个像素的灰度值与其进行比较,若周围像素值大于中心像素值,则该像素点的位置被标记为1,否则为0。这样,3*3邻域内的8个点经比较可产生8位二进制数,即得到该窗口中心像素点的LBP值;(3)然后计算每个cell的直方图,即每个数字(假定是十进制数LBP值)出现的频率;然后对该直方图进行归一化处理。(4)最后将得到的每个cell的统计直方图进行连接成为一个特征向量,也就是整幅图的LBP纹理特征向量;然后便可利用SVM或者其他机器学习算法进行分类了。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。