模式识别 - 局部二值模式(Local Binary Patterns) 简介 及 代码
来源:互联网 发布:域名防红接口 编辑:程序博客网 时间:2024/06/03 03:25
局部二值模式(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> staticvoid 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) 简介 及 代码
- 局部二值模式(Local Binary Patterns)进行纹理分类
- 局部二值模式(Local Binary Patterns)纹理灰度与旋转不变性
- LBP: Local Binary Patterns 局部二进模式Matlab实现
- LBP(Local Binary Patterns)局部二进制模式
- 局部二值模式LBP(Local Binary Pattern)实现代码
- 局部二值模式LBP(Local Binary Pattern)实现代码
- LBP (local binary mode)局部二值模式 纹理描述
- LBP Local Binary Pattern 局部二值模式 资料整理
- LBP(Local Binary Pattern,局部二值模式)
- 局部二进制模式(Local Binary Patterns,LBP)——MATLAB实现
- 纹理特征LBP(local binary pattern,局部二值模式)
- LBP (local binary patterns)
- High-Dimensional Local Binary Patterns
- LBP(Local Binary Patterns)
- LBP-(Texture) Local Binary Patterns
- Local Binary Patterns LBP算法
- 使用局部二进制模型改进SIFT描述方法(Description of interest regions with local binary patterns)
- LR http 脚本编写
- nexus开源版安装笔记
- zoj 2111 Starship Troopers(树形DP)
- oracle查询语句大全
- 如果你是淘宝的产品经理,你该如何设计淘宝?
- 模式识别 - 局部二值模式(Local Binary Patterns) 简介 及 代码
- layout_margin和 android:textColor="#FF000000" 背景变色
- Qt QListWidget 以缩略图的形式显示
- SPI,UART,I2C都有什么区别,及其各自的特点 (原作者Luckyer)
- GoLang 连接MySQL 实现查询
- linux更改主机名
- hdu ——1116——Play on Words(欧拉路有向图)
- 如果你是腾讯电商的产品经理,你该如何设计她?
- MFC下获取控件相对于子窗口的矩形位置