精华内容
下载资源
问答
  •  局部值模式是一种灰度范围内的非参数描述子,具有对灰度变化不敏感且计算速度快等优点[1].LBP算子利用中心像素的领域像素与中心像素的比较结果进行编码。常见的LBPP,R模式有:  P,R分别代表领域像素点的个数...

    一、LBP算子

      局部二值模式是一种灰度范围内的非参数描述子,具有对灰度变化不敏感且计算速度快等优点[1].LBP算子利用中心像素的领域像素与中心像素的比较结果进行编码。常见的LBPP,R模式有:

       P,R分别代表领域像素点的个数和领域半径,上图所示分别为8点半径为1;16点半径为2;8点半径为2的模式。

      LBP算子计算实例如下:从左上角开始,沿顺时针方向依次与中心像素进行比较,如果大于等于中心像素的取值为1,否则为0.得到一个01序列,我们视为一个二进制数。将二进制数转化为十进制数即可。

      LBP算子的数学表述如下:

      以下,我们根据实例来编写代码:

    clear all;
    clc;
    img=imread('lena.jpg');
    img=rgb2gray(img);
    [m,n]=size(img);
    imgn=zeros(m,n);
    for i=2:m-1
       for j=2:n-1 
            for p=i-1:i+1
                for q =j-1:j+1
                    if img(p,q) > img(i,j)||img(p,q) ==img(i,j)
                        if p~=i || q~=j  
                            if(p==i&&q==j-1)                   
                                imgn(i,j)=imgn(i,j)+2^0;
                            end
                            if(p==i+1&&q==j-1)                
                                imgn(i,j)=imgn(i,j)+2^1;
                            end
                            if(p==i+1&&q==j)                 
                                imgn(i,j)=imgn(i,j)+2^2;
                            end
                            if(p==i+1&&q==j+1)                    
                                 imgn(i,j)=imgn(i,j)+2^3;
                            end
                            if(p==i&&q==j+1)                    
                                imgn(i,j)=imgn(i,j)+2^4;
                            end
                            if(p==i-1&&q==j+1)                    
                                imgn(i,j)=imgn(i,j)+2^5;
                            end
                            if(p==i-1&&q==j)                    
                                imgn(i,j)=imgn(i,j)+2^6;
                            end
                            if(p==i-1&&q==j-1)                    
                                imgn(i,j)=imgn(i,j)+2^7;
                            end
                        end
                    end
                end
            end 
       end
    end
    figure;subplot(1,2,1),imshow(img),title('原图');
    subplot(1,2,2),imshow(imgn,[]),title('LBP');
    

      代码输出结果如下:

     

    二、旋转不变LBP算子

      在LGS算子里,我们提到,这一类算子虽然在刻画领域相对明暗时非常有效,但是一旦图像发生旋转,则立即失效。与LGS算子不同的是,LBP算子中的P个位于同一个圆上,我们单纯考虑算子的图形时,算子每转过360/P度时,图形都能与原来重合,这是LGS算子难以做到。所以我们也因此就引入了旋转不变LBP算子。

      我们考虑酒桌上转盘上的菜,我们知道无论转盘如何旋转,转盘上的菜品相对位置都是不变的。也就是说,如果我们将眼前的菜按顺时针标记为0123456789。在他旋转的过程中,我们总能在桌子前的某一位置按照0123456789确定这一桌菜确实就是我所参与饭局的这一桌菜。

      我们回来考虑图像,旋转不变性,我们也只需要考虑算子在旋转过程中是否满足某一准则。正如我们说到的酒桌的例子一样。对于一个8点LBP算子而言,经过不同角度的旋转,我们最终会有8个序列组成的二进制数,也就是说能产生8个十进制数,如果我们以最小的那个二进制数为标记,经过旋转,大于它的LBP算子我们一律以最小值来考虑,经过旋转,但得到的算子结果是一样的。这样就能克服旋转带来的变化。

       其数学表达为:

     

    三、局部三值模式

      在LBP算子的基础之上,三值模式非常好理解。

      即把原来非1即0的情况,改成了1,0,-1的情况。

      与LBP算子不同的是,由于引入了-1,会出现负数的情况,所以在三值模式下,算子分程一正一负进行编码。

      由于中心像素作为阈值的存在,使得LTP算子具有更好的光照鲁棒性,能提升其鉴别能力。

      代码如下:

    img=imread('lena.jpg');
    img=rgb2gray(img);
    t=5;
    img=double(img);
    [m n]=size(img);
    imgn_upper=zeros(m,n);%初始化结果矩阵(正值)
    imgn_lower=zeros(m,n);%初始化结果矩阵(负值)
    for i=2:m-1
       for j=2:n-1 
            for p=i-1:i+1%遍历周边像素
                for q =j-1:j+1
                    if p~=i || q~=j  %不取目标像素
                            %%%正值提取结果
                         if (img(p,q) - img(i,j))>t||(img(p,q) - img(i,j))==t
                            if(p==i&&q==j-1)                   
                               imgn_upper(i,j)=imgn_upper(i,j)+2^0;
                            end
                            if(p==i+1&&q==j-1)                
                               imgn_upper(i,j)=imgn_upper(i,j)+2^1;
                            end
                           
                            if(p==i+1&&q==j)                 
                               imgn_upper(i,j)=imgn_upper(i,j)+2^2;
                            end
                            if(p==i+1&&q==j+1)                    
                               imgn_upper(i,j)=imgn_upper(i,j)+2^3;
                            end
                            if(p==i&&q==j+1)                    
                               imgn_upper(i,j)=imgn_upper(i,j)+2^4;
                            end
                            if(p==i-1&&q==j+1)                    
                               imgn_upper(i,j)=imgn_upper(i,j)+2^5;
                            end
                            if(p==i-1&&q==j)                    
                               imgn_upper(i,j)=imgn_upper(i,j)+2^6;
                            end
                            if(p==i-1&&q==j-1)                    
                               imgn_upper(i,j)=imgn_upper(i,j)+2^7;
                            end
                          %%%负值提取结果
                         elseif (img(p,q) - img(i,j))<-t||(img(p,q) - img(i,j))==-t
                            if(p==i&&q==j-1)                   
                                imgn_lower(i,j)=imgn_lower(i,j)+2^0;
                            end
                            if(p==i+1&&q==j-1)                
                                imgn_lower(i,j)=imgn_lower(i,j)+2^1;
                            end
                            if(p==i+1&&q==j)                 
                                imgn_lower(i,j)=imgn_lower(i,j)+2^2;
                            end
                            if(p==i+1&&q==j+1)                    
                                imgn_lower(i,j)=imgn_lower(i,j)+2^3;
                            end
                            if(p==i&&q==j+1)                    
                                imgn_lower(i,j)=imgn_lower(i,j)+2^4;
                            end
                            if(p==i-1&&q==j+1)                    
                                imgn_lower(i,j)=imgn_lower(i,j)+2^5;
                            end
                            if(p==i-1&&q==j)                    
                                imgn_lower(i,j)=imgn_lower(i,j)+2^6;
                            end
                            if(p==i-1&&q==j-1)                    
                                imgn_lower(i,j)=imgn_lower(i,j)+2^7;
                            end
                         end
                     end 
                end
            end
       end
    end
    subplot(1,2,1),imshow(imgn_upper,[]),title('LTP正值提取');
    subplot(1,2,2),imshow(imgn_lower,[]),title('LTP负值提取');
    

      代码输出结果:

     

    参考文献;

    [1]李思.复杂光照下图像特征提取.(D).西安:长安大学,2018.

     

    2019-05-08

    17:32:43

    转载于:https://www.cnblogs.com/lyxyhhxbk/p/10816863.html

    展开全文
  • 局部值模式LBP-简单人脸识别()

    千次阅读 2014-12-28 22:02:49
    一)局部值模式简介 前面介绍过关于主成分分析法的识别方法,这个方法是选取的整幅图像的主成分分量来作为新的特征,从某种意义上说这是一种基于全局特征的方法。但是一般图像识别中,仅仅使用全局特征是不够...

    一)局部二值模式简介

    前面介绍过关于主成分分析法的识别方法,这个方法是选取的整幅图像的主成分分量来作为新的特征,从某种意义上说这是一种基于全局特征的方法。但是一般图像识别中,仅仅使用全局特征是不够的,获得的识别率较低,更多的时候,表征一副图像的特征也缺少不了局部特征。那么局部二值模式(LBP)就是这样一种表征局部特征的方法。

    介绍性原理的文章很多,这里贴个较好的:

    人脸识别经典算法二:LBP方法

    http://blog.csdn.net/smartempire/article/details/23249517

    研究该算法的过程中还发现了一篇较好的硕士论文:

    基于LBP的人脸识别研究_黄非非

    想深入了解的可以看看。


    一)经典LBP特征提取的程序实现

       

    在介绍实现之前请一定要看上述的那篇博客,那个里面有相关的介绍原理,看了这个原理才能知道算法的实现过程。这里也是介绍经典的矩形3*3领域实现方法。

    从上述原理可以知道,要得到图像中的每个像素点的LBP值,必须和它的领域有关,所以它的四周必须得有像素点,这就出现了一个问题,对于一个图像边缘像素点来说怎么办?它是边缘点,那么必定存在着它的3*3领域内的某几个点超出图像之外,也就是没有像素值,这样会出现错误的,那么一个解决办法就是对原图像进行像素扩展,也就是把原图像的四周向外扩展一下,像素点的灰度扩展成多少?可以是把边界点的像素复制过去就可以了(当然还有其他方法),知道图像滤波的可能会知道,在滤波算法中也存在着边界点的处理过程,本质上方法是一样的。

    考虑到是3*3的矩形领域,那么四周边界点只需要向外扩展一行或者一列就行了。如果矩形框改变大小,那么向外扩展的大小也改变。简单的扩展描述过程如下:


    把相应的位置复制到新的扩展图中就可以了。


    从原理中看到某个像素点的LBP值得计算公式可以简单描述为:


    其中,2^p的系数可以用矩阵代替:C = [1,2,4;128,0,8;64,32,16];

    求和可以用矩阵的点乘来代替并求和。矩阵点乘就是矩阵对应位置与对应位置相乘,和矩阵直接相乘还是有很大的区别。

    有了上述分析,程序可以写成如下:

    %--------------函数说明-------------  
    %-----LBP:Local Binary Patterns,局部二值模式
    %-----输入:img原始灰度图像:注意图片为double型
    %-----输出:该图像的的LBP特征
    %-----------------------------------  
    function LBP = Lbp_Img(img)
    %% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    [m,n] = size(img);%取大小
    r = 1;
    img_extend = zeros(m+2*r,n+2*r);%规定扩展后的矩阵大小并赋值0
    img_extend(r+1:m+r,r+1:n+r) = img;%中间部分复制
    img_extend(1:r,r+1:n+r) = img(1:r,1:n);%上扩展
    img_extend(1:m+r,n+r+1:n+2*r) = img_extend(1:m+r,n+1:n+r);%右扩展
    img_extend(m+r+1:m+2*r,r+1:n+2*r) = img_extend(m+1:m+r,r+1:n+2*r);%下扩展
    img_extend(1:m+2*r,1:r) = img_extend(1:m+2*r,r+1:r+1:2*r);%左扩展
    
    %%
    C = [1,2,4;128,0,8;64,32,16]; %矩阵点乘的权值矩阵
    LBP = zeros(m,n);
    for i=1:m   %对所有的像素点
        for j=1:n
            temp = img(i,j);   %取得该点像素值--也就是中心值
            temp_mat = ones(3)*temp;  %检测得邻域矩阵3*3
            temp_ext = img_extend(i+r-1:i+r+1,j+r-1:j+r+1);%取得邻域矩阵像素点
            temp_mean = temp_ext - temp_mat;  %相差
            temp_mean(find(temp_mean>=0)) = 1; %判断,置0与1
            temp_mean(find(temp_mean<0)) = 0;
            LBP(i,j) = sum(sum(C.*temp_mean));   %点乘并求和返回LBP
        end
    end


    二):样本图片的LBP提取与直方图显示:

    现在对一副图像进行提取整个图像的LBP,很显然一幅图像的LBP必定是与原图像相同大小的矩阵才对。现在我们随意找来一副图像进行提取LBP


    首先转化成灰度图像,并进行double型转换,最后直接运行

    LBP = Lbp_Img(img);imshow(LBP,[])

    如下(注意imshow函数在显示的时候加上[],使其自适应显示,不然显示不出来这个图):


    LBP算法的一大优点就是对光照具有较强的鲁棒性,现在人为用matlab改变一下样本的原始亮度,再显示他们的LBP如下所示:


    可以看到在亮度不同的条件下他们的LBP基本上没有多大变化。

    那么怎么去进行后续处理呢?一个很重要的处理方法就是对LBP进行灰度直方图处理,在直方图的基础上进一步处理。

    对上述得到的LBPmatlab本身自带直方图统计与显示函数hist,但是它只能处理一行或者一列的数据,所以对LBP这种矩阵首先得进行处理成一行再来运用,这里我们又可以运用reshape函数了。处理与显示如下:

     

    >> [m,n] = size(LBP);

    data = reshape(LBP,1,m*n);

    hist(data,255);

    [nel,cen] = hist(data,255);

    统计直方图如下所示:


    还有一个我们关心的数字就是上述的nel,这是每个像素点的LBP中的总统计个数,而cen是中心点,其实就是1~255(所有灰度值)。nel这个1*n的数据在后面的处理时至关重要。




    展开全文
  • 局部值模式(Local Binary Patterns) OpenCV 2.4.6.0 不包含LBP的函数, 但包括使用LBP进行人脸检测的方法. 1. 简介 局部值模式(Local Binary Patterns, LBP)的基本思想是: 定义于像素的8邻域中, 以中心像素的...

    局部二值模式(Local Binary Patterns)

     

    OpenCV 2.4.6.0 不包含LBP的函数, 但包括使用LBP进行人脸检测的方法.

     

    1. 简介

    局部二值模式(Local Binary Patterns, LBP)的基本思想是:

    定义于像素的8邻域中,以中心像素的灰度值为阈值,将周围8个像素的值与其比较,如果周围的像素值小于中心像素的灰度值,该像素位置就被标记为0,否则标记为1.每个像素得到一个二进制组合,就像00010011.每个像素有8个相邻的像素点,即有2^8种可能性组合,这些组合就被叫做局部二值模式(Local Binary Patterns)或缩写为LBP(LBP codes).如下图所示的例子:

     

    2. 代码

     

    olbp.hpp

    #ifndef __OLBP_HPP__
    #define __OLBP_HPP__
    
    #include <opencv.hpp>
    
    using namespace cv;
    
    namespace cv {
    
    	// 计算原始的局部二值模式
    	void olbp(InputArray src, OutputArray dst);
    
    	// see cv::olbp(InputArray, OutputArray)
    	Mat olbp(InputArray src);
    
    }
    
    #endif


    olbp.cpp

    #include "olbp.hpp"
    
    namespace cv {
    
    	template <typename _Tp> static
    		void olbp_(InputArray _src, OutputArray _dst) {
    			Mat src = _src.getMat();
    			// 省略两个边界
    			_dst.create(src.rows-2, src.cols-2, CV_8UC1);
    			Mat dst = _dst.getMat();
    			dst.setTo(0);
    			for(int i=1;i<src.rows-1;i++) {
    				for(int j=1;j<src.cols-1;j++) {
    					_Tp center = src.at<_Tp>(i,j);
    					unsigned char code = 0;
    					// 移位和bit位的或运算
    					code |= (src.at<_Tp>(i-1,j-1) >= center) << 7;
    					code |= (src.at<_Tp>(i-1,j) >= center) << 6;
    					code |= (src.at<_Tp>(i-1,j+1) >= center) << 5;
    					code |= (src.at<_Tp>(i,j+1) >= center) << 4;
    					code |= (src.at<_Tp>(i+1,j+1) >= center) << 3;
    					code |= (src.at<_Tp>(i+1,j) >= center) << 2;
    					code |= (src.at<_Tp>(i+1,j-1) >= center) << 1;
    					code |= (src.at<_Tp>(i,j-1) >= center) << 0;
    					dst.at<unsigned char>(i-1,j-1) = code;
    				}
    			}
    		}
    
    }
    
    void cv::olbp(InputArray src, OutputArray dst) {
    	switch (src.getMat().type()) {
    	case CV_8SC1:   olbp_<char>(src,dst); break;
    	case CV_8UC1:   olbp_<unsigned char>(src,dst); break;
    	case CV_16SC1:  olbp_<short>(src,dst); break;
    	case CV_16UC1:  olbp_<unsigned short>(src,dst); break;
    	case CV_32SC1:  olbp_<int>(src,dst); break;
    	case CV_32FC1:  olbp_<float>(src,dst); break;
    	case CV_64FC1:  olbp_<double>(src,dst); break;
    	default: break;
    	}
    }
    
    Mat cv::olbp(InputArray src) {
    	Mat dst;
    	olbp(src, dst);
    	return dst;
    }


    main.cpp

    #include "olbp.hpp"
    
    using namespace cv;
    
    int main(){
    	cv::Mat src = cv::imread("heels.jpg", CV_LOAD_IMAGE_GRAYSCALE);
    	cv::Mat dst;
    	cv::olbp(src, dst);
    	cv::imshow("Heel", dst);
    	cv::waitKey(0);
    }


    output:

     

    3. 参考

    网址: http://www.bytefish.de/blog/local_binary_patterns/

    中文论文: 局部二值模式方法研究与展望 宋克臣

     

     

     

     

    展开全文
  • 一、概念局部值模式, Local binary patterns, LBP, 一种用于纹理分类的特征。如果局部值模式特征与方向梯度直方图结合,则可以在一些集合上十分有效的提升检测效果。它将各个像素与其附近的像素进行比较,并...

    项目源代码:https://github.com/zhongqianli/local_binary_pattern

    一、概念

    局部二值模式, Local binary patterns, LBP, 一种用于纹理分类的特征。如果局部二值模式特征与方向梯度直方图结合,则可以在一些集合上十分有效的提升检测效果。它将各个像素与其附近的像素进行比较,并把结果保存为二进制数。由于其辨别力强大和计算简单,局部二值模式纹理算子已经在不同的场景下得到应用。LBP最重要的属性是对诸如光照变化等造成的灰度变化的鲁棒性。它的另外一个重要特性是它的计算简单,这使得它可以对图像进行实时分析。

    二、分类

    1、原始的局部二值模式
    这里写图片描述
    这里写图片描述

    在最简简化的情况下,局部二值模式特征向量可以通过如下方式计算:
    * 将检测窗口切分为区块(cells,例如,每个区块3x3像素)。
    * 对区块中的每个像素,与它的八个邻域像素进行比较(左上、左中、左下、右上等)。可以按照顺时针或者逆时针的顺序进行比较。
    * 对于中心像素大于某个邻域的,设置为1;否则,设置为0。这个过程类似图像处理中的二值化。这就获得了一个8位的二进制数(通常情况下会转换为十进制数字),作为该位置的特征。
    * 对每一个区块计算直方图。
    * 此时,可以选择将直方图归一化;
    * 串联所有区块的直方图,这就得到了当前检测窗口的特征向量。
    此特征向量可以通过诸如支持向量机等机器学习算法来产生一个分类器。
    这里写图片描述

    2、圆形局部二值模式(Extended LBP or Circular LBP)

    基本的局部二值模式算子的最大缺陷在于它只覆盖了一个固定半径范围内的小区域,这显然不能满足不同尺寸和频率纹理的需要。为了适应不同尺度的纹理特征,并达到灰度和旋转不变性的要求,Ojala等对局部二值模式算子进行了改进,将3×3邻域扩展到任意邻域,并用圆形邻域代替了正方形邻域,改进后的局部二值模式算子允许在半径为 R 的圆形邻域内有任意多个像素点。从而得到了诸如半径为R的圆形区域内含有P个采样点的局部二值模式算子。
    这里写图片描述
    3、旋转不变的局部二值模式
    从局部二值模式的定义可以看出,局部二值模式算子是灰度不变的,但却不是旋转不变的。图像的旋转就会得到不同的局部二值模式值。Maenpaa等人又将局部二值模式算子进行了扩展,提出了具有旋转不变性的局部二值模式算子,即不断旋转圆形邻域得到一系列初始定义的局部二值模式值,取其最小值作为该邻域的局部二值模式值。
    这里写图片描述

    这里写图片描述

    4、等价模式(Uniform pattern)
    一个有效的扩展被称为“等价模式”,可用于对特征向量降维,以及实现简单的旋转不变算子。其主要根据是一些模式比另一些模式更加常见。当某个LBP只包含从0到1或从1到0的最多两次跳变时,该LBP被定义为一个等价模式。例如,00010000(2次跳变)是一个等价模式,01010100(6次跳变)不是。在计算LBP的直方图时,对于每一个等价模式都各有一个组(bin),而所有非等价模式都被归类到一个单独的组中。使用等价模式,一个区块的特征长度能从256降到59。The 58 uniform binary patterns correspond to the integers 0, 1, 2, 3, 4, 6, 7, 8, 12, 14, 15, 16, 24, 28, 30, 31, 32, 48, 56, 60, 62, 63, 64, 96, 112, 120, 124, 126, 127, 128, 129, 131, 135, 143, 159, 191, 192, 193, 195, 199, 207, 223, 224, 225, 227, 231, 239, 240, 241, 243, 247, 248, 249, 251, 252, 253, 254 and 255.

    5、旋转不变的等价模式
    这里写图片描述
    对于半径为R, 点的个数为P的圆形的旋转不变的Uniform Pattern, 取值范围[0, P+1],LBP直方图的Bins为P+2维。

    三、应用

    局部二值模式已经应用在指纹识别、光学字符识别、人脸识别及车牌识别等领域。

    上述提取的局部二值模式算子在每个像素点都可以得到一个局部二值模式“编码”,那么,对一幅图像(记录的是每个像素点的灰度值)提取其原始的LBP算子之后,得到的原始LBP特征依然是“一幅图片”(记录的是每个像素点的局部二值模式值)。

    在局部二值模式的应用中,如纹理分类及人脸分析等,一般都不将局部二值模式图谱作为特征向量用于分类识别,而是采用局部二值模式特征谱的统计直方图作为特征向量用于分类识别。因为,从上面的分析我们可以看出,这个“特征”跟位置信息是紧密相关的。直接对两幅图片提取这种“特征”,并进行判别分析的话,会因为“位置没有对准”而产生很大的误差。后来,研究人员发现,可以将一幅图片划分为若干的子区域,对每个子区域内的每个像素点都提取局部二值模式特征,然后,在每个子区域内建立局部二值模式特征的统计直方图。如此一来,每个子区域,就可以用一个统计直方图来进行描述;整个图片就由若干个统计直方图组成。

    四、算法实现

    scikit-image中实现的算法:

    lbp = feature.local_binary_pattern(image, self.numPoints,
    			self.radius, method="uniform")
    
    scikit-image中实现了五种LBP算法,应该都是基于paper
    《Multiresolution Gray-Scale and Rotation Invariant Texture 
    Classification with Local Binary Patterns》实现的:
    	* 'default': original local binary pattern which is gray scale but not
            rotation invariant.
        * 'ror': extension of default implementation which is gray scale and
            rotation invariant.
        * 'uniform': improved rotation invariance with uniform patterns and
            finer quantization of the angular space which is gray scale and
            rotation invariant.
        * 'nri_uniform': non rotation-invariant uniform patterns variant
            which is only gray scale invariant.
        * 'var': rotation invariant variance measures of the contrast of local
            image texture which is rotation but not gray scale invariant.
    

    为了深入理解paper,决定研究一下它的源代码。花了一下午,最终将我最感兴趣的Uniform Pattern部分移植出来了。写了python和c++两个版本,方便用python训练模型,c++部署模型。

    下载地址:
    http://download.csdn.net/download/zhongqianli/9954304
    或者https://github.com/zhongqianli/local_binary_pattern

    五、相关引用

    (1) Local binary patterns: https://en.wikipedia.org/wiki/Local_binary_patterns
    (2) http://blog.csdn.net/zouxy09/article/details/7929531
    (3) scikit-image: http://scikit-image.org/
    (4)《Multiresolution Gray-Scale and Rotation Invariant Texture Classification with Local Binary Patterns》

    展开全文
  • LBP(局部值模式)基础知识篇

    千次阅读 2015-12-15 19:31:25
    一篇非常好的 关于LBP的入门介绍!...LBP(Local Binary Pattern,局部值模式)是一种用来描述图像局部纹理特征的算子;它具有旋转不变性和灰度不变性等显著的优点。它是首先由T. Ojala, M.Pietikäinen, 和D
  • LBP(局部值模式)

    千次阅读 2015-11-08 18:45:57
    英文全称是Local Binary Pattern,LBP是一种有效的描述图像局部纹理特征的descriptor,它是由T.Ojala在1994年提出来的,用于纹理特征提取,经过其改善,具备了旋转不变性和灰度不变性(这里所谓的灰度不变性,个人...
  • LBP(局部值模式)特征提取原理

    万次阅读 2017-05-20 17:33:38
     LBP(Local Binary Pattern,局部值模式)是一种用来描述图像局部纹理特征的算子;它具有旋转不变性和灰度不变性等显著的优点。它是首先由T. Ojala, M.Pietikäinen, 和 D. Harwood 在1994年提出,用于纹理特征...
  • 局部值模式(LBP)

    千次阅读 2017-07-26 15:05:35
    简要介绍LBP(Local Binary Pattern,局部值模式)是一种用来描述图像局部纹理特征的算子,具有旋转不变性和灰度不变性等显著优点。首先由T. Ojala, M.Pietikäinen, 和D. Harwood 在1994年提出,用于纹理特征提取...
  • 图像特征之LBP 局部值模式

    千次阅读 2014-03-31 16:57:00
    1. 摘要:本文主要介绍图像纹理描述的一种特征LBP(局部值模式),基于LBP特征在人脸识别、表情识别方面应用较多。 2. 应用背景 在数字图像处理和模式识别领域,LBP指局部值模式,英文全称:Local Binary ...
  • 局部值模式(LBP) LBP(Local Binary Pattern,局部值模式)是一种用来描述图像局部纹理特征的算子;它具有旋转不变性和灰度不变性等显著的优点。它是首先由T. Ojala, M.Pietik?inen, 和D. Harwood 在1994年...
  • 局部值模式LBP由于其简单、高效在目标检测、目标识别、图像检索等领域得到了广泛的应用。现如今,LBP的变体不下上十种,如VLBP、SILBP等。要了解更多关于LBP的知识可以参考:纹理分类-全局特征LBP及相关文献。  ...
  • LBP(局部值模式)实现人脸识别

    千次阅读 2015-12-15 20:23:17
    注:实现的是人脸识别(face detection), 而不是人脸检测(face recognization), 意思是不一样的!不一样的!不一样的! 前一篇文章 我们已经利用LBP得到特征,那么就要对这些特征进行“手术”了!...完整的步骤
  • LBP原理介绍以及算法实现(局部值模式) [url]https://blog.csdn.net/heli200482128/article/details/79204008[/url] [url]http://blog.csdn.net/xpplearnc/article/details/40658211[/url] LBP(Local ...
  • LBP算法使用圆形邻域在任意可量化的角度值与空间分辨率,检测“一致的”(uniform)的局部值模式(后文会对这一概念进行解释)。定义这样一个圆形对称邻域: L B P r i u 2 P , R LBP_{P,R}^{riu2} 其中 ...
  • opencv2笔记05-局部值模式(LBP)

    千次阅读 2016-11-16 19:47:26
    从图像中提取出局部特征,用LBP这种...局部值模式的基本思想是通过比较像素和它的邻域归纳出图像的局部构成。  Reference: [1] http://docs.opencv.org/2.4/modules/contrib/doc/facerec/facerec_tutorial.html
  • 之所以叫作“二值”,是因为LBP之后的模式只有0和1两个数值(同理,可以定义三值模式)。 细心的人可能会发现,其实LBP操作相当于: 以中心点灰度值做参考,进行局部二值化处理 。 这时,我们定义左边...
  • 一、纹理特征LBP(local binary pattern,局部值模式)  纹理是物体表明的固有特征之一,可认为是灰度(颜色)在空间以一定形式变化而产生的图案(模式)。LBP是一种用来描述图像局部纹理特征的算子,它的作用是...
  • (一)局部值模式LBP的简介  LBP(Local Binary Pattern,局部值模式)是一种描述图像局部纹理的特征算子,该算子是由T.Ojala等人于1994年首次提出来的,后来经过改进,可用于图像特征分析,该算子具有旋转不变性和...
  • 局部值模式(Local Binary Pattern - LBP)是广泛用于图像分类的一种图像特征,它的特点是,在图像发生光照变化时,提取的特征仍然能够不发生大的改变。提取LBP的过程首先是将原始图像转换为LBP图,然后统计LBP图...
  •  在数字图像处理和模式识别领域,LBP指局部值模式,即Local Binary Patterns。  最初功能为辅助图像局部对比度,后来提升为一种有效的纹理描述算子,度量和提取图像局部的纹理信息,对光照具有不变性...
  • 局部值模式(LBP) (结构法) Local binary patterns 原理 将像素点的邻域八个像素点与中心像素点值进行比较,大于设为1,小于设为0,这样就会得到一个邻域值为1和0的格子,将这八个值按照一定的规则排列成一个二...
  • (3)基于局部值模式的人脸识别方法研究,周凯,中南大学硕士毕业论文,2009年    显而易见的是,上述提取的 LBP 算子在每个像素点都可以得到一个 LBP “编码”,那么,对一幅图像提取其原始的 LBP ...
  • 图像处理之局部特征

    千次阅读 2017-01-06 16:12:59
    图像处理之局部二值特征一:局部值模式(LBP)介绍 局部值模式(Local Binary Pattern)主要用来实现2D图像纹理分析。其基本思想是用每个像素跟它周围的像素相比较得到局部图像结构,假设中心像素值大于相邻像素...
  • LBP(Local Binary Pattern,局部值模式)是一种用来描述图像局部纹理特征的算子;它具有旋转不变性和灰度不变性等显著的优点。它是首先由T. Ojala, M.Pietikäinen, 和D. Harwood 在1994年提出,用于纹理特征...
  • LBP(Local Binary Patterns,局部值模式)是提取局部特征作为判别依据的。LBP方法显著的优点是对光照不敏感,但是依然没有解决姿态和表情的问题。不过相比于特征脸方法,LBP的识别率已经有了很大的提升。在[1]的...
  • #include &lt;opencv2/core.hpp&gt; #include &lt;opencv2/face.hpp&gt; #include &lt;opencv2/highgui.hpp&gt; #include &lt;iostream&gt;...using namespace ...
  • 可以看出,右边的局部值模式已经和图1中的局部值模式不一样了。 为 LBP 算子加入旋转不变性 在2000年Pietikinen等人在文章 [3] 中描述了如何扩展LBP特征,使之具备旋转不变性。下面我们以一个P=8,R=...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 227,574
精华内容 91,029
关键字:

局部三值模式