cvmineval.cpp.svn-base

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

SVN-BASE
458
字号
\****************************************************************************************/
		icvMulDBuffers(curROI,ustep,flBufXX+roi.width,flBufXY+roi.width,flBufYY+roi.width);
        Temp = curROI.height;
        icvBlur_32f_C1R(flBufXX+roi.width,ustep,flBufXX,ustep,&curROI,stBX,stage);
        curROI.height =Temp;
        icvBlur_32f_C1R(flBufXY+roi.width,ustep,flBufXY,ustep,&curROI,stBXY,stage);
        curROI.height =Temp;
        icvBlur_32f_C1R(flBufYY+roi.width,ustep,flBufYY,ustep,&curROI,stBY,stage);
        
        /* calc values */

        icvCalcMinValues( flBufXX, flBufYY, flBufXY, roi.width,ustep,
                     eigenvv, eigenvvStep, curROI.height,denom);
        eigenvv += curROI.height * eigenvvStep/4;

    }
   
    icvFilterFree(&stX);
    icvFilterFree(&stY);
    icvFilterFree(&stBX);
    icvFilterFree(&stBY);
    icvFilterFree(&stBXY);
    return CV_NO_ERR;
}

IPCVAPI_IMPL(CvStatus, icvMinEigenVal_8s32f_C1R, ( const char* pSrc, int srcStep,
                                                  float* eigenvv, int eigenvvStep,
                                                  CvSize roi, int kerSize,
                                                  int blSize, void* pBuffer ))
{
    int RestToSobel = roi.height;
    CvSize curROI;
    int i;
    int HBuf = MAX(7,MAX(kerSize, blSize));
    /* multiplied derivatives buffers - used for bluring */
    float* flBufXX = (float*)pBuffer;
    float* flBufYY = flBufXX+(HBuf+1)*roi.width;
    float* flBufXY = flBufYY+(HBuf+1)*roi.width;
    float denom = 1;
    
    _CvConvState* stX;
    _CvConvState* stY;
    _CvConvState* stBX;
    _CvConvState* stBY;
    _CvConvState* stBXY;
    /* Step of all buffers in pixels */
    int ustep  = roi.width*sizeof(float);
    int Temp;
    char* src = (char*)pSrc;

    
    /* Check Bad Arguments */
    if((src == NULL) || (eigenvv == NULL))return CV_NULLPTR_ERR;
    if((srcStep <= 0)||(eigenvvStep <= 0))return CV_BADSIZE_ERR;
    if((roi.width <= 0)||(roi.height <= 0 )) return CV_BADSIZE_ERR;
    
    for(i = 0; i < kerSize-1;i++)denom *= 2;
    denom = denom*denom * 255*blSize*blSize;
    denom=1.0f/denom;
    curROI.width = roi.width;
    icvSobelInitAlloc(roi.width,cv8u,kerSize,CV_ORIGIN_TL,1,0,&stX);
    icvSobelInitAlloc(roi.width,cv8u,kerSize,CV_ORIGIN_TL,0,1,&stY);
    icvBlurInitAlloc(roi.width,cv32f,kerSize,&stBX);
    icvBlurInitAlloc(roi.width,cv32f,kerSize,&stBY);
    icvBlurInitAlloc(roi.width,cv32f,kerSize,&stBXY);

            
    /* Main Cycle */
    while ( RestToSobel)
    {
        int stage;
        if((RestToSobel == roi.height))
        {
            stage = CV_START;
            Temp = curROI.height = (RestToSobel<= HBuf+kerSize/2)?RestToSobel-1:HBuf+kerSize/2; 
            
        }
        else if(RestToSobel+kerSize/2+blSize/2<=HBuf)
        {
            stage = CV_END;
            Temp = curROI.height = RestToSobel;
        }
        else
        {
            stage = CV_MIDDLE;
            curROI.height = Temp = (RestToSobel<= HBuf)?RestToSobel-1:HBuf; 
                             
        }
        RestToSobel-=Temp;
        icvSobel_8s16s_C1R( src, srcStep, (short*)(flBufXX+roi.width),
                          ustep, &curROI,stX, stage);

        curROI.height =Temp;
        icvSobel_8s16s_C1R( src, srcStep, (short*)(flBufYY+roi.width),
                          ustep, &curROI,stY, stage);
        
        src += Temp * srcStep;
          
/****************************************************************************************\
*                     Multy Buffers                                                      *
\****************************************************************************************/
		icvMulDBuffers(curROI,ustep,flBufXX+roi.width,flBufXY+roi.width,flBufYY+roi.width);
        Temp = curROI.height;
        icvBlur_32f_C1R(flBufXX+roi.width,ustep,flBufXX,ustep,&curROI,stBX,stage);
        curROI.height =Temp;
        icvBlur_32f_C1R(flBufXY+roi.width,ustep,flBufXY,ustep,&curROI,stBXY,stage);
        curROI.height =Temp;
        icvBlur_32f_C1R(flBufYY+roi.width,ustep,flBufYY,ustep,&curROI,stBY,stage);
        
        /* calc values */

        icvCalcMinValues( flBufXX, flBufYY, flBufXY, roi.width,ustep,
                     eigenvv, eigenvvStep, curROI.height,denom);
        eigenvv += curROI.height * eigenvvStep/4;

    }
   
    icvFilterFree(&stX);
    icvFilterFree(&stY);
    icvFilterFree(&stBX);
    icvFilterFree(&stBY);
    icvFilterFree(&stBXY);
    return CV_NO_ERR;
}

