reference/ocr-new/properties.doc
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
#include "system.h"
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
     2
#include "Component.h"
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
     3
#include "BitMap.h"
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
     4
#include <assert.h>
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
     5
#include "list.h"
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
     6
#include "tcl_interface.h"
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
     7
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
     8
/*** Component.cc
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
     9
  Member functions for Components 
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    10
  Component functions defined in Component.h
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    11
  rev 12/9/95 KM
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
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
Components::Components()
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    16
:List()
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    17
{
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    18
}
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    19
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
Components::~Components()
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    22
{
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    23
  for (ListElement *ptr = first; ptr != NULL && ptr->item!=NULL; 
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    24
       ptr = ptr->next) {
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    25
    if (ptr->item != NULL)
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    26
      delete (Component *) (ptr->item);
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    27
     }
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    28
  while(!IsEmpty())
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    29
    Remove();
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    30
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    31
}
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    32
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    33
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    34
int Component::AddToComponent(ListElement* intrvl, RLEMap* rlemap)
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    35
//this needs to be fixed to trap page boundaries
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    36
//or else pad the page with a blank line at top and bottom
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    37
{
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    38
  assert(intrvl != NULL);
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    39
  List* list = new List();           //make a new queue
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    40
  ListElement* current;
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    41
  ListElement* nextelt;
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    42
  int counter = 0;
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    43
  int currentRow;
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    44
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    45
  if (intrvl->previous != NULL)
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    46
    intrvl->previous->next = intrvl->next;
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    47
  else rlemap->fMapData[((RLEPair *) intrvl->item)->row]->first = intrvl->next;
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    48
  if (intrvl->next != NULL)
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    49
    intrvl->next->previous = intrvl->previous;
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    50
  list->first = intrvl;              //put starting interval on queue
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    51
  list->last = intrvl;
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    52
  list->length = 1;
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    53
  intrvl->next = NULL;
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    54
  intrvl->previous = NULL;
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    55
  currentRow = 0;
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    56
  while ((intrvl = list->first) != NULL && 
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    57
	 currentRow < rlemap->imageLength()) //Take an interval off queue
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    58
    {
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    59
      currentRow = ((RLEPair *) intrvl->item)->row;
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    60
      for (int i=-1; i < 2; i+=2) { 
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    61
	current = rlemap->fMapData[currentRow+i]->first;
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    62
	while ((current != NULL) 
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    63
	       && (((RLEPair *) current->item)->start <= 
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    64
		   ((RLEPair *) intrvl->item)->end+MinHorizSeparation)) {
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
//	  printf("Looking at an interval on row %d that goes from %d to %d\n",
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    67
//		 currentRow, ((RLEPair *) intrvl->item)->start,
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    68
//		  ((RLEPair *) intrvl->item)->end);
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    69
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    70
	  if ((((RLEPair *) current->item)->end 
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    71
	       >= ((RLEPair *) intrvl->item)->start-1) 
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    72
	      && (((RLEPair *) current->item)->start <= 
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    73
		  ((RLEPair *) intrvl->item)->end+MinHorizSeparation)) {
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    74
//	  printf("Adding connection for interval on row %d that goes from %d to %d\n", currentRow+i,
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    75
//		 ((RLEPair *) current->item)->start,
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    76
//		  ((RLEPair *) current->item)->end);
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
	    if (current->previous != NULL)
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    79
	      current->previous->next = current->next;   //take off RLEMap
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    80
	    else
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    81
	      rlemap->fMapData[currentRow+i]->first = current->next;
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    82
	    if (current->next != NULL)
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    83
	      current->next->previous = current->previous;
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    84
	    nextelt = current->next;
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    85
	    list->last->next = current;                //add to queue
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    86
	    current->previous = list->last;
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    87
	    list->last = current;
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    88
	    current->next = NULL;
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    89
	    current = nextelt;
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    90
	    list->length++;
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    91
	  } else
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    92
	    current = current->next;
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    93
	}
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    94
      }
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
      if ((((RLEPair *) intrvl->item)->start < ful.x()) || (ful.x()==-1)) {
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    97
	ful.x() = ((RLEPair *) intrvl->item)->start;
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    98
//	printf("Changed ful.x to %d\n", ful.x());
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    99
      }
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   100
      if ((((RLEPair *) intrvl->item)->end > flr.x()) || (flr.x()==-1)) {
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   101
	flr.x() = ((RLEPair *) intrvl->item)->end;
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   102
//	printf("Changed flr.x to %d\n", flr.x());
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   103
      }
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   104
      if ((((RLEPair *) intrvl->item)->row < ful.y()) || (ful.y()==-1)) {
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   105
	ful.y() = ((RLEPair *) intrvl->item)->row;
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   106
//	printf("Changed ful.y to %d\n", ful.y());
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   107
      }
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   108
      if ((((RLEPair *) intrvl->item)->row > flr.y()) || (flr.y()==-1)) {
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   109
	flr.y() = ((RLEPair *) intrvl->item)->row;
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   110
//	printf("Changed flr.y to %d\n", flr.y());
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   111
      }      
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   112
      list->first = intrvl->next;
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   113
      if (intrvl->next != NULL)
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   114
	intrvl->next->previous = NULL;
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   115
      delete ((RLEPair *) (intrvl->item));
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   116
      delete intrvl;               //so the letter O won't go forever
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   117
      counter++;
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   118
      list->length--;
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   119
    }
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   120
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   121
  delete list;
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   122
  return counter;
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
}
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
void Component::setProperties(BitMap * map)  // was BitMap
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   127
/*--------------------------------------------------------------
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   128
Primary Purpose: Set the property vector for this component
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   129
Arguments:  The BitMap to which this component belongs
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   130
Return Value:
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   131
Effects: The component is divided into a 5 by 5 grid.  A gray
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   132
    scale (0 - 255) for each section is determined.  The gray scale
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   133
    is 0 for all white, 255 for all black, but normally will be somewhere
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   134
    between the two.  The gray scales are represented in properties
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   135
    0-24. 
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   136
    Property 25 is the grayscale accross the top.
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   137
    Property 26 is the grayscale accross the bottom.
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   138
    Property 27 is the width/height ratio again scaled to (0-255)
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   139
    Actually the formula for property 27 is
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   140
        width/ height * 255  if height > width
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   141
        1- height/width * 255 if width > height
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   142
    This way near 0 is very tall and thin
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   143
             near 128 height near width
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   144
	     near 255 very wide
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   145
    Property 28 is  Indicator of a vertically disjoint character
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   146
     like i and j.
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   147
    Also the total number of black pixels is set in fnumBits.
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   148
    // This is not used at this time.    
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   149
Constraints: The data fields ful and flr must already be set 
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   150
   before calling this function. These fields specify a bounding
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   151
   box for the character within the BitMap.
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   152
Rev: 12/9 KM
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
  if (ful > flr) 
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   156
    printf("Problem\n");
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   157
  assert (ful <= flr);
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   158
  short int hflag[NumHorizDiv + 1];  // flags horizontal section dividers
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   159
  short int vflag[NumVertDiv + 1];   // flags vertical section dividers
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   160
  float height, width;
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   161
  int propNum;
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   162
  float darkest = 0;
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   163
  float lightest; 
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   164
  int darkrow = 0;
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   165
  int lightrow = 0;
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
  Point sectionLr, sectionUl;
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   168
  // Set Number of bits
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   169
  fnumBits = map->pixelsInRegion(ful, flr);
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   170
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   171
  setSectionFlags(hflag, vflag);
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   172
  for (int r = 0; r < NumVertDiv; r++)
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   173
    for (int c = 0; c < NumHorizDiv; c++)
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   174
      {
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   175
	propNum = (r * NumHorizDiv) + c;
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   176
	sectionUl = Point(hflag[c], vflag[r]);
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   177
	sectionLr = Point(hflag[c+1]-1, vflag[r+1]-1);
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   178
	if (sectionUl <= sectionLr)
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   179
	  fproperty[propNum] = map->grayScale(sectionUl, sectionLr); 
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   180
	assert(fproperty[propNum] >= 0 && fproperty[propNum] < 256);
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   181
      }
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   182
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   183
  // set the height/width ratio
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   184
  // 0 is very thin 128 is even 256 is very wide.
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   185
  width = flr.x() - ful.x() + 1;
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   186
  height = flr.y() - ful.y() + 1;
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   187
 
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   188
  // Grayscale across the top - Indicator of top bar
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   189
  sectionUl = Point(ful.x(), ful.y());
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   190
  sectionLr = Point(flr.x(), ful.y() + (int)(height/(NumVertDiv*2)));
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   191
  fproperty[25] = map->grayScale(sectionUl, sectionLr);
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   192
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   193
   // Grayscale across bottom - Indicator of a foot for l opposed to 1
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   194
  sectionUl = Point(ful.x(),  flr.y() -  (int)(height/(NumVertDiv*2)));
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   195
  sectionLr = Point(flr.x(),  flr.y());
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   196
  fproperty[26] = map->grayScale(sectionUl, sectionLr);
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   197
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   198
  float hdivw = (float)height/width;
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   199
  float wdivh = (float) width/height;
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   200
  if (width > height)
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   201
       fproperty[27]= (short int) ((1- hdivw/2)*255);
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   202
  else
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   203
    fproperty[27] = (short int)((wdivh/2)* 255);
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   204
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   205
  // is this a disjoint character like i or j  255 = yes 0 = no
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   206
  fproperty[28]=0;
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   207
  lightest = width;
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   208
  for(int row = ful.y(); row < flr.y(); row++)
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   209
      {
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   210
	int pixelsThisRow = pixelsBetween(map->row(row), ful.x(), flr.x());
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   211
	if(!(pixelsThisRow))
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   212
	      fproperty[28]=255;
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   213
      }
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   214
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   215
  fproperty[29]= 0;
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   216
    for(int p = 0; p < numProperties; p++)	
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   217
      assert(fproperty[p] >= 0 && fproperty[p] < 256);
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   218
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   219
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   220
}
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   221
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   222
void Component::setSectionFlags(short int hflag[], short int vflag[])
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   223
/*--------------------------------------------------------------
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   224
Primary Purpose: Breaks this component into a grid NumHorizDiv X NumVertDiv
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   225
    for determining grayscale property vectors.
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   226
Arguments:  hflag[] is an empty array to be filled by this procedure with
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   227
    the starting columns of each horizontal subdivision.  vflag[] will
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   228
    be filled with the vertical subdivisions.
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   229
Effects:  fills hflag[] with the starting column for each subdivision.
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   230
     The last element of the array is actually the pixel immediately 
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   231
     following the last  subdivision.  The last subdivision contains any 
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   232
     remaining pixels that did not divide evenly amongst the divisions.
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   233
     vflag[NumHorizDiv] is comparable for vertical supdivisions.
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   234
     Example ful = (0,25) flr = (52,46) NumHorizDiv = NumVertDiv = 5
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   235
         hflag[6] = { 0,10,20,30,40,53 }
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   236
	 vflag[6] = {25.29.33.37.41.47 } 
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   237
Constraints: ful and flr must be set to mark the bounding box before
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   238
   calling this procedure.
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   239
Rev:  10/27 KM
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   240
---------------------------------------------------------------*/
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   241
{
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   242
  int ulx = ful.x();  int uly = ful.y();
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   243
  int lrx = flr.x();  int lry = flr.y();
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   244
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   245
  int width =  lrx - ulx+1;
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   246
  int height = lry - uly+1;
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   247
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   248
  int horizDiv = width/NumHorizDiv;
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   249
  int vertDiv = height/NumVertDiv;
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   250
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   251
  int horizExtra = width - horizDiv*NumHorizDiv;
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   252
  int vertExtra = height - vertDiv*NumVertDiv;
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   253
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   254
  int i, add;
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   255
  for (i = 0; i < NumHorizDiv; i++)
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   256
    {
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   257
    if(horizExtra - i > 0) add = i; else add = horizExtra;
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   258
    hflag[i] = ulx + (i*horizDiv)+ add;
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   259
  }
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   260
  hflag[i] = lrx + 1;              // Closes off last division
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   261
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   262
  int j;
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   263
  for(j = 0; j < NumVertDiv; j ++)
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   264
      {
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   265
    if(vertExtra - j > 0) add = j; else add = vertExtra;
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   266
    vflag[j] = uly + (j*vertDiv)+ add;
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   267
  }
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   268
  vflag[j] = lry + 1;
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   269
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   270
    
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   271
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   272
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   273
}
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   274
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   275
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   276
Distance Component::distance(Component * comp) 
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   277
/*--------------------------------------------------------------
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   278
Primary Purpose: Determines heuristic distance between two components
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   279
Arguments:  Another component to compare
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   280
Return Value: integer value which represents the distance between two 
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   281
   components. Distance = sum over i of
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   282
                       weight *square (this->fproperty[i] - comp->fproperty[i])
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   283
		       weight for i == 27, 28 is 3 weight is 1 for all other 
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   284
		       properties
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   285
Constraints: setProperties must have been run on both components
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   286
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   287
Rev: 11/1 KM
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   288
---------------------------------------------------------------*/
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   289
{
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   290
  Property * a = fproperty;
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   291
  Property * b = comp->properties();
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   292
  Distance dist=0;
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   293
  int dif=0;
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   294
  int worst = 0;
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   295
  int weight = 1;
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   296
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   297
  for(int i= 0; i < numProperties; i++)
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   298
    { 
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   299
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   300
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   301
     if (i == 27 || i == 28) weight = 3;
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   302
     else weight = 1;
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   303
     
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   304
       dif = (a[i] - b[i]);      
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   305
      dist += weight*dif*dif;
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   306
    }
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   307
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   308
  return dist;
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   309
}
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   310
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   311
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   312
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   313
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   314
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   315
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   316
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   317
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   318
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   319
void printVector(short int vector[], int size)
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   320
{
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   321
  for (int i = 0; i < size; i++)
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   322
    cout << vector[i] << " " ;
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   323
  cout << endl;
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   324
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   325
}
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   326
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   327
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   328
void testProperties(Component* c, BitMap * map)
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   329
{
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   330
  short int hflag[NumHorizDiv + 1];  // flags horizontal section dividers
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   331
  short int vflag[NumVertDiv + 1];   // flags vertical section dividers
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   332
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   333
  cout << "First test subDivisions  " << endl;
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   334
  c->setSectionFlags(hflag, vflag);
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   335
  cout << "Horizontal flags" <<endl;
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   336
  printVector(hflag, NumHorizDiv + 1);
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   337
  cout << "Vertical flags" <<endl;
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   338
  printVector(vflag, NumHorizDiv + 1);
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   339
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   340
  cout << "Now lets look at the properties " << endl;
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   341
  // setSectionFlags will actually get called again within setProperties
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   342
  c->setProperties(map);
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   343
  printVector(c->properties(), NumHorizDiv*NumVertDiv + 1);
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   344
  cout << endl << " The distance of this component from itself: " << " ";
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   345
  cout << c->distance(c) << endl;
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   346
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   347
}
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   348
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   349
void Component::display_bounding_box()
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   350
{
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   351
  int ulx = (ul()).x();
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   352
  int uly = (ul()).y();
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   353
  int lrx = (lr()).x();
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   354
  int lry = (lr()).y();
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   355
  scale(ulx); scale(uly); scale(lrx); scale(lry);
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   356
  
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   357
  docommand(".main_window.display.work_space create rectangle %d %d %d %d -outline blue -tags IMAGE_TAG",  ulx, uly, lrx, lry);
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   358
}  
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   359
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   360
Distance Component::recognize(Component * learnedchars)
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   361
// This is out of date. Current recognize is below
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   362
{
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   363
  Distance d, nextd;
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   364
  char id;
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   365
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   366
//  printf("Another call to recognize\n");
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   367
  d = (256*256)*numProperties;  // this is the biggest distance
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   368
                        
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   369
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   370
	       
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   371
    for (int i = 0; i < 256; i++)
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   372
	{
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   373
	  if(learnedchars[i].confid() != 0)
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   374
	      {
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   375
		nextd = distance(&learnedchars[i]);
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   376
//		printf("Distance = %d, character = %c\n", nextd, i);
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   377
		if (nextd < d)
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   378
		    {
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   379
		      d = nextd;
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   380
		      id = (char) i;
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   381
		    }
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   382
	      }
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   383
	  
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   384
	}
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   385
  
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   386
  fasciiId = id;
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   387
  /*  printf("Recognized a Component: %c\n", id); */
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   388
  return d;
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   389
}
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   390
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   391
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   392
Distance Component::recognize(Components * learnedgroups, bool allGroups)
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   393
{
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   394
  Distance d, worstDistance,nextd;
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   395
  char id;
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   396
  short int fontid;
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   397
  float tempd;
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   398
  worstDistance = 150000;
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   399
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   400
//  printf("Another call to new recognize\n");
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   401
  d = (65536)*numProperties;  // this is the biggest distance
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   402
  
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   403
                        
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   404
    fconfid = 0;
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   405
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   406
    for(int g = 0; g < NumCharGroups &&
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   407
 	((fconfid < ConfidenceThreshold) || allGroups); g++)
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   408
    {
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   409
      int offset = (charGroup+g) % NumCharGroups;
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   410
      if (offset == 4 && charGroup != 4) continue;
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   411
      for (ListElement* ptr = learnedgroups[offset].first; ptr != NULL;
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   412
	 ptr = ptr->next)
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   413
	{
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   414
	  Component * item = (Component *) ptr->item;
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   415
	  nextd = distance(item);
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   416
//	  printf("Distance = %d, character = %c\n", nextd, i);
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   417
	  if (nextd < d)
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   418
	      {
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   419
		d = nextd;
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   420
		id = item->fasciiId;
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   421
		fontid = item->ffontId;
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   422
	      }
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   423
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   424
	}
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   425
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   426
      if (d >= worstDistance) 
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   427
	  tempd = worstDistance - 1;
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   428
      else tempd = d;
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   429
	
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   430
	fconfid = (unsigned short int)
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   431
	  (255 - (tempd/worstDistance)*256);
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   432
      if(charGroup == 4) break;  // dont check other groups for floaters
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   433
    }
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   434
  
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   435
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   436
  fasciiId = id;
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   437
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   438
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   439
  ffontId = fontid;
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   440
//  printf("Recognized a Component: %c in font#%d  %d %u\n", 
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   441
//	 id, fontid, fconfid, d);
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   442
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   443
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   444
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   445
  return d;
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   446
}
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   447
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   448
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   449
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   450
int Component::vertShrink(BitMap * bitmap)
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   451
{
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   452
  int r;
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   453
  int shrunk = 0;
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   454
	for(r = ful.y(); r < flr.y(); r++)
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   455
	      if (pixelsBetween(bitmap->row(r), ful.x(), flr.x()))
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   456
		  {
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   457
		    ful.y() = r;
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   458
		    shrunk = 1;
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   459
		    break;
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   460
		  }
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   461
	for(r = flr.y(); r > ful.y(); r--)
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   462
	      if (pixelsBetween(bitmap->row(r), ful.x(), flr.x()))
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   463
		  {
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   464
		    flr.y() = r;
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   465
		    shrunk = 1;
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   466
		    break;		    
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   467
		  }
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   468
		
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   469
  return shrunk;
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   470
      }
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   471
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   472
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   473
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
   474