局部二值模式(Local Binary Patterns)纹理灰度与旋转不变性
1.简介
LBP是一种针对灰度图像任意单调变换(monotonic transformation)具有不变性的鲁棒特征算子。除了鲁棒性外,另一个突出特点就是计算量小,实现时只需在很小的邻域内使用少量的算子和查询表。
作者提出算法时,主要是想应用于二维图像纹理分析:工业表面检测,遥感,生物医学图像分析等,但是当时在这一领域成功的探索非常有限。作者分析主要是由于,真实世界中的纹理并不总是一致的,而是存在方向性、尺度以及其他的视觉表现上的差异。因此,灰度不变性(Gray scale invariance)对于关照不均和较大的类间差异问题非常重要。此外,当时其他一些分析方法计算量偏大。论文围绕两个方面阐述:1)LBP算子,能够对方向、灰度保持特征不变性;2)低计算量。
LBP算法使用圆形邻域在任意可量化的角度值与空间分辨率,检测“一致的”(uniform)的局部二值模式(后文会对这一概念进行解释)。定义这样一个圆形对称邻域:
其中P指邻域的数量,用于控制量化的角度值,R指圆形半径,决定算子的空间分辨率。除了这两个参数外,作者还使用一种由多种(P,R)参数组合的方式,进行多尺度分析。
对于一幅图像或者局部区域,统计这种“一致的”模式的离散分布直方图(Discrete occurrence histogram),是一种非常有用的纹理特征。为了有效的计算DOH,作者融合了结构与统计的方法:使用直方图评估那些LBP检测的微结构(例如,边缘、线、点、平滑区域)的分布特征。
作者分析认为,二维图像具有主要三个特点:二维正交,空间结构(pattern),对比度(局部纹理)。在图像灰度和旋转不变纹理分布上,有两个有趣的现象:空间模式受到旋转的影响,而对比度不会;对比度受图像灰度影响,但是空间模式却不会。因此,对于单纯的灰度不变纹理分析,对比反差是可以不考虑的。
LBPriu2P,R算子对于局部的空间结构具有很好的表达能力,但是很明显不具备一些其他局部特征的描述能力,例如对比度。因此,如果只考虑旋转不变性纹理分析(不考虑灰度不变性),LBP_{P,R}^{riu2}算子足矣。但是通过引入局部方差旋转不变测度VAPP,R描述局部纹理对比度,就可以弥补这一不足。
2.灰度与旋转不变性的LBP
在灰度图像中一个局部纹理,可以视为像素灰度值(像素级为P, P>1)得联合分布:
其中gc指的是局部邻域的中心像素,gp(p=0,...,P−1)指的是以中心像素为圆心半径R(R>0)的圆周上的像素值。将其用坐标值表示,则gc为(0,0),gp则定义为(−Rsin(2πp/P),Rcos(2πp/P))。图 1 给出了不同圆形对称邻域(P,R)的示例。那些没有落在像素中心的点通过内插获得(文中实验中使用的是双线性内插(bilinear interpolation))。
2.1灰度不变性
为了趋向于灰度不变性,首先进行灰度减:
这样做,并不会产生什么信息损失。
接着,可以假设差异gp−gc是与gc无关的,因此可以进行因式分解:
当然在实际中,绝对的上述的独立性是很难保证的,因此上式仅仅是一种联合分布的近似表达。然而,我们能接受由灰度漂移,产生的可能存在的小损失,从而达到灰度不变性。换句话说,就是令公式(3)中的t(gc)表示整幅图像的亮度,而非局部图像。因此,公式(1)中的原始灰度联合分布,可以转化为联合差异分布:
这是一个具有较强表达能力的算子。它能够记录多种出现在邻域的各个像素的模式,并表达在直方图里。对于灰度值不变的区域,这种差异在各个方向都是0。对于微微倾斜的边缘,算子在梯度方向获得最大差异,而沿着边缘方向为0。对于一个点,这种差异在各个方向都很高。
作者进一步简化公式(4)为:
其中s(∗)为符号(Sign)函数:
这样仍然能够保证灰度不变性。通过给每一项s(gp−gc)分配一个二项分布系数,公式(5)可以转变成用来描述局部图像的空间结构的特征值:
由此,“Local Binary Patten”反应出算子的功能,例如一个局部领域,通过以中心像素为阈值进行二值化。另外LBPP,R算子对于图像的单调变换具有不变性,例如,只要保持灰度值的顺序不变,输出的结果就不变。
2.2旋转不变性
LBPP,R可以输出2P种结果,对应着2P种由P个邻域所产生的不同二值模式。当图像旋转时,灰度值gp会对应着沿着以gc为中心的圆形圆周旋转。由于g0总是赋予位于(0,R),即gc右边的像素值,当某一特定二值模式旋转后,其LBPP,R值也会改变。当然,对于那些只有0或1的模式,旋转后结果仍然不变。为了消除旋转的影响,我们为每种二值模式提供一个独一无二的标识符:
其中函数ROR(x,i)指将P-bit的数,绕着圆周逐比特向右偏移,并最终得到最小值记为该模式的标识符。什么意思呢?大致是下图的意思:
通过图示的方法,就可以保证旋转不变性。
LBPriP,R通过量化统计每个图像微结构对应的旋转不变性模式,而这些模式可以作为特征检测算子。下图中给出了P=8时,LBPri8,R的36种可能值,对应着的36种不同的旋转不变性的局部二值模式。
其中,可以看出模式#0检测的是白斑点(bright spots),#8可能是暗斑点或者平滑的区域(dark spots or flat areas), #4是边缘。
2.3改善“一致”模式的旋转不变性
作者分析认为,这些3x3的模式中,一些局部二值模式,是纹理的基本属性,提供主要的信息,有时甚至能超过90%。于是,就称这些基本模式为“一致的”,因为它们包含着被称为包含少量空间变形的一致圆周结构的共同成分。而这种“一致的”模式就是Fig. 2中的第一行的九种。
为了描述这种“一致的”模式,作者引入了一个一致性测度U,用来统计模式中0/1交替出现的数量,例如模式00000000和11111111的U值为0,而第一行的其他模式均为2,其他的27种模式的U值都大于等于4。作者将U值不超过2的模式为”一致的”,由此将LBPriP,R优化为:
最后,纹理分析把算子的输出(例如模式对应的label)统计到直方图中,就可以得到最终的纹理特征。至于为什么使用“一致的”模式直方图比所有模式的直方图具有更强的区分能力,是由于它们在统计上的差异性,那些“非一致的”模式的属性在直方图中占了非常少的比例,因此这部分的统计特征是不稳定的。去掉这部分不稳定的统计结果,最终结果不但不会受影响,反而更加鲁棒。
2.4旋转不变性与局部方差对比测度
引入局部对比度信息:
将两者结合在一起:
限制条件是两个的P,R是一样的。
论文其余部分不作叙述。
局部二值模式(Local Binary Patterns)纹理灰度与旋转不变性的更多相关文章
- 【计算机视觉】纹理特征之LBP局部二值化模式
转自http://blog.csdn.NET/ty101/article/details/8905394 本文的PDF版本,以及涉及到的所有文献和代码可以到下列地址下载: 1.PDF版本以及文献:ht ...
- LBP(Local Binary Patterns)局部二进制模式
1. LBP 用于人脸识别 为了预测每个像素属于哪个脸部器官(眼睛.鼻子.嘴.头发),通常的作法是在该像素周围取一个小的区域,提取纹理特征(例如局部二值模式),再基于该特征利用支持向量机等浅层模型分类 ...
- 【计算机视觉】基于局部二值相似性模式(LBSP)的运动目标检测算法
基于局部二值相似性模式(LBSP)的运动目标检测算法 kezunhai@gmail.com http://blog.csdn.net/kezunhai 本文根据论文:Improving backgro ...
- 一种局部二值化算法:Sauvola算法
之前接触过全局二值化(OTSU算法),还有OPENCV提供的自适应二值化,最近又了解到一种新的局部二值化算法,Sauvola算法. 转载自:http://www.dididongdong.com/ar ...
- OpenCV——LBP(Local Binary Patterns)特征检测
#include <opencv2/opencv.hpp> #include <iostream> #include "math.h" using name ...
- Local Binary Convolutional Neural Networks ---卷积深度网络移植到嵌入式设备上?
前言:今天他给大家带来一篇发表在CVPR 2017上的文章. 原文:LBCNN 原文代码:https://github.com/juefeix/lbcnn.torch 本文主要内容:把局部二值与卷积神 ...
- OpenCV_基于局部自适应阈值的图像二值化
在图像处理应用中二值化操作是一个很常用的处理方式,例如零器件图片的处理.文本图片和验证码图片中字符的提取.车牌识别中的字符分割,以及视频图像中的运动目标检测中的前景分割,等等. 较为常用的图像二值化方 ...
- 【转】Emgu CV on C# (五) —— Emgu CV on 局部自适应阈值二值化
局部自适应阈值二值化 相对全局阈值二值化,自然就有局部自适应阈值二值化,本文利用Emgu CV实现局部自适应阈值二值化算法,并通过调节block大小,实现图像的边缘检测. 一.理论概述(转载自< ...
- [转载+原创]Emgu CV on C# (五) —— Emgu CV on 局部自适应阈值二值化
局部自适应阈值二值化 相对全局阈值二值化,自然就有局部自适应阈值二值化,本文利用Emgu CV实现局部自适应阈值二值化算法,并通过调节block大小,实现图像的边缘检测. 一.理论概述(转载自< ...
随机推荐
- Python: How to iterate list in reverse order
#1 for index, val in enumerate(reversed(list)): print len(list) - index - 1, val #2 def reverse_enum ...
- Coco dfs 或者 状压dp。...
C -- Coco Time Limit:1s Memory Limit:64MByte Submissions:148Solved:85 DESCRIPTION Coco just learned ...
- IIS6配置FastCGI遇到ERROR5的解决方法
FastCGI Error The FastCGI Handler was unable to process the request. ------------------------------- ...
- jmeter压测--从文本中读取参数
由于之前从数据库获取查询结果作为请求的入参(使用场景:测试一个接口并发处理数据的能力,并且每次请求传入的参数都要不同.),会一定程度上造成对数据库的压测,在没有完全搞清楚多线程之间参数的传递之前,我们 ...
- HttpMessageNotWritableException异常解决办法
昨天做多对多的时遇到这个错误,网上找了一大堆,都没有解决掉,这个异常是说要解析的对象解析不了,就有可能该对象为null了,为了测试,我把数据库的数据都填上去 结果还是报错 看来是时候debug下 ...
- 2. UITest相关APIs
1. XCUIApplication 这是你正在测试的应用的代理.它能让你启动应用,这样你就能执行测试了.它每次都会新起一个进程,这会多花一些时间,但是能保证测试应用时的状态是干净的,这样你需要处理的 ...
- STM32&AT指令NBIOT模组
#include "nbiot.h" #include "string.h" #include "stdlib.h" #include &q ...
- java8的lambda表达式,将List<DTO> 转为 List<DO>
将List<PhoneDTO>转为List<PhoneDO>,通过java8的lambda表达式来操作,比传统的for循环精简很多: /** * List<PhoneDT ...
- Xilinx HLS
Xilinx 的高层次综合(High Level Synthesis, HLS)技术是将C/C++/SystemC软件语言转换成Verilog或VHDL硬件描述语言的技术.现已应用在SDAccel,S ...
- js函数中获得当前被点击元素
问题描述:在html页面中点击<a>或者’按钮‘,进入js中的函数,在js函数中获得被点击那个<a>或‘按钮’元素 解决方法:方法一: html中: <a>标签:& ...