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

Modules/ImageProcessor/GT2005ImageProcessor/GT2005Clustering.h

Go to the documentation of this file.
00001 #ifndef GT2005CLUSTERLISTE_H
00002 #define GT2005CLUSTERLISTE_H
00003 
00004 #include "GT2005Clusterliste.h"
00005 #include <math.h>
00006 /*#include "Tools/MessageQueue/MessageIDs.h"
00007 #include "Tools/MessageQueue/OutMessage.h"
00008 #include "Tools/Debugging/Debugging.h"*/
00009 
00010 class GT2005Clustering 
00011 {
00012 private:
00013   
00014   //case of vertical-scanning: a value for the bounding box that defines, which neighbour-cluster in horizontal
00015   //direction are candidates. the value depends on the spacing between the scan-lines. since there are three vertical 
00016   //scan-lines of different length, there will be three different values.
00017   int vhshort;
00018   int vhmiddle;
00019   int vhlong;
00020 
00021   //defines the start y-coordinate of the differtent vertical scan-lines 
00022   int yshort; //the begin of the scan line
00023   int ymiddle; //the transistion between short to middle
00024   int ylong; //the transition between middle to long
00025   
00026   //case of horizontal-scanning: a value for the bounding box that defines, which neighbour-cluster in vertical 
00027   //direction are candidates:
00028   int hv;
00029 
00030   //distance between clusters in vertical scan:
00031   int vh;
00032 
00033   //solution of image
00034   //length of the image
00035   int lImage;
00036   //height of the image
00037   int hImage;
00038 
00039 
00040   //object of clusterliste to manage the cluster
00041   GT2005Clusterliste cl;
00042   
00043   //a scan-line is not exactly horizontal or vertical. so it can be described through a bounding box:
00044   double xmin,xmax,ymin,ymax;
00045 
00046   //flag that indicates the direction of the scan-line: vertical or horizontal. itīs needed, because
00047   //it shows, which data-structure is in use right now (vNavi vor vertical scan-lines and hNavi for horizontal scan-lines)
00048   bool vertical;  
00049   
00050   //the distance between scan-line and cluster or between two clusters
00051   double distance;
00052 
00053   //iterator that marks the range of candidates to cluster
00054   std::list<std::list<GT2005Cluster>::iterator>::iterator cfirst; //first candidate
00055   std::list<std::list<GT2005Cluster>::iterator>::iterator clast; //last candidate
00056   std::list<std::list<GT2005Cluster>::iterator>::iterator cinput;//position of the new cluster;
00057 
00058   //iterator for the clusterlist
00059   std::list<GT2005Cluster>::iterator cIter;
00060   std::list<GT2005Cluster>::iterator cIter2;
00061 
00062   //iterator for the iteratorlist
00063   std::list<std::list<GT2005Cluster>::iterator>::iterator vhIter;
00064   std::list<std::list<GT2005Cluster>::iterator>::iterator vhIter2;
00065   
00066     
00067   //mark candidate for horizontal direction
00068   void markV(double xminimum, double xmaximum, double yminimum, double ymaximum, int expansion);
00069 
00070 
00071   void Cluster1(bool v);
00072 
00073   //mark candidate for horizontal direction
00074   void markH(double xminimum, double xmaximum, double yminimum, double ymaximum, int expansion);
00075 
00076   //prepare for vertical scanning: choose nNavi, set the iterators and skip not interessting clusters
00077   //original means: use the bounding box of the scan-line: xmin,xmax,ymin,ymax
00078   //otherwise use the modified bounding box, xn,xx,yn,yx
00079   void prepV(double xminimum);
00080 
00081   //prepare for horizontal scanning: choose hNavi, set the iterators and skip not interessting clusters
00082   //original means: use the bounding box of the scan-line: xmin,xmax,ymin,ymax
00083   //otherwise use the modified bounding box, xn,xx,yn,yx
00084   void prepH(double yminimum);
00085 
00086   //first Case: nach markV und markH
00087   void clusterFinal(bool vertical, double xminimum,double xmaximum,double yminimum, double ymaximum);
00088 
00089   //midointslist
00090   std::list<Vector2<double> > hlist;
00091 
00092   //iterator for midpointlist
00093   std::list<Vector2<double> >::iterator hiterator;
00094 
00095   
00096 
00097 public:
00098   GT2005Clustering();
00099 
00100   //a method to add a new scan-line. if the scan-line is positioned next to existing clusters, the scan-line and these 
00101   //clusters will be merged to one cluster.
00102   //start is the start-point of the scan-line and end the end-point. length is the length of the run measured in pixel.
00103   void addLine(Vector2<int> start, Vector2<int> end, int length);
00104 
00105   Vector2<double> getMidpoint(int elementnr);
00106 
00107   Vector2<double> getMidpointX(int elementnr);
00108 
00109   Vector2<double> getMidpointY(int elementnr);
00110 
00111   int getSize();
00112 
00113   void reset();
00114 
00115   GT2005Cluster getClusterX(int elementnr);
00116 
00117   GT2005Cluster getClusterY(int elementnr);
00118 
00119 };
00120 
00121 
00122 #endif
00123 
00124 

Generated on Mon Mar 20 21:59:46 2006 for GT2005 by doxygen 1.3.6