IPCVAPI_IMPL(CvStatus, icvMinEigenVal_32f_C1R, ( const float* pSrc, int srcStep,
                                                float* eigenvv, int eigenvvStep,
                                                CvSize roi, int kerSize,
                                                int blSize, void* pBuffer ))
{
    int RestToSobel = roi.height;
    CvSize curROI;
    int HBuf = MAX(7,MAX(kerSize, blSize));
    /* multiplied derivatives buffers - used for bluring */
    float* flBufXX = (float*)pBuffer;
    float* flBufYY = flBufXX+(HBuf+1)*roi.width;
    float* flBufXY = flBufYY+(HBuf+1)*roi.width;
    
    _CvConvState* stX;
    _CvConvState* stY;
    _CvConvState* stBX;
    _CvConvState* stBY;
    _CvConvState* stBXY;
    /* Step of all buffers in pixels */
    int ustep  = roi.width*sizeof(float);
    int Temp;
    int i;
    float* src = (float*)pSrc;
    float denom = 1;
    

    
    /* Check Bad Arguments */
    if((src == NULL) || (eigenvv == NULL))return CV_NULLPTR_ERR;
    if((srcStep <= 0)||(eigenvvStep <= 0))return CV_BADSIZE_ERR;
    if((roi.width <= 0)||(roi.height <= 0 )) return CV_BADSIZE_ERR;
    for(i = 0; i < kerSize-1;i++)denom *= 2;
    denom = denom*denom * 255*blSize*blSize;
    denom=1.0f/denom;
    

    curROI.width = roi.width;
    icvSobelInitAlloc(roi.width,cv32f,kerSize,CV_ORIGIN_TL,1,0,&stX);
    icvSobelInitAlloc(roi.width,cv32f,kerSize,CV_ORIGIN_TL,0,1,&stY);
    icvBlurInitAlloc(roi.width,cv32f,blSize,&stBX);
    icvBlurInitAlloc(roi.width,cv32f,blSize,&stBY);
    icvBlurInitAlloc(roi.width,cv32f,blSize,&stBXY);

            
    /* Main Cycle */
    while ( RestToSobel)
    {
        int stage;
        if((RestToSobel == roi.height))
        {
            stage = CV_START;
            Temp = curROI.height = (RestToSobel<= HBuf+kerSize/2)?RestToSobel-1:HBuf+kerSize/2; 
            
        }
        else if(RestToSobel+kerSize/2+blSize/2<=HBuf)
        {
            stage = CV_END;
            Temp = curROI.height = RestToSobel;
        }
        else
        {
            stage = CV_MIDDLE;
            curROI.height = Temp = (RestToSobel<= HBuf)?RestToSobel-1:HBuf; 
                             
        }
        RestToSobel-=Temp;

         

        icvSobel_32f_C1R( src,srcStep,flBufXX+roi.width,
                          ustep, &curROI,stX, stage);
        curROI.height =Temp;
        icvSobel_32f_C1R( src,srcStep,flBufYY+roi.width,
                          ustep,&curROI,stY,stage);
        
        src += Temp * srcStep/4;
                
/****************************************************************************************\
*                     Multy Buffers                                                      *
\****************************************************************************************/
		icvMulDBuffers32f(curROI, flBufXX+roi.width,flBufXY+roi.width,flBufYY+roi.width);
        Temp = curROI.height;
        icvBlur_32f_C1R(flBufXX+roi.width,ustep,flBufXX,ustep,&curROI,stBX,stage);
        curROI.height =Temp;
        icvBlur_32f_C1R(flBufXY+roi.width,ustep,flBufXY,ustep,&curROI,stBXY,stage);
        curROI.height =Temp;
        icvBlur_32f_C1R(flBufYY+roi.width,ustep,flBufYY,ustep,&curROI,stBY,stage);
        
        /* calc values */

        icvCalcMinValues( flBufXX, flBufYY, flBufXY, roi.width,ustep,
                     eigenvv, eigenvvStep, curROI.height,denom);
        eigenvv += curROI.height * eigenvvStep/4;

    }
   
    icvFilterFree(&stX);
    icvFilterFree(&stY);
    icvFilterFree(&stBX);
    icvFilterFree(&stBY);
    icvFilterFree(&stBXY);
    return CV_NO_ERR;
}

⌨️ 快捷键说明

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