reference/ocr-new/Component.h
author viric@llimona
Thu, 18 May 2006 23:12:51 +0200
changeset 0 6b8091ca909a
permissions -rw-r--r--
Init from working directory of svn repository.
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
0
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
     1
#ifndef _COMPONENT_H
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
     2
#define _COMPONENT_H
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
     3
#include "stdlib.h"
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
     4
#include <iostream.h>
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
     5
#include "Point.h"
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
     6
#include "system.h" 
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
     7
#include "list.h"
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
     8
#include "RLEMap.h"
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
     9
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    10
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    11
class BitMap;
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    12
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    13
class Component;
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    14
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    15
class Components: public List
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    16
{
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    17
 public:
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    18
  Components();
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    19
  ~Components();
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    20
  
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    21
  Component * compAt(Point p);   // returns smallest component that contains
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    22
                                 // this point.
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    23
     
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    24
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    25
};
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    26
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    27
class Component{
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    28
      public:
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    29
        friend class Word;
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    30
       	Component(Point ul, Point lr)
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    31
	  :ful(ul), flr(lr), fnumBits(0),fasciiId(NULL), fconfid(0),
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    32
	  charGroup(0), ffontId(0)
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    33
	    { fproperty = new Property[numProperties];
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    34
	      for (int i = 0; i < numProperties; i++)
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    35
	         fproperty[i] = 0;};
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    36
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    37
	Component()
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    38
	  :ful(-1), flr(-1), fnumBits(0),fasciiId(0),fconfid(0),
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    39
	  charGroup(0), ffontId(0)
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    40
	    { fproperty = new Property[numProperties];
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    41
	      for (int i = 0; i < numProperties; i++)
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    42
	         fproperty[i] = 0;};
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    43
	~Component(){
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    44
	    if (fproperty != NULL) delete fproperty;
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    45
	    if (fasciiId != NULL)  delete fasciiId;
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    46
	  }
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    47
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    48
         Component * copy(); // make a new copy of the component
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    49
	 inline Point & ul() {return ful;};
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    50
	 inline Point & lr() {return flr;};
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    51
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    52
	 inline double width() {return (double)(flr.x() - ful.x() + 1); };
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    53
	 inline double height() {return (double)(flr.y() - ful.y() + 1); };
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    54
         inline double area() { return width()*height(); };
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    55
         inline int & numBits(){return fnumBits;};
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    56
	 short int charGroup; // values 0-3: 0=acemno, 1=gpqy, 2=dfhikl, 3=j([}
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    57
         int vertShrink(BitMap * bitmap);	
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    58
         int horizontalShrink(BitMap * bitmap);
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    59
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    60
	int AddToComponent(ListElement* intrvl, RLEMap* rlemap, int horizMerge);
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    61
	/*--------------------------------------------------------------
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    62
	Primary Purpose: Extend boundaries of component by connected intervals.       Arguments: startIntrvl is interval to start from
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    63
        Return Value: Number of intervals added. 
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    64
	Effects: Updates component's LR and UL. Deletes all added intervals. 
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    65
	----------------------------------------------------------------*/
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    66
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    67
	 // Access entire property vector
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    68
	 inline Property * properties()
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    69
	   {return fproperty;}
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    70
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    71
	 // Set or read one value in property vector
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    72
	 inline Property & property(int p) // Possibly use overload []
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    73
	   {return fproperty[p];};
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    74
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    75
	 // Set or read ascii id;
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    76
	 inline Character & asciiId(){ return fasciiId[0];};
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    77
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    78
	 inline int asciiLen(){return strlen(fasciiId);}
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    79
	// Set or read font id;
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    80
	inline short int & fontId() {return ffontId;};
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    81
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    82
	 inline Confidence & confid(){ return fconfid; };
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    83
	// Determine heuristic distance between this and comp
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    84
	 Distance distance(Component * comp);
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    85
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    86
         Point Component::center() { return (Point((ful.x() + flr.x())/2, 
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    87
						  (ful.y() +flr.y())/2)); };
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    88
	// Use the BitMap map to set the property vector for 
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    89
        // this component
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    90
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    91
         
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    92
	void setProperties(RLEMap * map);
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    93
	void setProperties(BitMap * map);
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    94
	void setSectionFlags(short int hflag[], short int vflag[]);
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    95
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    96
  
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    97
	void display_bounding_box();
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    98
        void display_bounding_box(char * color);     
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    99
        void display_bounding_box(char * color,  double scaleFactor,  
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   100
				  char * window);
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   101
	Distance recognize(Component * learnedchars);
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   102
	// find best match in learned characters.  Set ascii value
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   103
        // and return distance.
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   104
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   105
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   106
	Distance recognize(Components * learnedgroups, bool allGroups=FALSE);
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   107
	// find best match from learned character groups. Set ascii value
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   108
        // and return distance.
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   109
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   110
        void join(Component * comp);
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   111
        inline bool operator < (Component * comp)
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   112
                 {if((ul().y() < comp->ul().y()))  return TRUE;
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   113
		  if((ul().y() > comp->ul().y())) return FALSE;
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   114
		  // otherwise if y values are equal
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   115
		  return ((ul().x() <= comp->ul().x()) ?  TRUE : FALSE);
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   116
		  }
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   117
        inline bool operator > (Component * comp)
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   118
                 {if((ul().y() > comp->ul().y()))  return TRUE;
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   119
		  if((ul().y() < comp->ul().y())) return FALSE;
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   120
		  // otherwise if y values are equal
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   121
		  return((ul().x() > comp->ul().x()) ? TRUE : FALSE);
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   122
		  
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   123
		 }        
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   124
  inline bool xoverlap(Component * comp)
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   125
                  {
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   126
		   if (ful.x() <= comp->ul().x() && comp->ul().x() <= flr.x())
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   127
		     return TRUE;
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   128
		   if (comp->ul().x() < ful.x() && ful.x() < comp->lr().x())
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   129
		     return TRUE;
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   130
		   return FALSE;
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   131
		     }
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   132
    
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   133
        Property * fproperty;
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   134
       	char * fasciiId;
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   135
      private:
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   136
       	Point ful;
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   137
      	Point flr;
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   138
       	int fnumBits;
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   139
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   140
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   141
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   142
	short int ffontId;
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   143
       	Confidence fconfid;     
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   144
};
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   145
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   146
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   147
#endif
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   148
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   149
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   150
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   151
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   152
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   153
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   154
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   155
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   156
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   157
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   158
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   159
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   160
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   161
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   162
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   163
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   164
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   165
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   166
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   167