Home

Advertisement

Customize

The CImg Library

Oct. 5th, 2006

10:42 am - Call for links

I'm planning to create a 'Links' page on the CImg web site, that will propose a list of links to projects that use the CImg Library in their source code.
If you are concerned and interested to appear in this page, please send me an e-mail, or post a message in the CImg forum.
Thanks for your participation.

Sep. 21st, 2006

04:32 pm - CImg 1.1.6 released

Minor release, but fixes some bugs.

Jul. 19th, 2006

09:53 am - CImg 1.1.5 Released

Following a traditional two-month release period, I'm happy to announce the release of the CImg 1.1.5 package.
There are some important changes in the API, basically, it converges to something clear and coherent.
The changelog is :

*-----------------------------
*-----------------------------
* Changes from 1.1.4 to 1.1.5
*-----------------------------
*-----------------------------

* New features :
    - Added Poisson noise capability in CImg<T>::noise() (This patch has been proposed by Jerome Boulanger)
    - Added wheel mouse support in 'CImgDisplay', now used in 'CImg<>::feature_selection()' to go through slices of
      3D volumes (unfortunately for X11 systems only).
    - Added function 'CImgDisplay::toggle_fullscreen()' to allow easy and dynamic fullscreen switching of a display.
    - Added screen resolution switching capabilities when using the Xrandr extension, under X11 (#define cimg_use_xrandr).
    - Added support for ImageMagick++ built-in library (parts of the patch proposed by Christoph Hormann).
    - And lot of small functions to ease the life...

* Optimizations / Modifications :
    - CeCiLL-C license now applies for the file 'CImg.h'. This license (close to the LGPL one) is more adapted
      for library components as CImg. The examples stay in previous CeCiLL license (close to the GPL one).
    - 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

      (for instance logarithmic-varying labels).
    - Attribute 'force' have been removed in 'CImgDisplay::resize()'.
    - Recoded most constructors and assign functions in CImg<T> and CImgl<T>.
    - Recoded most of the CImgDisplay class to allow more flexibility and refreshing speed.
    - Renamed 'CImgDisplay::title()' to 'CImgDisplay::set_title()'. 'CImgDisplay::title' is now a class variable
      that stores the current title of the display window.
    - 'CImgDisplay::closed', 'CImgDisplay::resized', 'CImgDisplay::fullscreen' and 'CImgDisplay::moved' have been
      renamed to 'CImgDisplay::is_closed', 'CImgDisplay::is_resized', 'CImgDisplay::is_fullscreen' and
      'CImgDisplay::is_moved', for more coherent variable names.
    - 'CImg<T>::display_object3d()' : can now specify an input pose matrix, as well as get the output pose matrix,
      after the user rotated the object. Also, this function has been optimized.

* Bug corrections :
    - Corrected sorting bug in 'CImg<T>::symmetric_eigen()' and 'CImg<T>::SVD()'
    - When using shared memory images, some 'CImg<T>::get_*()' methods returned a shared memory image too.
    - And lot of minor bug corrections and optimizations .....

May. 18th, 2006

03:20 pm - CImg 1.1.4 Released

I'm happy to announce the release of the CImg 1.1.4 release.
Only few changes in the API since the last version, but major optimizations and improvements have been done for image display.


Here is the CHANGELOG :

*-----------------------------
*-----------------------------
* Changes from 1.1.3 to 1.1.4
*-----------------------------
*-----------------------------

* New features :
- Added fullscreen mode support on X11-based systems.
- Added CImg<>::save_dicom(), allowing to save DICOM files, via XMedcon.
- Added phong-like rendering capabilities in 'CImg::draw_triangle()' and 'CImg::draw_object3d()'.
- Added a directory 'plugins/' that contains some useful CImg plugins, developed by third parties.
- Added bicubic interpolation option in functions 'CImg::get_rotate()'
- Added new example 'Fireworks' in 'examples/CImg_demo.cpp'.
- Added new fonts with increasing sizes that can be used in 'CImg::draw_text()'.
Also simplified function 'CImg::get_font()', and added size parameter in 'CImg::draw_text()'.

* Optimizations / Modifications :
- Optimized 'CImg::get_resize()'.
- Allows the use of the MIT-XSHM extension for X11-based display, allowing to speed up CImgDisplay rendering
(roughly a factor of 3 when using this extension).
- Optimized CImgDisplay::render() for X11-based systems. Image display is now faster (roughly a factor of 2.5).
- Modified CImg<>::display_object3d() : keyboard is now not handled, added translation using 3rd mouse button.
Added small axes at the bottom left to see object orientation.
- Removed some unuseful 'const' keywords in some function return values, removing warnings
when compiling with icc or icl.
- Renamed 'CImg::RGBtoYCbCr8()' to 'CImg::RGBtoYCbCr()' (and derived functions).
- Gathered 'CImg::dirichlet_pix?d()' and 'CImg::neumann_pix?d()' in a single function 'CImg::pix?d()'.
- Renamed 'CImg_test.cpp' to 'CImg_demo.cpp'

* Bug corrections :
- Corrected bug with X11 displays : sometimes, black images were displayed, needing an explicit refresh.
- Corrected bug with X11 displays related to ClientMessage. Windows are not closed when other applications are opened.
- Corrected 'CImgl::remove()' : Wrong memory deallocation could happen sometimes.
- Corrected 'CImg::load_bmp()' : Monochrome images were loaded as color images instead of scalar ones.
- And lot of minor bug corrections and optimizations .....

Mar. 31st, 2006

07:10 pm - CImg 1.1.3 Released !

I'm very happy to say that The CImg Library 1.1.3 has been released !

This version has major improvements and features. It is more simple to use and allows now to deal easily with 3D objects. Very nice for scientific visualization.
You should look at the new examples provided in the 'examples/' directory to see what you can do now with CImg.

David.



Major changes since the 1.1.2 are :

* New features :
- Added a new example source file 'examples/image_surface.cpp', that renders an image as a surface in a 3D space.
- Added a new example source file 'examples/mcf_levelsets3D.cpp', that performs Mean Curvature Flow of a 2D surface, using level sets.
- Added a version of 'CImg::draw_triangle()' that can draw Gouraud-shaded triangles (flat and textured versions).
- Added 'CImg::get_rotation_matrix()' that returns a 3x3 rotation matrix from a quaternion or a rotation vector.
- Added 'CImg::draw_object3d()' that can draw a colored/textured 3d object on images.
- Added 'CImgDisplay::display_object3d()' and 'CImg::display_object3d()' which run a high-level interface that
can view a user-defined 3d object.
- Added two 3D rendering examples in 'examples/CImg_test.cpp', that shows how to use 3D rendering capabilities of CImg in few lines.
- Added 'CImg::marching_cubes()' and 'CImg::marching_squares' that can be used to triangularize an implicit 2D or 3D
curve or surface from an image or a function.
- Added 'CImg::get_load_off()' and 'CImg::save_off()' that manages OFF files
(files describing 3D object, GeomView format, see 'http://www.geomview.org/').

* Optimizations / Modifications :
- Removed the 'multiplexed' variable in one of the CImg constructor. This feature as not generic enough to be integrated
in a constructor, and is so simple to code (one line).. This has been replaced by the new 'shared' capabilities of CImg.
- Added a 'shared' variable in CImg and CImgl. This allows to completely remove CImgSubset and CImglSubset, and
allows more flexibility for using shared memory. A lot of functions relative to shared-memory images have been added also.
Please look closely to the online reference.
- Added a fast approximation method in 'examples/greycstoration.cpp' (set by default) allowing to speed up the
restoration process almost by a factor x3.
- Recoded 'CImg::get_dilate()' and 'CImg::get_erode()' : it is now possible to specify a structuring element.
- Due to high difficulty in maintaing all project files in the 'compilation/' directory, I removed most of them except one
template file for each different C++ IDE. Just replace the default source file 'CImg_test.cpp' in the project file by the one
you want, to compile you desired example.
- Renamed 'CImg::get_2dprojections()' to 'CImg::get_projections2d()'.
- Removed 'examples/render3d.cpp'. As CImg has now built-in functions for 3D rendering, this example was obsolete.
Look at the new example appearing in 'examples/CImg_test.cpp' to see how to do easy 3D rendering with CImg.

* Bug corrections :
- Corrected 'CImg::cubic_pix1d()' and 'CImg::cubic_pix2d()', used for cubic and bicubic interpolations.
- Corrected 'cimg_map2x2()' and 'cimg_map4x4()' to avoid warning when compiling with g++.
- Added a simple trick to ease the use of libjpeg and libpng on Windows (thanks to bugzhao).
- Corrected 'CImg::load_jpeg()' and 'CImg::save_jpeg()' to handle all possible color spaces used in JPEG files.
- Corrected 'CImg::get_split()' to avoid bug with very large images.
- Corrected 'CImg::load_dicom()' and 'cimg::medcon_path()' to ease the loading of medcon files on Windows.
- And lot of minor bug corrections....

Feb. 27th, 2006

11:00 am - CImg 1.1.3 Started, just before the holidays !

Well, this week, CImg starts its 1.13 version, but it won't be developed so much (this week) since I'm going on holidays.
Sorry also for the forum users, I won't be able to answer CImg related questions !

So, what's next in the 1.13 version ? There will be a very nice function that I was definitely impatient to add (but had no time to code) : a CImg::draw_object3d() function.
It will takes a list of points, faces and some other parameters, and will draw an object like any other drawing method.

Wait and see.....

David.

Feb. 20th, 2006

01:53 pm - CImg 1.1.2 Released

CImg 1.1.2 has been released.
This version adds some new features and correct minor bugs.

Here is the content of the CHANGELOG :

*-----------------------------
*-----------------------------
* Changes from 1.1.1 to 1.1.2
*-----------------------------
*-----------------------------

* Bug corrections :
- Bug corrected in 'CImg::resize_halfXY()' that caused a possible segmentation fault.
- Bug corrected in 'CImg::move()' : Moving an hidden window (on X11) is now working.
- Handling pixel access to const images : writing pixel values in const images is now forbidden.
- 'CImg::det()' : Determinant of general matrices can now be computed.
- '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...)
- 'CImg<>::load_dlm()' : small bug corrected. Can now read DLM files with no CR at the last line.
- And other small corrections....

* Optimizations / Modifications :
- CImgDisplay::move() now shows automatically the display when it is in a closed state.
- Moved the trait cimg_library::largest in cimg_library::cimg::largest.
- Renamed 'CImg::quicksort()' to 'CImg::sort()'.
- Renamed 'CImg::create()' and 'CImg::copy()' to 'CImg::assign()'.
- 'CImg::inverse()' can now uses the LU matrix decomposition (or the SVD one as before).
- Optimized memory handling when playing with lists of images CImgl<>.
- Optimized some CImg constructors.

* New features :
- Added a new demo : 'Blobs Editor' in CImg_test.cpp.
- Added types 'CImg::iterator', 'CImg::const_iterator', 'CImgl::iterator' and 'CImgl::const_iterator' to allow
the easy use of STL algorithms on CImg and CImgl structures.
- Added several functions that acts like in STL vectors and lists in CImg and CImgl :
CImg::assign(), CImg::clear(), CImg::at(), CImg::back(), CImg::front(), CImg::begin(), CImg::end(),
CImgl::assign(), CImgl::clear(), CImgl::at(), CImgl::back(), CImgl::front(),
CImgl::begin(), CImgl::end(), CImgl::push_back(), CImgl::push_front(), CImgl::pop_back(), CImgl::pop_front().
- Added 'CImg::MSE()' and 'CImg::PSNR()' that compute the MSE (Mean Squared Error) and PSNR
(Peak Signal to Noise Ratio) between two images.
- Added 'CImg::solve()' and 'CImg::get_solve()', allowing to solve linear systems.
- Added 'CImg::pseudoinverse()' and 'CImg::get_pseudoinverse()' allowing to compute the Moore-Penrose
matrix inverse (useful for computing solutions to the least-square problem).

-------------------------------------------------------------------------------------------------------------------------

A new interesting effect has been added to the CImg_test.cpp example file. It's a basic blob editor, see the snapshot below !


Jan. 12th, 2006

11:32 am - CImg 1.1.1 Released and CImg 1.1.2 Started

CImg 1.1.1 has been released. There has been only a short time after the previous release (1.1.0).
The reason is that the 1.1.0 had some compilation problems with few compilers. The 1.1.1 introduces new interesting features, as the changelog below shows you.
I also started the 1.1.2 version which should be available in the CVS version. No important changes
compared to the 1.1.1 for now on.

*-----------------------------
*-----------------------------
* Changes from 1.1.0 to 1.1.1
*-----------------------------
*-----------------------------

* Bug corrections :
    - in 'CImgl<T>::insert()' : Insertion at non-last position was bugged.
    - in 'greycstoration.cpp' : Corrected some bugs in the algorithm and improved user interface.
    - in 'CImg<T>::blur_anisotropic()' : Abusive vector normalization was done before. Now it is corrected.
    - And many other bugs...

* Optimizations / Modifications :
    - Removed macros 'cimg_test*()' and modified argument checking in most of the functions, so that trying to act
    on an empty image does nothing instead of an error.
    - Renamed all static methods CImg<T>::load*() into CImg<T>::get_load*(). This has been done to be coherent with
    the naming convention of other CImg methods. Also, added new functions CImg<T>::load*() (non static) that corresponds
    to in-place image loading.
    - Renamed CImg RAW extension from .raw to .cimg. .raw files are not considered as real raw data without
    header. New functions 'CImg<T>::load_get_raw()' and 'CImg<T>::save_raw()' have been added to load and save .raw files.
    - In 'greycstoration.cpp' : improved algorithm and parameters. Also add improved visualization tool at the end
      of the image regularization.
    - Replaced some cimg:: static functions to inlined one, to prevent compiler bug on VS7.1, when trying
      to link multiple CImg-based modules.
    - Replaced parameter 'linear' to 'scheme' in 'CImg<T>::blur_anisotropic()', allowing the use of 2nd order
      Runge-Kutta integration, instead of just nearest-neighbor or linear ones.

* New features :
    - Introduced a trait 'cimg::largest' that allows to find the largest data type between two types. CImg functions
    use it for instance to return a CImg<float>, when trying to compute the gradient of an CImg<unsigned char>.
    It was not the case before, needing an explicit case, as in 'CImg<float>(img).get_gradientXY()'.
    - Added 'CImg<T>::operator<<', 'CImgl<T>::operator<<' and 'CImgl<T>::operator>>' that allows to
    insert images in list or append an image to another one.
    - New project file for using with X-Code (on Mac OS X) has been added to the 'compilation/' directory.
     Thanks to Werner Jainek who made it possible.

Nov. 18th, 2005

04:45 pm - CImg 1.1.0 Released

Here it is, the CImg 1.1.0 package has been finally released.

*-----------------------------
*-----------------------------
* Changes from 1.0.9 to 1.1.0
*-----------------------------
*-----------------------------

* Bug corrections :
- in 'CImg::load_dlm()' : the use of std::rewind() didn't work when reading the standart input. Function has been
recoded so it reads the file in one pass.
- Corrected 'CImg::anisotropic_blur()'.
- Corrected 'CImg::symeigen()' : corrected computation bugs.
- Corrected 'CImg::get_resize()' : linear and bicubic interpolations were not correctly handled (minor).
- Corrected 'CImgDisplay' to avoid malloc/dealloc problem with newer versions of X11.
- Corrected 'CImgDisplay' to handle better thread termination under X11 (Unix and MacOSX).
- Corrected 'greycstoration.cpp' (small bug in inpainting and non-curvature scheme).

* Optimizations / Modifications :
- Updated documentation.
- Modified Makefile for direct compilation of executables under Linux (ex : make CImg_test).
- Modified Exceptions error messages for more simplicity and clarity.
- Removed parameter 'alpha' in 'CImg::get_gradientXY()' and 'CImg::get_gradientXYZ()'.
- Renamed 'CImg::flip()' to 'CImg::mirror()'.
- Renamed 'CImg::get_3dplanes()' to 'CImg::get_2dprojections()'.
- Renamed 'CImgROI' to 'CImgSubset'. Also removed functions 'CImg::ref_*' and replaced it by
'CImg::pointset()', 'CImg::lineset', 'CImg::planeset' and 'CImg::channelset'.

* New features :
- Added 'CImg::RGBtoLUT()' and 'CImg::LUTtoRGB()' that convert an RGB image to an indexed image (using a palette).
- Added 8 bits display mode support in CImgDisplay.
- Added 'CImg::RGBtoHSV()' and 'CImg::HSVtoRGB()' that handle the conversion from and to HSV color space.
- Added 'CImg::kth_smallest()' and 'CImg::median()' that find respectively the kth smallest
element and the median of values in a CImg instance.
- Added 'CImg::blur_median()' and 'CImg::get_blur_median()' that apply a median filter on an image.
- Added 'CImg::load_parrec()' able to read PAR-REC (Philips) image file formats.
- Added 'CImgDisplay::title()' that can be used to change the display window title.
- Added 'CImg::RGBtoYUV()' and 'CImg::YUVtoRGB()' that convert between RGB and YUV color spaces.
- Added 'CImg::RGBtoYCbCr8()' and 'CImg::YCbCr8toRGB()' that convert between RGB and YCbCr color spaces (for unsigned char
pixels).
- Added 'CImg::has_same*()' where * can be 'X','Y','Z','XY','XYZ','XYZV' to compare image dimensions.
- Added 'CImg::is_empty()' that returns 'true' is the image is empty.
- Added 'CImg::load_dicom()' that loads an image in Dicom file format. This function uses the tool 'medcon' that
has to be installed (http://xmedcon.sourceforge.net/).
- Added 'CImg::load_yuv()', 'CImgl::load_yuv()' and 'CImg::save_yuv()', 'CImgk::save_yuv()'
that load and save respectively one frame or the entire movie from a .yuv file.

...And a lot of minor corrections... !

Nov. 14th, 2005

10:38 am - CImg Library presentation slides

I've done a set of slides (in PDF format) that present the CImg Library.

These slides introduce the main classes of the library (CImg, CImgl, CImgDisplay), as well as explain some important concepts of CImg. It is a basic ressource to illustrate the library capabilities and philosophy.

If you don't know what the CImg Library is, reading these slides is a good starting point.
You can access this ressource at :

http://cimg.sourceforge.net/slides_cimg.pdf

Oct. 21st, 2005

03:22 pm - CImg 1.10 started his life.

CImg 1.10, which is the next release of the CImg Library has been started few weeks ago.
There are already important changes, that (as ususally) breaks the full compatibility with the previous
1.0.9 version.
Anyway, there are often only minor changes for the user, and it has the advantage to clarify the
library concepts, as well as simplify the final code of the user.
Important changes concerns the CImgROI class, which is replaced by the CImgSubset class, and functions
CImg::ref_*() are also renamed to be more coherent.
A new class is appearing : the CImglSubset which has equivalent functions as CImgSubset but for image lists.
Also, new file formats are supported directly (as YUV:4:2:0 sequence files), or indirectly (as Dicom image format, through the use of the great tool 'xmedcon').

A lot of documentation has been also updated.

I plan to release the 1.10 version in few months, were it will be quite complete and stable.
You can already test the in-progress version by downloading the beta, or even better, use the
CVS-ed version (which is the most up to date version).

Jun. 2nd, 2005

09:12 am - CImg 1.0.9 Released

I want to announce the release of the final 1.0.9 version, which is finally out after 5 beta versions. It seems that it's quite stable now, so I decided to release it. There are lot of changes since the 1.0.8 version, so I highly recommend to look at the CHANGELOG, before switching to this new version.

Note that strict compatibility between successive CImg versions are NOT ensured, since the interface of the library is evolving slightly, in order to 'converge' into a simple-to-use and coherent image processing library. Anyway, changes are often MINOR between versions, so it wouldn't be a pain to update your own source code to the newest version. As the CImg Library only consists on a single header file, you can also easily keep the old working versions with your source code.

The next CImg version will be the 1.1 version, that denotes a significative version jump. My goal for the next version includes a complete writting of the reference documentation. If you have any (coherent) request, let me know. Below is the CHANGELOG :

*-----------------------------
*-----------------------------
* Changes from 1.0.8 to 1.0.9
*-----------------------------
*-----------------------------

* Bug corrections :
- In CImg::load_convert() and save_convert(), random filenames are now tested before read/write.
- Removed unuseful template in 1D CImg::draw_gaussian() function.
- Recoded CImgDisplay::render() with XPutPixel() again for maximum compability between X11-based architectures.
- In CImgStats, the variance field was computed actually as the standart deviation. This is now corrected, and the variance
is really the variance !

* Optimizations / Modifications :
- CImgDisplay fields mousex and mousey changed to fields mouse_x and mouse_y. This is done to be more coherent
with other CImgDisplay fields. The inconvenience should be minor, just replace the fields by the right names.
- CImgDisplay functions window_posx() and window_posy() changed to fields window_x and window_y.
- Eigenvalue computation with CImg::eigen() and symeigen() sorts the eigenvalues in inverse order from now on.
The eigenvector matrix is also transposed, to be more close to the standart functions in eigenvalue computation.
- Renamed macro variable 'cimg_lapack' in 'cimg_use_lapack'.
- CImg::save() can now handle alpha channel in PNG images (with 4-channels images).
- Recoded CImg::noise() to handle numerical limits in template types (esp. for unsigned char and char).
- Recoded CImg::pow() to be faster with usual int powers (0,1,2,3,4).
- Added conversions functions for all color spaces (R,G,B), (X,Y,Z), (x,y,Y) and (L,a,b).
- Added a 'pattern' parameter in 'CImg::draw_ellipse()' and 'CImg::draw_circle()', so that
only the outline of the ellipse/circle can be drawn.
- Added an ellipse-based selection in CImg::feature_selection(), when parameter 'feature_type' is set to 3.

* New features/functions :
- Added an 'Image Zoomer' demo in 'CImg_test.cpp'.
- Added 'CImg::load_jpeg()' and 'CImg::save_jpeg()' to deal natively with JPEG files, through
the libjpeg library. You don't need ImageMagick's convert anymore to read and save JPEG files.
Just define the macro 'cimg_use_jpeg before including 'CImg.h', and link your code with the 'jpeg' lib,
and it should work fine.
- Added 'CImg::quicksort()' allowing to sort values inside vectors, and getting corresponding permutations.
- CImgDisplay::move() is now working well on Windows and Unix.
- Added 'CImg::SVD()' to compute the SVD of general matrices. The inverse function as well
as the eigenvalue computation (of symmetric matrices) now uses the SVD. It means that LAPACK is
not necessary anymore in CImg !
- Added 'CImgDisplay::screen_dimx()' and 'CImgDisplay::screen_dimy()' to get the resolution of the
current (full) screen.
- Added a new 10x13 font, and recoded the functions 'CImgl::get_font();'
- Added 'cimg::dialog()' that allows to open a simple dialog box with a maximum of 6 choices.
- Added CImgROI::operator=(), so that one can now affect a channel or plane to an image :
img.ref_plane(2) = img_plane; Very useful !
- Added CImg::load_png() and save_png() to deal natively with PNG files, through
the zlib and libpng libraries. You don't need ImageMagick's convert anymore
to read and save PNG files. Just define the macro 'cimg_use_png' before including
'CImg.h', and link your code with the 'zlib' and the 'png' lib, and it should work fine.
Many thanks to Eric Fausett, for this nice piece of code.
- Added CImg::load_rgb(), load_rgba(), save_rgb() and save_rgba() that can load and save
Raw color image data (w/ or wo/ alpha channel).
- Added CImg::blur_anisotropic() that allows to denoise image by anisotropic filtering.
Smoothing behavior can be even user-defined.
Look at " http://www.greyc.ensicaen.fr/~dtschump/greycstoration/ "
to learn more about the image regularization technique implemented by this function.

- ... an tons of minor corrections !

May. 10th, 2005

01:56 pm - CImg 1.0.9 won't need LAPACK anymore

CImg 1.0.9 won't need LAPACK anymore.
This is due to the fact that a SVD function has been added to
the Library, thus, we use it to compute the eigenvalues/eigenvectors
of symmetric matrices, as well as matrix inverses.
Then, everything related to LAPACK will be removed in the
next release. This also save disk spaces, since I provided
the Lapack Lib for Windows in previous releases.
The next release reduces then to ~3Mb.

A beta version has been released today, you can test it by now.

David.

Apr. 22nd, 2005

04:09 pm - CImg and g++ 4.0

I've done minor modifications to CImg to
avoid some warnings when compiling with g++ 4.1 (experimental version).
Everything is ok, so I guess that CImg have no compiling problem with
the last g++ 4.0 release.

Apr. 6th, 2005

05:14 pm - CImg/GREYCstoration will be integrated soon in open source softwares

The release of the GREYCstoration algorithm in the CImg.1.0.8 package
has raised a strong interest from many developers around the web !
Some of them - contributing to open-source painting or photo-manager programs - have decided
to include the GREYCstoration algorithm in their softwares.

These are really good news, since GREYCstoration will be accessible with a nice GUI interface, and people who are
not familiar with command line tools would be able to use it, in order to restore (denoise) photographs,
do inpainting, or intelligent resizing of images. For those who don't know what is the GREYCstoration algorithm,
you can go to this page to learn more about it.

So, I would like to thank the following people, and suggest you to go to their site to see what they have done :


  • The GREYCstoration is now available as a GIMP plugin, thanks to Victor Stinner, who proposed a plug-in in this page.

  • The GREYCstoration algorithm will be probably integrated in
    Krita, a KDE-integrated painting program (in KOffice). Many thanks to Boudewijn Rempt that made it possible. Look at this page to learn more.

  • The GREYCstoration algorithm will be integrated in DigiKam as a plug-in. This is a nice photo management program for KDE. Many thanks to Gilles Caulier that made it possible. Look at this page to learn more.


As we say in France, "Bravo!" to all of you who spent some time on the integration.

David.

Current Mood: [mood icon] pleased

Mar. 14th, 2005

03:50 pm - CImg 1.0.8 is out !

The CImg Library 1.0.8 is out !
Here is the changelog :

*-----------------------------
*-----------------------------
* Changes from 1.0.7 to 1.0.8
*-----------------------------
*-----------------------------

* Bug corrections :
- Removed useless button/keyboard reinitialization in CImgDisplay events
- Corrected bug in CImg::load_dlm() and load_ascii() functions.
- Corrected compile bug in CImg::resize_halfXY() and CImg::get_resize_halfXY().
- Corrected and optimized CImg::get_resize().

* Optimizations / Modifications :
- Recoded CImg::fill() for faster value filling.
- Recoded CImg::draw_graph(). IMPORTANT NOTE : ymin and ymax are now directed up to down, instead
of down to up, in order to be more coherent with the draw_axeXY() function. This means you will
probably have to swap the values of these two parameters in the function call, to get similar results
to CImg 1.0.7 !!
- Recoded CImg::draw_gaussian() using tensors (parameters changed).
- CImg is now successfully compiled using the option '-pedantic' with g++. Makefile has been modified.
- CImg compiles with the DJGPP compiler (tested without display capabilities).
- Added load/save support for 16bits PNM binary images.
- Added interleaved mode support and template in constructor :
template CImg(const t *const data_buffer,dx,dy,dz,dv,bool interlaced)
- Recoded parts of CImg::eigen().
- Optimized buffer copy in XImage, for faster image display under X11 (minor improvements).
- Added fields in CImgStats, allowing to get the coordinates of the min/max pixels.

* New features/functions :
- Added CImg::load_bmp() and save_bmp() to deal with uncompressed BMP formats, without using ImageMagick.
- Added CImg::vector(), CImg::matrix() and CImg::tensor().
- Added CImg::scroll() and CImg::get_scroll to be able to scroll images.
- Added functions CImg::get_FFT() and CImgl::FFT() for Fast Fourier Transform.
- Added CImgDisplay::move() to be able to move display windows at specific locations.
- Added several region split in CImg::get_split().
- Added 'examples/mcf_levelsets.cpp' : Mean curvature flow of a 2D curve, using level sets.
- Added 'examples/greycstoration.cpp' : New algorithm for image denoising, inpainting and resizing.
(see http://www.greyc.ensicaen.fr/~dtschump/greycstoration)
- Added 'examples/wavelet_atrous.cpp' (by R. Peteri) : Wavelet decomposition of a image.
- Added a Fourier-based filtering demo in 'CImg_test.cpp', allowing interactive frequency filter creation.

* Abandonned features :
- Removed bump mapped version of the CImg::draw_triangle() function.
- Removed 'examples/inpainter.cpp' which is a little bit buggy (problem with multiscale).
- Removed 'CImg::new_display()' and 'CImgl::new_display', which are confusing and useless. Use
'new CImgDisplay(img)' and 'new CImgDisplay(list)' instead.
- Removed 'CImg::get_stats()' and 'CImgl::get_stats', which are useless. Use 'CImgStats(img)'
and 'CImgStats(list)'.

Mar. 11th, 2005

04:51 pm - Fast Fourier Transform

CImg 1.0.8 final will contain a Fast Fourier Transform routine. Well, this is a good news since I think CImg lacked for such a popular frequency analysis tool.
Functions CImg::get_FFT() and CImgl::FFT() has been added. There are surely lot of optimizations to do, but the FFT is
fast enough to be usable for image filtering. A little demo using FFT-based filtering has been added in the 'CImg_test.cpp' file. It allows the user to create a frequency filter and see the effect on an image.

Feb. 19th, 2005

02:24 pm - Problems with ImageMagick 6.1.9

It seems that the latest ImageMagick package (6.1.9) have problems
to save some image formats.
I recommend you to use previous versions of ImageMagick that are working
better for the moment.

Dec. 2nd, 2004

11:10 am - CImg 1.0.7 Updated

I've posted today at 11.30am (GT), modifications to the CImg.1.0.7 package.
Basically, it corrects some bugs (matrix multiplication, erosion, dilatation, convert bug on windows...),
and it changes the license used by the Library..

Well, don't worry, the new License is 'The CeCiLL License' (http://www.cecill.info) which is used for open sources software, and which is fully compatible with the GPL.
In other words, CeCiLL has been chosen because it is more adapted to French laws, so it is more easy for us to handle eventual illegal use of the CImg library.
But it is compatible with the GPL license, in the sense that any program using the CImg library can be redistributed with a GPL License.
I think then this is a good choice for the CImg Library.

The web page has been updated as well. When a first pass of the documentation will be finished, I think I will start the 1.0.8 version of the CImg Library.

David.

Oct. 20th, 2004

04:43 pm - CImg pre-release 1.0.7

I finally decided to release the CImg.1.0.7 version (pre-release).
This is mostly the final 1.0.7 version, but without all the detailled documentation
I've planned. But as this version corrects a lot of bugs of the 1.0.6 one,
and as the documentation is better than the 1.0.6 (even if still unfinished),
I think it is worth to release it.
This version replaces then the 1.0.6 when downloading from the 'Download' section.

PLEASE LOOK AT THE CHANGES.TXT FILE, FOR COMPATIBILITIES ISSUES WITH THE 1.0.6 VERSION.

There are some library structure changes that have to be considered if you want to compile your old programs.
Basically, there is a new namespace cimg:: , encompassing all the library classes and functions, so use :

using namespace cimg_library;

after including the CImg.h file will solve most of your problems.

Global typedefs have been also removed, so you may have to redefine them, if you used them before :

typedef unsigned char uchar;
typedef unsigned short ushort;
typedef unsigned int uint;
typedef unsigned long ulong;


Finally, some changes in CImgDisplay constructors parameters have been also made, so please look at the
new documentation (still in progress) to see the differences.
I think the next CImg versions will keep this library structure, which is convenient and secure to use.

Enjoy, and if you are encountering more problems, you can contact me using the forum.

David.

Navigate: (Previous 20 Entries)