cvpyramids.cpp.svn-base
来自「非结构化路识别」· SVN-BASE 代码 · 共 1,010 行 · 第 1/5 页
SVN-BASE
1,010 行
for( i = 0; i < H; i++, src += src_step, buf += channels*2 ) \
for( j = 0; j < channels; j++ ) \
{ \
buf[j] = PD_LT( src[j-channels*2], src[j-channels], src[j] ); \
buf[j+channels]=PD_LT(src[j],src[j-channels],src[j-channels*2]);\
} \
break; \
default: \
if( !(W & 1) ) \
for( i = 0; i < H; i++, src += src_step, buf += channels ) \
for( j = 0; j < channels; j++ ) \
buf[j] = PD_LT( src[j], src[j-channels], src[j-channels*2] ); \
else if( cols == 1 ) \
for( i = 0; i < H; i++, src += src_step, buf += channels ) \
for( j = 0; j < channels; j++ ) \
buf[j] = PD_FILTER( src[j-channels*4], src[j-channels*3], \
src[j-channels*2], src[j-channels], src[j]);\
else \
for( i = 0; i < H; i++, src += src_step, buf += channels*2 ) \
for( j = 0; j < channels; j++ ) \
{ \
buf[j] = PD_FILTER( src[j-channels*4], src[j-channels*3], \
src[j-channels*2], src[j-channels], src[j]);\
buf[j+channels] = PD_LT( src[j], src[j-channels], src[j-channels*2] ); \
} \
} \
\
buf = buf0; \
} \
\
src = src2; \
\
/******************* STAGE 2. ******************/ \
\
/* do vertical convolution of the pre-processed right columns, */ \
/* stored in buffer, and write results to the destination */ \
/* do vertical convolution of the 1-2 bottom rows */ \
/* and write results to the buffer */ \
switch( H ) \
{ \
case 1: \
case 2: \
if( cols > 0 ) \
{ \
assert( Hd == 1 ); \
for( j = 0; j < bufW; j++ ) \
dst[j] = (arrtype)_pd_scale_( PD_SINGULAR( buf[j], buf[j+(H-1)*bufW] ));\
} \
\
if( rows > 0 ) \
{ \
for( j = 0; j < W*channels; j++ ) \
buf[j] = PD_SINGULAR( src[j-src_step], src[j] ); \
} \
break; \
\
case 3: \
\
if( cols > 0 ) \
{ \
for( j = 0; j < bufW; j++ ) \
dst[j]= (arrtype)_pd_scale_(PD_LT( buf[j], buf[j+bufW], buf[j+bufW*2]));\
if( Hd == 2 ) \
{ \
dst += dst_step; \
for( j = 0; j < bufW; j++ ) \
dst[j] = (arrtype)_pd_scale_(PD_LT( buf[j+bufW*2], buf[j+bufW], buf[j]));\
} \
} \
\
if( Hd == 1 ) \
for( j = 0; j < W*channels; j++ ) \
buf[j] = PD_LT( src[j-src_step*2], src[j - src_step], src[j] ); \
else \
for( j = 0; j < W*channels; j++ ) \
{ \
buf[j] = PD_LT( src[j-src_step*2], src[j - src_step], src[j] ); \
buf[j+W*channels] = PD_LT( src[j],src[j-src_step],src[j-src_step*2] ); \
} \
break; \
\
default: \
\
if( cols > 0 ) \
{ \
/* top of the right border */ \
for( j = 0; j < bufW; j++ ) \
dst[j]=(arrtype)_pd_scale_( PD_LT( buf[j], buf[j+bufW], buf[j+bufW*2]));\
\
/* middle part of the right border */ \
buf += bufW*2; \
dst += dst_step; \
for( i = 1; i < Hd_; i++, dst += dst_step, buf += bufW*2 ) \
{ \
for( j = 0; j < bufW; j++ ) \
dst[j] = (arrtype)_pd_scale_( PD_FILTER( buf[j - bufW*2], buf[j - bufW],\
buf[j], buf[j + bufW], buf[j + bufW*2] ));\
} \
\
/* bottom of the right border */ \
if( !(H & 1) ) \
for( j = 0; j < bufW; j++ ) \
dst[j] = (arrtype)_pd_scale_( PD_RB( buf[j-bufW*2], buf[j-bufW], \
buf[j], buf[j+bufW] )); \
else if( rows > 1 ) \
for( j = 0; j < bufW; j++ ) \
dst[j]=(arrtype)_pd_scale_(PD_LT( buf[j-bufW*2], buf[j-bufW], buf[j]));\
\
buf = buf0; \
} \
\
if( rows > 0 ) \
{ \
if( !(H & 1) ) \
for( j = 0; j < W*channels; j++ ) \
buf[j] = PD_LT( src[j], src[j-src_step], src[j-src_step*2] ); \
else if( cols == 1 ) \
for( j = 0; j < W*channels; j++ ) \
buf[j] = PD_FILTER( src[j-src_step*4], src[j-src_step*3], \
src[j-src_step*2], src[j-src_step], src[j] ); \
else \
for( j = 0; j < W*channels; j++ ) \
{ \
buf[j] = PD_FILTER( src[j-src_step*4], src[j-src_step*3], \
src[j-src_step*2], src[j-src_step], src[j] ); \
buf[j+W*channels] = PD_LT( src[j], src[j-src_step], src[j-src_step*2] );\
} \
} \
} \
\
\
/******************* STAGE 3. ******************/ \
\
/* do horizontal convolution of the pre-processed bottom rows,*/ \
/* stored in buffer, and write results to the destination */ \
if( rows > 0 ) \
{ \
dst = dst2; \
\
switch( W ) \
{ \
case 1: \
case 2: \
assert( Wd == 1 ); \
for( ; rows--; dst += dst_step, buf += W*channels ) \
for( j = 0; j < channels; j++ ) \
dst[j] = (arrtype)_pd_scale_( PD_SINGULAR( buf[j], \
buf[j+(W-1)*channels] )); \
break; \
\
case 3: \
if( Wd == 1 ) \
for( ; rows--; dst += dst_step, buf += W*channels ) \
for( j = 0; j < channels; j++ ) \
dst[j] = (arrtype)_pd_scale_( PD_LT( \
buf[j], buf[j+channels], buf[j+channels*2] )); \
else \
for( ; rows--; dst += dst_step, buf += W*channels ) \
for( j = 0; j < channels; j++ ) \
{ \
dst[j] = (arrtype)_pd_scale_( PD_LT( \
buf[j], buf[j+channels], buf[j+channels*2] )); \
dst[j + channels] = (arrtype)_pd_scale_( PD_LT( \
buf[j+channels*2], buf[j+channels], buf[j] )); \
} \
break; \
\
default: \
\
for( ; rows--; dst += dst_step, buf += W*channels ) \
{ \
/* left part of the bottom row */ \
for( j = 0; j < channels; j++ ) \
dst[j] = (arrtype)_pd_scale_( PD_LT( buf[j], buf[j+channels], \
buf[j+channels*2] )); \
\
/* middle part of the bottom row */ \
for( i = channels; i < Wd_*channels; i += channels ) \
{ \
for( j = 0; j < channels; j++ ) \
dst[i+j] = (arrtype)_pd_scale_( PD_FILTER( \
buf[i*2+j-channels*2], buf[i*2+j-channels], buf[i*2+j],\
buf[i*2+j+channels], buf[i*2+j+channels*2] )); \
} \
\
/* bottom of the right border */ \
if( !(W & 1) ) \
for( j = 0; j < channels; j++ ) \
dst[i+j] = (arrtype)_pd_scale_( PD_RB( buf[i*2+j-channels*2], \
buf[i*2+j-channels], buf[i*2+j], buf[i*2+j+channels] ));\
else if( cols > 1 ) \
for( j = 0; j < channels; j++ ) \
dst[i+j] = (arrtype)_pd_scale_( PD_LT( buf[i*2+j-channels*2], \
buf[i*2+j-channels], buf[i*2+j] )); \
} \
} \
} \
\
if( buf0 != local_buffer ) \
icvFree( &buf0 ); \
\
return CV_OK; \
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?