图像均值滤波代码

    用vc实现的图像均值滤波代码的例子,需要的可以参考。其中pImg为灰度图像指针,输出均值滤波的图像将覆盖原图像,iWidth为图像的宽度,iHeight为图像的高度,size为均值滤波的模板大小。
    
    数字图像中经常含有零均值的随机噪声,可以用均值滤波的方法进行降噪处理。均值滤波也称为线性滤波,其采用的主要方法为领域平均法。线性滤波的基本原理是用均值代替原图像中的各个像素值,即对待处理的当前像素点(x,y),选择一个模板,该模板由其近邻的若干像素组成,求模板中所有像素的均值,再把该均值赋予当前像素点(x,y),作为处理后图像在该点上的灰度g(x,y),即g(x,y)=1/m ∑f(x,y) ,其中m为该模板中包含当前像素在内的像素总个数。



void AverageFilter(IMG_DATATYPE *pImg,int iWidth,int iHeight,int size)
{
    IMG_DATATYPE *pSrc = NULL;
    pSrc = new IMG_DATATYPE[iWidth * iHeight];
    int i,j,x,y,sum;

    if(pImg == NULL || pSrc == NULL || iWidth <= 0 || iHeight <= 0)
        return;

    for(i=0;i<iHeight;i++)
    {
        for(j=0;j<iWidth;j++)
        {
            sum = 0;
            for(x = -size/2;x <= size/2;x++)
                for(y = -size/2;y <= size/2;y++)
                {
                    if(i + x >= 0 && i + x < iHeight && j + y >= 0 && j + y < iWidth)
                        sum += pImg[(i + x) * iWidth + (j + y)];
                }

            pSrc[i * iWidth + j] = sum / (size * size);
        }
    }

    memcpy(pImg, pSrc, iWidth * iHeight * sizeof(IMG_DATATYPE));

    delete[] pSrc;
}


[本日志由 cnfgg 于 2009-11-10 09:49 AM 编辑]
文章来自: 本站原创
引用通告: 查看所有引用 | 我要引用此文章
Tags: vc 图像 均值滤波 代码 领域平均
相关日志:
评论: 0 | 引用: 0 | 查看次数: -
发表评论
昵 称:
密 码: 游客发言不需要密码.
内 容:
验证码: 验证码
选 项:
虽然发表评论不用注册,但是为了保护您的发言权,建议您注册帐号.