| /********************************************************************** |
| * File: paircmp.cpp (Formerly paircmp.c) |
| * Description: Code to compare two blobs using the adaptive matcher |
| * Author: Ray Smith |
| * Created: Wed Apr 21 09:31:02 BST 1993 |
| * |
| * (C) Copyright 1993, Hewlett-Packard Ltd. |
| ** Licensed under the Apache License, Version 2.0 (the "License"); |
| ** you may not use this file except in compliance with the License. |
| ** You may obtain a copy of the License at |
| ** http://www.apache.org/licenses/LICENSE-2.0 |
| ** Unless required by applicable law or agreed to in writing, software |
| ** distributed under the License is distributed on an "AS IS" BASIS, |
| ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| ** See the License for the specific language governing permissions and |
| ** limitations under the License. |
| * |
| **********************************************************************/ |
| |
| #include "mfcpch.h" |
| #include "blobcmp.h" |
| #include "tfacep.h" |
| #include "paircmp.h" |
| #include "tesseractclass.h" |
| |
| #define EXTERN |
| |
| /********************************************************************** |
| * compare_blob_pairs |
| * |
| * A blob processor to compare pairs of selected blobs. |
| **********************************************************************/ |
| |
| namespace tesseract { |
| BOOL8 Tesseract::compare_blob_pairs( //blob processor |
| BLOCK *, |
| ROW *row, //row it came from |
| WERD *, |
| PBLOB *blob //blob to compare |
| ) { |
| static ROW *prev_row = NULL; //other in pair |
| static PBLOB *prev_blob = NULL; |
| float rating; //from matcher |
| |
| if (prev_row == NULL || prev_blob == NULL) { |
| prev_row = row; |
| prev_blob = blob; |
| } |
| else { |
| rating = compare_blobs (prev_blob, prev_row, blob, row); |
| tprintf ("Rating=%g\n", rating); |
| prev_row = NULL; |
| prev_blob = NULL; |
| } |
| return TRUE; |
| } |
| |
| |
| /********************************************************************** |
| * compare_blobs |
| * |
| * Compare 2 blobs and return the rating. |
| **********************************************************************/ |
| |
| float Tesseract::compare_blobs( //match 2 blobs |
| PBLOB *blob1, //first blob |
| ROW *row1, //row it came from |
| PBLOB *blob2, //other blob |
| ROW *row2) { |
| PBLOB *bn_blob1; //baseline norm |
| PBLOB *bn_blob2; |
| DENORM denorm1, denorm2; |
| float rating; //match result |
| |
| bn_blob1 = blob1->baseline_normalise (row1, &denorm1); |
| bn_blob2 = blob2->baseline_normalise (row2, &denorm2); |
| rating = compare_bln_blobs (bn_blob1, &denorm1, bn_blob2, &denorm2); |
| delete bn_blob1; |
| delete bn_blob2; |
| return rating; |
| } |
| |
| |
| /********************************************************************** |
| * compare_bln_blobs |
| * |
| * Compare 2 baseline normalised blobs and return the rating. |
| **********************************************************************/ |
| float Tesseract::compare_bln_blobs( //match 2 blobs |
| PBLOB *blob1, //first blob |
| DENORM *denorm1, |
| PBLOB *blob2, //other blob |
| DENORM *denorm2) { |
| TBLOB *tblob1; //tessblobs |
| TBLOB *tblob2; |
| TEXTROW tessrow1, tessrow2; //tess rows |
| float rating; //match result |
| |
| tblob1 = make_tess_blob (blob1, TRUE); |
| make_tess_row(denorm1, &tessrow1); |
| tblob2 = make_tess_blob (blob2, TRUE); |
| make_tess_row(denorm2, &tessrow2); |
| rating = compare_tess_blobs (tblob1, &tessrow1, tblob2, &tessrow2); |
| free_blob(tblob1); |
| free_blob(tblob2); |
| |
| return rating; |
| } |
| } // namespace tesseract |