The library provides image tranformations between several color spaces (sRGB, linear RGB, XYZ, Lab, LMS, IPT) and image channel manipulations such as histogram equalization, clipping, rescaling, Gaussian blur. The library supports element-wise arithmetic operations and mathematical fuctions with the use of expression templates. The library may use already allocated buffers as the source data for classes and operate with std::vectors. The library implements advanced image operations based on iCam06 and CAM16 color appearance models, simulating some of human eye algorithms, such as chromatic and local lightness adaptation. The implementation of these operations allows to receive an enhanced, "more natural" view of digital photographs. The library depends only on FFTW3.
The CLI application takes in source RGB888bit images and an output directory (optional) and produce four output images with iCam06-, CAM16-based operations implemented for every source image.
The GUI application works in a similar manner, but for a single image, with some parallelization and an ability to mix the output images into one. The GUI application requires Qt5 Widgets. A demo of the GUI application is shown below. More examples as well as executables compiled for Windows and MacOs can be found on this website.
blue.webm.mov
The project provides folowing targets:
pglib- the library which implements the logicpgcli- the CLI applicationpggui- the GUI application (optional)pgdoc- documentation of the project compiled with doxygen (optional)tests- tests provided with the use of Catch2 (optional)
Both pgcli and pggui depend on pglib. Also, pglib can be used directly by other projects. pglib requires FFTW3. Currently, the project uses single header stb_image libraries for image IO implementations in pgcli (included as single header files in lib). pggui requires Qt5 Widgets. The project uses Catch2 for testing (included as a single header file in lib).
The directory structure is as follows:
include- public headers provided by pgliblib- small 3rd-party header-only librariessrc- private source files of all the primary targetstests- source files of all the testsdoc- generated documentation (optional)
- A C++17-compliant compiler
- CMake 3.15 or newer
- If applicable, MacOsX Catalina or newer (>= 10.15)
- If applicable, Windows 7 or newer
- Qt5 Widgets for the GUI application
- doxygen