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

📄 pixeltopixelmorpher.cpp

📁 微软的基于HMM的人脸识别原代码, 非常经典的说
💻 CPP
📖 第 1 页 / 共 4 页
字号:
            temp1 = rightPixel->green - IlMaxGreen;
            temp2 = IlMinGreen - rightPixel->green;
            DrGreen = MAX3( 0, temp1, temp2 );
            // Blue
            temp1 = leftPixel->blue - IrMaxBlue;
            temp2 = IrMinBlue - leftPixel->blue;
            DlBlue = MAX3( 0, temp1, temp2 );
            temp1 = rightPixel->blue - IlMaxBlue;
            temp2 = IlMinBlue - rightPixel->blue;
            DrBlue = MAX3( 0, temp1, temp2 );

        } // case -2
        break;
    case 2: // xState = -1, yState = 1
        {
            // Red
            temp2 = ( (leftPixel + 1)->red + leftPixel->red ) >> 1;
            IlMaxRed = MAX2( leftPixel->red, temp2 );
            IlMinRed = MIN2( leftPixel->red, temp2 );
            temp1 = ( (rightPixel - 1)->red + rightPixel->red ) >> 1;
            IrMaxRed = MAX2( rightPixel->red, temp1 );
            IrMinRed = MIN2( rightPixel->red, temp1 );
            // Green
            temp2 = ( (leftPixel + 1)->green + leftPixel->green ) >> 1;
            IlMaxGreen = MAX2( leftPixel->green, temp2 );
            IlMinGreen = MIN2( leftPixel->green, temp2 );
            temp1 = ( (rightPixel - 1)->green + rightPixel->green ) >> 1;
            IrMaxGreen = MAX2( rightPixel->green, temp1 );
            IrMinGreen = MIN2( rightPixel->green, temp1 );
            // Blue
            temp2 = ( (leftPixel + 1)->blue + leftPixel->blue ) >> 1;
            IlMaxBlue = MAX2( leftPixel->blue, temp2 );
            IlMinBlue = MIN2( leftPixel->blue, temp2 );
            temp1 = ( (rightPixel - 1)->blue + rightPixel->blue ) >> 1;
            IrMaxBlue = MAX2( rightPixel->blue, temp1 );
            IrMinBlue = MIN2( rightPixel->blue, temp1 );

            // Red
            temp1 = leftPixel->red - IrMaxRed;
            temp2 = IrMinRed - leftPixel->red;
            DlRed = MAX3( 0, temp1, temp2 );
            temp1 = rightPixel->red - IlMaxRed;
            temp2 = IlMinRed - rightPixel->red;
            DrRed = MAX3( 0, temp1, temp2 );
            // Green
            temp1 = leftPixel->green - IrMaxGreen;
            temp2 = IrMinGreen - leftPixel->green;
            DlGreen = MAX3( 0, temp1, temp2 );
            temp1 = rightPixel->green - IlMaxGreen;
            temp2 = IlMinGreen - rightPixel->green;
            DrGreen = MAX3( 0, temp1, temp2 );
            // Blue
            temp1 = leftPixel->blue - IrMaxBlue;
            temp2 = IrMinBlue - leftPixel->blue;
            DlBlue = MAX3( 0, temp1, temp2 );
            temp1 = rightPixel->blue - IlMaxBlue;
            temp2 = IlMinBlue - rightPixel->blue;
            DrBlue = MAX3( 0, temp1, temp2 );

        } // case 2
        break;
    case -4: // xState = -1, yState = -1
        {
            // Red
            temp2 = ( (leftPixel + 1)->red + leftPixel->red ) >> 1;
            IlMaxRed = MAX2( leftPixel->red, temp2 );
            IlMinRed = MIN2( leftPixel->red, temp2 );
            temp2 = ( (rightPixel + 1)->red + rightPixel->red ) >> 1;
            IrMaxRed = MAX2( rightPixel->red, temp2 );
            IrMinRed = MIN2( rightPixel->red, temp2 );
            // Green
            temp2 = ( (leftPixel + 1)->green + leftPixel->green ) >> 1;
            IlMaxGreen = MAX2( leftPixel->green, temp2 );
            IlMinGreen = MIN2( leftPixel->green, temp2 );
            temp2 = ( (rightPixel + 1)->green + rightPixel->green ) >> 1;
            IrMaxGreen = MAX2( rightPixel->green, temp2 );
            IrMinGreen = MIN2( rightPixel->green, temp2 );
            // Blue
            temp2 = ( (leftPixel + 1)->blue + leftPixel->blue ) >> 1;
            IlMaxBlue = MAX2( leftPixel->blue, temp2 );
            IlMinBlue = MIN2( leftPixel->blue, temp2 );
            temp2 = ( (rightPixel + 1)->blue + rightPixel->blue ) >> 1;
            IrMaxBlue = MAX2( rightPixel->blue, temp2 );
            IrMinBlue = MIN2( rightPixel->blue, temp2 );

            // Red
            temp1 = leftPixel->red - IrMaxRed;
            temp2 = IrMinRed - leftPixel->red;
            DlRed = MAX3( 0, temp1, temp2 );
            temp1 = rightPixel->red - IlMaxRed;
            temp2 = IlMinRed - rightPixel->red;
            DrRed = MAX3( 0, temp1, temp2 );
            // Green
            temp1 = leftPixel->green - IrMaxGreen;
            temp2 = IrMinGreen - leftPixel->green;
            DlGreen = MAX3( 0, temp1, temp2 );
            temp1 = rightPixel->green - IlMaxGreen;
            temp2 = IlMinGreen - rightPixel->green;
            DrGreen = MAX3( 0, temp1, temp2 );
            // Blue
            temp1 = leftPixel->blue - IrMaxBlue;
            temp2 = IrMinBlue - leftPixel->blue;
            DlBlue = MAX3( 0, temp1, temp2 );
            temp1 = rightPixel->blue - IlMaxBlue;
            temp2 = IlMinBlue - rightPixel->blue;
            DrBlue = MAX3( 0, temp1, temp2 );

        } // case -4
        break;
    case 4: // xState = 1, yState = 1
    default:
        {
            // Red
            temp1 = ( (leftPixel - 1)->red + leftPixel->red ) >> 1;
            IlMaxRed = MAX2( leftPixel->red, temp1 );
            IlMinRed = MIN2( leftPixel->red, temp1 );
            temp1 = ( (rightPixel - 1)->red + rightPixel->red ) >> 1;
            IrMaxRed = MAX2( rightPixel->red, temp1 );
            IrMinRed = MIN2( rightPixel->red, temp1 );
            // Green
            temp1 = ( (leftPixel - 1)->green + leftPixel->green ) >> 1;
            IlMaxGreen = MAX2( leftPixel->green, temp1 );
            IlMinGreen = MIN2( leftPixel->green, temp1 );
            temp1 = ( (rightPixel - 1)->green + rightPixel->green ) >> 1;
            IrMaxGreen = MAX2( rightPixel->green, temp1 );
            IrMinGreen = MIN2( rightPixel->green, temp1 );
            // Blue
            temp1 = ( (leftPixel - 1)->blue + leftPixel->blue ) >> 1;
            IlMaxBlue = MAX2( leftPixel->blue, temp1 );
            IlMinBlue = MIN2( leftPixel->blue, temp1 );
            temp1 = ( (rightPixel - 1)->blue + rightPixel->blue ) >> 1;
            IrMaxBlue = MAX2( rightPixel->blue, temp1 );
            IrMinBlue = MIN2( rightPixel->blue, temp1 );

            // Red
            temp1 = leftPixel->red - IrMaxRed;
            temp2 = IrMinRed - leftPixel->red;
            DlRed = MAX3( 0, temp1, temp2 );
            temp1 = rightPixel->red - IlMaxRed;
            temp2 = IlMinRed - rightPixel->red;
            DrRed = MAX3( 0, temp1, temp2 );
            // Green
            temp1 = leftPixel->green - IrMaxGreen;
            temp2 = IrMinGreen - leftPixel->green;
            DlGreen = MAX3( 0, temp1, temp2 );
            temp1 = rightPixel->green - IlMaxGreen;
            temp2 = IlMinGreen - rightPixel->green;
            DrGreen = MAX3( 0, temp1, temp2 );
            // Blue
            temp1 = leftPixel->blue - IrMaxBlue;
            temp2 = IrMinBlue - leftPixel->blue;
            DlBlue = MAX3( 0, temp1, temp2 );
            temp1 = rightPixel->blue - IlMaxBlue;
            temp2 = IlMinBlue - rightPixel->blue;
            DrBlue = MAX3( 0, temp1, temp2 );

        } // case 4
    } // switch( state )

    DRed = MIN2( DlRed, DrRed );
    DGreen = MIN2( DlGreen, DrGreen );
    DBlue = MIN2( DlBlue, DrBlue );
    //DRed = MAX2( DlRed, DrRed );
    //DGreen = MAX2( DlGreen, DrGreen );
    //DBlue = MAX2( DlBlue, DrBlue );

    dist = MAX3( DRed, DGreen, DBlue );
    //dist = ( DRed + DGreen + DBlue ) / 3;
    //dist = ( DRed + DGreen + DBlue ) + MAX3( DRed, DGreen, DBlue );
    //dist = DRed;

    return dist;
}

