📄 pixeltopixelmorpher.cpp
字号:
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 + -