/** \file
 * \brief Kernel Generators
 * Creates several known kernels
 *
 * See Copyright Notice in im_lib.h
 */

#ifndef __IM_KERNEL_H
#define __IM_KERNEL_H

#if	defined(__cplusplus)
extern "C" {
#endif


/** \defgroup kernel Kernel Generators
 * \par
 * Creates several known kernels
 * \par
 * See \ref im_kernel.h
 * \ingroup convolve */


/** Creates a kernel with the following values:
 *
\verbatim
   1  2  1
   0  0  0
  -1 -2 -1
\endverbatim
 *
 * \verbatim im.KernelSobel() -> kernel: imImage [in Lua 5] \endverbatim
 * \ingroup kernel */
imImage* imKernelSobel(void);

/** Creates a kernel with the following values:
 *
\verbatim
   1  1  1
   0  0  0
  -1 -1 -1
\endverbatim
 *
 * \verbatim im.KernelPrewitt() -> kernel: imImage [in Lua 5] \endverbatim
 * \ingroup kernel */
imImage* imKernelPrewitt(void);

/** Creates a kernel with the following values:
 *
\verbatim
   5  5  5
  -3  0 -3
  -3 -3 -3
\endverbatim
 *
 * \verbatim im.KernelKirsh() -> kernel: imImage [in Lua 5] \endverbatim
 * \ingroup kernel */
imImage* imKernelKirsh(void);

/** Creates a kernel with the following values:
 *
\verbatim
   0 -1  0 
  -1  4 -1 
   0 -1  0 
\endverbatim
 *
 * \verbatim im.KernelLaplacian4() -> kernel: imImage [in Lua 5] \endverbatim
 * \ingroup kernel */
imImage* imKernelLaplacian4(void);

/** Creates a kernel with the following values:
 *
\verbatim
  -1 -1 -1 
  -1  8 -1 
  -1 -1 -1 
\endverbatim
 *
 * \verbatim im.KernelLaplacian8() -> kernel: imImage [in Lua 5] \endverbatim
 * \ingroup kernel */
imImage* imKernelLaplacian8(void);

/** Creates a kernel with the following values:
 *
\verbatim
   0 -1 -1 -1  0
  -1  0  1  0 -1
  -1  1  8  1 -1
  -1  0  1  0 -1
   0 -1 -1 -1  0
\endverbatim
 *
 * \verbatim im.KernelLaplacian5x5() -> kernel: imImage [in Lua 5] \endverbatim
 * \ingroup kernel */
imImage* imKernelLaplacian5x5(void);

/** Creates a kernel with the following values:
 *
\verbatim
  -1 -1 -1 -1 -1 -1 -1
  -1 -1 -1 -1 -1 -1 -1
  -1 -1 -1 -1 -1 -1 -1
  -1 -1 -1 48 -1 -1 -1
  -1 -1 -1 -1 -1 -1 -1
  -1 -1 -1 -1 -1 -1 -1
  -1 -1 -1 -1 -1 -1 -1
\endverbatim
 *
 * \verbatim im.KernelLaplacian7x7() -> kernel: imImage [in Lua 5] \endverbatim
 * \ingroup kernel */
imImage* imKernelLaplacian7x7(void);

/** Creates a kernel with the following values:
 *
\verbatim
  0 -1 0  
  0  1 0  
  0  0 0  
\endverbatim
 *
 * \verbatim im.KernelGradian3x3() -> kernel: imImage [in Lua 5] \endverbatim
 * \ingroup kernel */
imImage* imKernelGradian3x3(void);

/** Creates a kernel with the following values:
 *
\verbatim
   0 -1 -1  0  1  1  0
  -1 -2 -2  0  2  2  1
  -1 -2 -3  0  3  2  1
  -1 -2 -3  0  3  2  1
  -1 -2 -3  0  3  2  1
  -1 -2 -2  0  2  2  1
   0 -1 -1  0  1  1  0
\endverbatim
 *
 * \verbatim im.KernelGradian7x7() -> kernel: imImage [in Lua 5] \endverbatim
 * \ingroup kernel */
imImage* imKernelGradian7x7(void);

/** Creates a kernel with the following values:
 *
\verbatim
  -1 0 0 
   0 0 0 
   0 0 1 
\endverbatim
 *
 * \verbatim im.KernelSculpt() -> kernel: imImage [in Lua 5] \endverbatim
 * \ingroup kernel */
imImage* imKernelSculpt(void);

/** Creates a kernel with the following values:
 *
\verbatim
  1 1 1 
  1 1 1 
  1 1 1 
\endverbatim
 *
 * \verbatim im.KernelMean3x3() -> kernel: imImage [in Lua 5] \endverbatim
 * \ingroup kernel */
imImage* imKernelMean3x3(void);

/** Creates a kernel with the following values:
 *
\verbatim
  1 1 1 1 1 
  1 1 1 1 1 
  1 1 1 1 1 
  1 1 1 1 1 
  1 1 1 1 1 
\endverbatim
 *
 * \verbatim im.KernelMean5x5() -> kernel: imImage [in Lua 5] \endverbatim
 * \ingroup kernel */
imImage* imKernelMean5x5(void);

/** Creates a kernel with the following values:
 *
\verbatim
  0 1 1 1 0 
  1 1 1 1 1 
  1 1 1 1 1 
  1 1 1 1 1 
  0 1 1 1 0 
\endverbatim
 *
 * \verbatim im.KernelMean5x5() -> kernel: imImage [in Lua 5] \endverbatim
 * \ingroup kernel */
imImage* imKernelCircularMean5x5(void);

/** Creates a kernel with the following values:
 *
\verbatim
  1 1 1 1 1 1 1 
  1 1 1 1 1 1 1 
  1 1 1 1 1 1 1 
  1 1 1 1 1 1 1 
  1 1 1 1 1 1 1 
  1 1 1 1 1 1 1 
  1 1 1 1 1 1 1 
\endverbatim
 *
 * \verbatim im.KernelMean7x7() -> kernel: imImage [in Lua 5] \endverbatim
 * \ingroup kernel */
imImage* imKernelMean7x7(void);

/** Creates a kernel with the following values:
 *
\verbatim
  0 0 1 1 1 0 0 
  0 1 1 1 1 1 0 
  1 1 1 1 1 1 1 
  1 1 1 1 1 1 1 
  1 1 1 1 1 1 1 
  0 1 1 1 1 1 0 
  0 0 1 1 1 0 0 
\endverbatim
 *
 * \verbatim im.KernelCircularMean7x7() -> kernel: imImage [in Lua 5] \endverbatim
 * \ingroup kernel */
imImage* imKernelCircularMean7x7(void);

/** Creates a kernel with the following values:
 *
\verbatim
  1 2 1 
  2 4 2 
  1 2 1 
\endverbatim
 *
 * \verbatim im.KernelGaussian3x3() -> kernel: imImage [in Lua 5] \endverbatim
 * \ingroup kernel */
imImage* imKernelGaussian3x3(void);

/** Creates a kernel with the following values:
 *
\verbatim
  1  4  6  4 1 
  4 16 24 16 4 
  6 24 36 24 6 
  4 16 24 16 4 
  1  4  6  4 1 
\endverbatim
 *
 * \verbatim im.KernelGaussian5x5() -> kernel: imImage [in Lua 5] \endverbatim
 * \ingroup kernel */
imImage* imKernelGaussian5x5(void);

/** Creates a kernel with the following values:
 *
\verbatim
  1 2 3 2 1 
  2 4 6 4 2 
  3 6 9 6 3 
  2 4 6 4 2 
  1 2 3 2 1 
\endverbatim
 *
 * \verbatim im.KernelBarlett5x5() -> kernel: imImage [in Lua 5] \endverbatim
 * \ingroup kernel */
imImage* imKernelBarlett5x5(void);

/** Creates a kernel with the following values:
 *
\verbatim
   0 -1 -1 -1  0 
  -1 -1  3 -1 -1 
  -1  3  4  3 -1 
  -1 -1  3 -1 -1 
   0 -1 -1 -1  0 
\endverbatim
 *
 * \verbatim im.KernelTopHat5x5() -> kernel: imImage [in Lua 5] \endverbatim
 * \ingroup kernel */
imImage* imKernelTopHat5x5(void);

/** Creates a kernel with the following values:
 *
\verbatim
   0  0 -1 -1 -1  0  0
   0 -1 -1 -1 -1 -1  0 
  -1 -1  3  3  3 -1 -1 
  -1 -1  3  4  3 -1 -1 
  -1 -1  3  3  3 -1 -1 
   0 -1 -1 -1 -1 -1  0 
   0  0 -1 -1 -1  0  0 
\endverbatim
 *
 * \verbatim im.KernelTopHat7x7() -> kernel: imImage [in Lua 5] \endverbatim
 * \ingroup kernel */
imImage* imKernelTopHat7x7(void);

/** Creates a kernel with the following values:
 *
\verbatim
   0 -1 -2 -1  0 
  -1 -4  0 -4 -1 
  -2  0 40  0 -2 
  -1 -4  0 -4 -1 
   0 -1 -2 -1  0 
\endverbatim
 *
 * \verbatim im.KernelEnhance() -> kernel: imImage [in Lua 5] \endverbatim
 * \ingroup kernel */
imImage* imKernelEnhance(void);

#if defined(__cplusplus)
}
#endif

#endif