bool  CCvPixelToPixelMorpher::OnCalculateStereo()
{
    CvSize imageSizeLeft = GetImageSize( m_left_img ),
           imageSizeRight = GetImageSize( m_right_img );

    if( ( imageSizeLeft.width != imageSizeRight.width )
        || ( imageSizeLeft.height != imageSizeRight.height ) )
    {
        return false;
    }

    if( m_corr ) {
        free( m_corr );
        m_corr = NULL;
    }
    m_corr = corrAlloc( m_left_img -> width,
        m_left_img -> height,
        CORR_ARRAY );
    if( m_corrNum ) {
        free( m_corrNum );
        m_corrNum = NULL;
    }
    m_corrNum = corrAlloc( m_left_img -> width,
        m_right_img -> height,
        NUM_CORR_ARRAY );

    // Find correspondence for full image and store it to corr array
    FindFullCorr( ( unsigned char* )m_left_img -> imageData,
                  m_left_img -> widthStep,
                  ( unsigned char* )m_right_img -> imageData,
                  m_right_img -> widthStep,
                  m_corr,
                  m_corrNum,
                  m_left_img -> width,
                  m_left_img -> height,
                  m_maxPixelDifference
                );

    m_isStereoReady = true;

    return true;
}

bool  CCvPixelToPixelMorpher::OnCalculateVirtualImage()
{
    // Output image to ResultImage window
    Morph( ( unsigned char* )m_left_img -> imageData,
           m_left_img ->widthStep,
           ( unsigned char* )m_right_img -> imageData,
           m_right_img -> widthStep,
           ( unsigned char* )m_virtual_img -> imageData,
           m_virtual_img -> widthStep,
           m_corr,
           m_corrNum,
           m_left_img -> width,
           m_left_img -> height,
           m_pan );

    m_isVirtualImageReady = true;

    return true;
}

