【数字图像处理】图像的平滑处理

图像平滑的目的

  • 模糊:在提取较大目标前,去除太小细节,或将目标内的小间断连接起来。
  • 消除噪声:改善图像质量,降低干扰。

平滑处滤波对图像的低频分量增强,同时削弱高频分量,用于消除图像中的随机噪声,起到平滑作用。

图像平滑处理的基本方法

  • 领域平均法
  • 领域加权平均法
  • 选择式掩模法
  • 中值滤波

 

领域平均法

模板在图像上移动,模板的中心对应目标像素点,在模板范围内对目标像素点进行卷积运算(对应系数乘对应像素点),然后相加除上模板大小得到均值,这个均值就是目标像素点处理后的值。

 如图,对5行四列的图像进行3*3模板的邻域平均法处理:

邻域平均法存在的问题

抑制了高频成分,使用图像变得模糊,平滑效果不好,减少噪音的同时,损失了高频信息。
注意:模板不宜过大,因为模板越大对速度有直接影响,且模板大小越大变换后图像越模糊,特别是在边缘和细节处

优点:算法简答,计算速度快。
缺点:造成图像一定程度上的模糊。

3*3模板邻域平均法示例:

Use_ROWS:行

Use_Line:列

图像边界不处理:只处理1-----n-1。

             int count = 0;                   
                     for(int i = 1; i < Use_ROWS-1; i++)   
                    {                  
                        for(int j = 1; j < Use_Line-1; j++)
                        {               
                          //邻域平均法
                          count=0;
                          count = Image_Use[i][j]+Image_Use[i][j-1]+Image_Use[i][j+1]+Image_Use[i-1][j]+Image_Use[i-1][j-1]+Image_Use[i-1][j+1]+Image_Use[i+1][j]+Image_Use[i+1][j-1]+Image_Use[i+1][j+1];
                          Image_Use[i][j] = (int)(count/9);
                        }
                    }

邻域加权平均法

加权:系数不再全部为1。

选择式掩模法

中值滤波

中值滤波器,使用滤波器窗口包含区域的像素值的中值来得到窗口中心的像素值,本质上是一种非线性平滑滤波器。

中值滤波:抑制噪声又可以尽量保持图像细节,对滤除脉冲干扰及图像扫描噪声最为有效。不

注意:对一些细节多,特别是点,线,尖顶细节多的图像不宜采用中值滤波。

不同的窗口选择

常用窗口

 复合型中值滤波介绍

3*3模板的中值滤波处理

int cmp(const void *a,const void *b)
{
    return *(int *)a-*(int *)b;//这是从小到大排序,若是从大到小改成: return *(int *)b-*(int *)a;
}
          int temp[9],index=0;                   
                     for(int i = 1; i < Use_ROWS-1; i++)   
                    {   
                        for(int j = 1; j < Use_Line-1; j++)
                        { 
                          //中值滤波
                          memset(temp, 0, sizeof(temp));
                          temp[index]=Image_Use[i][j];
                          temp[index+1]=Image_Use[i-1][j];
                          temp[index+2]=Image_Use[i-1][j-1];
                          temp[index+3]=Image_Use[i-1][j+1];
                          temp[index+4]=Image_Use[i][j-1];
                          temp[index+5]=Image_Use[i][j+1];
                          temp[index+6]=Image_Use[i+1][j];
                          temp[index+7]=Image_Use[i+1][j-1];
                          temp[index+8]=Image_Use[i+1][j+1];
                          qsort(temp,9,sizeof(temp[0]),cmp);//(数组,需要排序的数字个数,单个数字所占内存大小,比较函数)
                          Image_Use[i][j] = temp[4];

                        }
                    }

          

猜你喜欢

转载自www.cnblogs.com/-wenli/p/11504029.html