#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;
}