均值滤波

均值滤波也称为线性滤波,其采用的主要方法为邻域平均法。线性滤波的基本原理是用均值代替原图像中的各个像素值,即对待处理的当前像素点(x,y),选择一个模板,该模板由其近邻的若干像素组成,求模板中所有像素的均值,再把该均值赋予当前像素点(x,y),作为处理后图像在该点上的灰度值g(x,y),即g(x,y)=1/m ∑f(x,y), m为该模板中包含当前像素在内的像素总个数。这样的方法可以平滑图像,速度快,算法简单。但是无法去掉噪声,这能微弱的减弱它。

void MeanFilter(CvMat *pGrayMat, CvMat *pFilterMat, int nWidth, int nHeight, int nWindows)  

{  

    参数说明///   

    //pGrayMat:待处理图像数组  

    //pFilterMat:保存高斯滤波结果  

    //nWidth:图像宽度  

    //nHeight:图像高度  

    //nWindows:滤波窗口大小  

    if((nWindows%2) == 0)  

    {  

        MessageBox("此函数必须设置邻域为奇数矩阵");  

        return;  

    }  

    int nNumData = nWindows/2;  

    if((nWindows>nHeight) && (nWindows>nWidth))  

    {  

        MessageBox("滤波窗口超出许可范围,请检查!");  

        return;  

    }  

    for(int i=nNumData; i<(nHeight-nNumData); i++)  

    {  

        for(int j=nNumData; j<(nWidth-nNumData); j++)  

        {  

            double dData = 0.0;  

            int nNum = 0;  

            for(int m=-nNumData; m<=nNumData; m++)  

            {  

                for(int n=-nNumData; n<=nNumData; n++)  

                {  

                    if((m!=0) && (n!=0))  

                    {                     

                        dData += cvmGet(pGrayMat ,i+m, j+n);  

                        nNum++;  

                    }  

                }     

            }  

            dData /= nNum;  

            cvmSet(pFilterMat, i, j, dData);  

        }  

    }  

}  


  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值