首页 > 代码库 > 图像的中值滤波处理

图像的中值滤波处理

图片

 #include<iostream>
using namespace std;
int main()
{
 int n,m,i,j,k,o,u,p,a[100][100],x[100][100],max[100][100][20],b[100][100];
 cout<<"输入矩阵行列数:"<<endl;
 cin>>n>>m;
 cout<<"输入原图像的亮度矩阵:"<<endl;
 for(i=1;i<=n;i++)
 {
  for(j=1;j<=m;j++)
  {
   cin>>a[i][j];
  }
 }
 for(k=1;k<=n;k++)
 {
  a[k][0]=a[k][1];
  a[k][m+1]=a[k][m];
 }
 for(k=1;k<=m;k++)
 {
  a[0][k]=a[1][k];
  a[n+1][k]=a[n][k];
 }
 a[0][0]=a[1][1];
 a[0][m+1]=a[1][m];
 a[n+1][0]=a[n][1];
 a[n+1][m+1]=a[n][m];
 for(i=0;i<=n-1;i++)
 {
  for(j=0;j<=m-1;j++)
  {
   for(k=1;k<=5;k++)
   {
    max[i+1][j+1][k]=0;
    for(p=i;p<=i+2;p++)
    {
     for(u=j;u<=j+2;u++)
     {
      max[i+1][j+1][k]=(a[p][u]>=max[i+1][j+1][k])?a[p][u]:max[i+1][j+1][k];
     }
    }
    if(k<=4)
    {
     for(p=i;p<=i+2;p++)
     {
      for(u=j;u<=j+2;u++)
      {
       if(max[i+1][j+1][k]==a[p][u])
       {
        b[p][u]=a[p][u];
        a[p][u]=0;
        break;
       }
      }
      if(a[p][u]==0)
      {
       break;
      }
     }
    }
    if(k==5)
    {
     x[i+1][j+1]=max[i+1][j+1][k];
    }
   }
   for(k=1;k<=5;k++)
   {
    for(p=i;p<=i+2;p++)
    {
     for(u=j;u<=j+2;u++)
     {
      if(max[i+1][j+1][k]==b[p][u])
      {
       a[p][u]=max[i+1][j+1][k];                                                              //数据的恢复
      }
     }
    }
   }
  }
 }
 cout<<"中值滤波后的新图像亮度矩阵为:"<<endl;
 for(i=1;i<=n;i++)
 {
  for(j=1;j<=m;j++)
  {
   cout<<"  "<<x[i][j];
  }
  cout<<endl;
 }
 return 0;
}