|
g4 = pMag[nPos-1];
//如果x,y两个方向的方向导数符号相同 //当前像素C与 g1-g4的关系为 // g3 // g4 C g2 // g1 if(gx * gy > 0) { g1 = pMag[nPos+sz.cx+1]; g3 = pMag[nPos-sz.cx-1]; } //如果x,y两个方向导数的方向相反 // C与g1-g4的关系为 // g1 // g4 C g2 // g3 else { g1 = pMag[nPos-sz.cx+1]; g3 = pMag[nPos+sz.cx-1]; } }
//利用 g1-g4 对梯度进行插值 { dTmp1 = weight*g1 + (1-weight)*g2; dTmp2 = weight*g3 + (1-weight)*g4;
//当前像素的梯度是局部的最大值 //该点可能是边界点 if(dTmp>=dTmp1 && dTmp>=dTmp2) { pNSRst[nPos] = 128; } else { //不可能是边界点 pNSRst[nPos] = 0; } } } } } }
// 统计pMag的直方图,判定阈值 void EstimateThreshold(int *pMag, SIZE sz, int *pThrHigh, int *pThrLow, LPBYTE pGray, double dRatHigh, double dRatLow) { LONG y,x,k;
//该数组的大小和梯度值的范围有关,如果采用本程序的算法 //那么梯度的范围不会超过pow(2,10) int nHist[256];
//可能边界数 int nEdgeNum;
//最大梯度数 int nMaxMag;
int nHighCount;
nMaxMag = 0;
//初始化 for(k=0;k<256;k++)
上一篇:微软靠卖软件赚钱,Google OS靠什么赚钱
下一篇:05年的经典语录之计算机科学
|