cvcorner.cpp.svn-base
来自「非结构化路识别」· SVN-BASE 代码 · 共 517 行 · 第 1/2 页
SVN-BASE
517 行
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_8u16s_C1R( src, srcStep, (short*)(flBufXX+roi.width),
ustep, &curROI,stX, stage);
curROI.height =Temp;
icvSobel_8u16s_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 */
icvCalcValues( 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, icvEigenValsVecs_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 = 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 */
icvCalcValues( 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, icvEigenValsVecs_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 */
icvCalcValues( 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;
}
/* End of file */
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?