00001 /** \dir src/CINNIC 00002 00003 \brief Contour integration classes and programs 00004 00005 This is an over view and documentation of the CINNIC classes and 00006 files. 00007 00008 CINNICtest.C - This is the standard entry binary exec for 00009 CINNIC. it makes calles to create the 4D kernal and then can 00010 display the kernal properties if no command line is given or it 00011 can call the full CINNIC alg. with proper command line args. 00012 00013 example: CINNICtest input.pgm output_files configfile 00014 where input.pgm is a PGM file, ouput_files is a prefix for a 00015 file and its directory for all output files and configFile 00016 is a valid config file for CINNIC (see) contour.conf 00017 00018 cascadeHold.H - Holder for cascade energys. Is most likely depricated 00019 00020 readConfig.H/.C - A generic class for opening and parsing config files 00021 00022 CINNIC.H/.C - These are entry level methods into CINNIC. For 00023 instance you can use this to view the neuron template 00024 (Kernel). However, you will more than likely call RunSimpleIMage 00025 which is a call to the main CINNIC loop. The image is 00026 rescaled,filtered and in general pre-processed. 00027 00028 PreImage - is responsible for setting group sizes. 00029 00030 runImage - is the inner most loop of this class and calls 00031 contourRunMain which does the CINNIC neural 00032 implementations and processes results and writes most (but 00033 not all) of the results to disk. Results are writen as 00034 both image (e.g %s%s.max.out.%d.%d.%d.%d) and as a 00035 tab-delim file with more precise values 00036 (%s%s.table.out.txt) the later is used for precise 00037 analysis for instance Polat and Sagi 1993 00038 00039 00040 contourRun.H/.C - This is the meat of the CINNIC package. This is 00041 where the neurons operate on the orientation filtered 00042 images. Group values are computered here as will as the fast 00043 plasticity term. Much old code still exists for doing cascade in 00044 CINNIC that is no longer used. It will not be discused. The flow 00045 here is dedicated to iterating over the kernals and orientation 00046 filtered images. The iterations are handled outside on CINNIC.H/.C 00047 (i.e. methods this class will be called once for each 00048 iteration). Many small methods exist here for handeling the 00049 saliency map as well as sigmoidal functions and the various 00050 storage matricses used in testing. 00051 00052 contourRunMain - Mainly resets verious data structures 00053 at the first iteration then calls runImageSigmoid 00054 00055 runImageSigmoid - This is the out loop for the 6 layer 00056 psuedo-convolution. It also controls the group supression 00057 modifier. Here the change in a groups potential is detected 00058 from one iteration to the next. This adjusts the group 00059 supression. It next calls iterateConvolve which manages the 00060 inner loop for the CINNIC pseudo convolution. 00061 00062 iterateConvolve - Simply decides if cascade should be used 00063 calls convolveSimple which is the inner loop 00064 00065 convolveSimple - Is the inner loop. It manages the fast 00066 plasticity term for this neuron. This loop is i,j,k,l 00067 while the outer loop is alpha,beta. Optimizations and 00068 tests are used here to skip near zero values. THE TRICK 00069 here is that the result is stored in the other neuron 00070 (I had my reasons for doing it this way) that is each simple 00071 interaction is stored in the neuron that is in defined in 00072 the outer loop. This means that the result is put into 00073 beta,k,l while alpha,i,j is treated on the fly. beta,k,l and 00074 alpha,i,j are reversed in the paper from what they are called 00075 here. 00076 00077 All potential is stored in the NeuronMatrix which has the 00078 form matrix[iteration][beta][k][l]. This is of type 00079 ContourNeuronProp. 00080 00081 contourNeuronProp.H - This is a basic class for holding the 00082 propertie of each neuron. In essence it holds the potential of 00083 each neuron. It was initially designed so that cascade values 00084 could be tracked. Since it is imbedded in the code it has stayed 00085 for a little while. It should be replaced at some point by a more 00086 efficent data structure. Important methods are getCharge and 00087 Charge. 00088 00089 contourNeuron.H/.C - This creates and then stores the generic 00090 neuron template kernal in PropHold. This has a variety of crazy 00091 experimental calculations that are used in the creation of the 00092 CINNIC kernel. note that values of PropHold are stored in the 4D 00093 neural matrix called FourDNeuralMap[i][j][k][l] where i and j are 00094 the alpha/beta angles and k and l are the coords in each kernel 00095 slice. 00096 00097 ----- 00098 00099 Other semi-related classes: 00100 00101 CINNICstats - is a basic statistical anal. package. 00102 00103 CINNICstatsRun - executes some states used by CINNICstats 00104 00105 CINNICanova - an analysis of variance package 00106 00107 for dependency graphs: 00108 rankdir: TB 00109 */ 00110 00111 // $HeadURL: svn://isvn.usc.edu/software/invt/trunk/saliency/src/CINNIC/README.dxy $ 00112 // $Id: README.dxy 5749 2005-10-19 08:15:48Z itti $ 00113 00114 // //////////////////////////////////////////////////////////////////// // 00115 // The iLab Neuromorphic Vision C++ Toolkit - Copyright (C) 2001 by the // 00116 // University of Southern California (USC) and the iLab at USC. // 00117 // See http://iLab.usc.edu for information about this project. // 00118 // //////////////////////////////////////////////////////////////////// // 00119 // Major portions of the iLab Neuromorphic Vision Toolkit are protected // 00120 // under the U.S. patent ``Computation of Intrinsic Perceptual Saliency // 00121 // in Visual Environments, and Applications'' by Christof Koch and // 00122 // Laurent Itti, California Institute of Technology, 2001 (patent // 00123 // pending; application number 09/912,225 filed July 23, 2001; see // 00124 // http://pair.uspto.gov/cgi-bin/final/home.pl for current status). // 00125 // //////////////////////////////////////////////////////////////////// // 00126 // This file is part of the iLab Neuromorphic Vision C++ Toolkit. // 00127 // // 00128 // The iLab Neuromorphic Vision C++ Toolkit is free software; you can // 00129 // redistribute it and/or modify it under the terms of the GNU General // 00130 // Public License as published by the Free Software Foundation; either // 00131 // version 2 of the License, or (at your option) any later version. // 00132 // // 00133 // The iLab Neuromorphic Vision C++ Toolkit is distributed in the hope // 00134 // that it will be useful, but WITHOUT ANY WARRANTY; without even the // 00135 // implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR // 00136 // PURPOSE. See the GNU General Public License for more details. // 00137 // // 00138 // You should have received a copy of the GNU General Public License // 00139 // along with the iLab Neuromorphic Vision C++ Toolkit; if not, write // 00140 // to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, // 00141 // Boston, MA 02111-1307 USA. // 00142 // //////////////////////////////////////////////////////////////////// //