/** \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 */