- LBP(Local Binary Patterns)特征
局部二值模式(Local Binary Pattern)主要用来实现2D图像纹理分析。其基本思想是用每个像素跟它周围的像素相比较得到局部图像结构,假设中心像素值大于相邻像素值则则相邻像素点赋值为1,否则赋值为0,最终对每个像素点都会得到一个二进制八位的表示,比如11100111。假设3x3的窗口大小,这样对每个像素点来说组合得到的像素值的空间为[0~2^8]。这种结果我称为图像的局部二值模式或者简写为LBP。
- 9宫格描述子,周围8个像素值与中心像素值比较,小于中心则置0,大于中心则置1,从左上角开始顺时针排出8位2进制数字并转化为10进制数字。
- 局部二值特征 点,点/平坦区,线,边缘,角点
- 特性:
旋转不变性,黑为0,白为1,旋转取LBP最小值 / 记录跳变次数
尺度不变性,改变半径,提取多种模式的特征 / 金字塔
亮度不变性,鲁棒性
#include <opencv2/opencv.hpp>
#include <iostream>
using namespace std;
using namespace cv;
Mat src, gray, dst;
void ELBP_Demo(int, void*);
int current_radius = 3;
int max_count = 15;
int main(int argc, char** argv)
{
src = imread("../path.jpg");
if (src.empty())
{
cout << "could not load image1..." << endl;
return -1;
}
namedWindow("src", WINDOW_AUTOSIZE);
imshow("src", src);
cvtColor(src, gray, COLOR_BGR2GRAY);
int width = gray.cols;
int height = gray.rows;
Mat LBP_img = Mat::zeros(height - 2, width - 2, CV_8UC1);
for (int row = 1; row < height