cvmeansdv.cpp.svn-base

来自「非结构化路识别」· SVN-BASE 代码 · 共 683 行 · 第 1/3 页

SVN-BASE
683
字号
/*M///////////////////////////////////////////////////////////////////////////////////////
//
//  IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING.
//
//  By downloading, copying, installing or using the software you agree to this license.
//  If you do not agree to this license, do not download, install,
//  copy or use the software.
//
//
//                        Intel License Agreement
//                For Open Source Computer Vision Library
//
// Copyright (C) 2000, Intel Corporation, all rights reserved.
// Third party copyrights are property of their respective owners.
//
// Redistribution and use in source and binary forms, with or without modification,
// are permitted provided that the following conditions are met:
//
//   * Redistribution's of source code must retain the above copyright notice,
//     this list of conditions and the following disclaimer.
//
//   * Redistribution's in binary form must reproduce the above copyright notice,
//     this list of conditions and the following disclaimer in the documentation
//     and/or other materials provided with the distribution.
//
//   * The name of Intel Corporation may not be used to endorse or promote products
//     derived from this software without specific prior written permission.
//
// This software is provided by the copyright holders and contributors "as is" and
// any express or implied warranties, including, but not limited to, the implied
// warranties of merchantability and fitness for a particular purpose are disclaimed.
// In no event shall the Intel Corporation or contributors be liable for any direct,
// indirect, incidental, special, exemplary, or consequential damages
// (including, but not limited to, procurement of substitute goods or services;
// loss of use, data, or profits; or business interruption) however caused
// and on any theory of liability, whether in contract, strict liability,
// or tort (including negligence or otherwise) arising in any way out of
// the use of this software, even if advised of the possibility of such damage.
//
//M*/

#include "_cv.h"

/****************************************************************************************\
*                             Mean and StdDev calculation                                *
\****************************************************************************************/


#define CV_IMPL_MEAN_SDV_1D_CASE_COI( temptype, acctype, accsqtype, \
                                      src, len, sum, sqsum, cn )    \
{                                                                   \
    int i;                                                          \
    acctype s1 = 0;                                                 \
    accsqtype sq1 = 0;                                              \
                                                                    \
    for( i = 0; i <= (len) - 4*(cn); i += 4*(cn) )                  \
    {                                                               \
        temptype t0 = (src)[i];                                     \
        temptype t1 = (src)[i + (cn)];                              \
        acctype  s;                                                 \
        accsqtype sq;                                               \
                                                                    \
        s  = (acctype)t0 + (acctype)t1;                             \
        sq = ((accsqtype)t0)*t0 + ((accsqtype)t1)*t1;               \
                                                                    \
        t0 = (src)[i + 2*(cn)];                                     \
        t1 = (src)[i + 3*(cn)];                                     \
                                                                    \
        (sum)[0] += s + (acctype)t0 + (acctype)t1;                  \
        (sqsum)[0] += sq + ((accsqtype)t0)*t0 + ((accsqtype)t1)*t1; \
    }                                                               \
                                                                    \
    for( ; i < (len); i += (cn) )                                   \
    {                                                               \
        temptype t = (src)[i];                                      \
                                                                    \
        s1 += (acctype)t;                                           \
        sq1 += ((accsqtype)t)*t;                                    \
    }                                                               \
                                                                    \
    (sum)[0] += s1;                                                 \
    (sqsum)[0] += sq1;                                              \
}


#define CV_IMPL_MEAN_SDV_1D_CASE_C1( temptype, acctype, accsqtype,  \
                                     src, len, sum, sqsum )         \
CV_IMPL_MEAN_SDV_1D_CASE_COI( temptype, acctype, accsqtype,         \
                              src, len, sum, sqsum, 1 )


#define CV_IMPL_MEAN_SDV_1D_CASE_C2( temptype, acctype, accsqtype,  \
                                     src, len, sum, sqsum )         \
{                                                                   \
    int i;                                                          \
                                                                    \
    for( i = 0; i < (len); i += 2 )                                 \
    {                                                               \
        temptype t0 = (src)[i];                                     \
        temptype t1 = (src)[i + 1];                                 \
                                                                    \
        (sum)[0] += t0;                                             \
        (sum)[1] += t1;                                             \
        (sqsum)[0] += ((accsqtype)t0)*t0;                           \
        (sqsum)[1] += ((accsqtype)t1)*t1;                           \
    }                                                               \
}


#define CV_IMPL_MEAN_SDV_1D_CASE_C3( temptype, acctype, accsqtype,  \
                                     src, len, sum, sqsum )         \
{                                                                   \
    int i;                                                          \
                                                                    \
    for( i = 0; i < (len); i += 3 )                                 \
    {                                                               \
        temptype t0 = (src)[i];                                     \
        temptype t1 = (src)[i + 1];                                 \
        temptype t2 = (src)[i + 2];                                 \
                                                                    \
        (sum)[0] += t0;                                             \
        (sum)[1] += t1;                                             \
        (sum)[2] += t2;                                             \
        (sqsum)[0] += ((accsqtype)t0)*t0;                           \
        (sqsum)[1] += ((accsqtype)t1)*t1;                           \
        (sqsum)[2] += ((accsqtype)t2)*t2;                           \
    }                                                               \
}


#define CV_IMPL_MEAN_SDV_1D_CASE_C4( temptype, acctype, accsqtype,  \
                                     src, len, sum, sqsum )         \
{                                                                   \
    int i;                                                          \
                                                                    \
    for( i = 0; i < (len); i += 4 )                                 \
    {                                                               \
        temptype t0 = (src)[i];                                     \
        temptype t1 = (src)[i + 1];                                 \
                                                                    \
        (sum)[0] += t0;                                             \
        (sum)[1] += t1;                                             \
        (sqsum)[0] += ((accsqtype)t0)*t0;                           \
        (sqsum)[1] += ((accsqtype)t1)*t1;                           \
                                                                    \
        t0 = (src)[i + 2];                                          \
        t1 = (src)[i + 3];                                          \
                                                                    \
        (sum)[2] += t0;                                             \
        (sum)[3] += t1;                                             \
        (sqsum)[2] += ((accsqtype)t0)*t0;                           \
        (sqsum)[3] += ((accsqtype)t1)*t1;                           \
    }                                                               \
}


#define CV_IMPL_MEAN_SDV_MASK_1D_CASE_C1( _mask_op_, temptype, acctype, accsqtype, \
                                          src, mask, len, sum, sqsum, pix )        \
{                                                                   \
    int i;                                                          \
    acctype s1 = 0;                                                 \
    accsqtype sq1 = 0;                                              \
                                                                    \
    for( i = 0; i <= (len) - 4; i += 4 )                            \
    {                                                               \
        int m = ((mask)[i] == 0) - 1;                               \
        temptype t;                                                 \
        acctype s;                                                  \
        accsqtype sq;                                               \
                                                                    \
        t = _mask_op_(m, (src)[i]);                                 \
        (pix) -= m;                                                 \
        s = t;                                                      \
        sq = ((accsqtype)t)*t;                                      \
                                                                    \
        m = ((mask)[i + 1] == 0) - 1;                               \
        t = _mask_op_(m, (src)[i + 1]);                             \
        (pix) -= m;                                                 \
        s += t;                                                     \
        sq += ((accsqtype)t)*t;                                     \
                                                                    \
        m = ((mask)[i + 2] == 0) - 1;                               \
        t = _mask_op_(m, (src)[i + 2]);                             \
        (pix) -= m;                                                 \
        s += t;                                                     \
        sq += ((accsqtype)t)*t;                                     \
                                                                    \
        m = ((mask)[i + 3] == 0) - 1;                               \
        t = _mask_op_(m, (src)[i + 3]);                             \
        (pix) -= m;                                                 \
        sum[0] += s + t;                                            \
        sqsum[0] += sq + ((accsqtype)t)*t;                          \
    }                                                               \
                                                                    \
    for( ; i < (len); i++ )                                         \
    {                                                               \
        int m = ((mask)[i] == 0) - 1;                               \
        temptype t = _mask_op_(m, (src)[i]);                        \
        (pix) -= m;                                                 \
        s1 += t;                                                    \
        sq1 += ((accsqtype)t)*t;                                    \
    }                                                               \
                                                                    \
    sum[0] += s1;                                                   \
    sqsum[0] += sq1;                                                \
}


#define CV_IMPL_MEAN_SDV_MASK_1D_CASE_COI( _mask_op_, temptype, acctype, accsqtype, \
                                           src, mask, len, sum, sqsum, pix, cn )    \
{                                                                   \
    int i;                                                          \
    acctype s1 = 0;                                                 \
    accsqtype sq1 = 0;                                              \
                                                                    \
    for( i = 0; i <= (len) - 4; i += 4 )                            \
    {                                                               \
        int m = ((mask)[i] == 0) - 1;                               \
        temptype t;                                                 \
        acctype s;                                                  \
        accsqtype sq;                                               \
                                                                    \
        t = _mask_op_(m, (src)[i*(cn)]);                            \
        (pix) -= m;                                                 \
        s = t;                                                      \
        sq = ((accsqtype)t)*t;                                      \
                                                                    \
        m = ((mask)[i + 1] == 0) - 1;                               \

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?