Roberts 算子
Roberts 算子计算交叉差分,取两种差分的较大值:
// Roberts 算子
// 1. pImageData 图像数据
// 2. nWidth 图像宽度
// 3. nHeight 图像高度
// 4. nWidthStep 图像行大小
BOOL Roberts(unsigned char *pImageData, int nWidth, int nHeight, int nWidthStep)
{
int i = 0;
int j = 0;
int nDx = 0;
int nDy = 0;
int nValue = 0;
unsigned char *pLine[2 = { NULL, NULL };
for (j = 0; j < nHeight - 1; j++)
{
pLine[0 = pImageData + nWidthStep * j;
pLine[1 = pImageData + nWidthStep * (j + 1);
for (i = 0; i < nWidth - 1; i++)
{
nDx = abs(pLine[0][i - pLine[1][i+1]);
nDy = abs(pLine[1][i - pLine[0][i+1]);
nValue = nDx > nDy ? nDx : nDy;
pLine[0][i-1 = (unsigned char) nValue;
}
}
return TRUE;
}
Roberts 检测效果:
// Roberts 算子
// 1. pImageData 图像数据
// 2. nWidth 图像宽度
// 3. nHeight 图像高度
// 4. nWidthStep 图像行大小
BOOL Roberts(unsigned char *pImageData, int nWidth, int nHeight, int nWidthStep)
{
int i = 0;
int j = 0;
int nDx = 0;
int nDy = 0;
int nValue = 0;
unsigned char *pLine[2 = { NULL, NULL };
for (j = 0; j < nHeight - 1; j++)
{
pLine[0 = pImageData + nWidthStep * j;
pLine[1 = pImageData + nWidthStep * (j + 1);
for (i = 0; i < nWidth - 1; i++)
{
nDx = abs(pLine[0][i - pLine[1][i+1]);
nDy = abs(pLine[1][i - pLine[0][i+1]);
nValue = nDx > nDy ? nDx : nDy;
pLine[0][i-1 = (unsigned char) nValue;
}
}
return TRUE;
}
Roberts 检测效果: