⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 comp1d.c

📁 微软的基于HMM的人脸识别原代码, 非常经典的说
💻 C
字号:
/*M///////////////////////////////////////////////////////////////////////////////////////
//  
//                      INTEL CORPORATION PROPRIETARY INFORMATION              
//         This software is supplied under the terms of a license agreement or 
//         nondisclosure agreement with Intel Corporation and may not be copied
//         or disclosed except in accordance with the terms of that agreement. 
//               Copyright (c) 1999 Intel Corporation. All Rights Reserved.    
//  
//    RCS:
//       $Source:   Comp1D.c$
//       $Revision: 00.00.05$
//      Purpose: 
//      Contents:
//      Authors:
//        Sergey Oblomov
//  
//M*/

#include "ats.h"
#include <stdio.h>
/*F///////////////////////////////////////////////////////////////////////////////////////
//    Name:    atsCompSingle
//    Purpose:                                                                  
//      Detailed Comparing two float values      
//    Context:                                                                  
//    Parameters:                                                               
//      flFirst - first value                                               
//      flSecond- second value                                             
//      dbAcc - accuracy                                     
//                                                 
//    Returns:                                                                  
//      1 if not equal 
//      0 if equal                                           
//    Notes:                                                                    
//F*/
long atsCompSingle(float flFirst,
                   float flSecond,
                   double dbAcc)
{
        if(fabs( flFirst-flSecond )>
            dbAcc * ( fabs(flFirst) + fabs(flSecond))+dbAcc)
            return 1;      
                   
        else return 0;
        
}
/*F///////////////////////////////////////////////////////////////////////////////////////
//    Name:    atsCompSinglePrec
//    Purpose:                                                                  
//      Detailed Comparing two float arrays      
//    Context:                                                                  
//    Parameters:                                                               
//      flFirstArray - first array                                               
//      flSecondArray - second array                                             
//      lLen       - lenght of this arrays                                      
//                                                 
//    Returns:                                                                  
//      Number of nonequal elements                                           
//    Notes:                                                                    
//F*/
long atsCompSinglePrec(float* flFirstArray,
                       float* flSecondArray,
                       long lLen,
                       double dbAcc)
{
    long lErrors = 0;
    int i;
    for(i = 0; i < lLen; i++)
    {
        if(fabs( flFirstArray[i]-flSecondArray[i] )>
            dbAcc * ( fabs(flFirstArray[i]) + fabs(flSecondArray[i]))+dbAcc){
            lErrors++;
        }
        
    }
        return lErrors;
}

/*F///////////////////////////////////////////////////////////////////////////////////////
//    Name:    atsCompDoublePrec
//    Purpose:                                                                  
//      Detailed Comparing two double arrays      
//    Context:                                                                  
//    Parameters:                                                               
//      flFirstArray - first array                                               
//      flSecondArray - second array                                             
//      lLen       - lenght of this arrays                                      
//                                                 
//    Returns:                                                                  
//      Number of nonequal elements                                           
//    Notes:                                                                    
//F*/
long atsCompDoublePrec(double* flFirstArray,
                       double* flSecondArray,
                       long lLen,
                       double dbAcc)
{
    long lErrors = 0;
    int i;
    for(i = 0; i < lLen; i++)
    {
        if(fabs( flFirstArray[i]-flSecondArray[i] )>  
		   dbAcc * ( fabs(flFirstArray[i]) + fabs(flSecondArray[i]))+dbAcc)
           lErrors++;
		
      
    }
     return lErrors;
}

    

/*F///////////////////////////////////////////////////////////////////////////////////////
//    Name:    atsCompare1Dfl
//    Purpose:                                                                  
//      Comparing two 1D float array and writing results to SUM & LST files     
//    Context:                                                                  
//    Parameters:                                                               
//      flArrayAct - actual array                                               
//      flArrayExp - expected array                                             
//      lLen       - lenght of this arrays                                      
//      dbTol      - tolerable limit                                            
//    Returns:                                                                  
//      Number of differents elements                                           
//    Notes:                                                                    
//F*/

long atsCompare1Dfl( float* flArrayAct, float* flArrayExp, long lLen, double dbTol )
{
    int   i;
    long  lErrors = 0;
    
    for( i = 0; i < lLen; i++ )
    {
        if( fabs( flArrayAct[i] - flArrayExp[i] ) > dbTol )
        {
            lErrors++;
            trsWrite( ATS_LST,
                "Error: x = %d   act  %f    exp %f\n",
                i,
                flArrayAct[i],
                flArrayExp[i] );
        } /* if */
    } /* for */
    
    if( lErrors == NULL ) trsWrite( ATS_LST,
        "No errors detected for this test\n" );
    else trsWrite( ATS_SUM | ATS_LST, "Total fixed %d errors :(\n", lErrors );
    return lErrors;
} /* atsCompare1Dfl */


/*F///////////////////////////////////////////////////////////////////////////////////////
//    Name:    atsCompare2Dfl
//    Purpose:                                                                  
//      Comparing two array and writing results to SUM & LST files     
//    Context:                                                                  
//    Parameters:                                                               
//    Returns:                                                                  
//      Number of differents elements                                           
//    Notes:                                                                    
//F*/
long atsCompare2Dfl( float* ArrayAct, float* ArrayExp, CvSize size, int stride, double Tol )
{
    int   x, y;
    long  lErrors = 0;
    
    for( y = 0; y < size.height; y++, ArrayAct = (float*)((long)ArrayAct + stride), 
                                      ArrayExp = (float*)((long)ArrayExp + stride) )
        for( x = 0; x < size.width; x++ )
            if( fabs( ArrayAct[x] - ArrayExp[x] ) > Tol )
            {
                lErrors++;
                trsWrite( ATS_LST,
                    "Error: x=%d  y=%d   act  %f    exp %f\n",
                    x, y,
                    (float)ArrayAct[x],
                    (float)ArrayExp[x] );
            } /* if */
            
            if( lErrors == NULL ) trsWrite( ATS_LST,
                "No errors detected for this test\n" );
            else trsWrite( ATS_SUM | ATS_LST, "Total fixed %d errors :(\n", lErrors );
            return lErrors;
} /* atsCompare1Db */


