mirror of
https://github.com/tesseract-ocr/tesseract.git
synced 2024-12-05 02:47:00 +08:00
425d593ebe
git-svn-id: https://tesseract-ocr.googlecode.com/svn/trunk/trunk@2 d0cd1f9f-072b-0410-8dd7-cf729c803f20
108 lines
3.6 KiB
C++
108 lines
3.6 KiB
C++
/**********************************************************************
|
|
* 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;
|
|
}
|