多角度步态检测问题解决的方法通常有三类:利用多摄像机系统建立3D模型;提取与角度无关的步态特征;角度转换模型。
角度转换模型(View Transformation Model)最基础的是利用奇异值分解(Singular Value Decomposition, SVD),将特征矩阵分解为与角度无关的向量,与对象无关的向量,以及特征值。再利用提取出来的与对象无关的向量将特征从当前角度转换到对应角度。模型整体流程如下:
首先利用多个对象在不同角度下的特征构造特征矩阵,之后对矩阵进行奇异值分解。
其中,表示第m个对象在第n个角度下的特征,
为对象m的特征值,与角度无关,
,即为得到角度转换向量。角度转换的推导如下:
其中,表示
的伪逆。
即通过向量P,可通过对象m任意角度 i 的特征得到角度 j 下的特征。
主要是用到了svd,就直接用matlab写的代码,再把得到的P存下来。
[sk,sm,sna]=size(v_m_features); v_t_m_tmp = reshape(v_m_features,sk*sm,sna); v_t_m = reshape(v_t_m_tmp', sk*sna,sm); [U,S,V]=svd(v_t_m,'econ'); %[U,S,V]=svd(v_t_m); P=U*S; [spm,spn]=size(P); v_t_p=zeros(sna,spn,sk); v_t_p_ij=zeros(sna,sna,sk*sk); for ki=1:sk for ii=1:sna nai=(ki-1)*sna+ii; v_t_p(ii,:,ki)=P(nai,:); end end for i=1:sk for j=1:sk ij=(i-1)*sk+j; v_t_pj=pinv(v_t_p(:,:,j)); v_t_p_ij(:,:,ij)= v_t_p(:,:,i)*v_t_pj; end end