图像稀疏编码总结: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. BZOJ 1614 USACO 07Jan. 洛谷1948 电话线

    二分+特殊姿势的check:二分最小代价P,把边权小于等于P的边设为0,其他的设为1,跑一遍最短路,判断dis[n]是否大于K #include<cstdio> #include<a ...

  2. Django——13 Auth系统 登陆注册实例 权限的实现

    Django Auth系统中的表 注册登陆实例 权限的实现 登陆权限 操作权限 组操作  Auth系统中的表 从表的名称我们就能看出,auth_user,auth_group,auth_permiss ...

  3. crontab定时任务安装、使用方法

    本文介绍下,在linux中安装crontab的方法,以及crontab的具体用法,有需要的朋友参考下. 这里使用yum方式安装crontab:  复制代码代码示例: [root@CentOS ~]# ...

  4. 【ACM】hdu_1004_Let the Balloon Rise_201308141026-2

    Let the Balloon RiseTime Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Othe ...

  5. [bzoj1010][HNOI2008]玩具装箱toy_斜率优化dp

    玩具装箱toy bzoj-1010 HNOI-2008 题目大意:P教授要去看奥运,但是他舍不下他的玩具,于是他决定把所有的玩具运到北京.他使用自己的压缩器进行压缩,其可以将任意物品变成一堆,再放到一 ...

  6. .NET几大热点问题(.NET人员必读)

    下面收集了关于.NET几大热点问题及简要答案,防止我们回答问题不专业的尴尬.同一时候还将一些.NET资源的相关网址罗列一二. 一.什么是.Net?它主要包含什么?  .Net是为简化在第三代因特网的高 ...

  7. 《Spring技术内幕》笔记-第二章 IoC容器的实现

    简单介绍 1,在Spring中,SpringIoC提供了一个主要的JavaBean容器.通过IoC模式管理依赖关系.并通过依赖注入和AOP切面增强了为JavaBean这样子的POJO提供事务管理,生命 ...

  8. luogu1415 拆分数列

    题目大意 给出一列数字,需要你添加任意多个逗号将其拆成若干个严格递增的数.如果有多组解,则输出使得最后一个数最小的同时,字典序最大的解(即先要满足最后一个数最小:如果有多组解,则使得第一个数尽量大:如 ...

  9. C#操作INI文件(明天陪你看海)

    C#操作INI文件 在很多的程序中,我们都会看到有以.ini为后缀名的文件,这个文件可以很方便的对程序配置的一些信息进行设置和读取,比如说我们在做一个程序后台登陆的时候,需要自动登录或者是远程配置数据 ...

  10. python统计ES存储空间占用的代码

    import os from os.path import join, getsize def get_dir_size(dir, suffix_filter=None): size = 0L if ...