图像稀疏编码总结:LLC和SCSPM,文章对稀疏编码讲解非常详细。

《Locality-constrained Linear Coding for Image Classification》的作者提供Matlab的代码实现,见http://www.ifp.illinois.edu/~jyang29/LLC.htm

下面是根据作者的代码,基于OpenCV,实现的C++版的LLC:

Matlab Code:www.ifp.illinois.edu/~jyang29/LLC.htm

<span style="font-size:12px;">    cv::Mat BowModel::findKNN(cv::Mat &codebook, cv::Mat &input, int k) {
int nbase = codebook.rows;
int nquery = input.rows;
Mat ii = input.mul(input);
Mat cc = codebook.mul(codebook); Mat sii(nquery,1,CV_32FC1);
sii.setTo(0);
Mat scc(nbase,1,CV_32FC1);
scc.setTo(0);
for (int i = 0; i<ii.rows; i++) {
for (int j = 0; j<ii.cols; j++) {
sii.at<float>(i,0) += ii.at<float>(i,j);
}
}
for (int i = 0; i<cc.rows; i++) {
for (int j = 0; j<cc.cols; j++) {
scc.at<float>(i,0) += cc.at<float>(i,j);
}
} Mat D(nquery,nbase,CV_32FC1);
for (int i = 0; i<nquery; i++) {
for (int j = 0; j<nbase; j++) {
D.at<float>(i,j) = sii.at<float>(i,0);
}
} Mat ct;
transpose(codebook, ct);
Mat D1 = 2*input*ct; Mat scct;
transpose(scc, scct);
Mat D2(nquery, nbase, CV_32FC1);
for (int i = 0; i<nquery; i++) {
for (int j = 0; j<nbase; j++) {
D2.at<float>(i,j) = scct.at<float>(0,j);
}
} D = D - D1 + D2;
Mat SD;
sortIdx(D, SD, CV_SORT_EVERY_ROW+CV_SORT_ASCENDING);
Mat IDX(nquery,k,CV_8UC1);
for (int i = 0; i<nquery; i++) {
for (int j = 0; j<k; j++) {
IDX.at<uchar>(i,j) = SD.row(i).col(j).at<uchar>(0,0);
}
} ii.release();
cc.release();
sii.release();
scc.release();
D.release();
ct.release();
D1.release();
scct.release();
D2.release();
SD.release();
return IDX;
} cv::Mat BowModel::llccode(cv::Mat &codebook, cv::Mat &input, cv::Mat IDX, int k)
{
int nquery = input.rows;
int nbase = codebook.rows;
int dim = codebook.cols; Mat II = Mat::eye(k, k, CV_32FC1);
Mat Coeff(nquery,nbase,CV_32FC1);
Coeff.setTo(0);
Mat z;
Mat z1(k,dim,CV_32FC1);
Mat z2(k,dim,CV_32FC1);
Mat C;
Mat un(k,1,CV_32FC1);
un.setTo(1);
Mat temp;
Mat temp2;
Mat w;
Mat wt; for (int n = 0; n<nquery; n++) {
for (int i = 0; i<k; i++) {
for (int j = 0; j<dim; j++) {
z1.at<float>(i,j) = codebook.at<float>(IDX.at<uchar>(n,i),j);
z2.at<float>(i,j) = input.at<float>(n,j);
}
}
z = z1 - z2;
transpose(z, temp);
C = z*temp;
C = C + II*(1e-4)*trace(C)[0];
invert(C,temp2);
w = temp2*un;
float sum_w=0;
for (int i = 0; i<k; i++) {
sum_w += w.at<float>(i,0);
}
w = w/sum_w;
transpose(w, wt);
for (int i = 0; i<k; i++) {
Coeff.at<float>(n,IDX.at<uchar>(n,i)) = wt.at<float>(0,i);
}
} II.release();
z.release();
z1.release();
z2.release();
C.release();
un.release();
temp.release();
temp2.release();
w.release();
wt.release(); return Coeff;
} </span>

C++版的LLC代码的更多相关文章

  1. 《疯狂Java讲义第4版》PDF+代码+课件 电子书pdf 分享

    <疯狂Java讲义(第4版)>是<疯狂Java讲义>的第4版,第4版保持了前3版系统.全面.讲解浅显.细致的特性,全面新增介绍了Java 9的新特性. <疯狂Java讲义 ...

  2. java版第一个代码——HelloWorld!

    java版第一个代码--HelloWorld! 今天来接触一下java代码: 事前准备 jdk的配置(推荐jdk8或jdk11) notepad++或idea软件 开始编写 建立文件夹存放代码 建立j ...

  3. WPS Office手机版调用接口代码指导帖之一(Android)

    经常会有一些喜欢开发鼓捣的童鞋问我们,WPS Office手机版是否提供调用接口,希望在android中使用一个调用命令,直接调用WPS手机版来打开指定的DOC文件,而不用弹出一个程序可选列表(如果用 ...

  4. Js 网页版扫雷游戏代码实现

    这个游戏是自己在大约一年前联系js熟练度时做的,用的都是基础的东西,最近比较忙没时间整理.直接发给大家,有兴趣的可以看一下.欢迎大家提出建议.如果你有什么新的想法也可以提出来,或者你并不擅长编程.你想 ...

  5. Android版微信小代码(转)

    以下代码仅适用于Android版微信: //switchtabpos:让微信tab更贴合Android Design 如果你并不喜欢微信Android版和iOS端同用一套UI,现在有一个小方法可以实现 ...

  6. 非递归遍历二叉树Java版的实现代码(没写层次遍历)

    直接上代码呵呵,里面有注解 package www.com.leetcode.specificProblem; import java.util.ArrayList; import java.util ...

  7. Unix环境高级编程第三版中实例代码如何在自己的linux上运行的问题

    学习Linux已经有2个月了,最近被期末考试把进度耽误了,前几天把Unix环境高级编程看了两章,感觉对Linux的整体有了一些思路,今天尝试着对第一章涉及到的一个简单的交互式shell编译运行一下,结 ...

  8. VS2015中跑OpenGL红宝书第八版的示例代码

    OpenGL的东西快忘光了,把角落的第八版红宝书拿出来复习一下 从书中的地址下了个示例代码结果新系统(Win10+VS2015)各种跑不起来,懊恼之后在网上疯狂搜索资料终于跑起来了,记录一下 一.环境 ...

  9. 一分钟搭建 Web 版的 PHP 代码调试利器

    一.背景   俗话说:"工欲善其事,必先利其器".作为一门程序员,我们在工作中,经常需要调试某一片段的代码,但是又不想打开繁重的 IDE (代码编辑器).使用在线工具调试代码有时有 ...

随机推荐

  1. 【codeforces 801C】Voltage Keepsake

    [题目链接]:http://codeforces.com/contest/801/problem/C [题意] 有n个设备 你想同时使用 第i个设备每分钟消耗ai点电量,一开始有bi点电量 你有一个充 ...

  2. BZOJ1191 超级英雄Hero (匈牙利算法)

    直接跑匈牙利,注意到“只有当选手正确回答一道题后,才能进入下一题,否则就被淘汰”,一旦无法满足就直接退出. #include <cstdio> #include <algorithm ...

  3. ZooKeeper之初识

    它是什么 俗称动物管理员,它使用java开发,开源,接口简单,高效,稳定的分布式系统,为其它分布式系统提供协调服务 为什么会存在? 开发分布式系统跟单机上做开发完全不同,碰到的问题完全不同,开发分布式 ...

  4. python getaddrinfo 函数

    现在python中用到的关于地址查询的函数几乎都可以用getaddrinfo. 也就是说,如果你要想做一些与地址查询,主机名ip转换的操作,都可以用这个函数,下面看一下这个函数. 首先,我们可以用ge ...

  5. SQL 用户定义表类型,在存储过程里使用数据类型作參数

    在数据库编程里使用数据类型,能够提高代码的重用性.它们常常被使用在方法和存储过程中.使用数据类型,我们能够避免在存储过程里定义一串的參数,让人眼花缭乱,它就相当于面向对象语言里.向一个方法里传入一个对 ...

  6. JArray获取元素值

    MXS&Vincene  ─╄OvЁ  &0000003 ─╄OvЁ  MXS&Vincene MXS&Vincene  ─╄OvЁ:今天很残酷,明天更残酷,后天很美好 ...

  7. Python常用模块【sys】

    sys.argv 参数    「argv」是「argument variable」参数变量的简写形式.一般在命令行调用的时候由系统传递给程序.这个变量其实是一个List列表,argv[0] 一般是“被 ...

  8. powerdesigner 16.5 视图的显示

    今天中午为了解说绘图.然后把toolbox跟object brower都关掉了,花了1个小时才找到toolbox 1.object brower显示 直接使用快捷键 ALT+0 2.toolbox(也 ...

  9. 线段树+离线 hdu5654 xiaoxin and his watermelon candy

    传送门:点击打开链接 题意:一个三元组假设满足j=i+1,k=j+1,ai<=aj<=ak,那么就好的.如今告诉你序列.然后Q次询问.每次询问一个区间[l,r],问区间里有多少个三元组满足 ...

  10. canvas制作饼图和环形图,使用Excanvas兼容IE67

    excanvas 地址:http://excanvas.sourceforge.net/ <!DOCTYPE html> <html> <head> <met ...