/** \file
 * \brief Image Processing
 *
 * See Copyright Notice in im_lib.h
 */
module im.im_process;

version(IM) :

public import im.im_process_pnt;
public import im.im_process_loc;
public import im.im_process_glo;
public import im.im_process_ana;

version(IM_OMP) { version(DigitalMars) version(Windows) { pragma(lib, "im_process_omp.lib"); } }
else            { version(DigitalMars) version(Windows) { pragma(lib, "im_process.lib"); } }

//extern(C) @nogc nothrow :


/** \defgroup process Image Processing
 * \par
 * Several image processing functions based on the \ref imImage structure.
 * \par
 * You must link the application with "im_process.lib/.a/.so".
 * In Lua call require"imlua_process". \n
 * Some complex operations use the \ref counter.\n
 * There is no check on the input/output image properties,
 * check each function documentation before using it.
 * \par
 * To enable OpenMP support use the "im_process_omp.lib/.a/.so" libraries.
 * In Lua call require"imlua_process_omp". \n
 * Notice that multi-threading can be slower than single thread because of
 * the overhead introduced by the threads configuration. \n
 * When using the "im_process_omp" library you can reduce that overhead
 * by using the \ref imProcessOpenMPSetMinCount and \ref imProcessOpenMPSetNumThreads functions.
 * But notice that this is not the same thing as using the library without support for OpenMP. \n
 * \par
 * 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 \ref 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).
 * \par
 * For more information on OpenMP: \n
 * http://www.openmp.org
 */