16acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/*M///////////////////////////////////////////////////////////////////////////////////////
26acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn//
36acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn//  IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING.
46acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn//
56acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn//  By downloading, copying, installing or using the software you agree to this license.
66acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn//  If you do not agree to this license, do not download, install,
76acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn//  copy or use the software.
86acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn//
96acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn//
106acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn//                        Intel License Agreement
116acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn//                For Open Source Computer Vision Library
126acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn//
136acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn// Copyright (C) 2000, Intel Corporation, all rights reserved.
146acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn// Third party copyrights are property of their respective owners.
156acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn//
166acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn// Redistribution and use in source and binary forms, with or without modification,
176acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn// are permitted provided that the following conditions are met:
186acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn//
196acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn//   * Redistribution's of source code must retain the above copyright notice,
206acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn//     this list of conditions and the following disclaimer.
216acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn//
226acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn//   * Redistribution's in binary form must reproduce the above copyright notice,
236acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn//     this list of conditions and the following disclaimer in the documentation
246acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn//     and/or other materials provided with the distribution.
256acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn//
266acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn//   * The name of Intel Corporation may not be used to endorse or promote products
276acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn//     derived from this software without specific prior written permission.
286acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn//
296acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn// This software is provided by the copyright holders and contributors "as is" and
306acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn// any express or implied warranties, including, but not limited to, the implied
316acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn// warranties of merchantability and fitness for a particular purpose are disclaimed.
326acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn// In no event shall the Intel Corporation or contributors be liable for any direct,
336acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn// indirect, incidental, special, exemplary, or consequential damages
346acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn// (including, but not limited to, procurement of substitute goods or services;
356acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn// loss of use, data, or profits; or business interruption) however caused
366acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn// and on any theory of liability, whether in contract, strict liability,
376acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn// or tort (including negligence or otherwise) arising in any way out of
386acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn// the use of this software, even if advised of the possibility of such damage.
396acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn//
406acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn//M*/
416acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
426acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#ifndef _CVTYPES_H_
436acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define _CVTYPES_H_
446acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
456acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#ifndef SKIP_INCLUDES
466acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn  #include <assert.h>
476acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn  #include <stdlib.h>
486acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#endif
496acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
506acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* spatial and central moments */
516acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renntypedef struct CvMoments
526acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn{
536acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    double  m00, m10, m01, m20, m11, m02, m30, m21, m12, m03; /* spatial moments */
546acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    double  mu20, mu11, mu02, mu30, mu21, mu12, mu03; /* central moments */
556acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    double  inv_sqrt_m00; /* m00 != 0 ? 1/sqrt(m00) : 0 */
566acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn}
576acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCvMoments;
586acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
596acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* Hu invariants */
606acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renntypedef struct CvHuMoments
616acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn{
626acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    double hu1, hu2, hu3, hu4, hu5, hu6, hu7; /* Hu invariants */
636acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn}
646acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCvHuMoments;
656acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
666acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/**************************** Connected Component  **************************************/
676acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
686acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renntypedef struct CvConnectedComp
696acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn{
706acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    double area;    /* area of the connected component  */
716acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    CvScalar value; /* average color of the connected component */
726acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    CvRect rect;    /* ROI of the component  */
736acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    CvSeq* contour; /* optional component boundary
746acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn                      (the contour might have child contours corresponding to the holes)*/
756acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn}
766acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCvConnectedComp;
776acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
786acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/*
796acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennInternal structure that is used for sequental retrieving contours from the image.
806acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennIt supports both hierarchical and plane variants of Suzuki algorithm.
816acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn*/
826acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renntypedef struct _CvContourScanner* CvContourScanner;
836acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
846acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* contour retrieval mode */
856acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_RETR_EXTERNAL 0
866acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_RETR_LIST     1
876acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_RETR_CCOMP    2
886acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_RETR_TREE     3
896acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
906acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* contour approximation method */
916acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_CHAIN_CODE               0
926acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_CHAIN_APPROX_NONE        1
936acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_CHAIN_APPROX_SIMPLE      2
946acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_CHAIN_APPROX_TC89_L1     3
956acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_CHAIN_APPROX_TC89_KCOS   4
966acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_LINK_RUNS                5
976acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
986acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* Freeman chain reader state */
996acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renntypedef struct CvChainPtReader
1006acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn{
1016acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    CV_SEQ_READER_FIELDS()
1026acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    char      code;
1036acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    CvPoint   pt;
1046acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    schar     deltas[8][2];
1056acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn}
1066acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCvChainPtReader;
1076acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
1086acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* initializes 8-element array for fast access to 3x3 neighborhood of a pixel */
1096acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define  CV_INIT_3X3_DELTAS( deltas, step, nch )            \
1106acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    ((deltas)[0] =  (nch),  (deltas)[1] = -(step) + (nch),  \
1116acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn     (deltas)[2] = -(step), (deltas)[3] = -(step) - (nch),  \
1126acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn     (deltas)[4] = -(nch),  (deltas)[5] =  (step) - (nch),  \
1136acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn     (deltas)[6] =  (step), (deltas)[7] =  (step) + (nch))
1146acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
1156acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* Contour tree header */
1166acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renntypedef struct CvContourTree
1176acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn{
1186acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    CV_SEQUENCE_FIELDS()
1196acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    CvPoint p1;            /* the first point of the binary tree root segment */
1206acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    CvPoint p2;            /* the last point of the binary tree root segment */
1216acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn}
1226acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCvContourTree;
1236acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
1246acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* Finds a sequence of convexity defects of given contour */
1256acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renntypedef struct CvConvexityDefect
1266acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn{
1276acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    CvPoint* start; /* point of the contour where the defect begins */
1286acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    CvPoint* end; /* point of the contour where the defect ends */
1296acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    CvPoint* depth_point; /* the farthest from the convex hull point within the defect */
1306acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    float depth; /* distance between the farthest point and the convex hull */
1316acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn}
1326acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCvConvexityDefect;
1336acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
1346acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/************ Data structures and related enumerations for Planar Subdivisions ************/
1356acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
1366acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renntypedef size_t CvSubdiv2DEdge;
1376acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
1386acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_QUADEDGE2D_FIELDS()     \
1396acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    int flags;                     \
1406acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    struct CvSubdiv2DPoint* pt[4]; \
1416acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    CvSubdiv2DEdge  next[4];
1426acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
1436acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_SUBDIV2D_POINT_FIELDS()\
1446acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    int            flags;      \
1456acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    CvSubdiv2DEdge first;      \
1466acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    CvPoint2D32f   pt;
1476acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
1486acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_SUBDIV2D_VIRTUAL_POINT_FLAG (1 << 30)
1496acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
1506acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renntypedef struct CvQuadEdge2D
1516acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn{
1526acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    CV_QUADEDGE2D_FIELDS()
1536acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn}
1546acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCvQuadEdge2D;
1556acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
1566acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renntypedef struct CvSubdiv2DPoint
1576acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn{
1586acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    CV_SUBDIV2D_POINT_FIELDS()
1596acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn}
1606acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCvSubdiv2DPoint;
1616acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
1626acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_SUBDIV2D_FIELDS()    \
1636acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    CV_GRAPH_FIELDS()           \
1646acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    int  quad_edges;            \
1656acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    int  is_geometry_valid;     \
1666acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    CvSubdiv2DEdge recent_edge; \
1676acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    CvPoint2D32f  topleft;      \
1686acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    CvPoint2D32f  bottomright;
1696acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
1706acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renntypedef struct CvSubdiv2D
1716acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn{
1726acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    CV_SUBDIV2D_FIELDS()
1736acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn}
1746acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCvSubdiv2D;
1756acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
1766acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
1776acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renntypedef enum CvSubdiv2DPointLocation
1786acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn{
1796acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    CV_PTLOC_ERROR = -2,
1806acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    CV_PTLOC_OUTSIDE_RECT = -1,
1816acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    CV_PTLOC_INSIDE = 0,
1826acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    CV_PTLOC_VERTEX = 1,
1836acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    CV_PTLOC_ON_EDGE = 2
1846acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn}
1856acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCvSubdiv2DPointLocation;
1866acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
1876acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renntypedef enum CvNextEdgeType
1886acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn{
1896acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    CV_NEXT_AROUND_ORG   = 0x00,
1906acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    CV_NEXT_AROUND_DST   = 0x22,
1916acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    CV_PREV_AROUND_ORG   = 0x11,
1926acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    CV_PREV_AROUND_DST   = 0x33,
1936acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    CV_NEXT_AROUND_LEFT  = 0x13,
1946acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    CV_NEXT_AROUND_RIGHT = 0x31,
1956acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    CV_PREV_AROUND_LEFT  = 0x20,
1966acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    CV_PREV_AROUND_RIGHT = 0x02
1976acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn}
1986acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCvNextEdgeType;
1996acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
2006acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* get the next edge with the same origin point (counterwise) */
2016acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define  CV_SUBDIV2D_NEXT_EDGE( edge )  (((CvQuadEdge2D*)((edge) & ~3))->next[(edge)&3])
2026acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
2036acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
2046acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* Defines for Distance Transform */
2056acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_DIST_USER    -1  /* User defined distance */
2066acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_DIST_L1      1   /* distance = |x1-x2| + |y1-y2| */
2076acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_DIST_L2      2   /* the simple euclidean distance */
2086acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_DIST_C       3   /* distance = max(|x1-x2|,|y1-y2|) */
2096acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_DIST_L12     4   /* L1-L2 metric: distance = 2(sqrt(1+x*x/2) - 1)) */
2106acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_DIST_FAIR    5   /* distance = c^2(|x|/c-log(1+|x|/c)), c = 1.3998 */
2116acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_DIST_WELSCH  6   /* distance = c^2/2(1-exp(-(x/c)^2)), c = 2.9846 */
2126acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_DIST_HUBER   7   /* distance = |x|<c ? x^2/2 : c(|x|-c/2), c=1.345 */
2136acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
2146acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
2156acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* Filters used in pyramid decomposition */
2166acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renntypedef enum CvFilter
2176acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn{
2186acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    CV_GAUSSIAN_5x5 = 7
2196acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn}
2206acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCvFilter;
2216acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
2226acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/****************************************************************************************/
2236acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/*                                    Older definitions                                 */
2246acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/****************************************************************************************/
2256acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
2266acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renntypedef float*   CvVect32f;
2276acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renntypedef float*   CvMatr32f;
2286acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renntypedef double*  CvVect64d;
2296acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renntypedef double*  CvMatr64d;
2306acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
2316acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renntypedef struct CvMatrix3
2326acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn{
2336acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    float m[3][3];
2346acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn}
2356acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCvMatrix3;
2366acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
2376acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
2386acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#ifdef __cplusplus
2396acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Rennextern "C" {
2406acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#endif
2416acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
2426acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renntypedef float (CV_CDECL * CvDistanceFunction)( const float* a, const float* b, void* user_param );
2436acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
2446acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#ifdef __cplusplus
2456acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn}
2466acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#endif
2476acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
2486acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renntypedef struct CvConDensation
2496acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn{
2506acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    int MP;
2516acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    int DP;
2526acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    float* DynamMatr;       /* Matrix of the linear Dynamics system  */
2536acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    float* State;           /* Vector of State                       */
2546acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    int SamplesNum;         /* Number of the Samples                 */
2556acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    float** flSamples;      /* arr of the Sample Vectors             */
2566acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    float** flNewSamples;   /* temporary array of the Sample Vectors */
2576acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    float* flConfidence;    /* Confidence for each Sample            */
2586acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    float* flCumulative;    /* Cumulative confidence                 */
2596acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    float* Temp;            /* Temporary vector                      */
2606acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    float* RandomSample;    /* RandomVector to update sample set     */
2616acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    struct CvRandState* RandS; /* Array of structures to generate random vectors */
2626acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn}
2636acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCvConDensation;
2646acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
2656acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/*
2666acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Rennstandard Kalman filter (in G. Welch' and G. Bishop's notation):
2676acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
2686acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn  x(k)=A*x(k-1)+B*u(k)+w(k)  p(w)~N(0,Q)
2696acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn  z(k)=H*x(k)+v(k),   p(v)~N(0,R)
2706acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn*/
2716acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renntypedef struct CvKalman
2726acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn{
2736acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    int MP;                     /* number of measurement vector dimensions */
2746acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    int DP;                     /* number of state vector dimensions */
2756acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    int CP;                     /* number of control vector dimensions */
2766acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
2776acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    /* backward compatibility fields */
2786acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#if 1
2796acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    float* PosterState;         /* =state_pre->data.fl */
2806acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    float* PriorState;          /* =state_post->data.fl */
2816acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    float* DynamMatr;           /* =transition_matrix->data.fl */
2826acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    float* MeasurementMatr;     /* =measurement_matrix->data.fl */
2836acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    float* MNCovariance;        /* =measurement_noise_cov->data.fl */
2846acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    float* PNCovariance;        /* =process_noise_cov->data.fl */
2856acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    float* KalmGainMatr;        /* =gain->data.fl */
2866acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    float* PriorErrorCovariance;/* =error_cov_pre->data.fl */
2876acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    float* PosterErrorCovariance;/* =error_cov_post->data.fl */
2886acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    float* Temp1;               /* temp1->data.fl */
2896acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    float* Temp2;               /* temp2->data.fl */
2906acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#endif
2916acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
2926acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    CvMat* state_pre;           /* predicted state (x'(k)):
2936acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn                                    x(k)=A*x(k-1)+B*u(k) */
2946acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    CvMat* state_post;          /* corrected state (x(k)):
2956acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn                                    x(k)=x'(k)+K(k)*(z(k)-H*x'(k)) */
2966acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    CvMat* transition_matrix;   /* state transition matrix (A) */
2976acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    CvMat* control_matrix;      /* control matrix (B)
2986acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn                                   (it is not used if there is no control)*/
2996acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    CvMat* measurement_matrix;  /* measurement matrix (H) */
3006acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    CvMat* process_noise_cov;   /* process noise covariance matrix (Q) */
3016acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    CvMat* measurement_noise_cov; /* measurement noise covariance matrix (R) */
3026acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    CvMat* error_cov_pre;       /* priori error estimate covariance matrix (P'(k)):
3036acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn                                    P'(k)=A*P(k-1)*At + Q)*/
3046acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    CvMat* gain;                /* Kalman gain matrix (K(k)):
3056acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn                                    K(k)=P'(k)*Ht*inv(H*P'(k)*Ht+R)*/
3066acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    CvMat* error_cov_post;      /* posteriori error estimate covariance matrix (P(k)):
3076acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn                                    P(k)=(I-K(k)*H)*P'(k) */
3086acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    CvMat* temp1;               /* temporary matrices */
3096acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    CvMat* temp2;
3106acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    CvMat* temp3;
3116acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    CvMat* temp4;
3126acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    CvMat* temp5;
3136acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn}
3146acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCvKalman;
3156acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
3166acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
3176acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/*********************** Haar-like Object Detection structures **************************/
3186acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_HAAR_MAGIC_VAL    0x42500000
3196acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_TYPE_NAME_HAAR    "opencv-haar-classifier"
3206acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
3216acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_IS_HAAR_CLASSIFIER( haar )                                                    \
3226acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    ((haar) != NULL &&                                                                   \
3236acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    (((const CvHaarClassifierCascade*)(haar))->flags & CV_MAGIC_MASK)==CV_HAAR_MAGIC_VAL)
3246acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
3256acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_HAAR_FEATURE_MAX  3
3266acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
3276acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renntypedef struct CvHaarFeature
3286acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn{
3296acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    int  tilted;
3306acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    struct
3316acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    {
3326acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn        CvRect r;
3336acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn        float weight;
3346acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    } rect[CV_HAAR_FEATURE_MAX];
3356acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn}
3366acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCvHaarFeature;
3376acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
3386acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renntypedef struct CvHaarClassifier
3396acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn{
3406acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    int count;
3416acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    CvHaarFeature* haar_feature;
3426acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    float* threshold;
3436acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    int* left;
3446acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    int* right;
3456acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    float* alpha;
3466acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn}
3476acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCvHaarClassifier;
3486acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
3496acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renntypedef struct CvHaarStageClassifier
3506acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn{
3516acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    int  count;
3526acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    float threshold;
3536acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    CvHaarClassifier* classifier;
3546acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
3556acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    int next;
3566acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    int child;
3576acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    int parent;
3586acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn}
3596acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCvHaarStageClassifier;
3606acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
3616acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renntypedef struct CvHidHaarClassifierCascade CvHidHaarClassifierCascade;
3626acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
3636acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renntypedef struct CvHaarClassifierCascade
3646acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn{
3656acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    int  flags;
3666acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    int  count;
3676acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    CvSize orig_window_size;
3686acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    CvSize real_window_size;
3696acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    double scale;
3706acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    CvHaarStageClassifier* stage_classifier;
3716acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    CvHidHaarClassifierCascade* hid_cascade;
3726acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn}
3736acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCvHaarClassifierCascade;
3746acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
3756acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renntypedef struct CvAvgComp
3766acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn{
3776acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    CvRect rect;
3786acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    int neighbors;
3796acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn}
3806acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCvAvgComp;
3816acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
3826acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Rennstruct CvFeatureTree;
3836acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
3846acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#endif /*_CVTYPES_H_*/
3856acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
3866acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* End of file. */
387