00001 #ifndef CORR_TRACKING_H
00002 #define CORR_TRACKING_H
00003
00004
00005
00006 #include <functional>
00007 #include <iostream>
00008 #include <list>
00009 #include <cstring>
00010 #include <cmath>
00011 #include <values.h>
00012 #include <vector>
00013 #include "cartesian.h"
00014 #include "corrcoef.h"
00015 #include "image.h"
00016
00017 namespace mimas {
00018
00028 template< typename T, class C = corrcoef< std::vector< double > > >
00029 class correlation_tracking_tool : public object
00030 {
00031 protected:
00032 int numPolyPoints;
00033 int *xpoly, *ypoly;
00034 std::list< Cartesian<int> > polyCoords, finalPolyCoords;
00035 image<T> trackingTemplate;
00036 image<T> trackingMask;
00037 int templateRows, templateCols;
00038 Cartesian<int> offsetForFirstCoord;
00039
00040 private:
00041 void findRectTemplate(Cartesian<int> &topLeft, Cartesian<int> &bottomRight);
00042 int pointInPolygon(int x, int y);
00043 void * thread(void * ptr);
00044 double lastTrackingCorr;
00045 int templateArea;
00046 bool autoUpdateTemplate;
00047 double autoUpdateCorrVal;
00048 Cartesian<int> trackingRange, startPoint, trackingDispl;
00049
00050 public:
00051 void pushPolyCoord(int xcoord, int ycoord);
00052 const std::list< Cartesian<int> > &getPolyCoords(void) const;
00053 void showPolyCoords(void);
00054 void clearPolyCoords(void);
00055 void sortPolyCoords(void);
00056 void createTemplate(image<T> &trackingImage);
00057 void writeTemplateToFilePGM(char *fn);
00058 void writeMaskedTemplateToFilePGM(char *fn);
00059 void showPolygonOnImage(image<T> &someImage);
00060 void showPolygonOnImage(image<T> &someImage, int greylevel);
00061 double getTrackingCorr(void);
00062 int getTemplateArea(void);
00063 #ifdef HAVE_XALAN
00064 void saveParameters( const char *fileName );
00065 void loadParameters( const char *fileName );
00066 #endif
00067 Cartesian<int> trackCorrelation(image<T> &trackingImage, Cartesian<int> &startCoord, Cartesian<int> &range, C &c );
00068 Cartesian<int> trackCorrelation(image<T> &trackingImage, Cartesian<int> &startCoord, C &c );
00069 Cartesian<int> trackCorrelation(image<T> &trackingImage, C &c );
00070 std::list< Cartesian<int> > trackCorrelationList(image<T> &trackingImage, Cartesian<int> &startCoord, Cartesian<int> &range, C &c );
00071 void setAutoUpdateTemplate(bool val);
00072 void setAutoUpdateCorrVal(double val);
00073 void setTrackingRange(int range);
00074 void setTrackingRange(int xrange, int yrange);
00075 Cartesian<int> getTrackingPoint(void);
00076 Cartesian<int> getTrackingDisplacement(void);
00077 correlation_tracking_tool(void);
00078 virtual ~correlation_tracking_tool(void);
00079 void variableDiagnostics(void);
00080
00081 bool debug;
00082 };
00083
00084 }
00085
00086 #include "correlation_tracking_tool.tcc"
00087
00088 #endif