00001 /*!@file Image/Retinex.H Retinex color-correction algorithm */ 00002 00003 // //////////////////////////////////////////////////////////////////// // 00004 // The iLab Neuromorphic Vision C++ Toolkit - Copyright (C) 2000-2005 // 00005 // by the University of Southern California (USC) and the iLab at USC. // 00006 // See http://iLab.usc.edu for information about this project. // 00007 // //////////////////////////////////////////////////////////////////// // 00008 // Major portions of the iLab Neuromorphic Vision Toolkit are protected // 00009 // under the U.S. patent ``Computation of Intrinsic Perceptual Saliency // 00010 // in Visual Environments, and Applications'' by Christof Koch and // 00011 // Laurent Itti, California Institute of Technology, 2001 (patent // 00012 // pending; application number 09/912,225 filed July 23, 2001; see // 00013 // http://pair.uspto.gov/cgi-bin/final/home.pl for current status). // 00014 // //////////////////////////////////////////////////////////////////// // 00015 // This file is part of the iLab Neuromorphic Vision C++ Toolkit. // 00016 // // 00017 // The iLab Neuromorphic Vision C++ Toolkit is free software; you can // 00018 // redistribute it and/or modify it under the terms of the GNU General // 00019 // Public License as published by the Free Software Foundation; either // 00020 // version 2 of the License, or (at your option) any later version. // 00021 // // 00022 // The iLab Neuromorphic Vision C++ Toolkit is distributed in the hope // 00023 // that it will be useful, but WITHOUT ANY WARRANTY; without even the // 00024 // implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR // 00025 // PURPOSE. See the GNU General Public License for more details. // 00026 // // 00027 // You should have received a copy of the GNU General Public License // 00028 // along with the iLab Neuromorphic Vision C++ Toolkit; if not, write // 00029 // to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, // 00030 // Boston, MA 02111-1307 USA. // 00031 // //////////////////////////////////////////////////////////////////// // 00032 // 00033 // Primary maintainer for this file: Rob Peters <rjpeters at usc dot edu> 00034 // $HeadURL: svn://isvn.usc.edu/software/invt/trunk/saliency/src/Image/Retinex.H $ 00035 // $Id: Retinex.H 9412 2008-03-10 23:10:15Z farhan $ 00036 // 00037 00038 #ifndef IMAGE_RETINEX_H_DEFINED 00039 #define IMAGE_RETINEX_H_DEFINED 00040 00041 #include "Image/Image.H" 00042 00043 template <class T> class ImageSet; 00044 00045 /// Get the recommended pyramid depth for the given input dims 00046 size_t retinexDepth(const Dims& dims); 00047 00048 /// Build a retinex pyramid of the given depth using niter iterations 00049 /** The input is expected to be in log scale, and the output will also 00050 be in log scale. 00051 00052 This implementation is based on "McCann99" algorithm described in 00053 00054 Brian Funt, Florian Ciurea, and John McCann "Retinex in Matlab," 00055 Proceedings of the IS&T/SID Eighth Color Imaging Conference: Color 00056 Science, Systems and Applications, 2000, pp 112-121 00057 00058 The paper and matlab code are published here: 00059 00060 http://www.cs.sfu.ca/~colour/publications/IST-2000/ 00061 http://www.cs.sfu.ca/~colour/publications/IST-2000/retinex_mccann99.m 00062 */ 00063 template <class T> 00064 ImageSet<T> buildPyrRetinexLog(const Image<T>& L, 00065 const size_t depth, const int niter, 00066 const Rectangle& outrect); 00067 00068 /// Like above but with the output rectangle set to the full size of L 00069 template <class T> 00070 ImageSet<T> buildPyrRetinexLog(const Image<T>& L, 00071 const size_t depth, const int niter) 00072 { 00073 return buildPyrRetinexLog(L, depth, niter, 00074 Rectangle(Point2D<int>(0,0), L.getDims())); 00075 } 00076 00077 // ###################################################################### 00078 /* So things look consistent in everyone's emacs... */ 00079 /* Local Variables: */ 00080 /* mode: c++ */ 00081 /* indent-tabs-mode: nil */ 00082 /* End: */ 00083 00084 #endif // IMAGE_RETINEX_H_DEFINED