/*F///////////////////////////////////////////////////////////////////////////////////////
//    Name:    atsCompare1Db
//    Purpose:                                                                  
//      Comparing two 1D array and writing results to SUM & LST files     
//    Context:                                                                  
//    Parameters:                                                               
//      ArrayAct - actual array                                               
//      ArrayExp - expected array                                             
//      lLen     - lenght of this arrays                                      
//      Tol      - tolerable limit                                            
//    Returns:                                                                  
//      Number of differents elements                                           
//    Notes:                                                                    
//F*/
long atsCompare1Db( uchar* ArrayAct, uchar* ArrayExp, long lLen, int Tol )
{
    int   i;
    long  lErrors = 0;
    
    for( i = 0; i < lLen; i++ )
    {
        if( abs( ArrayAct[i] - ArrayExp[i] ) > Tol )
        {
            lErrors++;
            trsWrite( ATS_LST,
                "Error: x = %d   act  %d    exp %d\n",
                i,
                (int)ArrayAct[i],
                (int)ArrayExp[i] );
        } /* if */
    } /* for */
    
    if( lErrors == NULL ) trsWrite( ATS_LST,
        "No errors detected for this test\n" );
    else trsWrite( ATS_SUM | ATS_LST, "Total fixed %d errors :(\n", lErrors );
    return lErrors;
} /* atsCompare1Db */


/*F///////////////////////////////////////////////////////////////////////////////////////
//    Name:    atsCompare2Db
//    Purpose:                                                                  
//      Comparing two array and writing results to SUM & LST files     
//    Context:                                                                  
//    Parameters:                                                               
//    Returns:                                                                  
//      Number of differents elements                                           
//    Notes:                                                                    
//F*/
long atsCompare2Db( uchar* ArrayAct, uchar* ArrayExp, CvSize size, int stride, int Tol )
{
    int   x, y;
    long  lErrors = 0;
    
    for( y = 0; y < size.height; y++, ArrayAct += stride, ArrayExp += stride )
        for( x = 0; x < size.width; x++ )
            if( abs( ArrayAct[x] - ArrayExp[x] ) > Tol )
            {
                lErrors++;
                trsWrite( ATS_LST,
                    "Error: x=%d  y=%d   act  %d    exp %d\n",
                    x, y,
                    (int)ArrayAct[x],
                    (int)ArrayExp[x] );
            } /* if */
    
    if( lErrors ) trsWrite( ATS_SUM | ATS_LST, "Total fixed %d errors :(\n", lErrors );
    return lErrors;
}


/*F///////////////////////////////////////////////////////////////////////////////////////
//    Name:    atsCompare1Dc
//    Purpose:                                                                  
//      Comparing two 1D array and writing results to SUM & LST files     
//    Context:                                                                  
//    Parameters:                                                               
//      ArrayAct - actual array                                               
//      ArrayExp - expected array                                             
//      lLen     - lenght of this arrays                                      
//      Tol      - tolerable limit                                            
//    Returns:                                                                  
//      Number of differents elements                                           
//    Notes:                                                                    
//F*/
long atsCompare1Dc( char* ArrayAct, char* ArrayExp, long lLen, int Tol )
{
    int   i;
    long  lErrors = 0;
    
    for( i = 0; i < lLen; i++ )
    {
        if( abs( ArrayAct[i] - ArrayExp[i] ) > Tol )
        {
            lErrors++;
            trsWrite( ATS_LST,
                "Error: x = %d   act  %d    exp %d\n",
                i,
                (int)ArrayAct[i],
                (int)ArrayExp[i] );
        } /* if */
    } /* for */
    
    if( lErrors ) trsWrite( ATS_SUM | ATS_LST, "Total fixed %d errors :(\n", lErrors );
    return lErrors;
} /* atsCompare1Dc */


  /*F///////////////////////////////////////////////////////////////////////////////////////
  //    Name:    atsCompare2Db
  //    Purpose:                                                                  
  //      Comparing two array and writing results to SUM & LST files     
  //    Context:                                                                  
  //    Parameters:                                                               
  //    Returns:                                                                  
  //      Number of differents elements                                           
  //    Notes:                                                                    
//F*/
long atsCompare2Dc( char* ArrayAct, char* ArrayExp, CvSize size, int stride, int Tol )
{
    int   x, y;
    long  lErrors = 0;
    
    for( y = 0; y < size.height; y++, ArrayAct += stride, ArrayExp += stride )
        for( x = 0; x < size.width; x++ )
            if( abs( ArrayAct[x] - ArrayExp[x] ) > Tol )
            {
                lErrors++;
                trsWrite( ATS_LST,
                    "Error: x=%d  y=%d   act  %d    exp %d\n",
                    x, y,
                    (int)ArrayAct[x],
                    (int)ArrayExp[x] );
            } /* if */
            
            if( lErrors ) trsWrite( ATS_SUM | ATS_LST, "Total fixed %d errors :(\n", lErrors );
            return lErrors;
}


/* End of file. */

⌨️ 快捷键说明

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