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


数字图像的5种增强处理,布布扣,bubuko.com

时间: 2024-10-23 10:55:06

数字图像的5种增强处理的相关文章

Spring(七)Spring中的四种增强和顾问

Spring中的四种增强有那四种? 前置增强    后置增强  环绕增强  异常增强 先编写接口和实体类  ISomeService和SomeServiceImpl package demo10; /** * Created by mycom on 2018/3/8. */ public interface ISomeService { public void doSome(); } package demo10; /** * Created by mycom on 2018/3/8. */ p

JDK及CGLIB动态代理-AOP4种增强

动态代理 AOP底层实现:有接口自动应用的就是JDK动态代理(1).JDK 在运行时运行时注入本质:在内存中构建出接口的实现类特点:被代理对象,必须有接口 实例: import java.lang.reflect.InvocationHandler; import java.lang.reflect.Method; import java.lang.reflect.Proxy; public class Test { public static void main(String[] args)

【Spring】AOP之5种增强方法应用范例

林炳文Evankaka原创作品.转载请注明出处http://blog.csdn.net/evankaka Spring AOP 提供了 5 种类型的通知,它们分别是 Before Advice(前置通知).After Returning Advice(后置通知).Interception Around Advice(周围通知).Throws Advice(异常通知)和 Introduction Advice(引介通知).下面分别进行介绍. 1.前置通知(前置增强) 前置通知顾名思意,该通知织入在

Sping(七)Sping四种增强和顾问

前置增强    后置增强  环绕增强  异常增强 先编写接口和实体类  ISomeService和SomeServiceImpl package demo10; /** * Created by mycom on 2018/3/8. */ public interface ISomeService { public void doSome(); } package demo10; /** * Created by mycom on 2018/3/8. */ public class SomeSe

C#数字图像处理的3种方法

本文主要通过彩色图象灰度化来介绍C#处理数字图像的3种方法,Bitmap类.BitmapData类和Graphics类是C#处理图像的的3个重要的类. Bitmap只要用于处理由像素数据定义的图像的对象,主要方法和属性如下: GetPixel方法和SetPixel方法,获取和设置一个图像的指定像素的颜色. PixelFormat属性,返回图像的像素格式. Palette属性,获取或折纸图像所使用的颜色调色板. Height属性和Width属性,返回图像的高度和宽度. LockBits方法和Unl

spring中的增强类型

在spring中有两种增强方式:XML配置文件和注解配置.下面一次为大家讲解. 使用的是Aspectj第三方框架 纯POJO (在XML中配置节点) 使用@AspectJ,首先要保证所用的JDK 是5.0或以上版本 1)首先,创建一个切入点MyAspect,代码如下: 1 public class MyAspect { 2 // 前置通知 3 public void myBefore() { 4 System.out.println("这是前置增强"); 5 } 6 //前置通知带参

(spring-第17回【AOP基础篇】) 创建增强类

一.   增强类包含的信息: a)   横切逻辑(插入的具体代码) b)   部分连接点信息(在方法的哪个位置插入代码,比如方法前.方法后等). 二.   增强的类型 每一种增强有一个需要实现的增强类. a)   前置增强 顾名思义,在目标方法前实施增强. 增强类:org.springframework.aop.MethodBeforeAdvice. 举例,三步走: 1)   第一步,创建目标类接口和目标类: 2)   第二步,实现MethodBeforeAdvice,创建增强类: 3)   第

Spring学习(二十五)Spring AOP之增强介绍

课程概要: Spring AOP的基本概念 Spring AOP的增强类型 Spring AOP的前置增强 Spring AOP的后置增强 Spring AOP的环绕增强 Spring AOP的异常抛出增强 Spring AOP的引介增强 一.Spring AOP增强的基本概念 Spring当中的专业术语-advice,翻译成中文就是增强的意思. 所谓增强,其实就是向各个程序内部注入一些逻辑代码从而增强原有程序的功能. 二.Spring AOP的增强类型 首先先了解一下增强接口的继承关系 如上图

IT公司中最流行的10种编程语言

http://tech.chinaunix.net/a2011/0428/1184/000001184007.shtml 导读:近日bcahub.shareittips.com作者Akash Padhiyar发布了一篇题为"10 Popular Programming Languages In IT Companies"的文章,译文如下: 1. C语言 C语言是一种通用性的编程语言,由Dennis Ritchie于1969年-1973年间在贝尔实验室为Unix操作系统而开发. 尽管C语