/*----------------------------------------------------------------------- File : use_cimgmatlab.cpp Description: Example of use for the CImg plugin 'plugins/cimgmatlab.h' which allows to use CImg in order to develop matlab external functions (mex functions). User should be familiar with Matlab C/C++ mex function concepts, as this file is by no way a mex programming tutorial. This simple example implements a mex function that can be called as - v = cimgmatlab_cannyderiche(u,s) - v = cimgmatlab_cannyderiche(u,sx,sy) - v = cimgmatlab_cannyderiche(u,sx,sy,sz) The corresponding m-file is cimgmatlab_cannyderiche.m Copyright : Francois Lauze - http://www.itu.dk/people/francois This software is governed by the Gnu Lesser General Public License see http://www.gnu.org/copyleft/lgpl.html The plugin home page is at http://www.itu.dk/people/francois/cimgmatlab.html for the compilation: using the mex utility provided with matlab, just remember to add the -I flags with paths to CImg.h and/or cimgmatlab.h. The default lcc cannot be used, it is a C compiler and not a C++ one! --------------------------------------------------------------------------*/ #include #define cimg_plugin "plugins/cimgmatlab.h" #include void mexFunction(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[]) { if (nrhs < 2) mexErrMsgTxt("No enough input arguments."); if (nrhs > 4) mexErrMsgTxt("Too many input arguments."); cimg_library::CImg<> u(prhs[0],true); if (nrhs == 2) { const float s = (float)mxGetScalar(prhs[1]); plhs[0] = u.get_blur(s).toMatlab(); } else if (nrhs == 3) { const float sx = (float)mxGetScalar(prhs[1]); const float sy = (float)mxGetScalar(prhs[2]); plhs[0] = u.get_blur(sx,sy,0).toMatlab(); } else if (nrhs == 4) { const float sx = (float)mxGetScalar(prhs[1]); const float sy = (float)mxGetScalar(prhs[2]); const float sz = (float)mxGetScalar(prhs[3]); plhs[0] = u.get_blur(sx,sy,sz).toMatlab(); } } /*------------------------------------------------------------------ SPECIAL NOTE : ------------- How to read a .mat file using plugin 'cimgmatlab.h' ? (contribution by Vo Duc Khanh/Denso IT Lab, Tokyo, Japan). #include #include #include #define cimg_plugin "cimgmatlab.h" #include "CImg.h" #include #include ......... using namespace cimg_library; using namespace std; // Load input images (125700 images) from training database 'BmpTrainingDb.mat' MATFile *pmat, *pmat_out; mxArray *pa, *pa_out; const char data_path[256] = ".\\BmpTrainingDb.mat\0"; const char *var_name; pmat = matOpen(data_path, "r"); if (pmat == NULL) { cout << "Error opening file " << data_path << endl; return (1); } pa = matGetNextVariable(pmat, &var_name); if (pa == NULL){ cout << "Error reading in file " << data_path << endl; return (1); } CImg train_db(pa,false); ........ -----------------------------------------------------------------------------*/