lbp特征提取matlab代码
时间: 2023-07-02 15:05:52 浏览: 149
LBP代码,matlab编写,可直接运行
以下是LBP特征提取的Matlab代码:
```
function [histogram] = LBP(img, mapping)
% img: 输入图像,灰度图像
% mapping: LBP编码表,可以使用getmapping函数获得
% histogram: LBP特征直方图,1x(2^P)数组
[height, width] = size(img);
histogram = zeros(1, length(mapping.table));
% 计算LBP图像
lbp_img = zeros(height-2, width-2);
for i = 2:height-1
for j = 2:width-1
neighbors = img(i-1:i+1, j-1:j+1);
center = neighbors(2,2);
lbp_code = sum((neighbors(:) >= center) .* 2.^([0:7]));
lbp_img(i-1,j-1) = mapping.table(lbp_code+1);
end
end
% 计算LBP特征直方图
for i = 1:length(mapping.table)
histogram(i) = sum(lbp_img(:) == mapping.table(i));
end
% 归一化直方图
histogram = histogram / sum(histogram);
end
```
其中,`getmapping`函数用于生成LBP编码表,具体代码如下:
```
function [mapping] = getmapping(P)
% P: LBP算子的半径,一般取值为1
% 生成LBP编码表
table = 0:2^P-1;
bits = dec2bin(table);
sums = sum(bits-'0', 2);
for i = 0:2^P-1
if sums(i+1) <= P
table(i+1) = bin2dec(fliplr(bits(i+1,:)));
else
rbits = circshift(bits(i+1,:), [0 1]);
rbits(1) = bits(i+1,end);
table(i+1) = bin2dec(fliplr(rbits));
end
end
% LBP编码表结构体
mapping.table = table;
mapping.num = length(table);
end
```
使用方法:
1. 调用`getmapping`函数生成LBP编码表。
2. 调用`LBP`函数计算LBP特征直方图。
示例代码:
```
img = imread('lena.jpg');
img_gray = rgb2gray(img);
mapping = getmapping(1);
histogram = LBP(img_gray, mapping);
```
其中,`lena.jpg`为lena图像文件,请根据实际情况进行更改。
阅读全文