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

转载于:https://www.cnblogs.com/zzkgis/p/3742621.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/575445.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

css中标签显示模式、块元素、行内元素、行内块元素、显示模式转换

标签显示模式display: HTML标签一般分为块标签&#xff08;块元素&#xff1a;block-level&#xff09;和行内标签&#xff08;行内元素&#xff1a;inline-level&#xff09;两种类型&#xff0c;但是还有第三种说法行内块元素&#xff1a;table-row-group&#xff1a;设置元…

mysql 介绍 怎么下载 驱动jar包 各种细节问题大详解

对碰到的问题做个记录总结。 1 MySQL 的官网下载地址&#xff1a;http://www.mysql.com/downloads/版本说明。 1. MySQL Community Server 社区版本&#xff0c;开源免费&#xff0c;但不提供官方技术支持。 2. MySQL Enterprise Edition 企业版本&#xff0c;需付费&#xff…

css书写规范、行高

css书写规范&#xff1a; 空格规范&#xff1a; 选择器与花括号{之间必须包含空格&#xff0c;属性冒号&#xff1a;后面和属性值必须包含空格 .text {font-size: 16px;}选择器规范&#xff1a; 当有多个选择器同时出现时&#xff0c;每个选择器必须独占一行 .box,.nav,.mai…

CSS中的层叠性、继承性、优先级、权重

css三大特性&#xff1a; 三大特性&#xff1a;层叠性、继承性、优先级 层叠性&#xff1a; 指多种css样式的叠加&#xff0c;是浏览器处理多种css样式冲突的能力&#xff0c;如果给一个元素通过不同或者相同的选择器设置相同的属性但属性值不同时&#xff0c;权重相同的情况…

Nifi 怀疑出个bug 流程中的实时数据结果痕迹没有不是实时的,是之前的。以及相应解决办法。

1 在 Nifi 中做数据处理&#xff0c;有一个半小时之前执行过的流程&#xff0c;因为没设置好执行的时间&#xff0c;结果把读的数据库的表持续读成数据流 流到文件里&#xff0c;结果生成大量文件&#xff0c;一个文件就存着一张表的结果。 2 然后过了三十分钟吧&#xff0c;…

There is insufficient memory for the Java Runtime Environment to continue. NIFI 启动时报 jvm内存溢出

Nifi 突然启动报错。之前正常&#xff0c;停了两天再起就jj了。。 Nifi 解压路径还有log文件夹&#xff0c; 里面有各种日志文件可看。他把错误集中另存为了一个文件&#xff1a; 打开里面一通查看&#xff0c;调整。描述是java的运行环境jvm内存超出了&#xff0c;帖子…

CSS中盒子模型、嵌套盒子中垂直外边距塌陷问题解决方案、标准盒模型、怪异盒模型

盒子模型&#xff08;Box Model&#xff09;&#xff1a; 指把HTML页面中的元素看作是一个矩形的盒子&#xff0c;也称容器&#xff0c;这个盒子从内到外由&#xff1a;元素的内容&#xff08;content&#xff09;、内边距&#xff08;padding&#xff09;、边框&#xff08;b…

servlet/filter/listener/interceptor区别与联系(转)

由于最近两个月工作比较清闲&#xff0c;个人也比较“上进”&#xff0c;利用工作空余时间&#xff0c;也继续学习了一下&#xff0c;某天突然想起struts2和struts1的区别的时候&#xff0c;发现为什么struts1要用servlet&#xff0c;而struts2要用filter呢&#xff1f;一时又发…

Eclipse和IDEA 简单对比说明

Eclipse和IDEA Eclipse 当下最流行的IDE&#xff08;集成开发环境&#xff09;当属eclipse和idea莫属&#xff0c;不少新手都在问这两个ide哪个更好&#xff0c;今天给大家说一下自己这些年来使用这两款开发环境的心得。 一般情况下&#xff0c;问这个问题大多是新手&#xff0…

CSS中文档流之普通流,浮动及定位、浮动特性及清除浮动的方式、定位模式,子绝父相搭配定位方式、z-index层级

文档流&#xff1a; 普通流&#xff08;normal flow&#xff09;&#xff1a; 字面意思是普通流或者标准流&#xff0c;也就是常说的文档流&#xff0c;指网页内标签正常是从上到下&#xff0c;从左到右排列的意思&#xff0c;css的定位机制有3种&#xff1a;普通流&#xff…

