00001 /*!@file AppMedia/app-gamma-correction.C do the gamma correction in the HSV space*/ 00002 00003 // //////////////////////////////////////////////////////////////////// // 00004 // The iLab Neuromorphic Vision C++ Toolkit - Copyright (C) 2001 by the // 00005 // 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: Laurent Itti <itti@usc.edu> 00034 // $HeadURL: svn://isvn.usc.edu/software/invt/trunk/saliency/src/AppMedia/app-gamma-correction.C $ 00035 // $Id: app-gamma-correction.C 12962 2010-03-06 02:13:53Z irock $ 00036 // 00037 00038 /*! This app is mainly useful to do the gamma correction to the debayered image. 00039 the reason is that the captured image from XC HD camera is not looks good enough 00040 */ 00041 00042 00043 #include "Image/Image.H" 00044 #include "Image/Pixels.H" 00045 #include "Image/MathOps.H" 00046 #include "Raster/Raster.H" 00047 #include "Util/log.H" 00048 #include "Util/StringConversions.H" 00049 #include <string> 00050 #include <cstdio> 00051 00052 using namespace std; 00053 00054 int main(int argc, char** argv) 00055 { 00056 if (argc != 4) 00057 { 00058 fprintf(stderr, "USAGE: app-gamma-correction <input color image> " 00059 "<output corrected color image> <gamma value>"); 00060 return -1; 00061 } 00062 00063 string filename = argv[1]; 00064 string outname = argv[2]; 00065 float gamma; 00066 convertFromString(string(argv[3]), gamma); 00067 00068 00069 Image<PixRGB<float> > input = Raster::ReadRGB(filename); 00070 00071 Image<PixHSV<float> > hsvRes = static_cast< Image<PixHSV<float> > > (input/255); 00072 00073 Image<PixHSV<float> >::iterator itr = hsvRes.beginw(); 00074 while(itr != hsvRes.endw()) 00075 { 00076 itr->p[2] = pow(itr->p[2], gamma); 00077 ++itr; 00078 } 00079 00080 Image<PixRGB<float> > foutput = static_cast< Image<PixRGB<float> > > (hsvRes); 00081 foutput = foutput * 255.0F; 00082 Image<PixRGB<byte> > output = foutput; 00083 Raster::WriteRGB(output, outname); 00084 00085 return 0; 00086 }