mirror of
https://github.com/tesseract-ocr/tesseract.git
synced 2024-11-27 20:59:36 +08:00
c4f4840fbe
git-svn-id: https://tesseract-ocr.googlecode.com/svn/trunk@163 d0cd1f9f-072b-0410-8dd7-cf729c803f20
103 lines
3.2 KiB
C++
103 lines
3.2 KiB
C++
/**********************************************************************
|
|
* File: linlsq.h (Formerly llsq.h)
|
|
* Description: Linear Least squares fitting code.
|
|
* Author: Ray Smith
|
|
* Created: Thu Sep 12 08:44:51 BST 1991
|
|
*
|
|
* (C) Copyright 1991, 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.
|
|
*
|
|
**********************************************************************/
|
|
|
|
#ifndef LINLSQ_H
|
|
#define LINLSQ_H
|
|
|
|
#include "points.h"
|
|
#include "mod128.h"
|
|
#include "varable.h"
|
|
|
|
class LLSQ
|
|
{
|
|
friend class PDLSQ; //pos & direction
|
|
|
|
public:
|
|
LLSQ() { //constructor
|
|
clear(); //set to zeros
|
|
}
|
|
void clear(); //initialize
|
|
|
|
void add( //add element
|
|
double x, //coords to add
|
|
double y);
|
|
void remove( //delete element
|
|
double x, //coords to delete
|
|
double y);
|
|
inT32 count() { //no of elements
|
|
return n;
|
|
}
|
|
|
|
double m(); //get gradient
|
|
double c( //get constant
|
|
double m); //gradient
|
|
double rms( //get error
|
|
double m, //gradient
|
|
double c); //constant
|
|
double spearman(); //get error
|
|
|
|
private:
|
|
inT32 n; //no of elements
|
|
double sigx; //sum of x
|
|
double sigy; //sum of y
|
|
double sigxx; //sum x squared
|
|
double sigxy; //sum of xy
|
|
double sigyy; //sum y squared
|
|
};
|
|
|
|
class PDLSQ
|
|
{
|
|
public:
|
|
PDLSQ() { //constructor
|
|
clear(); //set to zeros
|
|
}
|
|
void clear() { //initialize
|
|
pos.clear (); //clear both
|
|
dir.clear ();
|
|
}
|
|
|
|
void add( //add element
|
|
const ICOORD &addpos, //position of pt
|
|
const ICOORD &adddir) { //dir of pt
|
|
pos.add (addpos.x (), addpos.y ());
|
|
dir.add (adddir.x (), adddir.y ());
|
|
}
|
|
void remove( //remove element
|
|
const ICOORD &removepos, //position of pt
|
|
const ICOORD &removedir) { //dir of pt
|
|
pos.remove (removepos.x (), removepos.y ());
|
|
dir.remove (removedir.x (), removedir.y ());
|
|
}
|
|
inT32 count() { //no of elements
|
|
return pos.count ();
|
|
}
|
|
|
|
float fit( //get fit parameters
|
|
DIR128 &ang, //output angle
|
|
float &sin_ang, //output components
|
|
float &cos_ang,
|
|
float &r);
|
|
|
|
private:
|
|
LLSQ pos; //position
|
|
LLSQ dir; //directions
|
|
};
|
|
extern double_VAR_H (pdlsq_posdir_ratio, 0.4e-6, "Mult of dir to cf pos");
|
|
#endif
|