Squashed 'third_party/cimg/' content from commit 4b66369

Change-Id: I7454d9107a08dba899fd4659731733049165ae0a
git-subtree-dir: third_party/cimg
git-subtree-split: 4b66369ab4e34a46119d6c43e9adce061bb40f4b
diff --git a/examples/use_cimgmatlab.cpp b/examples/use_cimgmatlab.cpp
new file mode 100644
index 0000000..08c0677
--- /dev/null
+++ b/examples/use_cimgmatlab.cpp
@@ -0,0 +1,102 @@
+/*-----------------------------------------------------------------------
+
+  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 <mex.h>
+#define cimg_plugin "plugins/cimgmatlab.h"
+#include <CImg.h>
+
+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 <mex.h>
+  #include <mat.h>
+  #include <matrix.h>
+
+  #define cimg_plugin "cimgmatlab.h"
+
+  #include "CImg.h"
+  #include <iostream>
+  #include <string>
+
+  .........
+
+  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<unsigned char> train_db(pa,false);
+  ........
+
+
+  -----------------------------------------------------------------------------*/