栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

Windows系统下Deformable Part Models(4.01版)demo 运行

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Windows系统下Deformable Part Models(4.01版)demo 运行

系统环境:
win10
matlab R2011a
vs2010(vs2010以前的版本应该也可以)

原始文件代码是在Linux、Mac系统上编写的,要在Windows系统上使用需要修改几个地方:
1,dt.cc 添加一句:#define int32_t int

2,features.cc & resize.cc中添加:

 #define bzero(a, b) memset(a, 0, b) 
 int round(float a) { float tmp = a - (int)a; if( tmp >= 0.5 ) return (int)a + 1; else return (int)a; }

3,resize.cc中: alphainfo ofs[len]; 这句改成:alphainfo *ofs = new alphainfo[len]; 当然在同一作用域后面加上:delete []ofs,参考Json_Nie贴出的代码,可以帮助我们准确放置delete [] ofs:

#include 
#include 
#include 
#include "mex.h"
 
#define bzero(a, b) memset(a, 0, b) 
int round(float a) { float tmp = a - (int)a; if( tmp >= 0.5 ) return (int)a + 1; else return (int)a; }
 
// struct used for caching interpolation values
struct alphainfo {
  int si, di;
  double alpha;
};
 
// copy src into dst using interpolation values
void alphacopy(double *src, double *dst, struct alphainfo *ofs, int n) {
  struct alphainfo *end = ofs + n;
  while (ofs != end) {
    dst[ofs->di] += ofs->alpha * src[ofs->si];
    ofs++;
  }
}
 
// resize along each column
// result is transposed, so we can apply it twice for a complete resize
void resize1dtran(double *src, int sheight, double *dst, int dheight, 
		  int width, int chan) {
  double scale = (double)dheight/(double)sheight;
  double invscale = (double)sheight/(double)dheight;
  
  // we cache the interpolation values since they can be 
  // shared among different columns
  int len = (int)ceil(dheight*invscale) + 2*dheight;
  //alphainfo ofs[len];
  alphainfo *ofs = new alphainfo[len];
  int k = 0;
  for (int dy = 0; dy < dheight; dy++) {
    double fsy1 = dy * invscale;
    double fsy2 = fsy1 + invscale;
    int sy1 = (int)ceil(fsy1);
    int sy2 = (int)floor(fsy2);       
 
    if (sy1 - fsy1 > 1e-3) {
      assert(k < len);
      assert(sy1-1 >= 0);
      ofs[k].di = dy*width;
      ofs[k].si = sy1-1;
      ofs[k++].alpha = (sy1 - fsy1) * scale;
    }
 
    for (int sy = sy1; sy < sy2; sy++) {
      assert(k < len);
      assert(sy < sheight);
      ofs[k].di = dy*width;
      ofs[k].si = sy;
      ofs[k++].alpha = scale;
    }
 
    if (fsy2 - sy2 > 1e-3) {
      assert(k < len);
      assert(sy2 < sheight);
      ofs[k].di = dy*width;
      ofs[k].si = sy2;
      ofs[k++].alpha = (fsy2 - sy2) * scale;
    }
  }
 
 // delete [] ofs;
  // resize each column of each color channel
  bzero(dst, chan*width*dheight*sizeof(double));
  for (int c = 0; c < chan; c++) {
    for (int x = 0; x < width; x++) {
      double *s = src + c*width*sheight + x*sheight;
      double *d = dst + c*width*dheight + x;
      alphacopy(s, d, ofs, k);
    }
  }
   delete [] ofs;
}
 
// main function
// takes a double color image and a scaling factor
// returns resized image

4,compile.m中:
注释掉第10行的 mex -O fconvsse.cpp -o fconv
结尾加上 mex -O fconv.cc

mex -O resize.cc  
mex -O dt.cc  
mex -O features.cc  
mex -O getdetections.cc  
  
% use one of the following depending on your setup  
% 0 is fastest, 3 is slowest   
  
% 0) multithreaded convolution using SSE  
% mex -O fconvsse.cpp -o fconv  
  
% 1) multithreaded convolution using blas  
%    WARNING: the blas version does not work with matlab >= 2010b   
%    and Intel CPUs  
% mex -O fconvblasMT.cc -lmwblas -o fconv  
  
% 2) mulththreaded convolution without blas  
% mex -O fconvMT.cc -o fconv  
  
% 3) convolution using blas  
% mex -O fconvblas.cc -lmwblas -o fconv  
  
% 4) basic convolution, very compatible  
% mex -O fconv.cc -o fconv  
mex -O fconv.cc  

5,将fconv.cc文件中:

void *process(void *thread_arg) 

修改为(去掉指针符号*):

void process(void *thread_arg) 

6,在matlab命令行中运行mex -setup选择编译器:
Select a compiler:
[1] Microsoft Visual C++ 2010 in d:VS20100

[0] None

Compiler: 1

如果没有vs2010会报错:
No supported SDK or compiler was found on this computer.
For a list of supported compilers, see
http://www.mathworks.com/support/compilers/R2011a/win64.html

??? Error using ==> mex at 208
Unable to complete successfully.

7,matlab命令行输入compile()编译一下

8,matlab命令行输入demo()

参考:
Win7+VS2010+Matlab2011b下运行Discriminatively Trained Deformable Part Models(4.01版)代码-运行demo()-详细步骤
在Windows下运行Felzenszwalb的Deformable Part Models(voc-release4.01)目标检测matlab源码

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/913740.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号