bool  CCvPixelToPixelMorpher::OnCalculateDisparity()
{
    Morph( ( unsigned char* )m_left_img -> imageData,
           m_left_img ->widthStep,
           ( unsigned char* )m_right_img -> imageData,
           m_right_img -> widthStep,
           ( unsigned char* )m_disparity_img -> imageData,
           m_disparity_img -> widthStep,
           m_corr,
           m_corrNum,
           m_left_img -> width,
           m_left_img -> height,
           m_pan,
           morphDepthMap,
           m_maxPixelDifference );

    return true;
}

bool  CCvPixelToPixelMorpher::OnCalculateDisparityImage()
{
    Morph( ( unsigned char* )m_left_img -> imageData,
           m_left_img ->widthStep,
           ( unsigned char* )m_right_img -> imageData,
           m_right_img -> widthStep,
           ( unsigned char* )m_disparity_img -> imageData,
           m_disparity_img -> widthStep,
           m_corr,
           m_corrNum,
           m_left_img -> width,
           m_left_img -> height,
           m_pan,
           morphDepthMap,
           m_maxPixelDifference );

    return true;
}

CCvPixelToPixelMorpher::CCvPixelToPixelMorpher()
{
    m_maxPixelDifference = MAX_DIFFERENCE;
    m_corr = m_corrNum = 0;
    m_isStereoReady = false;
    m_isVirtualImageReady = false;
    m_isDisparityReady = false;
    //m_isDisparityImageReady = false;
}

⌨️ 快捷键说明

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