Mon, 03 Aug 2009 23:39:53 +0100
add basic test routine for Ptouch library
philpem@5 | 1 | ---------------------------------------------------------------------------------------- |
philpem@5 | 2 | |
philpem@5 | 3 | |
philpem@5 | 4 | CHANGES.txt : List the changes made between consecutive versions of The CImg Library |
philpem@5 | 5 | |
philpem@5 | 6 | |
philpem@5 | 7 | ----------------------------------------------------------------------------------------- |
philpem@5 | 8 | |
philpem@5 | 9 | *----------------------------- |
philpem@5 | 10 | *----------------------------- |
philpem@5 | 11 | * Changes from 1.2.9 to 1.3.0 |
philpem@5 | 12 | *----------------------------- |
philpem@5 | 13 | *----------------------------- |
philpem@5 | 14 | |
philpem@5 | 15 | The 1.3.0 version of the CImg Library is a major release, and will probably break the |
philpem@5 | 16 | compatibility with your existing code. Anyway, the overall philosophy is the same so |
philpem@5 | 17 | converting your code should not require lot of work fortunately. |
philpem@5 | 18 | |
philpem@5 | 19 | * New features : |
philpem@5 | 20 | - Added function 'CImg<T>::[get_]distance()' that compute the Euler unsigned distance map |
philpem@5 | 21 | from a shape of specified isovalue in an image, using a fast linear algorithm. |
philpem@5 | 22 | - Added functions 'CImg<>::set_linear_at{X,Y,Z}()' allowing to set pixel values using |
philpem@5 | 23 | float-valued coordinates, with linear interpolation. |
philpem@5 | 24 | - Added z-buffering capabilities in some drawing functions, so that displaying a |
philpem@5 | 25 | 3D object with 'CImg<T>::draw_object3d()' now takes care of eventual crossing primitives. |
philpem@5 | 26 | (added shortcut CTRL+Z to enable/disable zbuffering in 'CImg<T>::display_object3d()'. |
philpem@5 | 27 | - Added functions 'CImgList<T>::is_same*()' to check dimensions of image lists. |
philpem@5 | 28 | - Added plugin 'plugins/skeleton.h', as well as example of use 'examples/skeletonize.cpp' that |
philpem@5 | 29 | computes the skeleton of a shape (binary image). Thanks to F-X Dupé for this nice contrib ! |
philpem@5 | 30 | - Added function 'CImg<T>::get_elevation3d()' that constructs a 3D object by 'elevating' |
philpem@5 | 31 | an instance image. |
philpem@5 | 32 | - In function 'CImg<T>::sharpen()', two sharpening methods are now implemented : shock filters |
philpem@5 | 33 | and inverse diffusion. |
philpem@5 | 34 | - Added function 'CImg[List]<T>::save_ffmpeg()', allowing to save an image sequence, directly |
philpem@5 | 35 | as a movie file, using the FFMPEG library. Thanks to David. G. Starweather for this very nice |
philpem@5 | 36 | contribution ! |
philpem@5 | 37 | - Added function 'CImg<T>::[get_]warp()' that can warp an image using a deformation field. |
philpem@5 | 38 | - Added function 'CImg<T>::[get_]solve_tridiagonal()' that can quickly solve a tridiagonal linear |
philpem@5 | 39 | system of equations (use the Thomas Algorithm). |
philpem@5 | 40 | - Added function 'CImg<T>::[get_]load_dcraw_external()' that allows to read RAW digital camera files, |
philpem@5 | 41 | using the open-source external tool 'dcraw'. |
philpem@5 | 42 | - Added file 'examples/CMakeLists.txt' to generate makefile using the 'cmake' tool (thanks to |
philpem@5 | 43 | Baptiste Mougel for this nice contribution). |
philpem@5 | 44 | - Added functions 'CImg<T>::display_graph()' and 'CImg<T>::select_graph()' that can be used |
philpem@5 | 45 | to display a graph plot or crop a sub-graph. |
philpem@5 | 46 | - Added function 'CImg<T>::[get_]autocrop()' that can autocrop an image regarding to a background |
philpem@5 | 47 | value or color. |
philpem@5 | 48 | - Added new demo 'Word Puzzle' in file 'examples/CImg_demo.cpp'. |
philpem@5 | 49 | - Added new plugin 'plugins/cimgIPL.h', as well as example file 'examples/use_cimgIPL.h' that shows |
philpem@5 | 50 | how to convert between CImg and IplImage structures (used in OpenCV). Thanks to Haibo Zheng for |
philpem@5 | 51 | this nice contribution ! |
philpem@5 | 52 | - Function 'CImg<T>::load_ffmpeg()' is now able to return information on the main video stream, without |
philpem@5 | 53 | having to load frames. |
philpem@5 | 54 | - New function 'CImg[List]<T>::valuestring()' returns a C-string containing values of the image pixels. |
philpem@5 | 55 | - Added file 'examples/gmic4gimp.cpp' which implements a G'MIC plug-in for GIMP. |
philpem@5 | 56 | - Added file 'resources/cimg_buildpackage' which is a bash script that generates package files for CImg. |
philpem@5 | 57 | - Added function 'cimg::prand()' which returns a random variable following a Poisson distribution. |
philpem@5 | 58 | |
philpem@5 | 59 | * Optimizations / Modifications : |
philpem@5 | 60 | - The API of the library has been quite largely modified. It means that the 1.3.0 release is |
philpem@5 | 61 | not meant to be fully compatible with previous versions. This is the beginning of a new |
philpem@5 | 62 | important branch. |
philpem@5 | 63 | - Functions 'CImg[List]<T>::load()' can now check for magick numbers for determining file format |
philpem@5 | 64 | (instead of using only their filename extension). |
philpem@5 | 65 | - Cleaned lot of code in 'CImg<T>::draw_*()' functions. Few of them have now different signatures, |
philpem@5 | 66 | particularly 'CImg<T>::draw_text()', 'CImg<T>::draw_spline()' and 'CImg<T>::draw_image()'. |
philpem@5 | 67 | - Improved warning removal when compiling on Microsoft Visual C++ compiler. It is now very rare |
philpem@5 | 68 | to get warnings when compiling CImg-based files ! |
philpem@5 | 69 | - Plugin 'plugins/distance_saito.h' has been removed, since a new and clean implementation of |
philpem@5 | 70 | the distance function is now available in the 'CImg.h' file. |
philpem@5 | 71 | - Function 'CImg<T>::equalize_histogram()' has been renamed to 'CImg<T>::equalize()'. |
philpem@5 | 72 | - Functions 'CImg<T>::get_gradient()', 'CImg<T>::get_structure_tensor()' and 'CImg<T>::get_hessian()' |
philpem@5 | 73 | now replaces the old versions. |
philpem@5 | 74 | - Provided example file 'examples/inrcast.cpp' has been renamed and recoded as 'examples/gmic.cpp'. |
philpem@5 | 75 | G'MIC is now an independant project, having its own web page : http://gmic.sourceforge.net/. |
philpem@5 | 76 | - Plugin 'plugins/cimgmatlab.h' has been updated. |
philpem@5 | 77 | - Added pipe support (for POSIX systems) in load/save functions using external tools, so that |
philpem@5 | 78 | a temporary file is not necessary to read/write. |
philpem@5 | 79 | - Function 'CImg<T>::load_analyze()' can now read niftii files directly using a FILE* argument. |
philpem@5 | 80 | - Improved global structure of the CImg package. |
philpem@5 | 81 | - Silent output for 'CImg<T>::{load_save}_ffmpeg_external()' on Windows. |
philpem@5 | 82 | - Better zoom-in procedure in 'CImg<T>::display()'. |
philpem@5 | 83 | - Function 'CImg<T>::get_hessian()' now allows to specify the set of desired axes. |
philpem@5 | 84 | - Macros 'cimg_*_path' do not exist anymore. Instead, the user can dynamically change these paths used |
philpem@5 | 85 | by CImg, by using functions' cimg::*_path()'. |
philpem@5 | 86 | - Code corrections in order to compile without warnings on g++ 4.3 version. |
philpem@5 | 87 | - Added 'windows' targets in the 'examples/Makefile', so compiling examples under MinGW is straightforward. |
philpem@5 | 88 | - Added soft thresholding capability to 'CImg<T>::threshold()'. |
philpem@5 | 89 | |
philpem@5 | 90 | * Bug corrections : |
philpem@5 | 91 | - Corrected bug related to X11 events on some Windows Managers, thanks to Rainer Steffens |
philpem@5 | 92 | for his nice patch ! |
philpem@5 | 93 | - Corrected normalization bug that occured when doing inverse FFT of images, using libfftw3. |
philpem@5 | 94 | - Corrected endianness problem when reading 16 bits PNM files. |
philpem@5 | 95 | - Corrected small bug in 'CImg<T>::display()' : drawn coordinates were wrong when |
philpem@5 | 96 | user had selected a region to zoom in. |
philpem@5 | 97 | - Extension 'tiff' is now recognized in 'CImg<T>::load()'. |
philpem@5 | 98 | - Corrected computation of variance (=0) when image has only one element. |
philpem@5 | 99 | - Corrected y-range bug in 'CImg<T>::draw_ellipse()'. |
philpem@5 | 100 | - Corrected bug in 'CImg<T>::save_pandore()' when saving int images on 64bits systems. |
philpem@5 | 101 | - And many small bug corrections... |
philpem@5 | 102 | |
philpem@5 | 103 | *----------------------------- |
philpem@5 | 104 | *----------------------------- |
philpem@5 | 105 | * Changes from 1.2.8 to 1.2.9 |
philpem@5 | 106 | *----------------------------- |
philpem@5 | 107 | *----------------------------- |
philpem@5 | 108 | |
philpem@5 | 109 | * New features : |
philpem@5 | 110 | - Added new example file 'examples/captcha.cpp', which can be used to draw captcha images. This is a very |
philpem@5 | 111 | short and simple code, so it can be interesting for a first approach of CImg. |
philpem@5 | 112 | - Added functions 'CImg<T>::scale_2x()' and 'CImg<T>::scale_3x()' allowing to upscale an image |
philpem@5 | 113 | with a edge-directed algorithm (see 'http://scale2x.sourceforge.net/') |
philpem@5 | 114 | - Added function 'CImg<T>::save_cpp()' allowing to save an image directly as a |
philpem@5 | 115 | C/C++ source code. |
philpem@5 | 116 | - Added function 'CImg<T>::draw_mandelbrot()' allowing to draw quadratic mandelbrot fractal set on images. |
philpem@5 | 117 | - Added a new demo effect 'Fish-Eye Magnification' in file 'examples/CImg_demo.cpp'. |
philpem@5 | 118 | - Added new fields in CImgDisplay for an easy test of keys pressing. Very useful for testing complicated combinations. |
philpem@5 | 119 | - Added functions to read/save gzipped files. |
philpem@5 | 120 | - Added compression option for .cimg files (requires the use of the 'zlib' library). |
philpem@5 | 121 | - Added color conversions for CMY and CMYK color bases. |
philpem@5 | 122 | |
philpem@5 | 123 | * Optimizations / Modifications : |
philpem@5 | 124 | - Big code cleaning and re-organization in file 'CImg.h', making the things more clear. |
philpem@5 | 125 | - Function 'CImg<T>::load_ascii()' has been modified to allow comments before specifying image |
philpem@5 | 126 | dimensions. |
philpem@5 | 127 | - Functions 'CImg[List]::print()' have been slightly modified to be more precise and clear. Also used |
philpem@5 | 128 | in functions 'CImg[List]::display()'. |
philpem@5 | 129 | - Improved functionalities of the image processing tool 'inrcast.cpp'. |
philpem@5 | 130 | - Improved 'CImg[List]<T>::display()' function allowing easy navigation and zooming in images. |
philpem@5 | 131 | - Add native use of ffmpeg libraries to load video sequences (Thanks to David Starkweather for his nice contribution !) |
philpem@5 | 132 | - Optimized function 'CImg<T>::permute_axes' for common used cases (planar to interleaved RGB and RGBA). |
philpem@5 | 133 | - Added parameter 'step_frame' in functions that can load video sequences, |
philpem@5 | 134 | i.e. CImg[List]<T>::load_yuv(), CImg[List]<T>::load_tiff(), CImg[List]<T>::load_ffmpeg(), so that frames |
philpem@5 | 135 | can be skipped when loading the video files. |
philpem@5 | 136 | - Removed parameter 'events_type' in CImgDisplay functions. By default, a display is always catching all user |
philpem@5 | 137 | events. Having different choices made slight problems between different architectures (and was not really |
philpem@5 | 138 | useful). |
philpem@5 | 139 | - Removed plugin 'plugins/toolbox3d.h'. Functions of the plug-ins are now natively integrated into the CImg.h file, |
philpem@5 | 140 | as well as the LibBoard library support. |
philpem@5 | 141 | - Renamed functions 'CImg<>::*pix?d()' to 'CImg<>::*at?()'. |
philpem@5 | 142 | |
philpem@5 | 143 | * Bug corrections : |
philpem@5 | 144 | - Small bug in functions 'CImg[List]::contains()' were corrected. |
philpem@5 | 145 | - Bug correction in function 'CImg<T>::[get_]stats()' : offset of min and max values were sometimes incorrect. |
philpem@5 | 146 | - Bug correction in CImgDisplay events for Windows-based OS. When mouse leaved a window, coordinates |
philpem@5 | 147 | didn't reset to -1 sometimes. |
philpem@5 | 148 | - Small non-computational bug correction in 'CImg<T>::symmetric_eigen()'. |
philpem@5 | 149 | - Removed g++ warning that occured when using 'libpng' ('warning: argument 'xxx' might be clobbered by 'longjmp' or 'vfork'). |
philpem@5 | 150 | - Corrected small illumination bug with double sided 3D objects in CImg<T>::draw_object3d(). |
philpem@5 | 151 | - And a lot of other small improvements and bug corrections... |
philpem@5 | 152 | |
philpem@5 | 153 | *----------------------------- |
philpem@5 | 154 | *----------------------------- |
philpem@5 | 155 | * Changes from 1.2.7 to 1.2.8 |
philpem@5 | 156 | *----------------------------- |
philpem@5 | 157 | *----------------------------- |
philpem@5 | 158 | |
philpem@5 | 159 | * New features : |
philpem@5 | 160 | - Added native Carbon support in CImgDisplay. Allows to run CImg on MacOSX without installing X11. |
philpem@5 | 161 | This is a beta support, so not activated by default. Define 'cimg_use_carbon' to enable it. |
philpem@5 | 162 | Many Thanks to Adrien Reboisson, Romain Blei and Jean-Marie Favreau for this nice contribution. |
philpem@5 | 163 | Any comments and contributions are welcome. |
philpem@5 | 164 | - Added variant of 'CImgList<T>::remove()' that can remove several images from a CImgList<T> list |
philpem@5 | 165 | at the same time. |
philpem@5 | 166 | - Added new numbered macros 'cimg_plugin1...8', for easy inclusion of multiple CImg plug-ins. |
philpem@5 | 167 | - Added plugin 'plugins/distance_saito.h' that implements the Saito's distance transform. |
philpem@5 | 168 | - Added function 'CImg<T>::blur_patch()' that performs a patch-based Tikhonov flow on the image. |
philpem@5 | 169 | Allows to denoise and regularize image quite well (is time-consuming anyway). |
philpem@5 | 170 | - Functions 'CImg<T>::load_tiff()', 'CImgList<T>::load_tiff()', 'CImg<T>::save_tiff()' and |
philpem@5 | 171 | 'CImgList<T>::save_tiff()' has been (re)-coded. It is now possible to read/save multi-pages tif |
philpem@5 | 172 | image files worriless. |
philpem@5 | 173 | - Native support for 'icc' compiler (Intel C++ compiler) added in the Makefile. |
philpem@5 | 174 | Just type 'make CC=icc olinux' to compile using icc (offers nice performances in code optimization). |
philpem@5 | 175 | - Started support of OpenMP directives, to allow parallelization of CImg functions in order to |
philpem@5 | 176 | improve performances. Not few used, by this could change in the future. |
philpem@5 | 177 | - Added functions to load/save video sequences using the external tool FFMPEG (http://http://ffmpeg.mplayerhq.hu/). |
philpem@5 | 178 | 'inrcast' is now able to read video sequences using FFMPEG. |
philpem@5 | 179 | - Added new color basis conversions : RGBtoHSI(), HSItoRGB(), HSLtoRGB() (Thanks to Cesar Martinez for his |
philpem@5 | 180 | contribution). |
philpem@5 | 181 | - Added example file 'examples/radon_transform.cpp', provided by David G. Starkweather (Thanks guy!). |
philpem@5 | 182 | |
philpem@5 | 183 | * Optimizations / Modifications : |
philpem@5 | 184 | - The main library file 'CImg.h' is now distributed under dual license CeCILL or CeCILL-C. |
philpem@5 | 185 | - Patched function 'CImg<T>::load_tiff()' for a better support of float-valued tiff images. |
philpem@5 | 186 | - Renamed 'CImg<T>::inverse()' as 'CImg<T>::invert()' and 'CImg<>::pseudoinverse()' as 'CImg<T>::pseudoinvert()'. |
philpem@5 | 187 | - Function 'CImg<T>::displacement_field()' has been modified to consider a multi-valued geometry |
philpem@5 | 188 | for motion detection (so color images are naturally taken into account now). |
philpem@5 | 189 | - Optimized functions 'CImg<T>::dilate()' and 'CImg<T>::erode()' |
philpem@5 | 190 | - Slightly optimized pixel access and display rendering functions. |
philpem@5 | 191 | - Used native mutex mechanism of X11 instead of the pthread library. |
philpem@5 | 192 | - Removed deprecated example file 'examples/pslider.cpp'. |
philpem@5 | 193 | - Renamed 'cimg::PI' to 'cimg::valuePI' to avoid compilation problems with some C++ compilers that define |
philpem@5 | 194 | the PI macro. |
philpem@5 | 195 | - Added specular type lightning in routines that draw 3D objects. Parameters 'specular_light' and |
philpem@5 | 196 | 'specular_shine' replace the old 'ambient_light' parameter. |
philpem@5 | 197 | |
philpem@5 | 198 | * Bug corrections : |
philpem@5 | 199 | - Bug corrected in 'CImg<T>::draw_polygon()' : wrong scanlines were drawn with some complex polygons. |
philpem@5 | 200 | - Bug corrected in 'CImg<T>::convolve()' and 'CImg<T>::correlate()'. Happened when dealing with non square |
philpem@5 | 201 | masks with even dimensions. |
philpem@5 | 202 | - Bug corrected in 'CImg<T>::save_png()' and 'CImg<T>::load_png()' when dealing with 16 bits |
philpem@5 | 203 | images in little-endian proc. |
philpem@5 | 204 | - Bug corrected in 'CImg<T>::get_coordinates()' when dealing with 2-channels images. |
philpem@5 | 205 | - Bug corrected, 2-channels images were not correctly displayed (blue channel was used instead of being 0). |
philpem@5 | 206 | - And a lot of other small bug corrections... |
philpem@5 | 207 | |
philpem@5 | 208 | *----------------------------- |
philpem@5 | 209 | *----------------------------- |
philpem@5 | 210 | * Changes from 1.2.6 to 1.2.7 |
philpem@5 | 211 | *----------------------------- |
philpem@5 | 212 | *----------------------------- |
philpem@5 | 213 | |
philpem@5 | 214 | * New features : |
philpem@5 | 215 | - Added functions 'CImg<T>::get_haar()', 'CImg<T>::haar()' allowing to compute the direct and |
philpem@5 | 216 | inverse Haar multiscale transform on 2D or 3D images. |
philpem@5 | 217 | - Added function 'CImg<T>::get_hessianXY()' and 'CImg<T>::get_hessianXYZ()' that compute |
philpem@5 | 218 | the components of the hessian matrix of a 2D or 3D image. |
philpem@5 | 219 | - Added function 'CImg<T>::variancemean()' able to compute the variance and mean value of |
philpem@5 | 220 | an image at the same time. |
philpem@5 | 221 | - Added new macros for 'cimg_for_out*' and 'cimg_for_in*' families, all combinations are |
philpem@5 | 222 | now fully handled. |
philpem@5 | 223 | |
philpem@5 | 224 | * Optimizations / Modifications : |
philpem@5 | 225 | - Modified 'CImg<T>::get_resize()'. Moving average is now defined to be interp=2. Additional |
philpem@5 | 226 | parameter 'center' has been added so that centering image is possible when upsizing with interp=0. |
philpem@5 | 227 | |
philpem@5 | 228 | * Bug corrections : |
philpem@5 | 229 | - Critical bug correction has been made for non-const functions taking a const T& or const t& argument. |
philpem@5 | 230 | 'const T&' arguments have mainly been replaced by 'const T' arguments, in order to avoid wrong references |
philpem@5 | 231 | problems. Thanks to Jinwei Gu who pointed this out to me. |
philpem@5 | 232 | |
philpem@5 | 233 | *----------------------------- |
philpem@5 | 234 | *----------------------------- |
philpem@5 | 235 | * Changes from 1.2.5 to 1.2.6 |
philpem@5 | 236 | *----------------------------- |
philpem@5 | 237 | *----------------------------- |
philpem@5 | 238 | |
philpem@5 | 239 | * New features : |
philpem@5 | 240 | - Added functions 'CImg<T>::fillV(), CImg<T>::fillZV() and CImg<T>::fillYZV()' allowing to set image values |
philpem@5 | 241 | at a specified pixel and along specified axes. |
philpem@5 | 242 | - Added variant of 'CImg<T>::get_dijkstra()' allowing to use any function/class for definition of weights. |
philpem@5 | 243 | - Added new interpolation technique (moving average) in 'CImg<T>::resize()' allows very precise image downsizing. |
philpem@5 | 244 | (Thanks to François Lauze who provided me with some of its code). |
philpem@5 | 245 | - Added lot of new and useful neighborhood loop macros. |
philpem@5 | 246 | A new executable 'examples/generate_loop_macros.cpp' allows to generate |
philpem@5 | 247 | 2D loops for arbitrary neighborhood size. A new plugin 'plugins/loop_macros.h' has been created, containing |
philpem@5 | 248 | all loops NxN (until N=32) and NxNxN (until N=8). |
philpem@5 | 249 | - Added separate component and YCbCr color base processing in options of 'examples/greycstoration.cpp' |
philpem@5 | 250 | - Added macros 'cimg_argument?()' allowing to retrieve command lines that are not options (not beginning with a '-'). |
philpem@5 | 251 | - Added shortcut 'CTRL+O' in 'CImg<T>::get_coordinates()' allowing to save visualized instance image into a .cimg file. |
philpem@5 | 252 | |
philpem@5 | 253 | * Optimizations / Modifications : |
philpem@5 | 254 | - Macros with neighborhood loops have been extended and simplified. Some of the previous ones have been deleted, |
philpem@5 | 255 | others have appeared. Basically, no functionnalities have been removed. |
philpem@5 | 256 | - Macro 'cimg_version' is now 126 instead of 1.26, allowing easy comparison with integer values. |
philpem@5 | 257 | - Changed traits name in cimg:: for more coherence. |
philpem@5 | 258 | - New design of the website and new sexy flyer available (Thanks to Sebastien Hanel). |
philpem@5 | 259 | |
philpem@5 | 260 | * Bug corrections : |
philpem@5 | 261 | - Corrected function 'CImg<T>::cubic_pix[1,2]d()'. |
philpem@5 | 262 | - Corrected bug in 'CImg<T>::blur_median()'. |
philpem@5 | 263 | - Corrected bug with temporary random filenames when using multi-threading. |
philpem@5 | 264 | - Corrected small bug in 'CImg<T>::draw_point()'. |
philpem@5 | 265 | - Corrected name 'CImg<T>::dijkstra()' instead of 'CImg<T>::djikstra()'. |
philpem@5 | 266 | - Corrected compilation bug in some plug-ins. |
philpem@5 | 267 | - And other small bug corrections... |
philpem@5 | 268 | |
philpem@5 | 269 | *----------------------------- |
philpem@5 | 270 | *----------------------------- |
philpem@5 | 271 | * Changes from 1.2.4 to 1.2.5 |
philpem@5 | 272 | *----------------------------- |
philpem@5 | 273 | *----------------------------- |
philpem@5 | 274 | |
philpem@5 | 275 | * New features : |
philpem@5 | 276 | - Added function 'CImg<T>::label_regions()' that can label deconnected regions. |
philpem@5 | 277 | - Added overload of function 'CImg<T>::draw_point()' that is able to draw point clouds. |
philpem@5 | 278 | - Added function 'CImg<T>::get_blur_bilateral()' that implements bilateral filtering. |
philpem@5 | 279 | - Added functions 'CImg<T>::get_RGBtoBayer()' and 'CImg<T>::get_BayertoRGB()' that converts between |
philpem@5 | 280 | RGB and Bayer-coded representation of an image. |
philpem@5 | 281 | - Added functions CImg[List]<T>::min(), max(), mean(), variance(), get_stats(), and contains() |
philpem@5 | 282 | to deal easily with image statistics (class CImgStats is now obsolete and has been moved to |
philpem@5 | 283 | plugin 'plugins/deprecated.h'). |
philpem@5 | 284 | - Added versions of 'CImg[List]<T>::get_*()' as external functions, |
philpem@5 | 285 | so writting 'res=cos(img)*5;' is valid. |
philpem@5 | 286 | - Added postfix versions 'CImg[List]<T>::operator++(int)' and 'CImg[List]<T>::operator--(int)'. |
philpem@5 | 287 | - Added function 'CImg<T>::djikstra()' that can compute a minimal path in a graph. |
philpem@5 | 288 | - Added new constructor able to construct a new image from the dimensions of another one. |
philpem@5 | 289 | |
philpem@5 | 290 | * Optimizations / Modifications : |
philpem@5 | 291 | - Recoded 'CImg<T>::save_magick()' to improve performances when saving images using Magick++ API. |
philpem@5 | 292 | - Recoded 'CImg<T>::draw_fill()' to avoid crashes on large (volumetric) images due to stack overflow. |
philpem@5 | 293 | Also added parameters to choose between 4 or 8 connexity for 2D images. |
philpem@5 | 294 | - Added simple point representation in 'CImg<T>::draw_graph()'. |
philpem@5 | 295 | -> Note that the gtype variable values have been redefined as well !!! <- |
philpem@5 | 296 | - Added parameter 'CImg<T>::quantize()' that allows possible value renormalization. |
philpem@5 | 297 | - Improved documentation. |
philpem@5 | 298 | - Drawing functions accept now templated color pointer, as well as templated image containing color data. |
philpem@5 | 299 | - Recoded Deriche filter. More fast and precise, some cases were buggy. |
philpem@5 | 300 | - Removed class CImgStats (moved to plugin 'plugins/deprecated.h'). |
philpem@5 | 301 | - Removed unuseful image copies in some functions. |
philpem@5 | 302 | - Cleaning the code. |
philpem@5 | 303 | |
philpem@5 | 304 | * Bug corrections : |
philpem@5 | 305 | - Corrected bug in 'CImg<T>::pseudoinverse()' concerning pseudo-inversion of non-inversible matrices. |
philpem@5 | 306 | - Corrected return value in 'CImg<T>::get_RGBtoHSV()'. |
philpem@5 | 307 | - Corrected value range bug in 'CImg<T>::quantize()'. |
philpem@5 | 308 | - And other small bug corrections... |
philpem@5 | 309 | |
philpem@5 | 310 | *----------------------------- |
philpem@5 | 311 | *----------------------------- |
philpem@5 | 312 | * Changes from 1.2.3 to 1.2.4 |
philpem@5 | 313 | *----------------------------- |
philpem@5 | 314 | *----------------------------- |
philpem@5 | 315 | |
philpem@5 | 316 | * New features : |
philpem@5 | 317 | - Added macro 'cimg_for_lineXY(x,y,x0,y0,x1,y1)' that loops over an image segment (x0,y0)-(x1,y1). |
philpem@5 | 318 | - Added function 'CImg<T>::draw_polygon()' that draws a filled polygon of any shape in the instance image. |
philpem@5 | 319 | - Added macros 'cimg_load_plugin', 'cimg_save_plugin', 'cimglist_load_plugin' and 'cimglist_save_plugin' |
philpem@5 | 320 | allowing to easily add file support for your own data format. |
philpem@5 | 321 | - Added plugin 'plugins/add_fileformat.h' to show how to use these new macros to register a new |
philpem@5 | 322 | image format in CImg. |
philpem@5 | 323 | - Added version of 'CImg[List]<T>::{load,save}_cimg()' that is able to read/write only sub-images of |
philpem@5 | 324 | data stored in a (big) .cimg file. |
philpem@5 | 325 | - Added an online chat on the CImg website, so that users can interact freely. |
philpem@5 | 326 | |
philpem@5 | 327 | * Optimizations / Modifications : |
philpem@5 | 328 | - Added functions 'CImg[List]<T>::save_empty_cimg()' that can be used to work with very large images. |
philpem@5 | 329 | You can now create first an empty (big) image, then load/save sub-images into this big .cimg file, |
philpem@5 | 330 | without needing much memory. |
philpem@5 | 331 | - Slightly modified the header of .cimg files, so little/big endian info is stored. |
philpem@5 | 332 | - Reorganized some 'CImg[List]<T>::load_*()' functions, trying to avoid unnecessary memory usage. |
philpem@5 | 333 | - Recoded versions of CImg<T>::draw_triangle() that now use the Bresenham's algorithm for interpolation |
philpem@5 | 334 | (more precise, while using only integer calculus). |
philpem@5 | 335 | - Added versions of 'CImg<T>::draw_triangle()' and 'CImg<T>::draw_line()' that are able to map textures |
philpem@5 | 336 | while correctly handling the perspective correction, so that 3D mapped triangles look correct now. |
philpem@5 | 337 | |
philpem@5 | 338 | * Bug corrections : |
philpem@5 | 339 | - Corrected a small bug in get_coordinates() : channels of hyperspectral images with (dim>3) where |
philpem@5 | 340 | subsampled instead of cropped for image visualization. |
philpem@5 | 341 | - And many small bug corrections... |
philpem@5 | 342 | |
philpem@5 | 343 | *----------------------------- |
philpem@5 | 344 | *----------------------------- |
philpem@5 | 345 | * Changes from 1.2.2 to 1.2.3 |
philpem@5 | 346 | *----------------------------- |
philpem@5 | 347 | *----------------------------- |
philpem@5 | 348 | |
philpem@5 | 349 | * New features : |
philpem@5 | 350 | - Added file 'example/tron.cpp', implementing a very simple version of the |
philpem@5 | 351 | famous 'Tron' game (2 players). |
philpem@5 | 352 | - Added constructor that create a CImg<T> from the content of a CImgDisplay window. |
philpem@5 | 353 | - Added support of the 'Board' library in plugin 'plugins/toolbox3d.h', allowing |
philpem@5 | 354 | the saving of 3D objects snapshots in SVG, EPS or FIG vector-graphics formats. |
philpem@5 | 355 | - Added function 'CImgList<T>::[get]_split()' that can split all image of an |
philpem@5 | 356 | an image list into a specified axis. |
philpem@5 | 357 | - Added sphere primitive in 'CImg<T>::draw_object3d()'. |
philpem@5 | 358 | - Added function 'CImg<T>::ellipsoid()' in 'plugins/toolbox3d.h'. |
philpem@5 | 359 | - Added useful new constructors 'CImg<T>()' and 'CImgList<T>()' with variable |
philpem@5 | 360 | numbers of parameters that can define images or image lists initialized with |
philpem@5 | 361 | user-specified values. Example : |
philpem@5 | 362 | CImg<float> img(3,2,1,1, 1,2,3, 4,5,6); defines image [ 1,2,3; 4,5,6 ]. |
philpem@5 | 363 | CImgList<unsigned char> list(3,1,3,1,1, 1,0,0, 0,1,0, 0,0,1); defines |
philpem@5 | 364 | list of three vectors { [1;0;0], [0;1;0], [0;0;1] }. |
philpem@5 | 365 | - Added poly-bezier curve drawing, with 'CImg<T>::draw_spline()' overload. |
philpem@5 | 366 | - Added file 'examples/jawbreaker.cpp', implementing a very funny games featuring |
philpem@5 | 367 | small colored balls. |
philpem@5 | 368 | - Added demo '3D Reflection' in 'examples/CImg_test.cpp' showing some tricky uses |
philpem@5 | 369 | with the 3D capabilities of CImg. |
philpem@5 | 370 | - Added 'CImg<T>::draw_spline()' for drawing 2D cubic Bezier curves. |
philpem@5 | 371 | - Added plugin 'plugins/jpeg_buffer.h', allowing to read/write directly image data |
philpem@5 | 372 | from/to jpeg-coded memory buffers (Many thanks to Paolo Prete who made it possible !). |
philpem@5 | 373 | - Added optional support of the LAPACK library for matrix computation. |
philpem@5 | 374 | Define macro 'cimg_use_lapack' and link your code with LAPACK to enable it |
philpem@5 | 375 | (LAPACK routines are slightly faster routines than native CImg ones). |
philpem@5 | 376 | - Added function 'CImg<T>::get_constrast_LUT8()' function which returns a 256 colors |
philpem@5 | 377 | palette that has nice properties of being well contrasted when color indices are |
philpem@5 | 378 | close to eachothers. |
philpem@5 | 379 | - Added function 'CImg<T>::get_rainbow_LUT8()' that returns a rainbow-type palette. |
philpem@5 | 380 | - Added shortcuts CTRL+PAGE[UP,DOWN] in 'CImg<T>::display_object3d()' to brighten or |
philpem@5 | 381 | darken the 3D object. |
philpem@5 | 382 | |
philpem@5 | 383 | * Optimizations / Modifications : |
philpem@5 | 384 | - In 'CImg<T>::HSVtoRGB()' and 'CImg<T>::RGBtoHSV()', the H components is now expressed in degree. |
philpem@5 | 385 | - Improved multi-key testing with CImgDisplay. |
philpem@5 | 386 | - Added and modified some 'operator<<()' and 'operator>>()' in 'CImg<T>' and 'CImgList<T>'. |
philpem@5 | 387 | - Renamed 'plugins/primitives3d.h' to 'plugins/toolbox3d.h', and added a new example |
philpem@5 | 388 | 'examples/toolbox3d.cpp' that shows how to use it. |
philpem@5 | 389 | - Renamed 'plugins/alias.h' to 'plugins/deprecated.h'. |
philpem@5 | 390 | - Moved function 'CImg<T>::resize_object3d()' to 'plugins/toolbox3d.h'. |
philpem@5 | 391 | - Simplified 'CImgList<T>::insert()' procedures, and removed functions 'CImgList<T>::insert_shared()'. |
philpem@5 | 392 | - Added functions parameters for almost all drawing functions, allowing the correct use of |
philpem@5 | 393 | patterns in line drawing (beware, some functions signatures have been slightly modified). |
philpem@5 | 394 | - Renamed 'CImg<T>::feature_selection()' as 'CImg<T>::get_coordinates()' |
philpem@5 | 395 | (for better coherence with overall function names). Include 'plugins/deprecated.h' for backward |
philpem@5 | 396 | compatibility. |
philpem@5 | 397 | - Optimized function 'CImg<T>::draw_line()'. |
philpem@5 | 398 | - Recoded function 'CImg<T>::draw_circle()', uses now the more precise Bresenham's circle |
philpem@5 | 399 | algorithm. |
philpem@5 | 400 | - Improved function 'CImg<T>::sphere()', in plugin 'toolbox3d.h', reducing drastically |
philpem@5 | 401 | the number of created points in the 3D mesh. |
philpem@5 | 402 | |
philpem@5 | 403 | * Bug corrections : |
philpem@5 | 404 | - Corrected some small bugs in CImg.h to allow the compilation with the Intel C++ Compiler (icc & icl). |
philpem@5 | 405 | - Corrected bug in copy constructor of CImgList<> that didn't make shared copy of images. |
philpem@5 | 406 | - Fixed bug in 'CImg<T>::symmetric_eigen()' : some negative eigenvalues where miscalculated when |
philpem@5 | 407 | their absolute values was also an eigenvalue of the considered matrix. |
philpem@5 | 408 | - And many small bug corrections... |
philpem@5 | 409 | |
philpem@5 | 410 | *----------------------------- |
philpem@5 | 411 | *----------------------------- |
philpem@5 | 412 | * Changes from 1.2.1 to 1.2.2 |
philpem@5 | 413 | *----------------------------- |
philpem@5 | 414 | *----------------------------- |
philpem@5 | 415 | |
philpem@5 | 416 | * New features : |
philpem@5 | 417 | - Added 'CImg<T>::distance_function()' that can compute distance function to the 0-isophote. |
philpem@5 | 418 | - Added curve editor example in 'examples/curve_editor.cpp'. |
philpem@5 | 419 | |
philpem@5 | 420 | * Bug corrections : |
philpem@5 | 421 | - Corrected small bug when trying to found pathname under Windows. |
philpem@5 | 422 | - Corrected bug when using XSHM extension on Mac OS X. |
philpem@5 | 423 | - Corrected/Improved platforms detection by testing the right predefined BSD macros + extra architectures |
philpem@5 | 424 | (Thanks to Marc Espie). |
philpem@5 | 425 | - And many small bug corrections... |
philpem@5 | 426 | |
philpem@5 | 427 | *----------------------------- |
philpem@5 | 428 | *----------------------------- |
philpem@5 | 429 | * Changes from 1.2.0 to 1.2.1 |
philpem@5 | 430 | *----------------------------- |
philpem@5 | 431 | *----------------------------- |
philpem@5 | 432 | |
philpem@5 | 433 | * New features : |
philpem@5 | 434 | - Added macro 'cimg_for_spiralXY', allowing to loop over an image using a spiral-shaped trajectory. |
philpem@5 | 435 | - Added shortcut 'CTRL+O' to save object as .off file in 'CImg<T>::display_object3d()'. |
philpem@5 | 436 | - Added operator bool() in CImg, CImgList, CImgStats, CImgDisplay to get |
philpem@5 | 437 | more concise code when testing if an object is empty or not. |
philpem@5 | 438 | - Added empty state for CImgDisplay, can be tested with 'CImgDisplay::is_empty()'. |
philpem@5 | 439 | - Added '.off' file support in 'inrcast'. |
philpem@5 | 440 | |
philpem@5 | 441 | * Optimizations / Modifications : |
philpem@5 | 442 | - Removed all the obsolete #define to ensure compatibility with really older versions of CImg. |
philpem@5 | 443 | You can now include the file 'plugins/alias.h' to get these #define back. |
philpem@5 | 444 | - Added functionalities and debugged 'CImg<T>::save_off()' and 'CImg<T>::load_off()'. |
philpem@5 | 445 | |
philpem@5 | 446 | * Bug corrections : |
philpem@5 | 447 | - Corrected illumination bug in 'CImg<T>::draw_object3d()'. |
philpem@5 | 448 | - Corrected bug in 'CImg<T>::crop()' family functions. |
philpem@5 | 449 | - Corrected small bugs in 'CImgList<T>' (insertion functions) |
philpem@5 | 450 | - Corrected 'CImg<T>::load_tiff()' function. |
philpem@5 | 451 | - And many small bug corrections... |
philpem@5 | 452 | |
philpem@5 | 453 | *----------------------------- |
philpem@5 | 454 | *----------------------------- |
philpem@5 | 455 | * Changes from 1.1.9 to 1.2.0 |
philpem@5 | 456 | *----------------------------- |
philpem@5 | 457 | *----------------------------- |
philpem@5 | 458 | |
philpem@5 | 459 | * New features : |
philpem@5 | 460 | - Added function 'CImg<T>::draw_grid()' that draws a grid on the instance image |
philpem@5 | 461 | (useful when combined with CImg<T>::draw_axis and CImg<T>::draw_graph). |
philpem@5 | 462 | - Added multi-threading support in GREYCstoration plugin and command line version. |
philpem@5 | 463 | - Added support for GraphicsMagick conversion tools (http://www.graphicsmagick.org). |
philpem@5 | 464 | - Added plugin 'integral_line.h' that define functions to track integral lines in images. |
philpem@5 | 465 | - Added CTRL+key combinations in 'CImg<T>::display_object3d' and 'CImg<T>::feature_selection()' : |
philpem@5 | 466 | - CTRL+S : Save snapshot. |
philpem@5 | 467 | - CTRL+D : Double window resolution. |
philpem@5 | 468 | - CTRL+C : Divide window resolution. |
philpem@5 | 469 | - CTRL+F : Fullscreen mode. |
philpem@5 | 470 | - Added new normalization mode=3, now set by default when using CImgDisplay. Try to adapt |
philpem@5 | 471 | the display normalization to the image type. |
philpem@5 | 472 | - Added new example 'edge_explorer.cpp' (thanks to Orges Leka). |
philpem@5 | 473 | - Added new example 'greycstoration4gimp.cpp' (which is a GREYCstoration plugin for the Gimp, thanks |
philpem@5 | 474 | to Grzegorz Szwoch) |
philpem@5 | 475 | - Added functions 'CImg<T>::[get]_round()' that round values of an image. |
philpem@5 | 476 | - Added function 'CImg<T>::draw_line()' able to draw joined set of segments. |
philpem@5 | 477 | - Added interpolation_type=-1 for 'CImg<T>::resize()' corresponding to raw memory resizing, without |
philpem@5 | 478 | interpolation. |
philpem@5 | 479 | - Added function 'CImg<T>::permute_axes()' that can be used to swap order of image axes |
philpem@5 | 480 | (useful for converting ...RRRRRRGGGGGBBBBB... to ...RGBRGBRGBRGB....) |
philpem@5 | 481 | - Added support for NIFTI files (extension '.nii') added in 'CImg<T>::load_analyze()'. |
philpem@5 | 482 | - Added function 'CImg<T>::[get_]displacement_field()' that can estimate displacement field between two images. |
philpem@5 | 483 | - Added default constructor for the 'CImgDisplay' class, which creates a window initially in the 'closed' state. |
philpem@5 | 484 | - Added directory 'compilation/unix_debian_package' for easy construction of .deb package for CImg. |
philpem@5 | 485 | - Added new search parth to find 'medcon' on Windows. |
philpem@5 | 486 | - Added Debian package configuration files to generate .deb file from the CImg directory |
philpem@5 | 487 | (a .deb file is now available from the CImg website). |
philpem@5 | 488 | |
philpem@5 | 489 | * Optimizations / Modifications : |
philpem@5 | 490 | - Renamed all '*_convert' functions to '*_imagemagick'. |
philpem@5 | 491 | - Fonction CImg<T>::draw_object3d() has been slightly optimized (light computation for |
philpem@5 | 492 | outside primitives is not done anymore). |
philpem@5 | 493 | - Small changes in cimg:: traits. |
philpem@5 | 494 | - Removed 'precision' arguments in 'CImg<T>::draw_axis()'. |
philpem@5 | 495 | - The use of non in-place arithmetical operators is now possible in plug-ins. |
philpem@5 | 496 | - Optimized the search of different pathes on Windows, thanks to Martin Petricek. |
philpem@5 | 497 | - Cleaned some portions of the code. |
philpem@5 | 498 | |
philpem@5 | 499 | * Bug corrections : |
philpem@5 | 500 | - CImg<T>::save_off() has been debugged. |
philpem@5 | 501 | - Versions of 'CImg<T>::load_tiff()' and 'CImg<T>::save_tiff()' that use libtiff has been |
philpem@5 | 502 | debugged and improved. |
philpem@5 | 503 | - fread() and fwrite() has been recoded to handle the Windows file size limit of 64Mb over network |
philpem@5 | 504 | (this is a Windows bug !). |
philpem@5 | 505 | - GREYCstoration plugin has been modified to better deal with 16 and 32bits images. |
philpem@5 | 506 | - And many other small bug corrections.... |
philpem@5 | 507 | |
philpem@5 | 508 | *----------------------------- |
philpem@5 | 509 | *----------------------------- |
philpem@5 | 510 | * Changes from 1.1.8 to 1.1.9 |
philpem@5 | 511 | *----------------------------- |
philpem@5 | 512 | *----------------------------- |
philpem@5 | 513 | |
philpem@5 | 514 | * New features : |
philpem@5 | 515 | - Added Rice noise distribution in 'CImg<T>::noise()' (thanks to H.E Assemlal). |
philpem@5 | 516 | - Added functions 'CImg<T>::sharpen()' and 'CImg<T>::get_sharpen()' that can enhance contrast in images, |
philpem@5 | 517 | using nonlinear 2D/3D multi-valued shock filters. |
philpem@5 | 518 | - Added function 'CImgStats::is_empty()' to check is a stat object has been initialized or not. |
philpem@5 | 519 | - Added function 'CImg<T>::contains()' and 'CImgList<T>::contains()' that can test if a pixel is |
philpem@5 | 520 | present in an image. |
philpem@5 | 521 | - Added new demo 'CImg-breakout' in 'examples/CImg_demo.cpp' (Arkanoid-style game in 64 lines of code!). |
philpem@5 | 522 | - Functions 'CImgDisplay::hide_mouse()' and 'CImgDisplay::show_mouse()' have been added, allowing to |
philpem@5 | 523 | hide/show the cursor when it is over a display window. |
philpem@5 | 524 | - Functions 'CImg<T>::[get_]structure_tensorXY[Z]()' have been added, allowing to compute the 2D or |
philpem@5 | 525 | 3D structure tensor field from an image. |
philpem@5 | 526 | - Function 'CImgDisplay::set_mouse()' is now working on Windows. |
philpem@5 | 527 | - Added load/save functions to deal directly with std::FILE structures. |
philpem@5 | 528 | - Added members 'CImgDisplay::keys[256]' and 'CImgDisplay::buttons[256]' allowing to get the latest 256 keys |
philpem@5 | 529 | or mouse buttons modifications done on the display window. |
philpem@5 | 530 | - Added function 'CImgDisplay::is_typed()' to test if a certain combination of key has been typed |
philpem@5 | 531 | on the display window. |
philpem@5 | 532 | - Added keyboard shortcut 'CTRL+S' in 'CImg<T>::display_object3d()' to be able to save snapshot of current 3d view. |
philpem@5 | 533 | |
philpem@5 | 534 | * Optimizations / Modifications : |
philpem@5 | 535 | - Recoded the greycstoration plug-in as the file 'plugins/greycstoration.h'. The command line version |
philpem@5 | 536 | 'examples/greycstoration.cpp' has been greatly improved, including tiled-mode and less memory consumption. |
philpem@5 | 537 | The use of GREYCstoration is now more easy, the code is more factorized. |
philpem@5 | 538 | - File extension '.txt' is now considered as '.dlm' (ascii file). |
philpem@5 | 539 | |
philpem@5 | 540 | * Bug corrections : |
philpem@5 | 541 | - Plugin 'plugins/cimgmatlab.h' has been corrected. |
philpem@5 | 542 | |
philpem@5 | 543 | *----------------------------- |
philpem@5 | 544 | *----------------------------- |
philpem@5 | 545 | * Changes from 1.1.7 to 1.1.8 |
philpem@5 | 546 | *----------------------------- |
philpem@5 | 547 | *----------------------------- |
philpem@5 | 548 | |
philpem@5 | 549 | * New features : |
philpem@5 | 550 | - Added conditional use of the FFTW3 library (http://www.fftw.org) allowing more flexibility and speed |
philpem@5 | 551 | on DFT computation, when used. |
philpem@5 | 552 | - Added new macro 'cimg_help()', displays arbitrary user-defined messages when program is invoked |
philpem@5 | 553 | with the option '-h' or '--help'. |
philpem@5 | 554 | - Added new macro 'cimglist_apply()' allowing to apply a single function to all members of a list : |
philpem@5 | 555 | Ex: cimglist_apply(list,blur)(3.0f); |
philpem@5 | 556 | - Added functions 'CImg<T>::resize_object3d()', 'CImgList<T>::resize_object3d()', |
philpem@5 | 557 | 'CImg<T>::get_resize_object3d()' and 'CImgList<T>::get_resize_object3d()' to ease resizing and |
philpem@5 | 558 | centering 3d objects. |
philpem@5 | 559 | - Added function 'CImgDisplay::set_mouse()' to set the mouse pointer coordinates (X11 only). |
philpem@5 | 560 | - Added functions 'CImg<T>::atan()', 'CImg<T>::acos()', 'CImg<T>::asin()' and their get_* counterparts. |
philpem@5 | 561 | |
philpem@5 | 562 | * Optimizations / Modifications : |
philpem@5 | 563 | - 'cimg_debug' has new value signification. Can now choose between displaying error message on the console |
philpem@5 | 564 | or on modal windows, even when 'cimg_display_type' is not 0. |
philpem@5 | 565 | - Updated CImg presentation slides in 'documentation/slides_cimg.pdf', more complete now. |
philpem@5 | 566 | - Added new directories in path search for 'convert' and 'medcon' and 'temporary path'. |
philpem@5 | 567 | 'convert' or 'medcon' found in the current directory './' now override the default ones. |
philpem@5 | 568 | - Added safer support for Windows 64bits. |
philpem@5 | 569 | - Improved version of 'cimg::info()' for debugging facilities. Now displays almost every |
philpem@5 | 570 | important library variables and parameters. |
philpem@5 | 571 | - Static version of CImg<T>::sequence() now return a column vector instead of a line. |
philpem@5 | 572 | - Slightly changed the tracking algorithm and few other things in 'examples/dtmri_view.cpp', |
philpem@5 | 573 | allowing more precision in the fiber computation. |
philpem@5 | 574 | - Modified the 'CImg<T>::feature_selection()' function : replaced the moving hatch by a static |
philpem@5 | 575 | one, less fun but also less time consuming. One small selection bug for 3D volumes has been |
philpem@5 | 576 | also corrected. |
philpem@5 | 577 | - Corrected line routine for 64bits architectures. |
philpem@5 | 578 | - Replaced 'CImg<T>::scroll()' by 'CImg<T>::translate()'. |
philpem@5 | 579 | - Replaced all 'cimg_map' by more coherent names based on 'cimg_for_*'. Same for 'cimglist_map'. |
philpem@5 | 580 | Compatibility with previous versions of CImg is ensured if 'cimg_strict' is not defined. |
philpem@5 | 581 | - Recoded functions to retrieve parts of the images : get_channel(), get_slice(), ... |
philpem@5 | 582 | - Improved the cimg::system() function. |
philpem@5 | 583 | - Added some tests and display extra warnings when saving images with wrong formats. |
philpem@5 | 584 | |
philpem@5 | 585 | * Bug corrections : |
philpem@5 | 586 | - Corrected small bug in 'CImg<>::blur_anisotropic()', 'examples/greycstoration.cpp' and 'plugins/greycstoration4integration.h'. |
philpem@5 | 587 | - And lot of minor bug corrections and optimizations ..... |
philpem@5 | 588 | |
philpem@5 | 589 | *----------------------------- |
philpem@5 | 590 | *----------------------------- |
philpem@5 | 591 | * Changes from 1.1.6 to 1.1.7 |
philpem@5 | 592 | *----------------------------- |
philpem@5 | 593 | *----------------------------- |
philpem@5 | 594 | |
philpem@5 | 595 | * New features : |
philpem@5 | 596 | - Added 'operator<<()' and 'operator>>()' for bit shift operations on all images pixels. |
philpem@5 | 597 | - Added most of mathematical operators in the 'CImgList' class. |
philpem@5 | 598 | - Added new demo 'Image Waves' in 'examples/CImg_demo.cpp'. |
philpem@5 | 599 | - Added mouse wheel support on Windows (incomplete!) |
philpem@5 | 600 | |
philpem@5 | 601 | * Optimizations / Modifications : |
philpem@5 | 602 | - Renamed class 'CImgl' into 'CImgList', also renamed macro 'cimgl_map' to 'cimglist_map'. |
philpem@5 | 603 | Backward compatibility is assured in 1.1.7 version, but think about replacing the old names |
philpem@5 | 604 | by the new ones for future CImg versions. |
philpem@5 | 605 | - Removed 'operator<<()' which appended an image to another one |
philpem@5 | 606 | - Recoded lot of non in-place mathematical operators to avoid numerical truncations. |
philpem@5 | 607 | It may have a great influence on your code. For instance writting '0.5+img' will result in a CImg<double> |
philpem@5 | 608 | image, even if 'img' was a CImg<float>. |
philpem@5 | 609 | - Recoded most of 'CImg<T>::get_resize()' function : linear interpolation performs now really faster, and |
philpem@5 | 610 | an additional parameter allows to select between different conditions for border values. |
philpem@5 | 611 | - Recoded 'CImg<T>::draw_line()' so that it now uses a classical Bresenham algorithm, avoiding rounding errors. |
philpem@5 | 612 | - Renamed 'CImg<T>::draw_axe' as 'CImg<T>::draw_axis'. |
philpem@5 | 613 | |
philpem@5 | 614 | * Bug corrections : |
philpem@5 | 615 | - Corrected some functions that did not performed correctly on shared images. |
philpem@5 | 616 | - Corrected small bug in 'plugins/primitives3d.h' in function 'CImg<T>::sphere()'. |
philpem@5 | 617 | - Corrected 'CImg<T>::feature_selection()' when displaying 'CImg<bool>' images. |
philpem@5 | 618 | - Corrected 'CImg<T>::load_cimg()' : is now able to load bool images. |
philpem@5 | 619 | - And lot of minor bug corrections and optimizations ..... |
philpem@5 | 620 | |
philpem@5 | 621 | *----------------------------- |
philpem@5 | 622 | *----------------------------- |
philpem@5 | 623 | * Changes from 1.1.5 to 1.1.6 |
philpem@5 | 624 | *----------------------------- |
philpem@5 | 625 | *----------------------------- |
philpem@5 | 626 | |
philpem@5 | 627 | * New features : |
philpem@5 | 628 | - Added DTMRI volumetric file viewer, in 'examples/dtmri_view.cpp'. |
philpem@5 | 629 | - Added 3D sprite display support in 'CImg<T>::draw_object3d()'. |
philpem@5 | 630 | |
philpem@5 | 631 | * Optimizations / Modifications : |
philpem@5 | 632 | - Rewritten a lot of constructor/assignments functions for CImg<T> and CImgl<T>. |
philpem@5 | 633 | Removed shared capabilities of CImgl<T>, but improved these ones for CImg<T>. |
philpem@5 | 634 | |
philpem@5 | 635 | * Bug corrections : |
philpem@5 | 636 | - And lot of minor bug corrections and optimizations ..... |
philpem@5 | 637 | |
philpem@5 | 638 | *----------------------------- |
philpem@5 | 639 | *----------------------------- |
philpem@5 | 640 | * Changes from 1.1.4 to 1.1.5 |
philpem@5 | 641 | *----------------------------- |
philpem@5 | 642 | *----------------------------- |
philpem@5 | 643 | |
philpem@5 | 644 | * New features : |
philpem@5 | 645 | - Added plugin 'CImg/primitives3d.h', adding functions that can generate |
philpem@5 | 646 | basic 3D triangulated primitives. |
philpem@5 | 647 | - Added Poisson noise capability in CImg<T>::noise() (This patch has been proposed by Jerome Boulanger) |
philpem@5 | 648 | - Added wheel mouse support in 'CImgDisplay', now used in 'CImg<>::feature_selection()' to go through slices of |
philpem@5 | 649 | 3D volumes (unfortunately for X11 systems only). |
philpem@5 | 650 | - Added function 'CImgDisplay::toggle_fullscreen()' to allow easy and dynamic fullscreen switching of a display. |
philpem@5 | 651 | - Added screen resolution switching capabilities when using the Xrandr extension, under X11 (#define cimg_use_xrandr). |
philpem@5 | 652 | - Added support for ImageMagick++ built-in library (parts of the patch proposed by Christoph Hormann). |
philpem@5 | 653 | - And lot of small functions to ease the life... |
philpem@5 | 654 | |
philpem@5 | 655 | * Optimizations / Modifications : |
philpem@5 | 656 | - CeCiLL-C license now applies for the file 'CImg.h'. This license (close to the LGPL one) is more adapted |
philpem@5 | 657 | for library components as CImg. The examples stay in previous CeCiLL license (close to the GPL one). |
philpem@5 | 658 | - Recoded 'CImg<T>::draw_axe?()' (where ? can be 'X','Y' or 'XY') so that it can now be used to draw non-linear values along axes |
philpem@5 | 659 | (for instance logarithmic-varying labels). |
philpem@5 | 660 | - Attribute 'force' have been removed in 'CImgDisplay::resize()'. |
philpem@5 | 661 | - Recoded most constructors and assign functions in CImg<T> and CImgl<T>. |
philpem@5 | 662 | - Recoded most of the CImgDisplay class to allow more flexibility and refreshing speed. |
philpem@5 | 663 | - Renamed 'CImgDisplay::title()' to 'CImgDisplay::set_title()'. 'CImgDisplay::title' is now a class variable |
philpem@5 | 664 | that stores the current title of the display window. |
philpem@5 | 665 | - 'CImgDisplay::closed', 'CImgDisplay::resized', 'CImgDisplay::fullscreen' and 'CImgDisplay::moved' have been |
philpem@5 | 666 | renamed to 'CImgDisplay::is_closed', 'CImgDisplay::is_resized', 'CImgDisplay::is_fullscreen' and |
philpem@5 | 667 | 'CImgDisplay::is_moved', for more coherent variable names. |
philpem@5 | 668 | - 'CImg<T>::display_object3d()' : can now specify an input pose matrix, as well as get the output pose matrix, |
philpem@5 | 669 | after the user rotated the object. Also, this function has been optimized. |
philpem@5 | 670 | |
philpem@5 | 671 | * Bug corrections : |
philpem@5 | 672 | - Corrected sorting bug in 'CImg<T>::symmetric_eigen()' and 'CImg<T>::SVD()' |
philpem@5 | 673 | - When using shared memory images, some 'CImg<T>::get_*()' methods returned a shared memory image too. |
philpem@5 | 674 | - And lot of minor bug corrections and optimizations ..... |
philpem@5 | 675 | |
philpem@5 | 676 | *----------------------------- |
philpem@5 | 677 | *----------------------------- |
philpem@5 | 678 | * Changes from 1.1.3 to 1.1.4 |
philpem@5 | 679 | *----------------------------- |
philpem@5 | 680 | *----------------------------- |
philpem@5 | 681 | |
philpem@5 | 682 | * New features : |
philpem@5 | 683 | - Added fullscreen mode support on X11-based systems. |
philpem@5 | 684 | - Added CImg<>::save_dicom(), allowing to save DICOM files, via XMedcon. |
philpem@5 | 685 | - Added phong-like rendering capabilities in 'CImg<T>::draw_triangle()' and 'CImg<T>::draw_object3d()'. |
philpem@5 | 686 | - Added a directory 'plugins/' that contains some useful CImg plugins, developed by third parties. |
philpem@5 | 687 | - Added bicubic interpolation option in functions 'CImg<T>::get_rotate()' |
philpem@5 | 688 | - Added new example 'Fireworks' in 'examples/CImg_demo.cpp'. |
philpem@5 | 689 | - Added new fonts with increasing sizes that can be used in 'CImg<T>::draw_text()'. |
philpem@5 | 690 | Also simplified function 'CImg<T>::get_font()', and added size parameter in 'CImg<T>::draw_text()'. |
philpem@5 | 691 | |
philpem@5 | 692 | * Optimizations / Modifications : |
philpem@5 | 693 | - Optimized 'CImg<T>::get_resize()'. |
philpem@5 | 694 | - Allows the use of the MIT-XSHM extension for X11-based display, allowing to speed up CImgDisplay rendering |
philpem@5 | 695 | (roughly a factor of 3 when using this extension). |
philpem@5 | 696 | - Optimized CImgDisplay::render() for X11-based systems. Image display is now faster (roughly a factor of 2.5). |
philpem@5 | 697 | - Modified CImg<>::display_object3d() : keyboard is now not handled, added translation using 3rd mouse button. |
philpem@5 | 698 | Added small axes at the bottom left to see object orientation. |
philpem@5 | 699 | - Removed some unuseful 'const' keywords in some function return values, removing warnings |
philpem@5 | 700 | when compiling with icc or icl. |
philpem@5 | 701 | - Renamed 'CImg<T>::RGBtoYCbCr8()' to 'CImg<T>::RGBtoYCbCr()' (and derived functions). |
philpem@5 | 702 | - Gathered 'CImg<T>::dirichlet_pix?d()' and 'CImg<T>::neumann_pix?d()' in a single function 'CImg<T>::pix?d()'. |
philpem@5 | 703 | - Renamed 'CImg_test.cpp' to 'CImg_demo.cpp' |
philpem@5 | 704 | |
philpem@5 | 705 | * Bug corrections : |
philpem@5 | 706 | - Corrected bug with X11 displays : sometimes, black images were displayed, needing an explicit refresh. |
philpem@5 | 707 | - Corrected bug with X11 displays related to ClientMessage. Windows are not closed when other applications are opened. |
philpem@5 | 708 | - Corrected 'CImgl<T>::remove()' : Wrong memory deallocation could happen sometimes. |
philpem@5 | 709 | - And lot of minor bug corrections and optimizations ..... |
philpem@5 | 710 | |
philpem@5 | 711 | *----------------------------- |
philpem@5 | 712 | *----------------------------- |
philpem@5 | 713 | * Changes from 1.1.2 to 1.1.3 |
philpem@5 | 714 | *----------------------------- |
philpem@5 | 715 | *----------------------------- |
philpem@5 | 716 | |
philpem@5 | 717 | * New features : |
philpem@5 | 718 | - Added a new example source file 'examples/image_surface.cpp', that renders an image as a surface in a 3D space. |
philpem@5 | 719 | - Added a new example source file 'examples/mcf_levelsets3D.cpp', that performs Mean Curvature Flow of a 2D surface, using level sets. |
philpem@5 | 720 | - Added a version of 'CImg<T>::draw_triangle()' that can draw Gouraud-shaded triangles (flat and textured versions). |
philpem@5 | 721 | - Added 'CImg<T>::get_rotation_matrix()' that returns a 3x3 rotation matrix from a quaternion or a rotation vector. |
philpem@5 | 722 | - Added 'CImg<T>::draw_object3d()' that can draw a colored/textured 3d object on images. |
philpem@5 | 723 | - Added 'CImgDisplay::display_object3d()' and 'CImg<T>::display_object3d()' which run a high-level interface that |
philpem@5 | 724 | can view a user-defined 3d object. |
philpem@5 | 725 | - Added two 3D rendering examples in 'examples/CImg_test.cpp', that shows how to use 3D rendering capabilities of CImg in few lines. |
philpem@5 | 726 | - Added 'CImg<T>::marching_cubes()' and 'CImg<T>::marching_squares' that can be used to triangularize an implicit 2D or 3D |
philpem@5 | 727 | curve or surface from an image or a function. |
philpem@5 | 728 | - Added 'CImg<T>::get_load_off()' and 'CImg<T>::save_off()' that manages OFF files |
philpem@5 | 729 | (files describing 3D object, GeomView format, see 'http://www.geomview.org/'). |
philpem@5 | 730 | |
philpem@5 | 731 | * Optimizations / Modifications : |
philpem@5 | 732 | - Removed the 'multiplexed' variable in one of the CImg constructor. This feature as not generic enough to be integrated |
philpem@5 | 733 | in a constructor, and is so simple to code (one line).. This has been replaced by the new 'shared' capabilities of CImg. |
philpem@5 | 734 | - Added a 'shared' variable in CImg<T> and CImgl<T>. This allows to completely remove CImgSubset<T> and CImglSubset<T>, and |
philpem@5 | 735 | allows more flexibility for using shared memory. A lot of functions relative to shared-memory images have been added also. |
philpem@5 | 736 | Please look closely to the online reference. |
philpem@5 | 737 | - Added a fast approximation method in 'examples/greycstoration.cpp' (set by default) allowing to speed up the |
philpem@5 | 738 | restoration process almost by a factor x3. |
philpem@5 | 739 | - Recoded 'CImg<T>::get_dilate()' and 'CImg<T>::get_erode()' : it is now possible to specify a structuring element. |
philpem@5 | 740 | - Due to high difficulty in maintaing all project files in the 'compilation/' directory, I removed most of them except one |
philpem@5 | 741 | template file for each different C++ IDE. Just replace the default source file 'CImg_test.cpp' in the project file by the one |
philpem@5 | 742 | you want, to compile you desired example. |
philpem@5 | 743 | - Renamed 'CImg<T>::get_2dprojections()' to 'CImg<T>::get_projections2d()'. |
philpem@5 | 744 | - Removed 'examples/render3d.cpp'. As CImg has now built-in functions for 3D rendering, this example was obsolete. |
philpem@5 | 745 | Look at the new example appearing in 'examples/CImg_test.cpp' to see how to do easy 3D rendering with CImg. |
philpem@5 | 746 | |
philpem@5 | 747 | * Bug corrections : |
philpem@5 | 748 | - Corrected 'CImg<T>::cubic_pix1d()' and 'CImg<T>::cubic_pix2d()', used for cubic and bicubic interpolations. |
philpem@5 | 749 | - Corrected 'cimg_map2x2()' and 'cimg_map4x4()' to avoid warning when compiling with g++. |
philpem@5 | 750 | - Added a simple trick to ease the use of libjpeg and libpng on Windows (thanks to bugzhao). |
philpem@5 | 751 | - Corrected 'CImg<T>::load_jpeg()' and 'CImg<T>::save_jpeg()' to handle all possible color spaces used in JPEG files. |
philpem@5 | 752 | - Corrected 'CImg<T>::get_split()' to avoid bug with very large images. |
philpem@5 | 753 | - Corrected 'CImg<T>::load_dicom()' and 'cimg::medcon_path()' to ease the loading of medcon files on Windows. |
philpem@5 | 754 | - And lot of minor bug corrections.... |
philpem@5 | 755 | |
philpem@5 | 756 | *----------------------------- |
philpem@5 | 757 | *----------------------------- |
philpem@5 | 758 | * Changes from 1.1.1 to 1.1.2 |
philpem@5 | 759 | *----------------------------- |
philpem@5 | 760 | *----------------------------- |
philpem@5 | 761 | |
philpem@5 | 762 | * Bug corrections : |
philpem@5 | 763 | - Bug corrected in 'CImg<T>::load_ppm()' and 'CImg<T>::save_ppm()' : 16 bits PPM images were not correctly stored. |
philpem@5 | 764 | - (Stupid) bug corrected in 'CImg<T>::get_sort()' : Return value was a reference to a temporary object. |
philpem@5 | 765 | - Bug corrected in 'CImg<T>::resize_halfXY()' that caused a possible segmentation fault. |
philpem@5 | 766 | - Bug corrected in 'CImg<T>::move()' : Moving an hidden window (on X11) is now working. |
philpem@5 | 767 | - Handling pixel access to const images : writing pixel values in const images is now forbidden. |
philpem@5 | 768 | - 'CImg<T>::det()' : Determinant of general matrices can now be computed. |
philpem@5 | 769 | - 'CImgDisplay' : Added some changes in Microsoft-specific function call to be able to compile with Visual Studio 2005. This compiler seems to be 'buggy', I had very strange behaviors at run-time with it (changing an 'int' to 'const int' declaration solves a 'problem' in CImg<>::draw_ellipse() that was present only with this compiler...) |
philpem@5 | 770 | - 'CImg<>::load_dlm()' : small bug corrected. Can now read DLM files with no CR at the last line. |
philpem@5 | 771 | - And other small corrections.... |
philpem@5 | 772 | |
philpem@5 | 773 | * Optimizations / Modifications : |
philpem@5 | 774 | - In 'CImg<T>::save_convert()', the temporary file is now saved in PNM format, instead of RGBA as before. This has been done |
philpem@5 | 775 | because of a strange bug in ImageMagick's convert, refusing to read some RGBA files. |
philpem@5 | 776 | - CImgDisplay::move() now shows automatically the display when it is in a closed state. |
philpem@5 | 777 | - Moved the trait cimg_library::largest<T,t> in cimg_library::cimg::largest<T,t>. |
philpem@5 | 778 | - Renamed 'CImg<T>::quicksort()' to 'CImg<T>::sort()'. |
philpem@5 | 779 | - Renamed 'CImg<T>::create()' and 'CImg<T>::copy()' to 'CImg<T>::assign()'. |
philpem@5 | 780 | - 'CImg<T>::inverse()' can now uses the LU matrix decomposition (or the SVD one as before). |
philpem@5 | 781 | - Optimized memory handling when playing with lists of images CImgl<>. |
philpem@5 | 782 | - Optimized some CImg<T> constructors. |
philpem@5 | 783 | |
philpem@5 | 784 | * New features : |
philpem@5 | 785 | - Added a new demo : 'Blobs Editor' in CImg_test.cpp. |
philpem@5 | 786 | - Added types 'CImg<T>::iterator', 'CImg<T>::const_iterator', 'CImgl<T>::iterator' and 'CImgl<T>::const_iterator' to allow |
philpem@5 | 787 | the easy use of STL algorithms on CImg and CImgl structures. |
philpem@5 | 788 | - Added several functions that acts like in STL vectors and lists in CImg<T> and CImgl<T> : |
philpem@5 | 789 | CImg<T>::assign(), CImg<T>::clear(), CImg<T>::at(), CImg<T>::back(), CImg<T>::front(), CImg<T>::begin(), CImg<T>::end(), |
philpem@5 | 790 | CImgl<T>::assign(), CImgl<T>::clear(), CImgl<T>::at(), CImgl<T>::back(), CImgl<T>::front(), |
philpem@5 | 791 | CImgl<T>::begin(), CImgl<T>::end(), CImgl<T>::push_back(), CImgl<T>::push_front(), CImgl<T>::pop_back(), CImgl<T>::pop_front(). |
philpem@5 | 792 | - Added 'CImg<T>::MSE()' and 'CImg<T>::PSNR()' that compute the MSE (Mean Squared Error) and PSNR |
philpem@5 | 793 | (Peak Signal to Noise Ratio) between two images. |
philpem@5 | 794 | - Added 'CImg<T>::solve()' and 'CImg<T>::get_solve()', allowing to solve linear systems. |
philpem@5 | 795 | - Added 'CImg<T>::pseudoinverse()' and 'CImg<T>::get_pseudoinverse()' allowing to compute the Moore-Penrose |
philpem@5 | 796 | matrix inverse (useful for computing solutions to the least-square problem). |
philpem@5 | 797 | |
philpem@5 | 798 | *----------------------------- |
philpem@5 | 799 | *----------------------------- |
philpem@5 | 800 | * Changes from 1.1.0 to 1.1.1 |
philpem@5 | 801 | *----------------------------- |
philpem@5 | 802 | *----------------------------- |
philpem@5 | 803 | |
philpem@5 | 804 | * Bug corrections : |
philpem@5 | 805 | - in 'CImgl<T>::insert()' : Insertion at non-last position was bugged. |
philpem@5 | 806 | - in 'greycstoration.cpp' : Corrected some bugs in the algorithm and improved user interface. |
philpem@5 | 807 | - in 'CImg<T>::blur_anisotropic()' : Abusive vector normalization was done before. Now it is corrected. |
philpem@5 | 808 | - And many other bugs... |
philpem@5 | 809 | |
philpem@5 | 810 | * Optimizations / Modifications : |
philpem@5 | 811 | - Removed macros 'cimg_test*()' and modified argument checking in most of the functions, so that trying to act |
philpem@5 | 812 | on an empty image does nothing instead of an error. |
philpem@5 | 813 | - Renamed all static methods CImg<T>::load*() into CImg<T>::get_load*(). This has been done to be coherent with |
philpem@5 | 814 | the naming convention of other CImg methods. Also, added new functions CImg<T>::load*() (non static) that corresponds |
philpem@5 | 815 | to in-place image loading. |
philpem@5 | 816 | - Renamed CImg RAW extension from .raw to .cimg. .raw files are not considered as real raw data without |
philpem@5 | 817 | header. New functions 'CImg<T>::load_get_raw()' and 'CImg<T>::save_raw()' have been added to load and save .raw files. |
philpem@5 | 818 | - In 'greycstoration.cpp' : improved algorithm and parameters. Also add improved visualization tool at the end |
philpem@5 | 819 | of the image regularization. |
philpem@5 | 820 | - Replaced some cimg:: static functions to inlined one, to prevent compiler bug on VS7.1, when trying |
philpem@5 | 821 | to link multiple CImg-based modules. |
philpem@5 | 822 | - Replaced parameter 'linear' to 'scheme' in 'CImg<T>::blur_anisotropic()', allowing the use of 2nd order |
philpem@5 | 823 | Runge-Kutta integration, instead of just nearest-neighbor or linear ones. |
philpem@5 | 824 | |
philpem@5 | 825 | * New features : |
philpem@5 | 826 | - Introduced a trait 'cimg::largest' that allows to find the largest data type between two types. CImg functions |
philpem@5 | 827 | use it for instance to return a CImg<float>, when trying to compute the gradient of an CImg<unsigned char>. |
philpem@5 | 828 | It was not the case before, needing an explicit case, as in 'CImg<float>(img).get_gradientXY()'. |
philpem@5 | 829 | - Added 'CImg<T>::operator<<', 'CImgl<T>::operator<<' and 'CImgl<T>::operator>>' that allows to |
philpem@5 | 830 | insert images in list or append an image to another one. |
philpem@5 | 831 | - New project file for using with X-Code (on Mac OS X) has been added to the 'compilation/' directory. |
philpem@5 | 832 | Thanks to Werner Jainek who made it possible. |
philpem@5 | 833 | |
philpem@5 | 834 | *----------------------------- |
philpem@5 | 835 | *----------------------------- |
philpem@5 | 836 | * Changes from 1.0.9 to 1.1.0 |
philpem@5 | 837 | *----------------------------- |
philpem@5 | 838 | *----------------------------- |
philpem@5 | 839 | |
philpem@5 | 840 | * Bug corrections : |
philpem@5 | 841 | - in 'CImg<T>::load_raw()' : possible buffer overflow corrected. |
philpem@5 | 842 | - in 'CImg<T>::load_dlm()' : the use of std::rewind() didn't work when reading the standart input. Function has been |
philpem@5 | 843 | recoded so it reads the file in one pass. |
philpem@5 | 844 | - Corrected 'CImg<T>::anisotropic_blur()'. |
philpem@5 | 845 | - Corrected 'CImg<T>::symeigen()' : corrected computation bugs. |
philpem@5 | 846 | - Corrected 'CImg<T>::get_resize()' : linear and bicubic interpolations were not correctly handled (minor). |
philpem@5 | 847 | - Corrected 'CImgDisplay' to avoid malloc/dealloc problem with newer versions of X11. |
philpem@5 | 848 | - Corrected 'CImgDisplay' to handle better thread termination under X11 (Unix and MacOSX). |
philpem@5 | 849 | - Corrected 'greycstoration.cpp' (small bug in inpainting and non-curvature scheme). |
philpem@5 | 850 | |
philpem@5 | 851 | * Optimizations / Modifications : |
philpem@5 | 852 | - Updated documentation. |
philpem@5 | 853 | - Modified Makefile for direct compilation of executables under Linux (ex : make CImg_test). |
philpem@5 | 854 | - Modified Exceptions error messages for more simplicity and clarity. |
philpem@5 | 855 | - Removed parameter 'alpha' in 'CImg<T>::get_gradientXY()' and 'CImg<T>::get_gradientXYZ()'. |
philpem@5 | 856 | - Renamed 'CImg<T>::flip()' to 'CImg<T>::mirror()'. |
philpem@5 | 857 | - Renamed 'CImg<T>::get_3dplanes()' to 'CImg<T>::get_2dprojections()'. |
philpem@5 | 858 | - Renamed 'CImgROI<T>' to 'CImgSubset<T>'. Also removed functions 'CImg<T>::ref_*' and replaced it by |
philpem@5 | 859 | 'CImg<T>::pointset()', 'CImg<T>::lineset', 'CImg<T>::planeset' and 'CImg<T>::channelset'. |
philpem@5 | 860 | |
philpem@5 | 861 | * New features : |
philpem@5 | 862 | - Added 'CImg<T>::RGBtoLUT()' and 'CImg<T>::LUTtoRGB()' that convert an RGB image to an indexed image (using a palette). |
philpem@5 | 863 | - Added 8 bits display mode support in CImgDisplay. |
philpem@5 | 864 | - Added 'CImg<T>::RGBtoHSV()' and 'CImg<T>::HSVtoRGB()' that handle the conversion from and to HSV color space. |
philpem@5 | 865 | - Added 'CImg<T>::kth_smallest()' and 'CImg<T>::median()' that find respectively the kth smallest |
philpem@5 | 866 | element and the median of values in a CImg<T> instance. |
philpem@5 | 867 | - Added 'CImg<T>::blur_median()' and 'CImg<T>::get_blur_median()' that apply a median filter on an image. |
philpem@5 | 868 | - Added 'CImg<T>::load_parrec()' able to read PAR-REC (Philips) image file formats. |
philpem@5 | 869 | - Added 'CImgDisplay::title()' that can be used to change the display window title. |
philpem@5 | 870 | - Added 'CImg<T>::RGBtoYUV()' and 'CImg<T>::YUVtoRGB()' that convert between RGB and YUV color spaces. |
philpem@5 | 871 | - Added 'CImg<T>::RGBtoYCbCr8()' and 'CImg<T>::YCbCr8toRGB()' that convert between RGB and YCbCr color spaces (for unsigned char |
philpem@5 | 872 | pixels). |
philpem@5 | 873 | - Added 'CImg<T>::has_same*()' where * can be 'X','Y','Z','XY','XYZ','XYZV' to compare image dimensions. |
philpem@5 | 874 | - Added 'CImg<T>::is_empty()' that returns 'true' is the image is empty. |
philpem@5 | 875 | - Added 'CImg<T>::load_dicom()' that loads an image in Dicom file format. This function uses the tool 'medcon' that |
philpem@5 | 876 | has to be installed (http://xmedcon.sourceforge.net/). |
philpem@5 | 877 | - Added 'CImg<T>::load_yuv()', 'CImgl<T>::load_yuv()' and 'CImg<T>::save_yuv()', 'CImgk<T>::save_yuv()' |
philpem@5 | 878 | that load and save respectively one frame or the entire movie from a .yuv file. |
philpem@5 | 879 | - Added 'CImglSubset<T>' which is a class that sub-references an image list 'CImgl<T>'. |
philpem@5 | 880 | |
philpem@5 | 881 | *----------------------------- |
philpem@5 | 882 | *----------------------------- |
philpem@5 | 883 | * Changes from 1.0.8 to 1.0.9 |
philpem@5 | 884 | *----------------------------- |
philpem@5 | 885 | *----------------------------- |
philpem@5 | 886 | |
philpem@5 | 887 | * Bug corrections : |
philpem@5 | 888 | - Memory leak corrected in 'CImg<T>::load_bmp()'. |
philpem@5 | 889 | - CImg now supports the MIPS compiler on SGI (Thanks to Matt Hanson who made it possible). |
philpem@5 | 890 | - Corrected non-global X11 variables in multi-module projects using CImg.h (thanks also to Matt Hanson for |
philpem@5 | 891 | his precise bug report). |
philpem@5 | 892 | - In CImg<T>::load_convert() and save_convert(), random filenames are now tested before read/write. |
philpem@5 | 893 | - Removed unuseful template in 1D CImg<T>::draw_gaussian() function. |
philpem@5 | 894 | - Recoded CImgDisplay::render() with XPutPixel() again for maximum compability between X11-based architectures. |
philpem@5 | 895 | - In CImgStats, the variance field was computed actually as the standart deviation. This is now corrected, and the variance |
philpem@5 | 896 | is really the variance ! |
philpem@5 | 897 | |
philpem@5 | 898 | * Optimizations / Modifications : |
philpem@5 | 899 | - CImgDisplay fields mousex and mousey changed to fields mouse_x and mouse_y. This is done to be more coherent |
philpem@5 | 900 | with other CImgDisplay fields. The inconvenience should be minor, just replace the fields by the right names. |
philpem@5 | 901 | - CImgDisplay functions window_posx() and window_posy() changed to fields window_x and window_y. |
philpem@5 | 902 | - Eigenvalue computation with CImg<T>::eigen() and symeigen() sorts the eigenvalues in inverse order from now on. |
philpem@5 | 903 | The eigenvector matrix is also transposed, to be more close to the standart functions in eigenvalue computation. |
philpem@5 | 904 | - Renamed macro variable 'cimg_lapack' in 'cimg_use_lapack'. |
philpem@5 | 905 | - CImg<T>::save() can now handle alpha channel in PNG images (with 4-channels images). |
philpem@5 | 906 | - Recoded CImg<T>::noise() to handle numerical limits in template types (esp. for unsigned char and char). |
philpem@5 | 907 | - Recoded CImg<T>::pow() to be faster with usual int powers (0,1,2,3,4). |
philpem@5 | 908 | - Added conversions functions for all color spaces (R,G,B), (X,Y,Z), (x,y,Y) and (L,a,b). |
philpem@5 | 909 | - Added a 'pattern' parameter in 'CImg<T>::draw_ellipse()' and 'CImg<T>::draw_circle()', so that |
philpem@5 | 910 | only the outline of the ellipse/circle can be drawn. |
philpem@5 | 911 | - Added an ellipse-based selection in CImg<T>::feature_selection(), when parameter 'feature_type' is set to 3. |
philpem@5 | 912 | |
philpem@5 | 913 | * New features/functions : |
philpem@5 | 914 | - Added an 'Image Zoomer' demo in 'CImg_test.cpp'. |
philpem@5 | 915 | - Added 'CImg<T>::load_jpeg()' and 'CImg<T>::save_jpeg()' to deal natively with JPEG files, through |
philpem@5 | 916 | the libjpeg library. You don't need ImageMagick's convert anymore to read and save JPEG files. |
philpem@5 | 917 | Just define the macro 'cimg_use_jpeg before including 'CImg.h', and link your code with the 'jpeg' lib, |
philpem@5 | 918 | and it should work fine. |
philpem@5 | 919 | - Added 'CImg<T>::quicksort()' allowing to sort values inside vectors, and getting corresponding permutations. |
philpem@5 | 920 | - CImgDisplay::move() is now working well on Windows and Unix. |
philpem@5 | 921 | - Added 'CImg<T>::SVD()' to compute the SVD of general matrices. The inverse function as well |
philpem@5 | 922 | as the eigenvalue computation (of symmetric matrices) now uses the SVD. It means that LAPACK is |
philpem@5 | 923 | not necessary anymore in CImg ! |
philpem@5 | 924 | - Added 'CImgDisplay::screen_dimx()' and 'CImgDisplay::screen_dimy()' to get the resolution of the |
philpem@5 | 925 | current (full) screen. |
philpem@5 | 926 | - Added a new 10x13 font, and recoded the functions 'CImgl<T>::get_font();' |
philpem@5 | 927 | - Added 'cimg::dialog()' that allows to open a simple dialog box with a maximum of 6 choices. |
philpem@5 | 928 | - Added CImgROI<T>::operator=(), so that one can now affect a channel or plane to an image : |
philpem@5 | 929 | img.ref_plane(2) = img_plane; Very useful ! |
philpem@5 | 930 | - Added CImg<T>::load_png() and save_png() to deal natively with PNG files, through |
philpem@5 | 931 | the zlib and libpng libraries. You don't need ImageMagick's convert anymore |
philpem@5 | 932 | to read and save PNG files. Just define the macro 'cimg_use_png' before including |
philpem@5 | 933 | 'CImg.h', and link your code with the 'zlib' and the 'png' lib, and it should work fine. |
philpem@5 | 934 | Many thanks to Eric Fausett, for this nice piece of code. |
philpem@5 | 935 | - Added CImg<T>::load_rgb(), load_rgba(), save_rgb() and save_rgba() that can load and save |
philpem@5 | 936 | Raw color image data (w/ or wo/ alpha channel). |
philpem@5 | 937 | - Added CImg<T>::blur_anisotropic() that allows to denoise image by anisotropic filtering. |
philpem@5 | 938 | Smoothing behavior can be even user-defined. |
philpem@5 | 939 | Look at " http://www.greyc.ensicaen.fr/~dtschump/greycstoration/ " |
philpem@5 | 940 | to learn more about the image regularization technique implemented by this function. |
philpem@5 | 941 | |
philpem@5 | 942 | - ... an tons of minor corrections ! |
philpem@5 | 943 | |
philpem@5 | 944 | *----------------------------- |
philpem@5 | 945 | *----------------------------- |
philpem@5 | 946 | * Changes from 1.0.7 to 1.0.8 |
philpem@5 | 947 | *----------------------------- |
philpem@5 | 948 | *----------------------------- |
philpem@5 | 949 | |
philpem@5 | 950 | * Bug corrections : |
philpem@5 | 951 | - Removed useless button/keyboard reinitialization in CImgDisplay events |
philpem@5 | 952 | - Corrected bug in CImg<T>::load_dlm() and load_ascii() functions. |
philpem@5 | 953 | - Corrected compile bug in CImg<T>::resize_halfXY() and CImg<T>::get_resize_halfXY(). |
philpem@5 | 954 | - Corrected and optimized CImg<T>::get_resize(). |
philpem@5 | 955 | |
philpem@5 | 956 | * Optimizations / Modifications : |
philpem@5 | 957 | - Recoded CImg<T>::fill() for faster value filling. |
philpem@5 | 958 | - Recoded CImg<T>::draw_graph(). IMPORTANT NOTE : ymin and ymax are now directed up to down, instead |
philpem@5 | 959 | of down to up, in order to be more coherent with the draw_axeXY() function. This means you will |
philpem@5 | 960 | probably have to swap the values of these two parameters in the function call, to get similar results |
philpem@5 | 961 | to CImg 1.0.7 !! |
philpem@5 | 962 | - Recoded CImg<T>::draw_gaussian() using tensors (parameters changed). |
philpem@5 | 963 | - CImg is now successfully compiled using the option '-pedantic' with g++. Makefile has been modified. |
philpem@5 | 964 | - CImg compiles with the DJGPP compiler (tested without display capabilities). |
philpem@5 | 965 | - Added load/save support for 16bits PNM binary images. |
philpem@5 | 966 | - Added interleaved mode support and template in constructor : |
philpem@5 | 967 | template<typename t> CImg(const t *const data_buffer,dx,dy,dz,dv,bool interlaced) |
philpem@5 | 968 | - Recoded parts of CImg<T>::eigen(). |
philpem@5 | 969 | - Optimized buffer copy in XImage, for faster image display under X11 (minor improvements). |
philpem@5 | 970 | - Added fields in CImgStats, allowing to get the coordinates of the min/max pixels. |
philpem@5 | 971 | |
philpem@5 | 972 | * New features/functions : |
philpem@5 | 973 | - Added CImg<T>::load_bmp() and save_bmp() to deal with uncompressed BMP formats, without using ImageMagick. |
philpem@5 | 974 | - Added CImg<T>::vector(), CImg<T>::matrix() and CImg<T>::tensor(). |
philpem@5 | 975 | - Added CImg<T>::scroll() and CImg<T>::get_scroll to be able to scroll images. |
philpem@5 | 976 | - Added functions CImg<T>::get_FFT() and CImgl<T>::FFT() for Fast Fourier Transform. |
philpem@5 | 977 | - Added CImgDisplay::move() to be able to move display windows at specific locations. |
philpem@5 | 978 | - Added several region split in CImg<T>::get_split(). |
philpem@5 | 979 | - Added 'examples/mcf_levelsets.cpp' : Mean curvature flow of a 2D curve, using level sets. |
philpem@5 | 980 | - Added 'examples/greycstoration.cpp' : New algorithm for image denoising, inpainting and resizing. |
philpem@5 | 981 | (see http://www.greyc.ensicaen.fr/~dtschump/greycstoration) |
philpem@5 | 982 | - Added 'examples/wavelet_atrous.cpp' (by R. Peteri) : Wavelet decomposition of a image. |
philpem@5 | 983 | - Added a Fourier-based filtering demo in 'CImg_test.cpp', allowing interactive frequency filter creation. |
philpem@5 | 984 | - Added an Image to ASCII converter, based on simple correlation measure. File : 'examples/image2ascii.cpp'. |
philpem@5 | 985 | |
philpem@5 | 986 | * Abandonned features : |
philpem@5 | 987 | - Removed bump mapped version of the CImg<T>::draw_triangle() function. |
philpem@5 | 988 | - Removed 'examples/inpainter.cpp' which is a little bit buggy (problem with multiscale). |
philpem@5 | 989 | - Removed 'CImg<T>::new_display()' and 'CImgl<T>::new_display', which are confusing and useless. Use |
philpem@5 | 990 | 'new CImgDisplay(img)' and 'new CImgDisplay(list)' instead. |
philpem@5 | 991 | - Removed 'CImg<T>::get_stats()' and 'CImgl<T>::get_stats', which are useless. Use 'CImgStats(img)' |
philpem@5 | 992 | and 'CImgStats(list)'. |
philpem@5 | 993 | |
philpem@5 | 994 | *----------------------------- |
philpem@5 | 995 | *----------------------------- |
philpem@5 | 996 | * Changes from 1.0.6 to 1.0.7 |
philpem@5 | 997 | *----------------------------- |
philpem@5 | 998 | *----------------------------- |
philpem@5 | 999 | |
philpem@5 | 1000 | - New License : CImg is now distributed under the CeCiLL License, a free software GPL-like, more adapted |
philpem@5 | 1001 | to French laws. Don't be disturbed by this new License, CImg is still an open source free software ! |
philpem@5 | 1002 | - Encapsulation of all CImg classes and functions in the 'cimg_library::' namespace. It avoids eventual |
philpem@5 | 1003 | class names collisions with other libraries. For compatility with your old code, you should |
philpem@5 | 1004 | insert 'using namespace cimg_library;', just after the '#include "CImg.h"' line, in your source code. |
philpem@5 | 1005 | - Removed global typedefs for uchar,uint,ushort,ulong. If you used them before, you'll have to redefine them : |
philpem@5 | 1006 | typedef unsigned char uchar; |
philpem@5 | 1007 | typedef unsigned short ushort; |
philpem@5 | 1008 | typedef unsigned int uint; |
philpem@5 | 1009 | typedef unsigned long ulong; |
philpem@5 | 1010 | - Corrected window resize bug on X11 displays. |
philpem@5 | 1011 | - Added PANDORE-4 file format support, with functions 'CImg::load_pandore()' and 'CImg::save_pandore()' (file extension : .pan) |
philpem@5 | 1012 | (PANDORE is a C++ toolkit for image processing, see http://www.greyc.ensicaen.fr/~regis/Pandore (in French)) |
philpem@5 | 1013 | - Added macros CImg_3x3_ref(), CImg_5x5_ref(), .. allowing to use special loops cimg_map3x3,.. with references to C arrays and images. |
philpem@5 | 1014 | - Removed 'normalize' parameter in 'CImg::save()'. Saving normalized images can be still performed |
philpem@5 | 1015 | with 'img.normalize(0,255).save("normalized_image.jpg");'. This clarifies the code and doesn't add so much work at all. |
philpem@5 | 1016 | - Renamed 'CImg::get_sprite()' and 'CImg::sprite()' to 'CImg::get_crop()' and 'CImg::crop()'. |
philpem@5 | 1017 | - Changed 'draw_triangle' function with two textures, so that it corresponds to displacement mapping |
philpem@5 | 1018 | (aka 'bump mapping'), instead of two textures drawn with transparencies |
philpem@5 | 1019 | (which can be still made by two successive calls to single-textured 'draw_triangle' functions, |
philpem@5 | 1020 | with correct opacities). |
philpem@5 | 1021 | - Negative opacity parameter in drawing functions is now supported. It allows to ADD shapes colors to the current |
philpem@5 | 1022 | image pixels (see the new 'ShadeBobs demo in the CImg_test.cpp file to see the concept). |
philpem@5 | 1023 | - Added functions 'CImg::draw_axeX', 'CImg::draw_axeY' and 'CImg::draw_axeXY', allowing to trace labelled axes on images. |
philpem@5 | 1024 | - Slightly changes in CImgDisplay : field 'attributes' has been removed, and replaced by more |
philpem@5 | 1025 | comprehensive field names : events, normalize, fullscreen. Resizing capabilities is now removed |
philpem@5 | 1026 | since all windows can be resized by default. |
philpem@5 | 1027 | - 'CImg<>::load_convert()' and 'CImg<>::save_convert()' do not popup a console window anymore on Windows-based OS, |
philpem@5 | 1028 | when creating code with a WinMain() entry. |
philpem@5 | 1029 | - RGB<->BGR Color inversion problem on some old Unix displays has been corrected. |
philpem@5 | 1030 | - Makefile for compilation on Solaris has been updated. |
philpem@5 | 1031 | - Package structure has been slightly modified for more clarity. Renamed also the CVS module to 'CImg' instead of 'CImg_' |
philpem@5 | 1032 | - Added different compilers projects to ease the compilation of the CImg examples, including |
philpem@5 | 1033 | Visual C++ 6.0, Visual.NET2003, Borland Bcc 5.6, Digital Mars Compiler, Dev-Cpp, Intel ICL. |
philpem@5 | 1034 | - Removed the use of TrackMouseEvent mechanism on Windows, removing compilation bugs with VC++6.0 when trying to create an MDI application. |
philpem@5 | 1035 | - Improved keycode detection under X11. Keycodes should now work for any X11-based system. |
philpem@5 | 1036 | - Support for FreeBSD added (thanks to Thierry Thomas). |
philpem@5 | 1037 | - Corrected bug in matrix multiplication. |
philpem@5 | 1038 | - Corrected bugs in CImg<T>::erode() and CImg<T>::dilate() functions (name inversion). |
philpem@5 | 1039 | - Corrected bug in 'CImg<T>::load_convert()' and 'CImg<T>::save_convert()' when trying to load/save images with pathnames containing spaces. |
philpem@5 | 1040 | - Recoded 'inrcast.cpp', and suppressed 'inrcrop.cpp' in the 'examples/' directory (functionnalities of 'inrcrop' are now included in 'inrcast'). |
philpem@5 | 1041 | - And some corrections of minor bugs to improve library stability... |
philpem@5 | 1042 | - Improved error messages to ease program debug. |
philpem@5 | 1043 | - Documentation of the API is much more complete and detailled (still in progress...) |
philpem@5 | 1044 | |
philpem@5 | 1045 | *------------------------------ |
philpem@5 | 1046 | *------------------------------ |
philpem@5 | 1047 | * Changes from 1.0.5 to 1.0.6 : |
philpem@5 | 1048 | *------------------------------ |
philpem@5 | 1049 | *------------------------------ |
philpem@5 | 1050 | |
philpem@5 | 1051 | - Drawing functions improved and optimized : Added transparency level to all drawing functions. |
philpem@5 | 1052 | - Added function 'draw_arrow()' |
philpem@5 | 1053 | - Added missing boolean operators. |
philpem@5 | 1054 | - Added CImgDisplay resize event, allowing to create flexible resizing windows. |
philpem@5 | 1055 | - Added 'CImg::draw_gaussian()' functions allowing to draw 1d,2d or 3d gaussians on images. |
philpem@5 | 1056 | - Added 'Oriented convolutions' demos in CImg_test.cpp |
philpem@5 | 1057 | - Recoded pde_TschumperleDeriche2D and 3D. |
philpem@5 | 1058 | - Bugs corrected in arithmetics operators. |
philpem@5 | 1059 | - Optimized image display. |
philpem@5 | 1060 | - Recoded 'CImg::feature_selection()'. |
philpem@5 | 1061 | - Recoded 'CImg::get_rotate()' |
philpem@5 | 1062 | - Renamed 'draw_plot()' to 'draw_graph()', and added cubic drawing style. |
philpem@5 | 1063 | - Renamed 'wait_sync()' to 'wait()'. |
philpem@5 | 1064 | - Renamed 'get_correl' to 'get_correlate' (idem for 'convolve') |
philpem@5 | 1065 | - Removed 'get_correl3x3,5x5,...'. Optimization is now a part of the 'get_correlate' function. (idem for 'convolve'). |
philpem@5 | 1066 | - Removed 'get_rotate90,180,270'. Optimization is now a part of the 'get_rotate' function. |
philpem@5 | 1067 | - Compilation supported by gcc.3.4.1 (released july 2004). |