/********************************************************************** * 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" #define EXTERN /********************************************************************** * compare_blob_pairs * * A blob processor to compare pairs of selected blobs. **********************************************************************/ BOOL8 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 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 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; }