⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 cu_mexaux.h

📁 Edge detection in microscopy images using curvelets
💻 H
字号:
/*   Copyright (C) 2004 Caltech   Written by Lexing Ying	 Modified 2007 by Tobias Gebaeck*/#ifndef _CU_MEXAUX_H_#define _CU_MEXAUX_H_#include "mex.h"#include "matrix.h"using namespace std;#include "nummat.hpp"#include "offmat.hpp"#include "numvec.hpp"#ifndef NO3D_CURVELETSnamespace fdct3d_ns {#include "numtns.hpp"}#endifFDCT_WRAPPING_NS_BEGIN_NAMESPACE#ifndef NO3D_CURVELETSusing namespace fdct3d_ns;#endifinline void mex2cpp(const mxArray*& md, int& cd);inline void cpp2mex(const int& cd, mxArray*& md);inline void mex2cpp(const mxArray*& md, double& cd);inline void cpp2mex(const double& cd, mxArray*& md);inline void mex2cpp(const mxArray*& md, CpxOffMat& cd);inline void cpp2mex(const CpxOffMat& cd, mxArray*& md);inline void mex2cpp(const mxArray*& md, CpxNumMat& cd);inline void cpp2mex(const CpxNumMat& cd, mxArray*& md);#ifndef NO3D_CURVELETSinline void mex2cpp(const mxArray*& md, DblNumTns& cd);inline void cpp2mex(const DblNumTns& cd, mxArray*& md);inline void mex2cpp(const mxArray*& md, CpxNumTns& cd);inline void cpp2mex(const CpxNumTns& cd, mxArray*& md);#endiftemplate <class T> inline void mex2cpp(const mxArray*& md, std::vector<T>& cd);template <class T> inline void cpp2mex(const std::vector<T>& cd, mxArray*& md);//----------------------intinline void mex2cpp(const mxArray*& md, int& cd){  cd = int(mxGetScalar(md));  return;}inline void cpp2mex(const int& cd, mxArray*& md){  md = mxCreateDoubleScalar(cd);  return;}//----------------------doubleinline void mex2cpp(const mxArray*& md, double& cd){  cd = mxGetScalar(md);  return;}inline void cpp2mex(const double& cd, mxArray*& md){  md = mxCreateDoubleScalar(cd);  return;}//----------------------cpxoffmatinline void mex2cpp(const mxArray*& md, CpxOffMat& cd){  int m = mxGetM(md);  int n = mxGetN(md);  double* xr = mxGetPr(md);  double* xi = mxGetPi(md);  int s = -m/2;  int t = -n/2;  cd.resize(m,n);  if(xr!=NULL && xi!=NULL) {	 int cnt = 0;	 for(int j=t; j<t+n; j++)		for(int i=s; i<s+m; i++) {		  cd(i,j) = cpx(xr[cnt], xi[cnt]);		  cnt++;		}  } else if(xr!=NULL && xi==NULL) {	 int cnt = 0;	 for(int j=t; j<t+n; j++)		for(int i=s; i<s+m; i++) {		  cd(i,j) = cpx(xr[cnt], 0);		  cnt++;		}  } else if(xr==NULL && xi!=NULL) {	 int cnt = 0;	 for(int j=t; j<t+n; j++)		for(int i=s; i<s+m; i++) {		  cd(i,j) = cpx(0, xi[cnt]);		  cnt++;		}  }  return;}inline void cpp2mex(const CpxOffMat& cd, mxArray*& md){  int m = cd.m();  int n = cd.n();  int s = -m/2;  int t = -n/2;  md = mxCreateDoubleMatrix(m, n, mxCOMPLEX);  double* xr = mxGetPr(md);  double* xi = mxGetPi(md);  int cnt = 0;  for(int j=t; j<t+n; j++)	 for(int i=s; i<s+m; i++) {		xr[cnt] = real(cd(i,j));		xi[cnt] = imag(cd(i,j));		cnt++;	 }  return;}//----------------------cpxnummatinline void mex2cpp(const mxArray*& md, CpxNumMat& cd){  int m = mxGetM(md);  int n = mxGetN(md);  double* xr = mxGetPr(md);  double* xi = mxGetPi(md);  cd.resize(m,n);  if(xr!=NULL && xi!=NULL) {	 int cnt = 0;	 for(int j=0; j<n; j++)		for(int i=0; i<m; i++) {		  cd(i,j) = cpx(xr[cnt], xi[cnt]);		  cnt++;		}  } else if(xr!=NULL && xi==NULL) {	 int cnt = 0;	 for(int j=0; j<n; j++)		for(int i=0; i<m; i++) {		  cd(i,j) = cpx(xr[cnt], 0);		  cnt++;		}  } else if(xr==NULL && xi!=NULL) {	 int cnt = 0;	 for(int j=0; j<n; j++)		for(int i=0; i<m; i++) {		  cd(i,j) = cpx(0, xi[cnt]);		  cnt++;		}  }  return;}inline void cpp2mex(const CpxNumMat& cd, mxArray*& md){  int m = cd.m();  int n = cd.n();  md = mxCreateDoubleMatrix(m, n, mxCOMPLEX);  double* xr = mxGetPr(md);  double* xi = mxGetPi(md);  int cnt = 0;  for(int j=0; j<n; j++)	 for(int i=0; i<m; i++) {		xr[cnt] = real(cd(i,j));		xi[cnt] = imag(cd(i,j));		cnt++;	 }  return;}//----------------------dblnummatinline void mex2cpp(const mxArray*& md, DblNumMat& cd){  int m = mxGetM(md);  int n = mxGetN(md);  double* xr = mxGetPr(md);  cd.resize(m,n);    if (xr != NULL) {    int cnt = 0;    for(int j=0; j<n; j++)      for(int i=0; i<m; i++) {        cd(i,j) = xr[cnt];        cnt++;      }  }  return;}inline void cpp2mex(const DblNumMat& cd, mxArray*& md){  int m = cd.m();  int n = cd.n();  md = mxCreateDoubleMatrix(m, n, mxREAL);  double* xr = mxGetPr(md);  int cnt = 0;  for(int j=0; j<n; j++)    for(int i=0; i<m; i++) {      xr[cnt] = cd(i,j);      cnt++;    }  return;}#ifndef NO3D_CURVELETS//----------------------cpxnumtnsinline void mex2cpp(const mxArray*& md, CpxNumTns& cd){  const int* dims = mxGetDimensions(md);  int m = dims[0];  int n = dims[1];  int p = dims[2];  double* xr = mxGetPr(md);  double* xi = mxGetPi(md);  cd.resize(m,n,p);  if(xr!=NULL && xi!=NULL) {		int cnt = 0;		for(int k=0; k<p; k++)			for(int j=0; j<n; j++)				for(int i=0; i<m; i++) {					cd(i,j,k) = cpx(xr[cnt], xi[cnt]);					cnt++;				}  } else if(xr!=NULL && xi==NULL) {		int cnt = 0;		for(int k=0; k<p; k++)			for(int j=0; j<n; j++)				for(int i=0; i<m; i++) {					cd(i,j,k) = cpx(xr[cnt], 0);					cnt++;				}  } else if(xr==NULL && xi!=NULL) {		int cnt = 0;		for(int k=0; k<p; k++)			for(int j=0; j<n; j++)				for(int i=0; i<m; i++) {					cd(i,j,k) = cpx(0, xi[cnt]);					cnt++;				}  }  return;}inline void cpp2mex(const CpxNumTns& cd, mxArray*& md){  int m = cd.m();  int n = cd.n();  int p = cd.p();  int ndim = 3;  int dims[3];  dims[0] = m;  dims[1] = n;  dims[2] = p;  md = mxCreateNumericArray(ndim, dims, mxDOUBLE_CLASS, mxCOMPLEX);  double* xr = mxGetPr(md);  double* xi = mxGetPi(md);  int cnt = 0;  for(int k=0; k<p; k++)		for(int j=0; j<n; j++)			for(int i=0; i<m; i++) {				xr[cnt] = real(cd(i,j,k));				xi[cnt] = imag(cd(i,j,k));				cnt++;			}  //cd.resize(0,0,0);  return;}//----------------------dblnumtnsinline void mex2cpp(const mxArray*& md, DblNumTns& cd){  const int* dims = mxGetDimensions(md);  int m = dims[0];  int n = dims[1];  int p = dims[2];  double* xr = mxGetPr(md);  cd.resize(m,n,p);  if(xr!=NULL) {		int cnt = 0;		for(int k=0; k<p; k++)			for(int j=0; j<n; j++)				for(int i=0; i<m; i++) {					cd(i,j,k) = xr[cnt];					cnt++;				}  }  return;}inline void cpp2mex(const DblNumTns& cd, mxArray*& md){  int m = cd.m();  int n = cd.n();  int p = cd.p();  int ndim = 3;  int dims[3];  dims[0] = m;  dims[1] = n;  dims[2] = p;  md = mxCreateNumericArray(ndim, dims, mxDOUBLE_CLASS, mxREAL);  double* xr = mxGetPr(md);  int cnt = 0;  for(int k=0; k<p; k++)		for(int j=0; j<n; j++)			for(int i=0; i<m; i++) {				xr[cnt] = cd(i,j,k);				cnt++;			}  //cd.resize(0,0,0);  return;}#endif//----------------------IntNumMatinline void mex2cpp(const mxArray*& md, IntNumMat& cd){  int m = mxGetM(md);  int n = mxGetN(md);  double* xr = mxGetPr(md);  cd.resize(m,n);    if (xr != NULL) {    int cnt = 0;    for(int j=0; j<n; j++) {      for(int i=0; i<m; i++) {        cd(i,j) = (int) xr[cnt++];      }		}  }	return;}inline void cpp2mex(const IntNumMat& cd, mxArray*& md){  int m = cd.m();  int n = cd.n();  md = mxCreateDoubleMatrix(m, n, mxREAL);  double* xr = mxGetPr(md);  int cnt = 0;  for(int j=0; j<n; j++) {    for(int i=0; i<m; i++) {      xr[cnt++] = (double) cd(i,j);    }	}	return;}//----------------------IntNumVecinline void mex2cpp(const mxArray*& md, IntNumVec& cd){  int m = mxGetM(md);  int n = mxGetN(md);  assert(m==1 || n==1);  double* xr = mxGetPr(md);  cd.resize(m*n);    if (xr != NULL) {    for(int j=0, cnt=0; j<m*n; j++)      cd(j) = (int) xr[cnt++];  }  return;}inline void cpp2mex(const IntNumVec& cd, mxArray*& md){  int m = cd.m();  md = mxCreateDoubleMatrix(m, 1, mxREAL);  double* xr = mxGetPr(md);  for(int j=0, cnt=0; j<m; j++)    xr[cnt++] = (double) cd(j);  return;}//----------------------vector<...>template <class T> inline void mex2cpp(const mxArray*& md, std::vector<T>& cd){  int m = mxGetM(md);   int n = mxGetN(md); 	assert(min(m,n)==1);		int len = max(m,n);  cd.resize(len);  for(int ci=0; ci<len; ci++) {	 const mxArray*tt = mxGetCell(md, ci);	 mex2cpp(tt, cd[ci]);  }  return;}template <class T> inline void cpp2mex(const std::vector<T>& cd, mxArray*& md){  int n = cd.size();  md = mxCreateCellMatrix(1, n);  for(int ci=0; ci<n; ci++) {	 mxArray* ss;	 cpp2mex(cd[ci], ss);	 mxSetCell(md, ci, ss);  }  return;}FDCT_WRAPPING_NS_END_NAMESPACE#endif

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -