    /// \defgroup BasicConcepts Basic Concepts
    /// \brief Various basic concepts

    /// \defgroup Point Point
    /// \brief N-dimensional point
        /// \defgroup PointConcept Concepts
        /// \ingroup Point
        /// \brief Concepts for points
        
        /// \defgroup PointModel Models
        /// \ingroup Point
        /// \brief Models for points

        /// \defgroup PointAlgorithm Algorithms and Utility Functions
        /// \ingroup Point
        /// \brief Algorithms and Utility Functions for points

    /// \defgroup ColorSpaceAndLayout Color, Color Space, and Layout
    /// \brief The color space and the layout define the set, ordering and interpretation of channels in a pixel
        /// \defgroup ColorSpaceAndLayoutConcept Concepts
        /// \ingroup ColorSpaceAndLayout
        
        /// \defgroup ColorSpaceAndLayoutModel Models
        /// \ingroup ColorSpaceAndLayout

            /// \defgroup ColorNameModel Color Names
            /// \ingroup ColorSpaceAndLayoutModel

            /// \defgroup ColorSpaceModel Color Spaces
            /// \ingroup ColorSpaceAndLayoutModel
            
            /// \defgroup LayoutModel Layouts
            /// \ingroup ColorSpaceAndLayoutModel

    /// \defgroup Channel Channel
    /// \brief Channel is the building block of pixel
        /// \defgroup ChannelConcept Concepts
        /// \ingroup Channel
        /// \brief Concepts for channels
        
        /// \defgroup ChannelModel Models
        /// \ingroup Channel
        /// \brief Channel models. Although not required by the ChannelConcept, all GIL-provided channels support arithmetic operations

        /// \defgroup ChannelAlgorithm Algorithms and Utility Functions
        /// \ingroup Channel
        /// \brief Channel algorithms, metafunctions and utility functions
        
/**
        \defgroup ColorBase ColorBase
        \brief A color base is a container of color elements. 

The most common use of color base is in the implementation of a pixel, in which case the color
elements are channel values. The color base concept, however, can be used in other scenarios. For example, a planar pixel has channels that are not
contiguous in memory. Its reference is a proxy class that uses a color base whose elements are channel references. Its iterator uses a color base
whose elements are channel iterators.
*/
        /// \defgroup ColorBaseConcept Concepts
        /// \ingroup ColorBase
        /// \brief ColorBase concepts
        
        /// \defgroup ColorBaseModel Models
        /// \ingroup ColorBase
        /// \brief ColorBase models

        /// \defgroup ColorBaseAlgorithm Algorithms and Utility Functions
        /// \ingroup ColorBase
        /// \brief ColorBase algorithms, metafunctions and utility functions
    
/** 
    \defgroup PixelBased PixelBased
    \brief Concepts for all GIL constructs that are pixel-based (pixels, pixel iterators, locators, views, images).

	PixelBasedConcept provides a uniform interface for getting some common properties of pixel-based constructs, such as the number of channels,
	the color space, the layout, etc.
*/
        /// \defgroup PixelBasedConcept Concepts
        /// \ingroup PixelBased
        /// \brief PixelBased concepts
        
        /// \defgroup PixelBasedModel Models
        /// \ingroup PixelBased
        /// \brief PixelBased models

        /// \defgroup PixelBasedAlgorithm Algorithms and Utility Functions
        /// \ingroup PixelBased
        /// \brief PixelBased algorithms, metafunctions and utility functions.

/**
            \defgroup Pixel Pixel
            \brief A pixel is a set of channels defining the color at a given point in an image. 

Conceptually, a pixel is little more than a color base whose elements model \p ChannelConcept.
Many properties of pixels inherit from color bases: pixels may be <i>homogeneous</i> if all of their channels have the same type; otherwise they are 
called <i>heterogeneous</i>. The channels of a pixel may be addressed using semantic or physical indexing, or by color; all color base algorithms 
work on pixels as well. Two pixels are <i>compatible</i> if their color spaces are the same and their channels, paired semantically, are compatible. 
Note that constness, memory organization and reference/value are ignored. For example, an 8-bit RGB planar reference is compatible to a constant 8-bit 
BGR interleaved pixel value. Most pairwise pixel operations (copy construction, assignment, equality, etc.) are only defined for compatible pixels.

*/
        /// \defgroup PixelConcept Concepts
        /// \ingroup Pixel
        /// \brief Pixel concepts
        
        /// \defgroup PixelModel Models
        /// \ingroup Pixel
        /// \brief Pixel models

/**
            \defgroup PixelAlgorithm Algorithms and Utility Functions
            \ingroup Pixel
            \brief Pixel algorithms, metafunctions and utility functions.

Since pixels model the ColorBaseConcept, all color-base related algorithms also apply to pixels. See \ref ColorBaseAlgorithm for more.

*/

    /// \defgroup PixelDereferenceAdaptor Pixel Dereference Adaptor
    /// \brief A function object invoked upon accessing of the pixel of a pixel iterator/locator/view

        /// \defgroup PixelDereferenceAdaptorConcept Concepts
        /// \ingroup PixelDereferenceAdaptor
        
        /// \defgroup PixelDereferenceAdaptorModel Models
        /// \ingroup PixelDereferenceAdaptor


    /// \defgroup PixelIterator Pixel Iterator
    /// \brief STL Iterators over models of PixelConcept

        /// \defgroup PixelIteratorConcept Concepts
        /// \ingroup PixelIterator
        /// \brief Pixel iterator concepts
        
        /// \defgroup PixelIteratorModel Models
        /// \ingroup PixelIterator
        /// \brief Pixel iterator models


    /// \defgroup PixelLocator Pixel Locator
    /// \brief Generalization of an iterator to multiple dimensions

        /// \defgroup PixelLocatorConcept Concepts
        /// \ingroup PixelLocator
        /// \brief Pixel locator concepts
        
        /// \defgroup PixelLocatorModel Models
        /// \ingroup PixelLocator
        /// \brief Pixel locator models

    /// \defgroup ImageView Image View
    /// \brief N-dimensional range

        /// \defgroup ImageViewConcept Concepts
        /// \ingroup ImageView
        /// \brief Image view concepts
        
        /// \defgroup ImageViewModel Models
        /// \ingroup ImageView
        /// \brief Image view models

        /// \defgroup ImageViewAlgorithm Algorithms and Utility Functions
        /// \ingroup ImageView
        /// \brief Image view algorithms, metafunctions and utility functions

/**    
    \defgroup Image Image
    \brief N-dimensional container

  An image is a container of N-dimensional data. GIL provides only one model, a two dimensional image whose \p value_type is a pixel.
  
  Images are regular types (which means they have a default constructor, a copy constructor, \p operator=, \p operator==, \p operator!=, and \p swap)
  As containers, images own the data, which means they allocate the data in their constructors and deallocate in the destructors. Their copy construction,
  assignment and equality comparison is deep (i.e. propagates the operation to the values). That makes images expensive to pass by value, unlike views.
  
  Also, unlike views, images propagate their constness to the data. An const-qualified image does not allow for modifying its pixels and does not provide 
  a mutable view over its pixels.
  
  Images provide two services: they manage ownership of their data (the pixels) and they can return a view over their pixels.
  Algorithms predominantly operate on views. This is analogous to the STL: In the STL containers (like \p std::vector) provide ranges (\p vec.begin() 
  and \p vec.end() ) and algorithms typically operate on ranges. The GIL equivalent of a range is an image view.
  
*/
        /// \defgroup ImageConcept Concepts
        /// \ingroup Image
        /// \brief Image concepts
        
        /// \defgroup ImageModel Models
        /// \ingroup Image
        /// \brief Image models

    /// \defgroup Variant Variant
    /// \brief A holder of a runtime instantiated type. Used to provide runtime-specified images and views

    /// \defgroup Metafunctions Metafunctions
    /// \brief Metafunctions to construct or query GIL types
        /// \defgroup TypeFactory Type Factory Metafunctions
        /// \ingroup Metafunctions
        /// \brief Metafunctions that construct GIL types from related types or from components

        /// \defgroup TypeAnalysis Type Analysis Metafunctions
        /// \ingroup Metafunctions
        /// \brief Metafunctions that determine properties of GIL types
        
    /// \defgroup IO I/O
    /// \brief Support for reading and writing images to file
        /// \defgroup JPEG_IO JPEG I/O
        /// \ingroup IO
        /// \brief Support for reading and writing JPEG image files

        /// \defgroup TIFF_IO TIFF I/O
        /// \ingroup IO
        /// \brief Support for reading and writing TIFF image files

        /// \defgroup PNG_IO PNG I/O
        /// \ingroup IO
        /// \brief Support for reading and writing PNG image files

/*! 
\mainpage Generic Image Library

\section Documentation

- A Quick, Hands-on  \ref GILTutorial "Tutorial".
- A Detailed \ref GILDesignGuide "Design Guide".

\section Modules

    - \ref BasicConcepts
    - \ref Point
        - \ref PointConcept
        - \ref PointModel
        - \ref PointAlgorithm
    - \ref ColorSpaceAndLayout
        - \ref ColorSpaceAndLayoutConcept
        - \ref ColorSpaceAndLayoutModel
    - \ref Channel
        - \ref ChannelConcept
        - \ref ChannelModel
        - \ref ChannelAlgorithm
    - \ref ColorBase
        - \ref ColorBaseConcept
        - \ref ColorBaseModel
        - \ref ColorBaseAlgorithm
    - \ref PixelBased
        - \ref PixelBasedConcept
        - \ref PixelBasedModel
        - \ref PixelBasedAlgorithm
    - \ref Pixel
        - \ref PixelConcept
        - \ref PixelModel
        - \ref PixelAlgorithm
    - \ref PixelDereferenceAdaptor
        - \ref PixelDereferenceAdaptorConcept
        - \ref PixelDereferenceAdaptorModel
    - \ref PixelIterator
        - \ref PixelIteratorConcept
        - \ref PixelIteratorModel
    - \ref PixelLocator
        - \ref PixelLocatorConcept
        - \ref PixelLocatorModel
    - \ref ImageView
        - \ref ImageViewConcept
        - \ref ImageViewModel
        - \ref ImageViewAlgorithm
    - \ref Image
        - \ref ImageConcept
        - \ref ImageModel
    - \ref Metafunctions
        - \ref TypeFactory
        - \ref TypeAnalysis
    - \ref Variant
    - \ref IO
        - \ref JPEG_IO
        - \ref TIFF_IO
        - \ref PNG_IO    
*/

