Image Processing

Collaboration diagram for Image Processing:


 Image Statistics
 Image Analysis
 Other Domain Transform Operations
 Fourier Transform Operations
 OpenMP Utilities
 Image Resize
 Geometric Operations
 Morphology Operations for Gray Images
 Morphology Operations for Binary Images
 Rank Convolution Operations
 Convolution Operations
 Point Based Custom Operations
 Arithmetic Operations
 Additional Image Quantization Operations
 Histogram Based Operations
 Color Processing Operations
 Logical Arithmetic Operations
 Synthetic Image Render
 Tone Gamut Operations
 Threshold Operations
 Special Effects
 Remote Sensing Operations
 Image Conversion
 Image Enhance Utilities in Lua

Detailed Description

Several image processing functions based on the imImage structure.
You must link the application with "im_process.lib/.a/.so". In Lua call require"imlua_process".
Some complex operations use the Counter.
There is no check on the input/output image properties, check each function documentation before using it.
To enable OpenMP support use the "im_process_omp.lib/.a/.so" libraries. In Lua call require"imlua_process_omp".
Notice that multi-threading can be slower than single thread because of the overhead introduced by the threads configuration.
When using the "im_process_omp" library you can reduce that overhead by using the imProcessOpenMPSetMinCount and imProcessOpenMPSetNumThreads functions. But notice that this is not the same thing as using the library without support for OpenMP.
The parallelization in im_process involves only loops, usually for all the pixels in the image. To accomplish that we had to first isolate the Counter code, so the counting could also be done in parallel. Then we made sure that all loops contain only local variables to avoid unnecessary shared variables that could lead to incorrect results. In a few places we use the "atomic" directive to be able to compute histograms and other counts. But min/max computation must be done in single thread because of limitations in OpenMP support in C (in Fortran it would be easy to implement).
For more information on OpenMP: