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

Change-Id: I7454d9107a08dba899fd4659731733049165ae0a
git-subtree-dir: third_party/cimg
git-subtree-split: 4b66369ab4e34a46119d6c43e9adce061bb40f4b
diff --git a/resources/pycimg.py b/resources/pycimg.py
new file mode 100644
index 0000000..5bf8cd5
--- /dev/null
+++ b/resources/pycimg.py
@@ -0,0 +1,113 @@
+#
+#  File            : pycimg.py
+#                    ( Python file )
+#
+#  Description     : Show how to import .cimg and .cimgz files into python (numpy).
+#                    This file is a part of the CImg Library project.
+#                    ( http://cimg.eu )
+#
+#  Copyright       : Antonio Albiol, Universidad Politecnica Valencia (SPAIN)
+#
+#                    In case of issues or comments contact Antonio Albiol at:
+#                    aalbiol (at) dcom.upv.es
+#
+#  Licenses        : This file is 'dual-licensed', you have to choose one
+#                    of the two licenses below to apply.
+#
+#                    CeCILL-C
+#                    The CeCILL-C license is close to the GNU LGPL.
+#                    ( http://www.cecill.info/licences/Licence_CeCILL-C_V1-en.html )
+#
+#                or  CeCILL v2.1
+#                    The CeCILL license is compatible with the GNU GPL.
+#                    ( http://www.cecill.info/licences/Licence_CeCILL_V2.1-en.html )
+#
+#  This software is governed either by the CeCILL or the CeCILL-C license
+#  under French law and abiding by the rules of distribution of free software.
+#  You can  use, modify and or redistribute the software under the terms of
+#  the CeCILL or CeCILL-C licenses as circulated by CEA, CNRS and INRIA
+#  at the following URL: "http://www.cecill.info".
+#
+#  As a counterpart to the access to the source code and  rights to copy,
+#  modify and redistribute granted by the license, users are provided only
+#  with a limited warranty  and the software's author,  the holder of the
+#  economic rights,  and the successive licensors  have only  limited
+#  liability.
+#
+#  In this respect, the user's attention is drawn to the risks associated
+#  with loading,  using,  modifying and/or developing or reproducing the
+#  software by the user in light of its specific status of free software,
+#  that may mean  that it is complicated to manipulate,  and  that  also
+#  therefore means  that it is reserved for developers  and  experienced
+#  professionals having in-depth computer knowledge. Users are therefore
+#  encouraged to load and test the software's suitability as regards their
+#  requirements in conditions enabling the security of their systems and/or
+#  data to be ensured and,  more generally, to use and operate it in the
+#  same conditions as regards security.
+#
+#  The fact that you are presently reading this means that you have had
+#  knowledge of the CeCILL and CeCILL-C licenses and that you accept its terms.
+#
+
+import numpy as np
+import zlib
+import os
+
+typesDict={'float':'float32' ,'double':'float64',
+'unsigned_short':'uint16','unsigned_char':'uint8',
+'int':'int32', 'short':'int16'}
+
+def cimgread( filename ):
+    """ USAGE: a= cimgread(filename)
+    For CImg Images:
+        * returns a npy array in the case of cimg
+        * Supports compression
+        * It squeezes singleton dimensions. If a CImg image has dimensions (w,h,1,c)
+            the returned python object will have shape
+                a.shape --> (h,w,c)
+        * a(y,x,z,c) to access one element
+    For CImgList:
+        * returns a list of npy arrays
+        * if original CImgList has nimages, then
+             len(a) --> nimages
+        * To access one pixel of the j-th image use a[j](y,x,z,c)
+
+        """
+
+    basename, file_extension = os.path.splitext(filename)
+    fa = open(filename, 'rb')
+
+    out =[]
+    line0 = fa.readline() #Endiannes
+    tiposdato=line0.split()
+    number_of_images=int(tiposdato[0])
+    datatypecimg=tiposdato[1].decode()
+    endiannes = tiposdato[2]
+
+    datatype = typesDict[datatypecimg];
+
+    for n in range(number_of_images):
+        line1 = fa.readline() # Dimensions
+        dimensiones = line1.split()
+        width = int(dimensiones[0]);
+        height = int(dimensiones[1]);
+        depth = int(dimensiones[2]);
+        spectrum = int(dimensiones[3]);
+
+        if file_extension == '.cimgz':
+            csize= int(dimensiones[4].decode()[1:])
+            data = fa.read(csize)
+            data = zlib.decompress(data)
+        else:
+            data = fa.read(width*height*depth*spectrum*dtype(datatype).itemsize)
+
+        flattened = np.frombuffer(data,dtype=datatype)
+
+        cimg=flattened.reshape((spectrum,depth,height,width))
+        cimg=np.squeeze(np.transpose(cimg,(2,3,1,0)))
+        out.append(cimg)
+
+    fa.close()
+    if len(out)==1:
+        return out[0]
+    return out