目录
一、理论基础
图像特征提取是计算机视觉领域中的一个重要问题,其目的是从图像中提取出具有代表性的特征,用于图像分类、目标识别等应用。在本文中,我们将介绍三种常用的图像特征提取方法:局部二值模式(Local Binary Pattern, LBP)、局部方向模式(Local Directional Pattern, LDP)和局部相位量化模式(Local Phase Quantization, LPQ)。我们将从数学模型和实现步骤两个方面,详细介绍这三种算法。
1.1局部二值模式(LBP)
局部二值模式是一种用于图像纹理特征提取的方法,它可以有效地描述图像中局部区域的纹理信息。LBP算法的基本思想是将某个像素点的灰度值与其周围邻域的灰度值进行比较,然后将比较结果编码成二进制数。具体地,对于一个像素点$p$,我们选取一个以$p$为中心的邻域区域,然后比较该区域内每个像素点的灰度值与$p$的灰度值的大小关系,如果该像素点的灰度值大于等于$p$的灰度值,则该像素点的比较结果为1,否则为0。将比较结果按照邻域像素点的顺序连接起来,得到一个二进制数,称为LBP码。LBP算法的数学模型可以表示为:
$$
LBP_{P,R}(p)=\sum_{i=0}^{P-1}s(g_i-g_c)2^i
$$
其中,P表示邻域像素点的个数,R表示邻域半径,g_i表示第i个邻域像素点的灰度值,g_c表示中心像素点的灰度值,s(x)表示符号函数,当x大于等于0时,s(x)=1,否则s(x)=0。
1.2局部方向模式(LDP)
局部方向模式是一种用于图像纹理特征提取的方法,它可以描述图像中纹理的方向信息。与LBP算法类似,LDP算法也是基于邻域像素点的灰度值与中心像素点的灰度值进行比较,但是LDP算法还考虑了邻域像素点的方向信息。具体地,对于一个像素点$p$,我们选取一个以$p$为中心的邻域区域,然后计算该邻域像素点与中心像素点的梯度值和方向。将邻域像素点按照方向进行分组,然后对每个方向上的像素点进行灰度值的比较,得到一个二进制数。将所有方向上的二进制数连接起来,得到一个LDP码。LDP算法的数学模型可以表示为:
$$
LDP_{P,R}(p)=\sum_{i=0}^{P-1}s(g_i-g_c)2^i
$$
其中,P表示邻域像素点的个数,R表示邻域半径,g_i表示第i个邻域像素点的灰度值,g_c表示中心像素点的灰度值,s(x)表示符号函数,当x大于等于0时,s(x)=1,否则s(x)=0。
1.3局部相位量化模式(LPQ)
局部相位量化模式是一种用于图像纹理特征提取的方法,它可以描述图像中局部区域的相位信息。与LBP和LDP算法不同,LPQ算法是基于图像的傅里叶变换进行计算的。具体地,对于一个像素点p,我们选取一个以p为中心的邻域区域,然后对该区域进行二维傅里叶变换,得到其频率响应。将频率响应按照幅值和相位进行量化,得到一个二进制数。将所有像素点的二进制数连接起来,得到一个LPQ码。LPQ算法的数学模型可以表示为:
$$
LPQ_{P,R}(p)=\sum_{i=0}^{P-1}s(\phi(g_i-g_c))2^i
$$
其中,P表示邻域像素点的个数,R表示邻域半径,g_i表示第i个邻域像素点的灰度值,g_c表示中心像素点的灰度值,\phi(x)表示x的相位角,s(x)表示符号函数,当x大于等于0时,s(x)=1,否则s(x)=0。
1.4实现步骤
局部二值模式(LBP)
LBP算法的实现步骤如下:
1.1. 对于每个像素点$p$,选取一个以$p$为中心的邻域区域。
1.2. 计算邻域像素点的灰度值与中心像素点的灰度值的大小关系,并将比较结果编码成二进制数。
1.3. 将所有像素点的LBP码连接起来,得到一个LBP特征向量。
局部方向模式(LDP)
LDP算法的实现步骤如下:
2.1. 对于每个像素点$p$,选取一个以$p$为中心的邻域区域。
2.2. 计算邻域像素点与中心像素点的梯度值和方向,然后按照方向进行分组。
2.3. 对每个方向上的像素点进行灰度值的比较,并将比较结果编码成二进制数。
2.4. 将所有方向上的二进制数连接起来,得到一个LDP特征向量。
局部相位量化模式(LPQ)
LPQ算法的实现步骤如下:
3.1. 对于每个像素点$p$,选取一个以$p$为中心的邻域区域。
3.2. 对邻域区域进行二维傅里叶变换,得到其频率响应。
3.3. 将频率响应按照幅值和相位进行量化,并将量化结果编码成二进制数。
3.4. 将所有像素点的二进制数连接起来,得到一个LPQ特征向量。
二、核心程序
......................................................
% pre-processing
I=imread('apples.jpg'); %input image
imshow(I); %display input image
title('原始图像');
I=im2double(I); %convert to double
if size(I,3)==3
I=rgb2gray(I); %convert to grayscale if rgb
end
figure;
imshow(I); %display grayscale image
title('Gray-Picture');
[m,n]=size(I); %get the size of image
%initialise variable
z=zeros(8,1);
b=zeros(m,n);
% LBP calculation
for i=2:m-1
for j=2:n-1
t=1;
for k=-1:1
for l=-1:1
if (k~=0)||(l~=0)
if (I(i+k,j+l)-I(i,j)<0) %threshold to generate bit
z(t)=0;
else
z(t)=1;
end
t=t+1;
end
end
end
for t=0:7
b(i,j)=b(i,j)+((2^t)*z(t+1)); %binary to decimal conversion
end
end
end
b=uint8(b); %convert decimal 2-d matrix to image
figure;
imshow(b); %display LBP image
title('LBP-Picture');
%LBP Histogram
H=imhist(b); %find histogram
figure;
bar(H); %display histogram
title('Hist');
up2143
三、仿真结论