Main Page | Namespace List | Class Hierarchy | Alphabetical List | Class List | File List | Namespace Members | Class Members | File Members | Related Pages

Modules/SpecialVision/AutoShutter.cpp

Go to the documentation of this file.
00001 /**
00002 * @file AutoShutter.cpp
00003 * 
00004 * Implementation of class AutoShutter
00005 *
00006 * @author <A href=mailto:jochen@kerdels.de>Jochen Kerdels</A>
00007 */
00008 
00009 #include "AutoShutter.h"
00010 #include "Representations/Perception/CameraParameters.h"
00011 #include "Representations/Perception/CameraInfo.h"
00012 
00013 
00014 
00015 AutoShutter::AutoShutter(const SpecialVisionInterfaces& interfaces)
00016 : SpecialVision(interfaces)
00017 {
00018   reset();
00019 }
00020 
00021 void AutoShutter::reset()
00022 {
00023   state = 0;
00024   for (int i = 0; i < 256; ++i)
00025     for (int j = 0; j < 9; ++j)
00026       histograms[i][j] = 0.0;
00027 }
00028 
00029 void AutoShutter::execute()
00030 {
00031   switch (state) {
00032     case  0: {
00033                CameraParameters tmp;
00034                tmp.theGain         = CameraParameters::gain_low;
00035                tmp.theShutterSpeed = CameraParameters::shutter_slow;
00036                tmp.theWhiteBalance = CameraParameters::wb_indoor_mode;
00037                sensors.setCameraParameters(tmp);
00038              } break;
00039     case  2: {
00040                CameraParameters tmp;
00041                tmp.theGain         = CameraParameters::gain_mid;
00042                tmp.theShutterSpeed = CameraParameters::shutter_slow;
00043                tmp.theWhiteBalance = CameraParameters::wb_indoor_mode;
00044                sensors.setCameraParameters(tmp);
00045              } break;
00046     case  4: {
00047                CameraParameters tmp;
00048                tmp.theGain         = CameraParameters::gain_high;
00049                tmp.theShutterSpeed = CameraParameters::shutter_slow;
00050                tmp.theWhiteBalance = CameraParameters::wb_indoor_mode;
00051                sensors.setCameraParameters(tmp);
00052              } break;
00053     case  6: {
00054                CameraParameters tmp;
00055                tmp.theGain         = CameraParameters::gain_low;
00056                tmp.theShutterSpeed = CameraParameters::shutter_mid;
00057                tmp.theWhiteBalance = CameraParameters::wb_indoor_mode;
00058                sensors.setCameraParameters(tmp);
00059              } break;
00060     case  8: {
00061                CameraParameters tmp;
00062                tmp.theGain         = CameraParameters::gain_mid;
00063                tmp.theShutterSpeed = CameraParameters::shutter_mid;
00064                tmp.theWhiteBalance = CameraParameters::wb_indoor_mode;
00065                sensors.setCameraParameters(tmp);
00066              } break;
00067     case  10: {
00068                CameraParameters tmp;
00069                tmp.theGain         = CameraParameters::gain_high;
00070                tmp.theShutterSpeed = CameraParameters::shutter_mid;
00071                tmp.theWhiteBalance = CameraParameters::wb_indoor_mode;
00072                sensors.setCameraParameters(tmp);
00073              } break;
00074     case  12: {
00075                CameraParameters tmp;
00076                tmp.theGain         = CameraParameters::gain_low;
00077                tmp.theShutterSpeed = CameraParameters::shutter_fast;
00078                tmp.theWhiteBalance = CameraParameters::wb_indoor_mode;
00079                sensors.setCameraParameters(tmp);
00080              } break;
00081     case  14: {
00082                CameraParameters tmp;
00083                tmp.theGain         = CameraParameters::gain_mid;
00084                tmp.theShutterSpeed = CameraParameters::shutter_fast;
00085                tmp.theWhiteBalance = CameraParameters::wb_indoor_mode;
00086                sensors.setCameraParameters(tmp);
00087              } break;
00088     case  16: {
00089                CameraParameters tmp;
00090                tmp.theGain         = CameraParameters::gain_high;
00091                tmp.theShutterSpeed = CameraParameters::shutter_fast;
00092                tmp.theWhiteBalance = CameraParameters::wb_indoor_mode;
00093                sensors.setCameraParameters(tmp);
00094              } break;
00095     case  1:
00096     case  3:
00097     case  5:
00098     case  7:
00099     case  9:
00100     case 11:
00101     case 13:
00102     case 15:
00103     case 17: makeHistogram(state / 2); break;
00104     case 18: selectBest(); break;
00105   }
00106   if (state < 18)
00107   {
00108     state++;
00109     specialPercept.type = SpecialPercept::autoShutter;
00110     specialPercept.shutterSelected = false;
00111   }
00112   else
00113   {
00114     specialPercept.type = SpecialPercept::autoShutter;
00115     specialPercept.shutterSelected = true;
00116     reset();
00117   }
00118 }
00119 
00120 void AutoShutter::makeHistogram(int which)
00121 {
00122   const double sampleCount = 2500;
00123   int i;
00124   for (i = 0; i < sampleCount; ++i)
00125     ++histograms[image.image[rand()%cameraResolutionHeight_ERS7][0][rand()%cameraResolutionWidth_ERS7]][which];
00126   histograms[0][which] /= sampleCount;
00127   for (i = 1; i < 256; ++i)
00128     histograms[i][which] = histograms[i-1][which] + (histograms[i][which] / sampleCount);
00129 }
00130 
00131 void AutoShutter::selectBest()
00132 {
00133   double a;
00134   double min = 256;
00135   int minid = -1;
00136   for (int i = 0; i < 9; ++i) {
00137     a = 0;
00138     for (int j = 0; j < 256; ++j) {
00139       a += fabs(histograms[j][i] - (double(j) / 255.0));
00140     }
00141     if (a < min)
00142     {
00143       min = a;
00144       minid = i;
00145     }
00146   }
00147 
00148   if (minid >= 0)
00149     switch (minid)
00150     {
00151     case  0: {
00152                CameraParameters tmp;
00153                tmp.theGain         = CameraParameters::gain_low;
00154                tmp.theShutterSpeed = CameraParameters::shutter_slow;
00155                tmp.theWhiteBalance = CameraParameters::wb_indoor_mode;
00156                sensors.setCameraParameters(tmp);
00157              } break;
00158     case  1: {
00159                CameraParameters tmp;
00160                tmp.theGain         = CameraParameters::gain_mid;
00161                tmp.theShutterSpeed = CameraParameters::shutter_slow;
00162                tmp.theWhiteBalance = CameraParameters::wb_indoor_mode;
00163                sensors.setCameraParameters(tmp);
00164              } break;
00165     case  2: {
00166                CameraParameters tmp;
00167                tmp.theGain         = CameraParameters::gain_high;
00168                tmp.theShutterSpeed = CameraParameters::shutter_slow;
00169                tmp.theWhiteBalance = CameraParameters::wb_indoor_mode;
00170                sensors.setCameraParameters(tmp);
00171              } break;
00172     case  3: {
00173                CameraParameters tmp;
00174                tmp.theGain         = CameraParameters::gain_low;
00175                tmp.theShutterSpeed = CameraParameters::shutter_mid;
00176                tmp.theWhiteBalance = CameraParameters::wb_indoor_mode;
00177                sensors.setCameraParameters(tmp);
00178              } break;
00179     case  4: {
00180                CameraParameters tmp;
00181                tmp.theGain         = CameraParameters::gain_mid;
00182                tmp.theShutterSpeed = CameraParameters::shutter_mid;
00183                tmp.theWhiteBalance = CameraParameters::wb_indoor_mode;
00184                sensors.setCameraParameters(tmp);
00185              } break;
00186     case  5: {
00187                CameraParameters tmp;
00188                tmp.theGain         = CameraParameters::gain_high;
00189                tmp.theShutterSpeed = CameraParameters::shutter_mid;
00190                tmp.theWhiteBalance = CameraParameters::wb_indoor_mode;
00191                sensors.setCameraParameters(tmp);
00192              } break;
00193     case  6: {
00194                CameraParameters tmp;
00195                tmp.theGain         = CameraParameters::gain_low;
00196                tmp.theShutterSpeed = CameraParameters::shutter_fast;
00197                tmp.theWhiteBalance = CameraParameters::wb_indoor_mode;
00198                sensors.setCameraParameters(tmp);
00199              } break;
00200     case  7: {
00201                CameraParameters tmp;
00202                tmp.theGain         = CameraParameters::gain_mid;
00203                tmp.theShutterSpeed = CameraParameters::shutter_fast;
00204                tmp.theWhiteBalance = CameraParameters::wb_indoor_mode;
00205                sensors.setCameraParameters(tmp);
00206              } break;
00207     case  8: {
00208                CameraParameters tmp;
00209                tmp.theGain         = CameraParameters::gain_high;
00210                tmp.theShutterSpeed = CameraParameters::shutter_fast;
00211                tmp.theWhiteBalance = CameraParameters::wb_indoor_mode;
00212                sensors.setCameraParameters(tmp);
00213              } break;
00214     }
00215 }
00216 
00217 /*
00218 * Change log :
00219 * 
00220 * $Log: AutoShutter.cpp,v $
00221 * Revision 1.2  2004/06/29 15:10:57  kerdels
00222 * Special Vision AutoShutter...
00223 *
00224 * Revision 1.1  2004/06/28 10:54:34  kerdels
00225 * added a class structure for a AutoShutter
00226 *
00227 * Revision 1.1  2004/06/28 10:51:04  kerdels
00228 * added a class structure for a AutoShutter
00229 *
00230 *
00231 *
00232 */

Generated on Thu Sep 23 19:57:32 2004 for GT2004 by doxygen 1.3.6