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