BeobotBrainMT.H
Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037
00038
00039
00040
00041
00042 #ifndef BEOBOT_BEOBOTBRAINMT_H_DEFINED
00043 #define BEOBOT_BEOBOTBRAINMT_H_DEFINED
00044
00045
00046
00047
00048
00049 #define delta_min 3
00050 #define delta_max 4
00051 #define level_min 1
00052 #define level_max 3
00053 #define maxdepth (level_max + delta_max + 1)
00054 #define normtyp (VCXNORM_MAXNORM)
00055
00056
00057 #define sml 2
00058
00059
00060 #define IMAGE_WIDTH 160
00061 #define IMAGE_HEIGHT 120
00062
00063
00064 #define IWEIGHT 0.7
00065 #define CWEIGHT 1.0
00066 #define OWEIGHT 1.0
00067
00068
00069 #define NUM_CHANNELS 7
00070 #define REDGREEN 0
00071 #define BLUEYELLOW 1
00072 #define INTENSITY 2
00073 #define ORI0 3
00074 #define ORI45 4
00075 #define ORI90 5
00076 #define ORI135 6
00077
00078 #define numBBMTthreads 7
00079
00080 #include "Component/ModelComponent.H"
00081 #include "Component/ModelParam.H"
00082 #include "Neuro/VisualCortex.H"
00083 #include "Image/Image.H"
00084 #include "Image/ImageSet.H"
00085 #include "Image/ColorOps.H"
00086 #include "Image/PyramidOps.H"
00087 #include "Image/Pixels.H"
00088 #include "GUI/XWinManaged.H"
00089 #include "Raster/Raster.H"
00090 #include "Util/Timer.H"
00091
00092 #include <list>
00093 #include <pthread.h>
00094
00095
00096
00097
00098 struct jobData
00099 {
00100 jobData() { };
00101
00102 jobData(const int jt, const PyramidType pt, const float w,
00103 const float ori = 0.0F) :
00104 jobType(jt), ptyp(pt), weight(w), orientation(ori) { }
00105
00106 int jobType;
00107 PyramidType ptyp;
00108 float weight;
00109 float orientation;
00110 };
00111
00112
00113
00114
00115
00116 class BeobotBrainMT : public ModelComponent
00117 {
00118 public:
00119
00120
00121
00122
00123
00124
00125 BeobotBrainMT(OptionManager& mgr,
00126 const std::string& descrName = "Beobot Brain MT",
00127 const std::string& tagName = "BeobotBrainMT");
00128
00129
00130 virtual ~BeobotBrainMT();
00131
00132
00133
00134
00135
00136
00137
00138
00139 inline int getWinChan(uint i);
00140
00141
00142 inline int getWinSubmapNum(uint i);
00143
00144
00145 inline Image< PixRGB<byte> > getCurrImage();
00146
00147
00148 inline Image<float> getCurrCMap(uint cnum);
00149
00150
00151 inline Point2D<int> getSalPoint(uint i);
00152
00153
00154 void getFeatures(Point2D<int> p, std::vector<double>& v);
00155
00156
00157 inline Rectangle getObjRect(uint i);
00158
00159
00160 inline void getSalientFeatures( uint i, std::vector<double>& v);
00161
00162
00163 inline float getProcessTime();
00164
00165
00166 Image<double> getGist();
00167
00168
00169 Image<float> getSalMap();
00170
00171
00172
00173
00174
00175
00176
00177
00178 void input(const Image< PixRGB<byte> > img);
00179
00180
00181 bool outputReady();
00182
00183
00184 void threadCompute();
00185
00186
00187 int getNumSalPoint();
00188
00189
00190
00191 protected:
00192 void start1();
00193 void stop2();
00194
00195 private:
00196
00197
00198 void computeCIOpyr(Image< PixRGB<byte> > img);
00199
00200
00201 void findObjects();
00202
00203
00204 void computeSalientFeatures();
00205
00206
00207 Point2D<int> downScaleCoords(Point2D<int> winner, Dims targetDims);
00208
00209
00210 bool setWinningMap(Point2D<int> winner);
00211
00212
00213
00214 Image<byte> getObjectMask();
00215
00216
00217 Rectangle getSEBoundingBox();
00218
00219
00220 Rectangle correctBB(Rectangle r, Point2D<int> locn, int w, int h);
00221
00222
00223
00224
00225 Image< PixRGB<byte> > itsCurrImg;
00226 int itsCurrImgWidth;
00227 int itsCurrImgHeight;
00228 Image<float> itsCurrLumImg;
00229 Image<byte> r, g, b, y;
00230 Image<float> rgimg;
00231 Image<float> byimg;
00232 Image<float> itsSalmap;
00233 bool gotLum, gotRGBY;
00234
00235
00236 uint itsNumChannels;
00237
00238
00239 std::vector<float> itsChanWeight;
00240
00241
00242 std::vector<Image<float> > itsCMaps;
00243
00244
00245
00246 std::vector<std::vector<Image<float> > > itsRawCSMaps;
00247
00248
00249
00250 std::vector<std::vector<Image<float> > > itsCSMaps;
00251
00252
00253 std::vector<ImageSet<float> > itsImgPyrs;
00254
00255
00256 Image<double> itsGistVector;
00257
00258
00259 uint itsGistFeatSize;
00260
00261
00262 std::vector<Point2D<int> > itsWinner;
00263
00264
00265 std::vector<Rectangle> itsObjRect;
00266
00267
00268 std::vector<std::vector<double> > itsSalientFeatures;
00269
00270
00271 std::vector<uint> itsWinningChan;
00272
00273
00274 std::vector<uint> itsWinningSubmapNum;
00275
00276
00277 std::vector<Image<float> > itsWinningMap;
00278
00279
00280
00281
00282 std::vector<Image<byte> > itsObjectMask;
00283
00284
00285
00286 Image<byte> structEl;
00287
00288
00289 std::list<jobData> jobQueue;
00290 uint jobsTodo;
00291 rutz::shared_ptr<Timer> itsTimer;
00292 float itsProcessTime;
00293
00294
00295 pthread_t *worker;
00296 pthread_mutex_t jobLock;
00297 pthread_mutex_t mapLock;
00298 pthread_mutex_t gistLock;
00299 pthread_cond_t jobCond;
00300 uint numWorkers;
00301
00302 XWinManaged* itsWin;
00303 };
00304
00305
00306
00307
00308 inline Image< PixRGB<byte> > BeobotBrainMT::getCurrImage()
00309 { return itsCurrImg; }
00310
00311 inline int BeobotBrainMT::getWinChan(uint i)
00312 { ASSERT(i < itsWinningChan.size()); return itsWinningChan[i]; }
00313
00314 inline int BeobotBrainMT::getWinSubmapNum(uint i)
00315 { ASSERT(i < itsWinningSubmapNum.size()); return itsWinningSubmapNum[i]; }
00316
00317 inline Image<float> BeobotBrainMT::getCurrCMap(uint i)
00318 { ASSERT(i < itsCMaps.size()); return itsCMaps[i]; }
00319
00320 inline int BeobotBrainMT::getNumSalPoint()
00321 { return itsWinner.size(); }
00322
00323 inline Point2D<int> BeobotBrainMT::getSalPoint(uint i)
00324 { ASSERT(i < itsWinner.size()); return itsWinner[i]; }
00325
00326 inline Rectangle BeobotBrainMT::getObjRect(uint i)
00327 { ASSERT(i < itsObjRect.size()); return itsObjRect[i]; }
00328
00329 inline void BeobotBrainMT::getSalientFeatures( uint i, std::vector<double>& v)
00330 {
00331 ASSERT(i < itsSalientFeatures.size());
00332 v.clear();
00333 for(uint j = 0; j < itsSalientFeatures[i].size(); j++)
00334 v.push_back(itsSalientFeatures[i][j]);
00335 }
00336
00337 inline float BeobotBrainMT::getProcessTime()
00338 { return itsProcessTime; }
00339
00340 #endif
00341
00342
00343
00344
00345
00346