• 数字图像的5种增强处理



    数字图像的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;
    }
     

  • 相关阅读:
    Processing中如何记录Sketch运行时间
    交互设计算法基础(11)- Merge Sort
    交互设计算法基础(10)- Quick Sort
    交互设计算法基础(9)- Bubble Sort
    交互设计算法基础(8)- Heap Sort
    交互设计算法基础(7)- Straight Selection Sort
    交互设计算法基础(6)- Shells Sort
    交互设计算法基础(5)- Straight Insertion Sort
    ZOOM 似乎无法连接。请检查您的网络连接,然后重试。【已解决】
    Android下通过root实现对system_server中binder的ioctl调用拦截
  • 原文地址:https://www.cnblogs.com/zzkgis/p/3742621.html
Copyright © 2020-2023  润新知