本文为原创,转载请说明出处哈~
LPQ(Local Phase Quantization)算法的原理是假设平滑函数h(x)中心对称,则其傅里叶变换为H(u),对所有H(u)≥0有∠G(u)= ∠F(u),其中F(u)和G(u)分别为原图像和平滑后图像的傅里叶变换,因而在H(u)≥0条件下,图像对平滑有不变性。
为使H(u)≥0,a取为不超过第一个过零点的频率点,其值为a=1/winSize(winSize为输入参数)。分别用f(x)对u1=(a,0),u2=(0,a),u3=(a,a),u4=(a,-a)四个点作STFT,然后分别把四个点的实部和虚部分开,形成一个向量W=[Re{F(u1,x)},Re{F(u2,x)},Re{F(u3,x)},Re{F(u4,x)},Im{F(u1,x)},Im{F(u2,x)},Im{F(u3,x)},Im{F(u4,x)}]T 。
最终得到LPQ变换即为Fx=W*fx。然后对参数进行统计分析,若参数是相关的,则用奇异值分解去相关并且量化。
LPQ算法的matlab实现如下(代码引用自UNIVERSITY OF OULU,DEPARTMENT OF COMPUTER SCIENCE AND ANGINEERING):
function LPQdesc = lpq(img,winSize,decorr,freqestim,mode)
% Funtion LPQdesc=lpq(img,winSize,decorr,freqestim,mode) computes the Local Phase Quantization (LPQ) descriptor
% for the input image img. Descriptors are calculated using only valid pixels i.e. size(img)-(winSize-1).
%
% Inputs: (All empty or undefined inputs will be set to default values)
% img = N*N uint8 or double, format gray scale image to be analyzed.
% winSize = 1*1 double, size o