数字图像的5种增强处理 #include<iostream> #include<cmath> using namespace std; int main() { int i,j,n,m,w,a[100][100],x[100][100],max[100][100][20],b[100][100],k,p,u; cout<<"输入矩阵行列数:"; cin>>n>>m; cout<<"输入原图像的亮度矩阵"<<endl; for(i=1;i<=n;i++) { for(j=1;j<=m;j++) { cin>>a[i][j]; } } do { cout<<"选择1:罗伯特梯度锐化 2:索伯尔梯度锐化 3:均值平滑 4:拉普拉斯锐化 5:中值滤波 6:结束"<<endl; cin>>w; if(w==1) { for(i=1;i<n;i++) { for(j=1;j<m;j++) { x[i][j]=abs(a[i][j]-a[i+1][j+1])+abs(a[i+1][j]-a[i][j+1]); } } for(j=1;j<m;j++) { x[n][j]=2*abs(a[n][j]-a[n][j+1]); } for(i=1;i<n;i++) { x[i][m]=2*abs(a[i][m]-a[i+1][m]); } x[n][m]=0; for(i=1;i<=n;i++) { for(j=1;j<=m;j++) { cout<<" "<<x[i][j]; } cout<<endl; } } if(w==2) { for(i=2;i<n;i++) { for(j=2;j<m;j++) { x[i][j]=abs(a[i-1][j-1]+2*a[i-1][j]+a[i-1][j+1]-a[i+1][j-1]-2*a[i+1][j]-a[i+1][j+1])+abs(a[i-1][j+1]+2*a[i][j+1]+a[i+1][j+1]-a[i-1][j-1]-2*a[i][j-1]-a[i+1][j-1]); } } x[1][1]=abs(3*a[1][1]-3*a[2][1]+a[1][2]-a[2][2])+abs(3*a[1][2]-3*a[1][1]+a[2][2]-a[2][1]); x[1][m]=abs(a[1][m-1]+3*a[1][m]-a[2][m-1]-3*a[2][m])+abs(3*a[1][m]+a[2][m]-a[1][m-1]-3*a[2][m-1]); x[n][1]=abs(3*a[n-1][1]+a[n-1][2]-3*a[n][1]-a[n][2])+abs(a[n-1][2]+3*a[n][2]-a[n-1][1]-3*a[n][1]); x[n][m]=abs(a[n-1][m-1]+3*a[n-1][m]-a[n][m-1]-3*a[n][m])+abs(a[n-1][m]+3*a[n][m]-a[n-1][m-1]-3*a[n][m-1]); for(j=2;j<m;j++) { x[1][j]=abs(a[1][j-1]+2*a[1][j]+a[1][j+1]-a[2][j-1]-2*a[2][j]-a[2][j+1])+abs(3*a[1][j+1]+a[2][j+1]-3*a[1][j-1]-a[2][j-1]); x[n][j]=abs(a[n-1][j-1]+2*a[n-1][j]+a[n-1][j+1]-a[n][j-1]-2*a[n][j]-a[n][j+1])+abs(a[n-1][j+1]+3*a[n][j+1]-a[n-1][j-1]-3*a[n][j-1]); } for(i=2;i<n;i++) { x[i][1]=abs(3*a[i-1][m-1]+a[i-1][2]-3*a[i+1][1]-a[i+1][2])+abs(a[i-1][2]+2*a[i][2]+a[i+1][2]-a[i-1][1]-2*a[i][1]-a[i+1][1]); x[i][m]=abs(a[i-1][m-1]+3*a[i-1][m]-a[i+1][m-1]-3*a[i+1][m])+abs(a[i-1][m]+2*a[i][m]+a[i+1][m]-a[i-1][m-1]-2*a[i][m-1]-a[i+1][m-1]); } for(i=1;i<=n;i++) { for(j=1;j<=m;j++) { cout<<" "<<x[i][j]; } cout<<endl; } } if(w==3) { for(i=2;i<n;i++) { for(j=2;j<m;j++) { x[i][j]=(a[i-1][j-1]+a[i-1][j]+a[i-1][j+1]+a[i][j-1]+a[i][j]+a[i][j+1]+a[i+1][j-1]+a[i+1][j-1]+a[i+1][j]+a[i+1][j+1])/9; } } x[1][1]=(4*a[1][1]+2*a[1][2]+2*a[2][1]+a[2][2])/9; x[1][m]=(4*a[1][m]+2*a[1][m-1]+2*a[2][m]+a[2][m-1])/9; x[n][1]=(4*a[n][1]+2*a[n][2]+2*a[n-1][1]+a[n-1][2])/9; x[n][m]=(4*a[n][m]+2*a[n-1][m]+2*a[n][m-1]+a[n-1][m-1])/9; for(j=2;j<m;j++) { x[1][j]=(2*a[1][j-1]+2*a[1][j]+2*a[1][j+1]+a[2][j-1]+a[2][j]+a[2][j+1])/9; x[n][j]=(2*a[n][j-1]+2*a[n][j]+2*a[n][j+1]+a[n-1][j-1]+a[n-1][j]+a[n-1][j+1])/9; } for(i=2;i<n;i++) { x[i][1]=(2*a[i-1][1]+2*a[i][1]+2*a[i+1][1]+a[i-1][2]+a[i][2]+a[i+1][2])/9; x[i][m]=(2*a[i-1][m]+2*a[i][m]+2*a[i+1][m]+a[i-1][m-1]+a[i][m-1]+a[i+1][m-1])/9; } for(i=1;i<=n;i++) { for(j=1;j<=m;j++) { cout<<" "<<x[i][j]; } cout<<endl; } } if(w==4) { for(i=2;i<n;i++) { for(j=2;j<m;j++) { x[i][j]=a[i][j-1]+a[i][j+1]+a[i-1][j]+a[i+1][j]-4*a[i][j]; } } x[1][1]=a[1][2]+a[2][1]-2*a[1][1]; x[1][m]=a[1][m-1]+a[2][m]-2*a[1][m]; x[n][1]=a[n-1][1]+a[n][2]-2*a[n][1]; x[n][m]=a[n-1][m]+a[n][m-1]-2*a[n][m]; for(j=2;j<m;j++) { x[1][j]=a[1][j-1]+a[1][j+1]+a[2][j]-3*a[1][j]; x[n][j]=a[n][j-1]+a[n][j+1]+a[n-1][j]-3*a[n][j]; x[j][1]=a[j-1][1]+a[j+1][1]+a[j][2]-3*a[j][1]; x[j][m]=a[j-1][m]+a[j+1][m]+a[j][m-1]-3*a[j][m]; } cout<<"上述数据后经过锐化后得到的数据为以下矩阵:"<<endl<<endl; for(i=1;i<=n;i++) { for(j=1;j<=m;j++) { if(abs(x[i][j]<10)) { cout<<" "<<abs(x[i][j]); } else if(abs(x[i][j]<100)) { cout<<" "<<abs(x[i][j]); } else if(abs(x[i][j]<1000)) { cout<<" "<<abs(x[i][j]); } } cout<<endl; } } if(w==5) { 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; } } } while(w!=6); return 0; } |
转载于:https://www.cnblogs.com/zzkgis/p/3742621.html