最值滤波

来源:互联网 发布:销售数据表格 编辑:程序博客网 时间:2024/06/09 15:38

1.概述

   图像增强就是采用某些技术把质量低的图像进行计算机处理,有选择的加强或者抑制图像中的某些信息,改善图像质量,提高人或机器对图像的分析与判别能力。

    图像的增强处理方法一共有两种,分别是空间域方法和频域方法,空间域方法主要是运用空间滤波对图像增强进行处理,所谓滤波,就是过滤掉图像中的一些成分,对数字图像的直接滤波就是空间滤波(相对于频率域滤波),最大值最小值滤波就是其中之一,空间滤波就是在一个淋雨里,对该邻域包围的的像素进行操作,空间滤波器又叫模板,类似于矩阵,大小有3*3模板,5*5模板,9*9模板等。

 1.1 最值滤波 

   最大最小值滤波是一种比较保守的图像处理手段,与中值滤波类似,首先要排序周围像素和中心像素值,然后将中心像素值与最小和最大像素值比较,如果比最小值小,则替换中心像素为最小值,如果中心像素比最大值大,则替换中心像素为最大值。一个Kernel矩阵为3X3的最大最小值滤波如下

 最值滤波

2调试

2.1 matlab调试结果及代码

最大值滤波可以去除图像中的暗斑,同时也会使亮斑增大;最小值滤波可以去除图像中的亮斑,同时也会增大暗斑。如下图所示:

 

MATLAB 进行最小值滤波:

 

最值滤波

MATLAB 进行最大值滤波:

最值滤波

MATLAB代码

 I=imread('D:\Administrator\MyPictures\lenagray.bmp');                      

J1=imnoise(I,'salt & pepper',0.02);         %椒盐噪声图像

J2=imnoise(I,'gaussian',0.02);              %高斯噪声图像

subplot(2,2,1),imshow(J1);                   

subplot(2,2,2),imshow(J2);                   

I1=ordfilt2(J1,9,ones(3,3))                  %椒盐噪声图像最大值滤波

I2=ordfilt2(J2,9,ones(3,3))                   %高斯噪声图像最大值滤波

              

% I1=ordfilt2(J1,1,ones(3,3))                %椒盐噪声图像最小值滤波

% I2=ordfilt2(J2,1,ones(3,3))                 %高斯噪声图像最小值滤波

 

 

subplot(2,2,3),imshow(I1);                 

subplot(2,2,4),imshow(I2);                             

2.2 ccs调试结果及代码

2.2.1 中值滤波

测试结果:

椒盐噪声图像滤波:

 

最值滤波

高斯图像滤波:

最值滤波

CCS代码:

  同时进行最小值和最大值的滤波程序:

 

#include

 

#define IMAGEWIDTH  256

#define IMAGEHEIGHT256

#define Uint8  unsignedchar

 

void ReadImage(char*cFileName);

void bmpDataPart(FILE*fpbmp);

voidConservativeFilter();

 

unsigned chargrey[IMAGEHEIGHT][IMAGEWIDTH];

 

void main()

{

 

 

  

  ReadImage("D:\\Administrator\\MyPictures\\Lena1.bmp");

  ConservativeFilter();

 

 

  while (1);                                               

}                                         

 

 

void ReadImage(char*cFileName)

{

 

 

       FILE *fp;

 

       if ( fp=fopen(cFileName,"rb" ) )

       {

          

                bmpDataPart(fp);

                            

 

               fclose(fp);

       }

}

 

void bmpDataPart(FILE*fpbmp)

{

  int i,j=0;

  unsigned char*pix=NULL;

  fseek(fpbmp, 55L,SEEK_SET);

 

  pix=(unsignedchar*)malloc(256);

 

 for(j=0;j

  {

    

       fread(pix,1, 256, fpbmp);

    for(i=0;i

       {

          

         grey[IMAGEHEIGHT-1-j][i]  =pix[i];

 

       }

 

   }

}

 

voidConservativeFilter()

{

 

 inti=0,j=0;

 intwheight=1,wwidth=1;                  //窗口大小(2*wheight+1) *(2*wwidth+1)

 intk=0,l=0;

 Uint8maxpix=0,minpix=0;

 

 for(i=0;i

  {

 

    for(j=0;j

       {

          

           if((i>wheight-1) && (iwwidth-1) &&(j

                      

                     {

             

              maxpix=minpix=grey[i-wheight][j-wwidth];

 

                      for(k=i-wheight;k<=i+wheight;k++)

                       for(l=j-wwidth;l<=j+wwidth;l++)

                        {

                             if((k!=i)&&(l!=j))

                              {

 

                                 if(maxpix

                                    maxpix = grey[k][l];

                                 if(minpix>grey[k][l])

                                    minpix = grey[k][l];

 

                   }

                }

 

                           if(maxpix

                                grey[i][j] = maxpix;

                           if(minpix>grey[i][j])

                                grey[i][j] = minpix;

 

                         

                     }

 

 

       }

 

   }

 

}

0 0