?? cxmathfuncs.cpp
字號:
{
uchar* src_data = src->data.ptr + src->step*y;
uchar* dst_data = dst->data.ptr + dst->step*y;
sqrt_func( src_data, dst_data, size.width );
}
}
else
{
block_size = MIN( size.width, ICV_MATH_BLOCK_SIZE );
temp_buffer = cvAlloc( block_size*CV_ELEM_SIZE(depth) );
for( y = 0; y < size.height; y++ )
{
uchar* src_data = src->data.ptr + src->step*y;
uchar* dst_data = dst->data.ptr + dst->step*y;
for( x = 0; x < size.width; x += block_size )
{
int len = MIN( size.width - x, block_size );
if( depth == CV_32F )
{
icvLog_32f( (float*)src_data + x, (float*)temp_buffer, len );
icvScale_32f( (float*)temp_buffer, (float*)temp_buffer, len, (float)power, 0 );
icvExp_32f( (float*)temp_buffer, (float*)dst_data + x, len );
}
else
{
icvLog_64f( (double*)src_data + x, (double*)temp_buffer, len );
icvScale_64f( (double*)temp_buffer, (double*)temp_buffer, len, power, 0 );
icvExp_64f( (double*)temp_buffer, (double*)dst_data + x, len );
}
}
}
}
__END__;
}
/************************** CheckArray for NaN's, Inf's *********************************/
IPCVAPI_IMPL( CvStatus, icvCheckArray_32f_C1R,
( const float* src, int srcstep, CvSize size, int flags, double min_val, double max_val ),
(src, srcstep, size, flags, min_val, max_val) )
{
Cv32suf a, b;
int ia, ib;
const int* isrc = (const int*)src;
if( !src )
return CV_NULLPTR_ERR;
if( size.width <= 0 || size.height <= 0 )
return CV_BADSIZE_ERR;
if( flags & CV_CHECK_RANGE )
{
a.f = (float)min_val;
b.f = (float)max_val;
}
else
{
a.f = -FLT_MAX;
b.f = FLT_MAX;
}
ia = CV_TOGGLE_FLT(a.i);
ib = CV_TOGGLE_FLT(b.i);
srcstep /= sizeof(isrc[0]);
for( ; size.height--; isrc += srcstep )
{
int i;
for( i = 0; i < size.width; i++ )
{
int val = isrc[i];
val = CV_TOGGLE_FLT(val);
if( val < ia || val >= ib )
return CV_BADRANGE_ERR;
}
}
return CV_OK;
}
IPCVAPI_IMPL( CvStatus, icvCheckArray_64f_C1R,
( const double* src, int srcstep, CvSize size, int flags, double min_val, double max_val ),
(src, srcstep, size, flags, min_val, max_val) )
{
Cv64suf a, b;
int64 ia, ib;
const int64* isrc = (const int64*)src;
if( !src )
return CV_NULLPTR_ERR;
if( size.width <= 0 || size.height <= 0 )
return CV_BADSIZE_ERR;
if( flags & CV_CHECK_RANGE )
{
a.f = min_val;
b.f = max_val;
}
else
{
a.f = -DBL_MAX;
b.f = DBL_MAX;
}
ia = CV_TOGGLE_DBL(a.i);
ib = CV_TOGGLE_DBL(b.i);
srcstep /= sizeof(isrc[0]);
for( ; size.height--; isrc += srcstep )
{
int i;
for( i = 0; i < size.width; i++ )
{
int64 val = isrc[i];
val = CV_TOGGLE_DBL(val);
if( val < ia || val >= ib )
return CV_BADRANGE_ERR;
}
}
return CV_OK;
}
CV_IMPL int cvCheckArr( const CvArr* arr, int flags,
double minVal, double maxVal )
{
int result = 0;
CV_FUNCNAME( "cvCheckArr" );
__BEGIN__;
if( arr )
{
CvStatus status = CV_OK;
CvMat stub, *mat = (CvMat*)arr;
int type;
CvSize size;
if( !CV_IS_MAT( mat ))
CV_CALL( mat = cvGetMat( mat, &stub, 0, 1 ));
type = CV_MAT_TYPE( mat->type );
size = cvGetMatSize( mat );
size.width *= CV_MAT_CN( type );
if( CV_IS_MAT_CONT( mat->type ))
{
size.width *= size.height;
size.height = 1;
}
if( CV_MAT_DEPTH(type) == CV_32F )
{
status = icvCheckArray_32f_C1R( mat->data.fl, mat->step, size,
flags, minVal, maxVal );
}
else if( CV_MAT_DEPTH(type) == CV_64F )
{
status = icvCheckArray_64f_C1R( mat->data.db, mat->step, size,
flags, minVal, maxVal );
}
else
{
CV_ERROR( CV_StsUnsupportedFormat, "" );
}
if( status < 0 )
{
if( status != CV_BADRANGE_ERR || !(flags & CV_CHECK_QUIET))
CV_ERROR( CV_StsOutOfRange, "CheckArray failed" );
result = 0;
}
}
result = 1;
__END__;
return result;
}
/****************************************************************************************\
* E X P *
\****************************************************************************************/
typedef union
{
struct {
#if ( defined( WORDS_BIGENDIAN ) && !defined( OPENCV_UNIVERSAL_BUILD ) ) || defined( __BIG_ENDIAN__ )
int hi;
int lo;
#else
int lo;
int hi;
#endif
} i;
double d;
}
DBLINT;
#define EXPTAB_SCALE 6
#define EXPTAB_MASK (1 << EXPTAB_SCALE) - 1
#define EXPPOLY_32F_A0 .9670371139572337719125840413672004409288e-2
static const double icvExpTab[] = {
1.0 * EXPPOLY_32F_A0,
1.0108892860517004600204097905619 * EXPPOLY_32F_A0,
1.0218971486541166782344801347833 * EXPPOLY_32F_A0,
1.0330248790212284225001082839705 * EXPPOLY_32F_A0,
1.0442737824274138403219664787399 * EXPPOLY_32F_A0,
1.0556451783605571588083413251529 * EXPPOLY_32F_A0,
1.0671404006768236181695211209928 * EXPPOLY_32F_A0,
1.0787607977571197937406800374385 * EXPPOLY_32F_A0,
1.0905077326652576592070106557607 * EXPPOLY_32F_A0,
1.1023825833078409435564142094256 * EXPPOLY_32F_A0,
1.1143867425958925363088129569196 * EXPPOLY_32F_A0,
1.126521618608241899794798643787 * EXPPOLY_32F_A0,
1.1387886347566916537038302838415 * EXPPOLY_32F_A0,
1.151189229952982705817759635202 * EXPPOLY_32F_A0,
1.1637248587775775138135735990922 * EXPPOLY_32F_A0,
1.1763969916502812762846457284838 * EXPPOLY_32F_A0,
1.1892071150027210667174999705605 * EXPPOLY_32F_A0,
1.2021567314527031420963969574978 * EXPPOLY_32F_A0,
1.2152473599804688781165202513388 * EXPPOLY_32F_A0,
1.2284805361068700056940089577928 * EXPPOLY_32F_A0,
1.2418578120734840485936774687266 * EXPPOLY_32F_A0,
1.2553807570246910895793906574423 * EXPPOLY_32F_A0,
1.2690509571917332225544190810323 * EXPPOLY_32F_A0,
1.2828700160787782807266697810215 * EXPPOLY_32F_A0,
1.2968395546510096659337541177925 * EXPPOLY_32F_A0,
1.3109612115247643419229917863308 * EXPPOLY_32F_A0,
1.3252366431597412946295370954987 * EXPPOLY_32F_A0,
1.3396675240533030053600306697244 * EXPPOLY_32F_A0,
1.3542555469368927282980147401407 * EXPPOLY_32F_A0,
1.3690024229745906119296011329822 * EXPPOLY_32F_A0,
1.3839098819638319548726595272652 * EXPPOLY_32F_A0,
1.3989796725383111402095281367152 * EXPPOLY_32F_A0,
1.4142135623730950488016887242097 * EXPPOLY_32F_A0,
1.4296133383919700112350657782751 * EXPPOLY_32F_A0,
1.4451808069770466200370062414717 * EXPPOLY_32F_A0,
1.4609177941806469886513028903106 * EXPPOLY_32F_A0,
1.476826145939499311386907480374 * EXPPOLY_32F_A0,
1.4929077282912648492006435314867 * EXPPOLY_32F_A0,
1.5091644275934227397660195510332 * EXPPOLY_32F_A0,
1.5255981507445383068512536895169 * EXPPOLY_32F_A0,
1.5422108254079408236122918620907 * EXPPOLY_32F_A0,
1.5590044002378369670337280894749 * EXPPOLY_32F_A0,
1.5759808451078864864552701601819 * EXPPOLY_32F_A0,
1.5931421513422668979372486431191 * EXPPOLY_32F_A0,
1.6104903319492543081795206673574 * EXPPOLY_32F_A0,
1.628027421857347766848218522014 * EXPPOLY_32F_A0,
1.6457554781539648445187567247258 * EXPPOLY_32F_A0,
1.6636765803267364350463364569764 * EXPPOLY_32F_A0,
1.6817928305074290860622509524664 * EXPPOLY_32F_A0,
1.7001063537185234695013625734975 * EXPPOLY_32F_A0,
1.7186192981224779156293443764563 * EXPPOLY_32F_A0,
1.7373338352737062489942020818722 * EXPPOLY_32F_A0,
1.7562521603732994831121606193753 * EXPPOLY_32F_A0,
1.7753764925265212525505592001993 * EXPPOLY_32F_A0,
1.7947090750031071864277032421278 * EXPPOLY_32F_A0,
1.8142521755003987562498346003623 * EXPPOLY_32F_A0,
1.8340080864093424634870831895883 * EXPPOLY_32F_A0,
1.8539791250833855683924530703377 * EXPPOLY_32F_A0,
1.8741676341102999013299989499544 * EXPPOLY_32F_A0,
1.8945759815869656413402186534269 * EXPPOLY_32F_A0,
1.9152065613971472938726112702958 * EXPPOLY_32F_A0,
1.9360617934922944505980559045667 * EXPPOLY_32F_A0,
1.9571441241754002690183222516269 * EXPPOLY_32F_A0,
1.9784560263879509682582499181312 * EXPPOLY_32F_A0,
};
static const double exp_prescale = 1.4426950408889634073599246810019 * (1 << EXPTAB_SCALE);
static const double exp_postscale = 1./(1 << EXPTAB_SCALE);
static const double exp_max_val = 3000.*(1 << EXPTAB_SCALE); // log10(DBL_MAX) < 3000
IPCVAPI_IMPL( CvStatus, icvExp_32f, ( const float *_x, float *y, int n ), (_x, y, n) )
{
static const double
EXPPOLY_32F_A4 = 1.000000000000002438532970795181890933776 / EXPPOLY_32F_A0,
EXPPOLY_32F_A3 = .6931471805521448196800669615864773144641 / EXPPOLY_32F_A0,
EXPPOLY_32F_A2 = .2402265109513301490103372422686535526573 / EXPPOLY_32F_A0,
EXPPOLY_32F_A1 = .5550339366753125211915322047004666939128e-1 / EXPPOLY_32F_A0;
#undef EXPPOLY
#define EXPPOLY(x) \
(((((x) + EXPPOLY_32F_A1)*(x) + EXPPOLY_32F_A2)*(x) + EXPPOLY_32F_A3)*(x) + EXPPOLY_32F_A4)
int i = 0;
DBLINT buf[4];
const Cv32suf* x = (const Cv32suf*)_x;
if( !x || !y )
return CV_NULLPTR_ERR;
if( n <= 0 )
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -