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 + -
显示快捷键?