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 _CXCORE_INTERNAL_H_ 436acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define _CXCORE_INTERNAL_H_ 446acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 456acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#if defined _MSC_VER && _MSC_VER >= 1200 466acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn /* disable warnings related to inline functions */ 476acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn #pragma warning( disable: 4711 4710 4514 ) 486acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#endif 496acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 506acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renntypedef unsigned long ulong; 516acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 526acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#ifdef __BORLANDC__ 536acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn #define WIN32 546acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn #define CV_DLL 556acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn #undef _CV_ALWAYS_PROFILE_ 566acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn #define _CV_ALWAYS_NO_PROFILE_ 576acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#endif 586acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 596acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#include "cxcore.h" 606acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#include "cxmisc.h" 616acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#include "_cxipp.h" 626acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#include <math.h> 636acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#include <assert.h> 646acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#include <string.h> 656acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#include <stdlib.h> 666acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#include <stdio.h> 676acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#include <limits.h> 686acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#include <float.h> 696acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 706acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn// -128.f ... 255.f 716acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Rennextern const float icv8x32fTab[]; 726acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_8TO32F(x) icv8x32fTab[(x)+128] 736acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 746acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Rennextern const ushort icv8x16uSqrTab[]; 756acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_SQR_8U(x) icv8x16uSqrTab[(x)+255] 766acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 776acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Rennextern const char* icvHersheyGlyphs[]; 786acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 796acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Rennextern const signed char icvDepthToType[]; 806acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 816acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define icvIplToCvDepth( depth ) \ 826acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn icvDepthToType[(((depth) & 255) >> 2) + ((depth) < 0)] 836acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 846acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Rennextern const uchar icvSaturate8u[]; 856acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_FAST_CAST_8U(t) (assert(-256 <= (t) && (t) <= 512), icvSaturate8u[(t)+256]) 866acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_MIN_8U(a,b) ((a) - CV_FAST_CAST_8U((a) - (b))) 876acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_MAX_8U(a,b) ((a) + CV_FAST_CAST_8U((b) - (a))) 886acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 896acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renntypedef CvFunc2D_3A1I CvArithmBinMaskFunc2D; 906acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renntypedef CvFunc2D_2A1P1I CvArithmUniMaskFunc2D; 916acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 926acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 936acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/****************************************************************************************\ 946acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn* Complex arithmetics * 956acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn\****************************************************************************************/ 966acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 976acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Rennstruct CvComplex32f; 986acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Rennstruct CvComplex64f; 996acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 1006acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Rennstruct CvComplex32f 1016acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn{ 1026acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn float re, im; 1036acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 1046acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn CvComplex32f() {} 1056acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn CvComplex32f( float _re, float _im=0 ) : re(_re), im(_im) {} 1066acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn explicit CvComplex32f( const CvComplex64f& v ); 1076acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn //CvComplex32f( const CvComplex32f& v ) : re(v.re), im(v.im) {} 1086acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn //CvComplex32f& operator = (const CvComplex32f& v ) { re = v.re; im = v.im; return *this; } 1096acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn operator CvComplex64f() const; 1106acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn}; 1116acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 1126acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Rennstruct CvComplex64f 1136acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn{ 1146acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn double re, im; 1156acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 1166acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn CvComplex64f() {} 1176acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn CvComplex64f( double _re, double _im=0 ) : re(_re), im(_im) {} 1186acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn explicit CvComplex64f( const CvComplex32f& v ); 1196acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn //CvComplex64f( const CvComplex64f& v ) : re(v.re), im(v.im) {} 1206acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn //CvComplex64f& operator = (const CvComplex64f& v ) { re = v.re; im = v.im; return *this; } 1216acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn operator CvComplex32f() const; 1226acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn}; 1236acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 1246acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renninline CvComplex32f::CvComplex32f( const CvComplex64f& v ) : re((float)v.re), im((float)v.im) {} 1256acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renninline CvComplex64f::CvComplex64f( const CvComplex32f& v ) : re(v.re), im(v.im) {} 1266acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 1276acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renninline CvComplex32f operator + (CvComplex32f a, CvComplex32f b) 1286acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn{ 1296acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn return CvComplex32f( a.re + b.re, a.im + b.im ); 1306acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn} 1316acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 1326acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renninline CvComplex32f& operator += (CvComplex32f& a, CvComplex32f b) 1336acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn{ 1346acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn a.re += b.re; 1356acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn a.im += b.im; 1366acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn return a; 1376acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn} 1386acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 1396acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renninline CvComplex32f operator - (CvComplex32f a, CvComplex32f b) 1406acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn{ 1416acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn return CvComplex32f( a.re - b.re, a.im - b.im ); 1426acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn} 1436acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 1446acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renninline CvComplex32f& operator -= (CvComplex32f& a, CvComplex32f b) 1456acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn{ 1466acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn a.re -= b.re; 1476acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn a.im -= b.im; 1486acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn return a; 1496acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn} 1506acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 1516acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renninline CvComplex32f operator - (CvComplex32f a) 1526acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn{ 1536acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn return CvComplex32f( -a.re, -a.im ); 1546acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn} 1556acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 1566acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renninline CvComplex32f operator * (CvComplex32f a, CvComplex32f b) 1576acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn{ 1586acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn return CvComplex32f( a.re*b.re - a.im*b.im, a.re*b.im + a.im*b.re ); 1596acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn} 1606acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 1616acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renninline double abs(CvComplex32f a) 1626acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn{ 1636acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn return sqrt( (double)a.re*a.re + (double)a.im*a.im ); 1646acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn} 1656acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 1666acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renninline CvComplex32f conj(CvComplex32f a) 1676acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn{ 1686acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn return CvComplex32f( a.re, -a.im ); 1696acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn} 1706acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 1716acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 1726acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renninline CvComplex32f operator / (CvComplex32f a, CvComplex32f b) 1736acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn{ 1746acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn double t = 1./((double)b.re*b.re + (double)b.im*b.im); 1756acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn return CvComplex32f( (float)((a.re*b.re + a.im*b.im)*t), 1766acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn (float)((-a.re*b.im + a.im*b.re)*t) ); 1776acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn} 1786acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 1796acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renninline CvComplex32f operator * (double a, CvComplex32f b) 1806acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn{ 1816acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn return CvComplex32f( (float)(a*b.re), (float)(a*b.im) ); 1826acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn} 1836acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 1846acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renninline CvComplex32f operator * (CvComplex32f a, double b) 1856acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn{ 1866acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn return CvComplex32f( (float)(a.re*b), (float)(a.im*b) ); 1876acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn} 1886acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 1896acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renninline CvComplex32f::operator CvComplex64f() const 1906acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn{ 1916acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn return CvComplex64f(re,im); 1926acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn} 1936acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 1946acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 1956acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renninline CvComplex64f operator + (CvComplex64f a, CvComplex64f b) 1966acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn{ 1976acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn return CvComplex64f( a.re + b.re, a.im + b.im ); 1986acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn} 1996acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 2006acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renninline CvComplex64f& operator += (CvComplex64f& a, CvComplex64f b) 2016acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn{ 2026acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn a.re += b.re; 2036acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn a.im += b.im; 2046acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn return a; 2056acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn} 2066acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 2076acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renninline CvComplex64f operator - (CvComplex64f a, CvComplex64f b) 2086acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn{ 2096acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn return CvComplex64f( a.re - b.re, a.im - b.im ); 2106acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn} 2116acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 2126acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renninline CvComplex64f& operator -= (CvComplex64f& a, CvComplex64f b) 2136acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn{ 2146acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn a.re -= b.re; 2156acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn a.im -= b.im; 2166acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn return a; 2176acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn} 2186acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 2196acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renninline CvComplex64f operator - (CvComplex64f a) 2206acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn{ 2216acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn return CvComplex64f( -a.re, -a.im ); 2226acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn} 2236acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 2246acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renninline CvComplex64f operator * (CvComplex64f a, CvComplex64f b) 2256acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn{ 2266acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn return CvComplex64f( a.re*b.re - a.im*b.im, a.re*b.im + a.im*b.re ); 2276acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn} 2286acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 2296acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renninline double abs(CvComplex64f a) 2306acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn{ 2316acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn return sqrt( (double)a.re*a.re + (double)a.im*a.im ); 2326acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn} 2336acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 2346acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renninline CvComplex64f operator / (CvComplex64f a, CvComplex64f b) 2356acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn{ 2366acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn double t = 1./((double)b.re*b.re + (double)b.im*b.im); 2376acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn return CvComplex64f( (a.re*b.re + a.im*b.im)*t, 2386acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn (-a.re*b.im + a.im*b.re)*t ); 2396acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn} 2406acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 2416acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renninline CvComplex64f operator * (double a, CvComplex64f b) 2426acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn{ 2436acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn return CvComplex64f( a*b.re, a*b.im ); 2446acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn} 2456acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 2466acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renninline CvComplex64f operator * (CvComplex64f a, double b) 2476acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn{ 2486acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn return CvComplex64f( a.re*b, a.im*b ); 2496acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn} 2506acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 2516acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renninline CvComplex64f::operator CvComplex32f() const 2526acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn{ 2536acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn return CvComplex32f((float)re,(float)im); 2546acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn} 2556acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 2566acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renninline CvComplex64f conj(CvComplex64f a) 2576acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn{ 2586acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn return CvComplex64f( a.re, -a.im ); 2596acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn} 2606acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 2616acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renninline CvComplex64f operator + (CvComplex64f a, CvComplex32f b) 2626acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn{ 2636acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn return CvComplex64f( a.re + b.re, a.im + b.im ); 2646acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn} 2656acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 2666acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renninline CvComplex64f operator + (CvComplex32f a, CvComplex64f b) 2676acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn{ 2686acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn return CvComplex64f( a.re + b.re, a.im + b.im ); 2696acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn} 2706acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 2716acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renninline CvComplex64f operator - (CvComplex64f a, CvComplex32f b) 2726acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn{ 2736acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn return CvComplex64f( a.re - b.re, a.im - b.im ); 2746acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn} 2756acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 2766acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renninline CvComplex64f operator - (CvComplex32f a, CvComplex64f b) 2776acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn{ 2786acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn return CvComplex64f( a.re - b.re, a.im - b.im ); 2796acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn} 2806acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 2816acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renninline CvComplex64f operator * (CvComplex64f a, CvComplex32f b) 2826acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn{ 2836acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn return CvComplex64f( a.re*b.re - a.im*b.im, a.re*b.im + a.im*b.re ); 2846acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn} 2856acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 2866acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renninline CvComplex64f operator * (CvComplex32f a, CvComplex64f b) 2876acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn{ 2886acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn return CvComplex64f( a.re*b.re - a.im*b.im, a.re*b.im + a.im*b.re ); 2896acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn} 2906acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 2916acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 2926acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renntypedef CvStatus (CV_STDCALL * CvCopyMaskFunc)(const void* src, int src_step, 2936acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn void* dst, int dst_step, CvSize size, 2946acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn const void* mask, int mask_step); 2956acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 2966acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCvCopyMaskFunc icvGetCopyMaskFunc( int elem_size ); 2976acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 2986acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCvStatus CV_STDCALL icvSetZero_8u_C1R( uchar* dst, int dststep, CvSize size ); 2996acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 3006acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCvStatus CV_STDCALL icvScale_32f( const float* src, float* dst, int len, float a, float b ); 3016acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCvStatus CV_STDCALL icvScale_64f( const double* src, double* dst, int len, double a, double b ); 3026acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 3036acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCvStatus CV_STDCALL icvLUT_Transform8u_8u_C1R( const uchar* src, int srcstep, uchar* dst, 3046acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn int dststep, CvSize size, const uchar* lut ); 3056acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCvStatus CV_STDCALL icvLUT_Transform8u_16u_C1R( const uchar* src, int srcstep, ushort* dst, 3066acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn int dststep, CvSize size, const ushort* lut ); 3076acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCvStatus CV_STDCALL icvLUT_Transform8u_32s_C1R( const uchar* src, int srcstep, int* dst, 3086acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn int dststep, CvSize size, const int* lut ); 3096acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCvStatus CV_STDCALL icvLUT_Transform8u_64f_C1R( const uchar* src, int srcstep, double* dst, 3106acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn int dststep, CvSize size, const double* lut ); 3116acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 3126acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCvStatus CV_STDCALL icvLUT_Transform8u_8u_C2R( const uchar* src, int srcstep, uchar* dst, 3136acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn int dststep, CvSize size, const uchar* lut ); 3146acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCvStatus CV_STDCALL icvLUT_Transform8u_8u_C3R( const uchar* src, int srcstep, uchar* dst, 3156acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn int dststep, CvSize size, const uchar* lut ); 3166acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCvStatus CV_STDCALL icvLUT_Transform8u_8u_C4R( const uchar* src, int srcstep, uchar* dst, 3176acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn int dststep, CvSize size, const uchar* lut ); 3186acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 3196acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renntypedef CvStatus (CV_STDCALL * CvLUT_TransformFunc)( const void* src, int srcstep, void* dst, 3206acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn int dststep, CvSize size, const void* lut ); 3216acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 3226acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCV_INLINE CvStatus 3236acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennicvLUT_Transform8u_8s_C1R( const uchar* src, int srcstep, schar* dst, 3246acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn int dststep, CvSize size, const schar* lut ) 3256acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn{ 3266acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn return icvLUT_Transform8u_8u_C1R( src, srcstep, (uchar*)dst, 3276acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn dststep, size, (const uchar*)lut ); 3286acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn} 3296acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 3306acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCV_INLINE CvStatus 3316acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennicvLUT_Transform8u_16s_C1R( const uchar* src, int srcstep, short* dst, 3326acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn int dststep, CvSize size, const short* lut ) 3336acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn{ 3346acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn return icvLUT_Transform8u_16u_C1R( src, srcstep, (ushort*)dst, 3356acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn dststep, size, (const ushort*)lut ); 3366acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn} 3376acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 3386acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCV_INLINE CvStatus 3396acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennicvLUT_Transform8u_32f_C1R( const uchar* src, int srcstep, float* dst, 3406acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn int dststep, CvSize size, const float* lut ) 3416acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn{ 3426acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn return icvLUT_Transform8u_32s_C1R( src, srcstep, (int*)dst, 3436acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn dststep, size, (const int*)lut ); 3446acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn} 3456acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 3466acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#endif /*_CXCORE_INTERNAL_H_*/ 347