<div style="orphans: auto; widows: 1;"><span style="font-family:Times New Roman;font-size:18px;"><strong></strong></span></div><span style="font-family:Times New Roman;font-size:18px;"><strong>因自己论文研究需要用到LLC,但作者Jinjun Wang好像只给出了matlab的实现,自己尝试用C++,用到了OpenCV中的Mat类,但速度实在是忒慢了,每个1000*2000左右的图像需要2000多秒,这怎能容忍!谁来帮忙看下哪里可以简化加速嘞?</strong></span>
void LLC_coding_appr(Mat& dic,Mat& x,int knn,vector<double>& His)
{
double beta=1e-4;
int nframe=x.rows;
int nbase=dic.rows;
Mat sumx(x),sumdic(dic);
sumx=x.mul(x);
sumdic=dic.mul(dic);
Mat sum_row_x=Mat::zeros(nframe,1,CV_32F);
Mat sum_row_dic=Mat::zeros(nbase,1,CV_32F);
float x_row;
time_t time1,time2;
time1=time(NULL);
for(int i=0;i<nframe;++i)
for(int j=0;j<x.cols;++j)
sum_row_x.at<float>(i,0)+=sumx.at<float>(i,j);
for(int i=0;i<nbase;++i)
for(int j=0;j<dic.cols;++j)
sum_row_dic.at<float>(i,0)+=sumdic.at<float>(i,j);
Mat dict;
transpose(dic,dict);
//cout<<dict;
Mat x_dic=x*dict;
Mat sum_row_dict;
transpose(sum_row_dic,sum_row_dict);
Mat D=repeat(sum_row_x,1,nbase)+repeat(sum_row_dict,nframe,1)-2*x_dic;
Mat IDX=Mat::zeros(nframe,knn,CV_8U);
Mat d;
multimap<float,int> imap;
for(int i=0;i<nframe;++i)
{
d=D.rowRange(i,i+1);
for(int j=0;j<d.cols;++j)
imap.insert(make_pair(d.at<float>(0,j),j));
multimap<float,int>::iterator it=imap.begin();
for(int j=0;j<knn;++j,++it)
IDX.at<uchar>(i,j)=it->second;
}
Mat II=Mat::eye(knn,knn,CV_32F);
Mat Coeff=Mat::zeros(nframe,nbase,CV_32F);
Mat idx,z,zt,C,w,wt;
z=Mat::zeros(knn,dic.cols,CV_32F);
for(int i=0;i<nframe;++i)
{
idx=IDX.rowRange(i,i+1);
for(int j=0;j<knn;++j)
dic.row(idx.at<uchar>(0,j)).copyTo(z.row(j));
z=z-repeat(x.row(i),knn,1);
transpose(z,zt);
C=z*zt;
C=C+II*beta*trace(C).val[0];
w=C.inv()*Mat::ones(knn,1,CV_32F);
w/=sum(w).val[0];
transpose(w,wt);
for(int j=0;j<knn;++j)
Coeff.at<float>(i,idx.at<uchar>(0,j))=wt.at<float>(0,j);
}
Coeff=abs(Coeff);
for(int i=0;i<Coeff.cols;++i)
{
for(int j=0;j<x.rows;++j)
His[i]+=Coeff.at<float>(j,i);
His[i]/=Coeff.rows;
}
time2=time(NULL);
cout<<time2-time1<<endl;
}<span style="font-family:Times New Roman;font-size:18px;"><strong>原文章:Locality-constrained Linear Coding for Image Classification</strong></span>
<span style="font-family:Times New Roman;font-size:18px;"><strong>作者给出的matlab实现:http://www.ifp.illinois.edu/~jyang29/LLC.htm</strong></span>
版权声明:本文为博主原创文章,未经博主允许不得转载。
原文地址:http://blog.csdn.net/yiqiwangxi/article/details/47614385