DLConnectedComponentsUtils.h

Go to the documentation of this file.
00001 #ifndef DLCONNECTEDCOMPONENTSUTILS_H
00002 #define DLCONNECTEDCOMPONENTSUTILS_H
00003 
00004 //#include "DLCcConst.h"
00005 #include "DLTypes.h"
00006 #include "DLLogger.h"
00007 #include "DLDatarun.h"
00008 #include "DLPoint.h"
00009 #include "DLException.h"
00010 
00011 #ifndef DOXYGEN_SHOULD_SKIP_THIS 
00013 typedef struct {
00014    friend class DLConnectedComponents;
00015    friend class DLConnectedComponentsUtils;
00016    private:
00018    int run_row;                       
00020    int run_start;                      
00022    int run_stop;                       
00024    int run_link;                     
00025 } DLtmpdatalink;
00026 
00027 
00029 typedef struct {
00030    friend class DLConnectedComponents;
00031    friend class DLConnectedComponentsUtils;
00032 
00033    private:
00035    int urow_flag;          
00037    int *still_curr;  
00039    int *B_Seen;                       
00041    int row;
00043    int mask[256];                     
00045    int *ptr[256];                     
00047    int LUT[5*256];                    
00049    unsigned char msk[3];                      
00051    int extra_bits;                    
00053    int *num_stk;                      
00055    int irun;                          
00056   
00058    DLtmpdatalink *R;   
00060    int *Rhead;
00062    int *Rtail;
00064    int *Rlink;
00066    int next_Rlink;
00068    int free_R;
00070    int top_R;
00071   
00073    DLtmpdatalink *C;                  
00075    int *Chead;
00077    int *Ctail;
00079    int *Clink;
00081    int next_Clink;
00083    int free_C;
00085    int top_C;
00086 } DLtmpdocdata;
00087 
00088 
00090 typedef struct {   
00091    friend class DLConnectedComponents;
00092    friend class DLConnectedComponentsUtils;
00093 
00094    private:
00096    int *run;                         
00098    int *num;                        
00100    int i;                            
00102    int len;                        
00103 } DLtmpdata;
00104 
00106 //typedef struct { 
00107 //      friend class DLConnectedComponents;
00108 //      friend class DLConnectedComponentsUtils;
00109 //private:
00110 //      ///X value
00111 //  int  x;
00112 //  ///Y value
00113 //  int  y;
00114 //} DLpoint;
00115 
00117 //typedef struct {
00118 //      friend class DLConnectedComponents;
00119 //      friend class DLConnectedComponentsUtils;
00120 //private:
00121 //      ///row of run 
00122 //  int run_row;        
00123 //  ///first pixel of run       
00124 //  int run_start;                    
00125 //  ///last+1 pixel of run 
00126 //  int run_stop;                      
00127 //} DLdataruns;
00128 
00129 
00131 
00132 typedef struct {
00133    friend class DLConnectedComponents;
00134    friend class DLConnectedComponentsUtils;
00135    private:
00137    int area;                  
00139    float rcentroid;                 
00141    float ccentroid;                  
00143    int perimeter;                    
00145    int rmin ;                        
00147    int rmax ;                        
00149    int cmin ;                        
00151    int cmax ;                        
00153    int rseed;                        
00155    int cseed ;                       
00157    int number_of_holes;             
00159    int num_runs;                     
00161    DLDatarun *runs;                 
00163    int num_conc_up;                  
00165    DLDatarun *conc_up;              
00167    int num_conc_down;                
00169    DLDatarun *conc_down;            
00171    int num_points_convex_hull;       
00173    DLPoint *convex_hull;             
00175    float area_of_convex_hull;        
00177    float perimeter_of_convex_hull;   
00179    float moments[14];                
00181    int *user_data;                   
00182 } DLCCcomponent;
00183 
00184 
00186 typedef struct {
00187    friend class DLConnectedComponents;
00188    friend class DLConnectedComponentsUtils;
00189    private:
00191    char cFileName[FILENAME_MAX];      
00193    int iCols;                         
00195    int iRows;                        
00197    int iColBytes;                     
00199    short *image;                      
00201    DLCCcomponent* ComponentList;  
00203    int iComponentCount;               
00205    int top_S;                         
00207    int next_num;                     
00209    double dSkewAngle;                
00211    int *user_data;                   
00213    int iImageLength;                 
00215    int iCalcMoments;                 
00217    int iCalcHulls;                   
00219    int iFixErrors;                    
00221    int iCalcSkew;                     
00223    float fHorizontalRes;                
00225    float fVerticalRes;                  
00227    int iPixelDensity;                 
00229    DL_SHORT sEnableWarnings;             
00231    DL_UBYTE* ub1BitImage;              
00233    DL_UBYTE* ub8BitImage;              
00234 } DLCCdocument;
00235 
00236 
00241 class DLConnectedComponentsUtils
00242 {
00243    friend class DLConnectedComponents;
00244    private:
00245 
00249    DLConnectedComponentsUtils(const DLConnectedComponentsUtils & orig);
00250 
00255    const DLConnectedComponentsUtils & operator=(const DLConnectedComponentsUtils & right);
00256         
00257 
00263    static void DLCalcConnectedComponents(DLCCdocument * D1);
00264         
00270    static void DLClose(DLCCdocument* doink);
00271 
00277    static int DLFreeConnectedComponents(DLCCdocument* doink);
00278 
00288    static int DLiPixelToRunStart(unsigned char *lampimage,int w,int bw,int h,short **outstarts);
00292    DLConnectedComponentsUtils(void);
00296    virtual ~DLConnectedComponentsUtils(void);
00297 
00304    static void GET_RUNS(DLCCdocument * D, DLtmpdata * A, DLtmpdocdata * T);
00305         
00313    static void NEW_SEGMENT(DLCCdocument * H, DLCCdocument * D, DLtmpdata * A, DLtmpdocdata * T);
00321    static void ADD_RUN(DLCCdocument * H, DLtmpdata * A, DLtmpdata * B, DLtmpdocdata * T);
00329    static void MERGE(DLCCdocument * H, DLCCdocument * D,
00330                      DLtmpdata * A, DLtmpdata * B, DLtmpdocdata * T);
00337    static void OVERLAP(DLCCdocument * H, DLtmpdata * A, DLtmpdata * B);
00346    static void OUTPUT(DLCCdocument * H, DLCCdocument * D, DLtmpdocdata * T,
00347                       DLtmpdata * A, DLtmpdata * B);
00354    static void GET_MEMORY_S(DLCCdocument * D, DLtmpdata * B, DLtmpdocdata * T);
00361    static void GET_MEMORY_RC(DLCCdocument * D, DLtmpdata * A, DLtmpdocdata * T);
00371    static void ADD_CONCAVITY(DLCCdocument * H, DLtmpdocdata * T, 
00372                              int n, int run_row, int run_start, int run_stop);
00373 };
00374 #endif //DOXYGEN_SHOULD_SKIP_THIS
00375 #endif // DLCONNECTEDCOMPONENTSUTILS_H

DOCLIB is being developed under contract by a collaboration between:
The Laboratory for Language and Media Processing
Unviersity of Maryland, College Park
and
Booz | Allen | Hamilton

All Rights Reserved, 2003-2007