/************************************************************************/
/* double sigma = 1.0;
nR = 3
*/
/************************************************************************/
void Gauss_Smooth(uchar *pSrc, int nWidth, int nHeight,uchar* pDst)
{
// 循环控制变量
int x,y;
// 一维高斯数据滤波器
int pK[2] = {70,116};
int *pTemp = (int *)malloc(nWidth*nHeight*sizeof(int));
int Sum = 0;
int nW1 = nWidth-1;
// x方向进行滤波
for(y=0; y<nHeight; y++)
{
// 第一行
pTemp[y*nWidth] = ((int)pSrc[y*nWidth]) * pK[1]+((int)pSrc[y*nWidth+1] + 1 ) * pK[0];
for(x=1; x<nWidth-1; y++)
{
pTemp[y*nWidth + x] = (((int)pSrc[y*nWidth + x-1] + (int)pSrc[y*nWidth + x+1]) * pK[0]
+ (int)pSrc[y*nWidth + x]* pK[1])>>16;
}
// 最后一行
pTemp[y*nWidth+nW1] = ((int)pSrc[y*nWidth+nW1]) * pK[1] + ((int)pSrc[y*nWidth+nW1-1] + 1) * pK[0];
}
// y方向进行滤波
int nhW = (nHeight-1)*nWidth;
for(x=0; x<nWidth; x++)
{
// 第一列
pDst[x] = ( pTemp[x]* (pK[1]+pK[0]) +pTemp[x+nWidth]* pK[0])>>16;
for(y=1; y<nHeight-1; y++)
{
pDst[y*nWidth + x] = ((pTemp[(y-1)*nWidth + x] + pTemp[(y+1)*nWidth + x]) * pK[0]
+pTemp[y*nWidth + x]* pK[1])>>16;
}
// 最后一列
pDst[nhW+x] = (pTemp[nhW+x] * (pK[0]+pK[1])+pTemp[nhW+x-nWidth] * pK[1])>>16;
}
free(pTemp);
}
本文介绍了一种在一维图像数据上应用高斯滤波的方法,通过双通道系数进行平滑处理,实现了对输入图像的噪声抑制。该算法先在x方向上进行滤波操作,再沿y轴方向重复此过程。
967

被折叠的 条评论
为什么被折叠?



