根据java综合图像管理课程教学设计.doc

收藏

编号:2614236    类型:共享资源    大小:2.66MB    格式:DOC    上传时间:2020-04-24
8
金币
关 键 词:
根据 依据 java 综合 图像 图象 管理 课程 教学 设计
资源描述:
.- 成成 绩绩 评评 定定 表表 学生姓名**班级学号****** 专 业通信工程课程设计题目 基于 JAVA 的综合图像处 理的设计与实现 评 语 组长签字: 成绩 日期 20 年 月 日 .- 课程设计任务书课程设计任务书 学 院信息科学与工程学院专 业通信工程 学生姓名 *** 班级学号 **** 课程设计题目 基于 JAVA 的综合图像处理的设计与实现 实践教学要求与任务实践教学要求与任务: : 1、熟悉综合图像处理的基本原理 2、熟悉 Java 的环境 3、在 Java 环境中仿真实现综合图像处理 4、运行、调试综合图像处理 5、对综合图像处理进行结果验证及分析 工作计划与进度安排工作计划与进度安排: : 12 月 1 日熟悉设计任务、查阅资料、进行原理分析及可行性论证 12 月 2 日~3 日在 Java 环境中仿真实现综合图像处理 12 月 4 日验收、答辩、提交报告 指导教师: 201 年 月 日 专业负责人: 201 年 月 日 学院教学副院长: 201 年 月 日 .- 目 录 1 背景及意义 .............................................................1 2 设计原理及设计方案 .....................................................2 2.1 图像增强 ............................................................2 2.1.1 图像平滑处理.....................................................2 2.1.2 图像锐化处理.....................................................3 2.2 边缘检测 ............................................................5 3 设计过程 ...............................................................6 3.1 对图像进行平滑处理 ..................................................6 3.2 对图像进行锐化处理 ..................................................7 3.3 对图像进行边缘检测 ..................................................7 4 结论 ...................................................................8 参考文献 ..................................................................9 附录:程序源代码 .........................................................10 .- 1 背景及意义 图形图像信息是人类获得外界信息的主要来源,因为大约有 70%的信息是通过人眼 获得的,而人眼获得的都是图形图像信息。在近代科学研究、军事技术、工农业生产、 医学、气象及天文学领域中,人们越来越多地利用图形图像信息来认识和判断事物, 解决实际问题。本设计能实现基本的绘画功能以及图形图像的基本编辑。 本文是基于 Java 图形图像处理软件,Java 编程语言是一种跨平台的编程语言,在 编写图形用户界面方面,也要支持跨平台功能。为此 Java 提供了强大而丰富的 AWT 包和 Swing 包,使得 Java 功能越来越强大,界面越来越美观。Java 图形图像用户界面 的编写普遍采用构件化思想来进行,AWT 和 Swing 本身提供的也是许多标准的构件和 容器。本软件将所学的理论知识与实际应用相结合,运用 Java 编程语言,实现读入图 片、滤镜处理功能、边缘处理功能、图像还原功能,以达到图形处理的目的。 课题研究的目的及意义 随着科学技术的不断发展,计算机的更新速度不断提高,人们的思想文化素质的 提高,对图形图像的要求也越来越高。因此把原始图形图像与计算机结合起来,从而 创作出许多更加完美的图像,满足人们的需求,计算机图形图像处理,是指利用计算 机对图像图像进行一系列加工,以便获得人们所需要的效果。图形图像是人们获取和 交换信息的主要来源,人类感知外界信息,80%以上是通过视觉得到的。因此,图形 图像处理的应用领域必然涉及到人类生活和工作的方方面面。图形图像是用各种观测 系统以不同形式和手段观测客观世界而产生视知觉的实体。比如人的视觉就是以观测 系统,通过它得到的图形图像就是客观景物在人心目中形成的影像。视觉是人类观察 世界、认知世界的重要功能手段。图形图像带有大量的信息,为此开发这个图形图像 处理软件,能过处理一些图形图像,并对图形图像处理技术此方面进行深入的研究。 .- 2 设计原理及设计方案 2.1 图像增强 图像增强作为最基本的图像处理技术,其目的是对图像进行加工,已得到对具体 应用来说视觉效果更好更有用的图像。由于具体应用的目的和要求不同,因而好和有 用的含义也不相同,因此图像增强技术是面向具体问题的。 目前图像增强技术根据其处理的空间不同,可分两大类:空域方法和频域方法。 前者直接在图像所在的像素空间进行处理;而后者是通过对图像进行傅里叶变换后在 频域上间接进行的。在空域方法中,根据每次处理是针对单个像素还是小的子图像块 (模板)又可分为两种:一种是基于像素的图像增强,也叫点处理,这种增强过程中 对每个像素的处理与其他像素无关;另一种是基于模板的图像增强,也叫空域滤波, 这种增强过程中的每次处理操作都是基于图像中的某个小的区域。 本文中采用的图像增强方式就是空域滤波,其根据操作特点可以分为线性滤波和 非线性滤波两类;而根据滤波效果又可分为平滑滤波和锐化滤波两种。 2.1.1 图像平滑处理图像平滑处理 本文中对图像的平滑处理采用的是线性平滑滤波器。平滑滤波器的概念非常直观, 它用滤波模板确定的邻域内像素的平均灰度值,去代替图像中的每一个像素点的值, 这种处理减少了图像灰度的“尖锐”变化。 图 1 显示了一个标准 33 的平滑模板, 图 1 线性平滑算子 在 JAVA 程序中,可以通过使用 ConvolveOp 组件来进行模板与图像的卷积计算,部分 代码如下 public BufferedImage smooth(BufferedImage image1) { .- image=image1; float data[] = { 1/9f, 1/9f, 1/9f, 1/9f, 1/9f, 1/9f, 1/9f, 1/9f, 1/9f}; Kernel kernel = new Kernel(3,3,data); ConvolveOp op = new ConvolveOp(kernel); return filter(op); } 源程序代码将在附录中给出,此处不做详细介绍。 2.1.2 图像锐化处理图像锐化处理 图像的锐化与平滑相反,在图像传输和变换过程中,因受到干扰会退化,比较典 型的事图像模糊。图像锐化就是使边缘轮廓线模糊的图像变得清晰,使其细节更加清 晰。 拉普拉斯算子是一种各项同性的二阶导数算子,对一个连续函数,他在位置 处的拉普拉斯算子定义为: 由于任意阶微分都是线性的,因此拉普拉斯变换也是一个线性操作。 对于数字图像来说,图像的拉普拉斯算子定义为: 其中,是在 方向和 方向的二阶差分,因此离散函数 的拉普拉斯算子可表示为: 上式可用图 2 所示的模板表示,且拉普拉斯算子显然是各向同性的。 .- 图 2 拉普拉斯算子 由于拉普拉斯是一种微分算子,它的应用强调图像中灰度的突变即降低灰度缓慢 变化的区域,这将产生一幅把图像中的浅灰色边线和突变点叠加到暗背景中的图像。 将原始图像和拉普拉斯图像叠加在一起的方法可以保护拉普拉斯锐化处理的效果,同 时又能复原背景信息,因此,记住拉普拉斯定义是很重要的。如果所使用的定义具有 负的中心系数,那么就必须将原始图像减去经拉普拉斯变换后的图像,从而得到锐化 的结果,反之,如果拉普拉斯定义的中心系数为正,则原始图像要加上经拉普拉斯变 换后的图像。故使用拉普拉斯算子对图像增强的基本方法可以表示为下式: 其中也可以用算子矩阵来表示,例如对于图 2 模板,最终得到的增强图像 相当于原图像直接与如图 3 算子相卷积的结果,此算子矩阵也叫锐化掩膜。 图 3 锐化掩膜算子 在程序中相关的代码如下: public BufferedImage sharp(BufferedImage image1) { image=image1; float data[] = { 0.0f, -1.0f, 0.0f, -1.0f, 5.0f, -1.0f, 0.0f, -1.0f, 0.0f}; Kernel kernel = new Kernel(3,3,data); ConvolveOp op = new ConvolveOp(kernel); return filter(op); .- } 2.2 边缘检测 图像的边缘对人类视觉而言具有重要意义。当人们看一个带有边缘的物体时,首 先感受到的便是它的边缘。灰度或结构等信息的突变处称为边缘。边缘时一个区域的 结束,也是另一个区域的开始,利用这种特性可以分割图像。需要指出的是,检测出 的边缘并不等同于目标的真实边缘。由于图像数据是二维的,而实际物体是三维的, 从二维到三维的投影必然会造成信息的丢失,再加上成像过程中的光照不均和噪声等 因素的影响,使得有边缘的地方不一定能检测出来,而检测出来的边缘也不一定代表 实际边缘。图像的边缘有方向和幅度两个属性,沿边缘方向的像素点变化平缓,而垂 直于边缘方向的像素点变化剧烈。物体边缘上的这种变化可以用微分算子检测出来, 通常用一阶或二阶导数来检测边缘。 拉普拉斯算子同样可用于图像边缘检测,由于其是基于二阶导数的边缘检测算子, 该算子对噪声敏感。一种改进方法是先对图像进行平滑滤波处理,然后再应用边缘检 测算子。这种平滑和微分合并后的算子称为高斯-拉普拉斯算子,这种边缘检测方法也 称为 Marr 边缘检测方法。 在计算过程中可直接使用如图 2 所示的拉普拉斯算子进行边缘检测,其在程序中相 关的代码如下: public BufferedImage edge(BufferedImage image1) { image=image1; float data[] = { 0.0f, 1.0f, 0.0f, 1.0f, -4.0f, 1.0f, 0.0f, 1.0f, 0.0f }; Kernel kernel = new Kernel(3,3,data); ConvolveOp op = new ConvolveOp(kernel); return filter(op); } .- 3 设计过程 本文以此在校园内拍摄的照片为例对其分别进行平滑、锐化、边缘处理 3.1 对图像进行平滑处理 对图像使用平滑处理功能对其进行平滑处理,结果如下: .- 3.2 对图像进行锐化处理 使用图像还原功能还原图像,再使用锐化处理功能对例图进行锐化处理,结果如 下: 3.3 对图像进行边缘检测 使用图像还原功能还原图像,再使用边缘变换功能对例图进行边缘检测,结果如 下: .- 4 结论 本文基于 Java 的图形图形处理环境,设计并实现了一个图形图像处理系统,总的 来说,达到了预定的目标,可以实现对图形图像进行较好的,较全面的处理。 这次的课程设计从各个方面对我所掌握的知识进行了一次考验,虽说做的比较简 单,但也花费我较长的时间,总的来说这次课程设计对本人来说是成功的,见识、知 识、经验都长进了不少。在这次课程设计的过程中,让自己的编程水平有了一定程度 的提高,对自己也有一个了解,使自己从校门走出去以后,能够比较准确的给自己定 位,了解自己有从事什么工作的能力。 另外,通过这次软件的开发,对于图形图像处理方面有了真正实质上的进步。但 是,从整体上面来说,因为经验的欠缺,导致整个软件存在一些漏洞,另外一些地方 做的也不是很正规,但是相信通过以后的学习和实践,这样的错误会尽量避免。 .- 参考文献 [1] 孙卫琴.JAVA 面向对象编程[M]..北京:电子工业出版社,2006:256-297. [2] 姚敏, 《数字图像处理》 ,机械工业出版社 2012.4 [3] 张伟, 《举一反三-JAVA 程序设计实战训练》 ,人民邮电出版社,2004.10 [4] 天猜 vs 马头, 《图像的锐化算子》 ,百度文库,2013.04.10 .- 附录:程序源代码附录:程序源代码 1.Application1.java import javax.swing.UIManager; public class Application1 { public Application1() { new Frame(); } public static void main(String args[]) { try { UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName()); } catch(Exception e) { e.printStackTrace(); } new Application1(); } } 2.Frame.java import java.awt.*; import java.awt.image.*; import java.awt.event.*; import javax.swing.*; public class Frame extends JFrame { BufferedImage orimage; BufferedImage image; .- JFrame frame=new JFrame("图像处理"); FilePane pane=new FilePane(); ImageFilter filter = new ImageFilter(); FileChooser chooser=new FileChooser(); JMenuBar bar=new JMenuBar(); JMenu file1=new JMenu("文件"); JMenu file2=new JMenu("编辑"); JMenuItem open=new JMenuItem("打开"); JMenuItem exit=new JMenuItem("退出"); JMenuItem smooth=new JMenuItem("平滑处理"); JMenuItem sharp=new JMenuItem("锐化处理"); JMenuItem edge=new JMenuItem("边缘变换"); JMenuItem reset=new JMenuItem("图像还原"); public Frame() { frame.getContentPane().setLayout(new BorderLayout()); frame.setSize(600,480); frame.setContentPane(pane); frame.setVisible(true); frame.setResizable(true); file1.add(open); file1.add(exit); bar.add(file1); file2.add(smooth); file2.add(sharp); file2.add(edge); file2.add(reset); bar.add(file2); frame.setJMenuBar(bar); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); exit.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { System.exit(0); } }); .- open.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { pane.showImage(chooser.chooser()); orimage=pane.PassImage(); image=pane.PassImage(); filter.setoriginalimage(orimage); Dimension imageSize = new Dimension(orimage.getWidth()+17, orimage.getHeight()+60); frame.setSize(imageSize); frame.setVisible(false); frame.setVisible(true); repaint(); } }); smooth.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { image=filter.smooth(image); pane.showImage(image); frame.setVisible(false); frame.setVisible(true); repaint(); } }); sharp.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { image=filter.sharp(image); pane.showImage(image); frame.setVisible(false); frame.setVisible(true); repaint(); .- } }); edge.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { image=filter.edge(image); pane.showImage(image); frame.setVisible(false); frame.setVisible(true); repaint(); } }); reset.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { image=filter.reset(); pane.showImage(image); frame.setVisible(false); frame.setVisible(true); repaint(); } }); } } 3.FileChooser.java import java.io.File; import javax.swing.JFileChooser; public class FileChooser extends JFileChooser { public JFileChooser f; public FileChooser() { .- f=new JFileChooser(); } public String chooser() { f.setCurrentDirectory(new File(".")); f.setFileFilter(new javax.swing.filechooser.FileFilter() { public boolean accept(File file) { String name = file.getName().toLowerCase(); return name.endsWith(".gif")||name.endsWith(".jpg")|| name.endsWith(".jpeg")||name.endsWith(".png")||file.isDirectory(); } public String getDescription() { return "Image files"; } }); f.setVisible(true); f.showOpenDialog(f); int result=0; String name=null; if(result==JFileChooser.APPROVE_OPTION) { name=f.getSelectedFile().getAbsolutePath(); } f.setVisible(false); return name; } } 4.FilePane.java import java.awt.BorderLayout; import java.awt.Dimension; import java.awt.Graphics; import java.awt.Image; .- import java.awt.MediaTracker; import java.awt.Toolkit; import java.awt.image.BufferedImage; import javax.swing.JPanel; class FilePane extends JPanel { BufferedImage orimage; BufferedImage image; public FilePane() { super(); setLayout(new BorderLayout()); } public void showImage(String url) { Image image1 = Toolkit.getDefaultToolkit().getImage(url); MediaTracker tracker = new MediaTracker(this); tracker.addImage(image1, 0); try { tracker.waitForID(0); } catch(InterruptedException e) {} image = new BufferedImage(image1.getWidth(null),image1.getHeight(null), BufferedImage.TYPE_INT_RGB); Graphics g = image.createGraphics(); g.drawImage(image1,0,0,null); } public void showImage(BufferedImage image1) { MediaTracker tracker = new MediaTracker(this); tracker.addImage(image1, 0); try { .- tracker.waitForID(0); } catch(InterruptedException e) {} image = new BufferedImage(image1.getWidth(null),image1.getHeight(null), BufferedImage.TYPE_INT_RGB); Graphics g = image.createGraphics(); g.drawImage(image1,0,0,null); } protected void paintComponent (Graphics g) { super.paintComponent(g); if(image!=null) { g.drawImage(image, 0, 0, null); } } public BufferedImage PassImage() { return image; } } 5.ImageFilter.java import java.awt.Graphics; import java.awt.image.BufferedImage; import java.awt.image.BufferedImageOp; import java.awt.image.ConvolveOp; import java.awt.image.Kernel; import javax.swing.JPanel; public class ImageFilter extends JPanel { BufferedImage image; BufferedImage originalimage; .- private BufferedImage filter(BufferedImageOp op) { BufferedImage filterImage = new BufferedImage(image.getWidth(), image.getHeight(),image.getType()); op.filter(image,filterImage); image = filterImage; return image; } public BufferedImage smooth(BufferedImage image1) { image=image1; float data[] = { 1/9f, 1/9f, 1/9f, 1/9f, 1/9f, 1/9f, 1/9f, 1/9f, 1/9f}; Kernel kernel = new Kernel(3,3,data); ConvolveOp op = new ConvolveOp(kernel); return filter(op); } public BufferedImage sharp(BufferedImage image1) { image=image1; float data[] = { 0.0f, -1.0f, 0.0f, -1.0f, 5.0f, -1.0f, 0.0f, -1.0f, 0.0f}; Kernel kernel = new Kernel(3,3,data); ConvolveOp op = new ConvolveOp(kernel); return filter(op); } public BufferedImage edge(BufferedImage image1) { image=image1; float data[] = { 0.0f, 1.0f, 0.0f, .- 1.0f, -4.0f, 1.0f, 0.0f, 1.0f, 0.0f }; Kernel kernel = new Kernel(3,3,data); ConvolveOp op = new ConvolveOp(kernel); return filter(op); } public void setoriginalimage(BufferedImage image1) { originalimage=image1; } public BufferedImage reset() { return originalimage; } protected void paintComponent (Graphics g) { super.paintComponent(g); if(image!=null) { g.drawImage(image, 0, 0, null); } } public BufferedImage PassImage() { return image; } }
展开阅读全文
提示  得力文库 - 分享文档赚钱的网站所有资源均是用户自行上传分享,仅供网友学习交流,未经上传用户书面授权,请勿作他用。
关于本文
本文标题:根据java综合图像管理课程教学设计.doc
链接地址:https://www.deliwenku.com/p-2614236.html
关于得利文库 - 版权申诉 - 用户使用规则 - 积分规则 - 联系我们

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知得利文库网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号-8 |  经营许可证:黑B2-20190332号 |   黑公网安备:91230400333293403D

© 2020-2023 www.deliwenku.com 得利文库. All Rights Reserved 黑龙江转换宝科技有限公司 

黑龙江省互联网违法和不良信息举报
举报电话:0468-3380021 邮箱:hgswwxb@163.com  

收起
展开