VScode中常用element语法

Element语法&#xff1a; 熟练掌握element语法可以大大提高开发效率&#xff0c;建议在平时练习时留意element语法&#xff0c;下面是常用VScode中element语法&#xff1a; 1、快速生成HTML骨架&#xff1a;!Enter或Tab键 2、快速生成带有id或者class名的标签&#xff1a;标签…

jQuery Tools:Web开发必备的 jQuery UI 库

基本介绍 jQuery Tools 是基于 jQuery 开发的网站界面库&#xff0c;包含网站最常用的Tabs&#xff08;选项卡&#xff09;、Tooltip&#xff08;信息提示&#xff09;、Overlay&#xff08;遮罩、弹窗&#xff09;、Scrollable&#xff08;滚动控制&#xff09;、Form Validat…

控制元素显示和隐藏的方式及区别、内容溢出处理(区域滚动)、透明性、字体图标、常见字体、自定义字体设计、网站图标、CSS代码分析

元素的显示与隐藏&#xff1a; 常见控制元素的显示和隐藏的属性有display、visibility、overflow&#xff0c;需要清楚的理解三者之间的区别。 display显示&#xff1a; 当值为none时为销毁对象&#xff0c;不保留原位置&#xff0c;当值为block时为生成对象。 visibility可…

html5中Canvas、绘制线条模糊、常见绘制工具、绘制基本图形、绘制图片、面向对象的方式绘制图形图片、绘制文本、帧动画绘制

Canvas容器: canvas标签用来定义图像的容器&#xff0c;必须配合脚本来绘制图像&#xff0c;canvas也运用于游戏开发。注意&#xff1a;canvas绘制图时会出现线条模糊情况&#xff0c;这是因为显示屏像素和canvas中定义的一个点不完全重合&#xff08;相差0.5&#xff09;导致…

MySQL INFORMATION_SCHEMA 使用

一、INFORMATION_SCHEMA介绍 第一个查询看看库里有多少个表&#xff0c;表名等select * from INFORMATION_SCHEMA.TABLES information_schema这张数据表保存了MySQL服务器所有数据库的信息。如数据库名&#xff0c;数据库的表&#xff0c;表栏的数据类型与访问权限等。再简单点…

mrql初级教程-使用(er)

最近使用mrql做xml文件解析&#xff0c;使用xpath来进行判断使用的方法如下&#xff0c;其中t.mrql文件如下&#xff1a;v args[1];store ty:source(xml,args[0],{"page"},xpath(.[idID6]/place));ty;执行下面的命令mrql -local t.mrql hdfs://183.175.12.220:9010/u…

web Worker简介、web Worker报错分析、作用

web Worker&#xff1a; web Worker是运行在后台的javascript&#xff0c;不会影响性能&#xff0c;常用于高耗费CPU的任务&#xff0c;必须部署到线上才可以正常使用&#xff0c;这里有三个方法比较重要&#xff0c;需要注意&#xff1a; postMessage(),发送消息&#xff0c…

SSE事件作用,错误分析

Server-Sent&#xff08;SSE&#xff09;&#xff1a; server sent用于自动接收服务器更新&#xff0c;当服务器发生数据更新时&#xff0c;此事件将自动执行来更新页面数据&#xff0c;常用于博文、股价等不断变化的项目中。下面将简单介绍SSE中三个常用事件&#xff1a; on…

css3盒模型、过渡、转换介绍

CSS3中盒模型&#xff1a; 前面CSS中学到的盒子模型给padding、border会撑开盒子的大小&#xff0c;实际大小要通过计算才能得到&#xff0c;为了解决这个问题&#xff0c;CSS3推出了box-sizing属性来解决此问题&#xff0c;当box-sizing的属性值为border-box时&#xff0c;无…

css3中animation动画、浏览器私有前缀、文字阴影、滤镜

animation动画&#xff1a; 可以设置多个节点来控制一个或 一组动画&#xff0c;动画可以实现更多变化&#xff0c;更多控制&#xff0c;连续自动播放等效果。动画的使用分两步&#xff1a;1、定义动画 2、调用动画&#xff08;调用必须写调用名称和持续时间)&#xff0c;其属…