dWeightSum += pdKernel[nLen+i]; } } pdTemp[y*sz.cx+x] = dDotMul/dWeightSum; } }
//y方向滤波 for(x=0; x<sz.cx;x++) { for(y=0; y<sz.cy; y++) { dDotMul = 0; dWeightSum = 0; for(i=(-nLen);i<=nLen;i++) { if((i+y)>=0 && (i+y)< sz.cy) { dDotMul += (double)pdTemp[(y+i)*sz.cx+x]*pdKernel[nLen+i]; dWeightSum += pdKernel[nLen+i]; } } pResult[y*sz.cx+x] = (unsigned char)dDotMul/dWeightSum; } }
delete []pdKernel; pdKernel = NULL;
delete []pdTemp; pdTemp = NULL;
}
// 方向导数,求梯度 void Grad(SIZE sz, LPBYTE pGray,int *pGradX, int *pGradY, int *pMag) { LONG y,x;
//x方向的方向导数 for(y=1;y<sz.cy-1;y++) { for(x=1;x<sz.cx-1;x++) { pGradX[y*sz.cx +x] = (int)( pGray[y*sz.cx+x+1]-pGray[y*sz.cx+ x-1] ); } }
//y方向方向导数 for(x=1;x<sz.cx-1;x++) { for(y=1;y<sz.cy-1;y++) { pGradY[y*sz.cx +x] = (int)(pGray[(y+1)*sz.cx +x] - pGray[(y-1)*sz.cx +x]); } }
//求梯度
//中间变量 double dSqt1; double dSqt2;
for(y=0; y<sz.cy; y++) { for(x=0; x<sz.cx; x++) { //二阶范数求梯度 dSqt1 = pGradX[y*sz.cx + x]*pGradX[y*sz.cx + x]; dSqt2 = pGradY[y*sz.cx + x]*pGradY[y*sz.cx + x]; pMag[y*sz.cx+x] = (int)(sqrt(dSqt1+dSqt2)+0.5); } } }
//非最大抑制 void NonmaxSuppress(int *pMag, int *pGradX, int *pGradY, SIZE sz, LPBYTE pNSRst) { LONG y,x; int nPos;
//梯度分量 int gx; int gy;
//中间变量 int g1,g2,g3,g4; double weight; double dTmp,dTmp1,dTmp2;
//设置图像边缘为不可能的分界点 for(x=0;x<sz.cx;x++) { pNSRst[x] = 0;
上一篇:微软靠卖软件赚钱,Google OS靠什么赚钱
下一篇:05年的经典语录之计算机科学
|