00001 /*!@file Envision/env_math.c */ 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/Envision/env_math.c $ 00035 // $Id: env_math.c 7663 2007-01-06 05:37:28Z rjpeters $ 00036 // 00037 00038 #ifndef ENVISION_INTEGER_MATH_C_DEFINED 00039 #define ENVISION_INTEGER_MATH_C_DEFINED 00040 00041 #include "Envision/env_math.h" 00042 00043 #include "Envision/env_c_math_ops.h" 00044 #include "Envision/env_log.h" 00045 #include "Envision/env_params.h" 00046 00047 // ###################################################################### 00048 void env_init_integer_math(struct env_math* imath, 00049 const struct env_params* envp) 00050 { 00051 /* Trig tables generated with this matlab code: 00052 00053 tabsize = 256; 00054 tabbits = 8; 00055 tabtype = 'intg16'; 00056 00057 arg=(2*pi*(0:(5*tabsize/4 - 1)) / tabsize); 00058 sinarg=sin(arg); 00059 sintab=fix(sinarg * (2^tabbits)); 00060 00061 fprintf('static const %s trigtab[] =\n', tabtype); 00062 fprintf(' {\n'); 00063 fprintf([' /' '* *' '/ %4d, %4d, %4d, %4d, %4d, %4d, %4d, %4d, %4d, %4d, %4d, %4d, %4d, %4d, %4d, %4d,\n'], sintab); 00064 fprintf(' };\n\n'); 00065 00066 */ 00067 00068 static const intg16 trigtab[] = 00069 { 00070 /* */ 0, 6, 12, 18, 25, 31, 37, 43, 49, 56, 62, 68, 74, 80, 86, 92, 00071 /* */ 97, 103, 109, 115, 120, 126, 131, 136, 142, 147, 152, 157, 162, 167, 171, 176, 00072 /* */ 181, 185, 189, 193, 197, 201, 205, 209, 212, 216, 219, 222, 225, 228, 231, 234, 00073 /* */ 236, 238, 241, 243, 244, 246, 248, 249, 251, 252, 253, 254, 254, 255, 255, 255, 00074 /* */ 256, 255, 255, 255, 254, 254, 253, 252, 251, 249, 248, 246, 244, 243, 241, 238, 00075 /* */ 236, 234, 231, 228, 225, 222, 219, 216, 212, 209, 205, 201, 197, 193, 189, 185, 00076 /* */ 181, 176, 171, 167, 162, 157, 152, 147, 142, 136, 131, 126, 120, 115, 109, 103, 00077 /* */ 97, 92, 86, 80, 74, 68, 62, 56, 49, 43, 37, 31, 25, 18, 12, 6, 00078 /* */ 0, -6, -12, -18, -25, -31, -37, -43, -49, -56, -62, -68, -74, -80, -86, -92, 00079 /* */ -97, -103, -109, -115, -120, -126, -131, -136, -142, -147, -152, -157, -162, -167, -171, -176, 00080 /* */ -181, -185, -189, -193, -197, -201, -205, -209, -212, -216, -219, -222, -225, -228, -231, -234, 00081 /* */ -236, -238, -241, -243, -244, -246, -248, -249, -251, -252, -253, -254, -254, -255, -255, -255, 00082 /* */ -256, -255, -255, -255, -254, -254, -253, -252, -251, -249, -248, -246, -244, -243, -241, -238, 00083 /* */ -236, -234, -231, -228, -225, -222, -219, -216, -212, -209, -205, -201, -197, -193, -189, -185, 00084 /* */ -181, -176, -171, -167, -162, -157, -152, -147, -142, -136, -131, -126, -120, -115, -109, -103, 00085 /* */ -97, -92, -86, -80, -74, -68, -62, -56, -49, -43, -37, -31, -25, -18, -12, -6, 00086 /* */ 0, 6, 12, 18, 25, 31, 37, 43, 49, 56, 62, 68, 74, 80, 86, 92, 00087 /* */ 97, 103, 109, 115, 120, 126, 131, 136, 142, 147, 152, 157, 162, 167, 171, 176, 00088 /* */ 181, 185, 189, 193, 197, 201, 205, 209, 212, 216, 219, 222, 225, 228, 231, 234, 00089 /* */ 236, 238, 241, 243, 244, 246, 248, 249, 251, 252, 253, 254, 254, 255, 255, 255, 00090 }; 00091 00092 typedef char trig_tab_size_check[ 00093 (sizeof(trigtab) / sizeof(trigtab[0])) 00094 == (5*ENV_TRIG_TABSIZ/4) ? 1 : -1]; 00095 00096 imath->nbits = envp->scale_bits; 00097 00098 imath->sintab = &trigtab[0]; 00099 imath->costab = &trigtab[64]; 00100 } 00101 00102 // ###################################################################### 00103 /* So things look consistent in everyone's emacs... */ 00104 /* Local Variables: */ 00105 /* indent-tabs-mode: nil */ 00106 /* c-file-style: "linux" */ 00107 /* End: */ 00108 00109 #endif // ENVISION_INTEGER_MATH_C_DEFINED