欢迎来到沃文网! | 帮助中心 分享知识,传播智慧!
沃文网
全部分类
  • 教学课件>
  • 医学资料>
  • 技术资料>
  • 学术论文>
  • 资格考试>
  • 建筑施工>
  • 实用文档>
  • 其他资料>
  • ImageVerifierCode 换一换
    首页 沃文网 > 资源分类 > DOC文档下载
    分享到微信 分享到微博 分享到QQ空间

    基于Java的图形图像处理软件的设计与实现.doc

    • 资源ID:844055       资源大小:313.85KB        全文页数:29页
    • 资源格式: DOC        下载积分:20积分
    快捷下载 游客一键下载
    账号登录下载
    微信登录下载
    三方登录下载: QQ登录 微博登录
    二维码
    微信扫一扫登录
    下载资源需要20积分
    邮箱/手机:
    温馨提示:
    快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
    如填写123,账号就是123,密码也是123。
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP,下载更划算!
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    基于Java的图形图像处理软件的设计与实现.doc

    1、 目录引 言7第一章 绪论81.1.1 计算机图形图像学的发展简史81.1.2现有图形图像处理软件81.2 课题研究的目的及意义9第二章 图形图像处理软件开发技术基础102.1 Java Swing 简介102.1.1 Swing的特性102.1.2 Swing程序包和类112.2 MVC体系结构122.2.1 模型122.2.2 视图122.2.3 控制器13第三章 图形图像软件的设计143.1图形处理模块的设计143.1.1结构设计143.1.2功能描述143.1.3图形处理模块结构图143.1.4主要类设计153.2 图像处理模块的设计163.2.1结构设计163.2.3结构图174.1

    2、 绘图功能的详细设计与实现194.1.1 菜单栏194.1.2工具栏204.1.3画图区224.1.4状态栏224.2 图像编辑的详细设计与实现234.3滤镜处理的详细设计与实现254.3.1 图像增强254.3.2图像边缘检测274.3.3 图像平滑处理284.3.4 系统测试29结论32致谢33图形图像处理软件的设计与实现摘要:随着计算机技术的迅速发展,图形图图像技术在各个领域的研究和应用日益深入和广泛。由于图形图像各种算法的实现,使得其处理速度越来越快,能更好的为人们服务。图形图像处理的信息量很大,对处理速度的要求也比较高。Java强大的运算和图像展示功能,使图像处理变得更加的简单和直观

    3、。同时系统所有的操作设计得十分简单方便,无需具备有专业的知识,也能实现图像图像处理。Java是一种完全面向对象的语言,Java语言的设计集中于对象及其接口,它提供了简单的类机制以及动态的接口模型。本文基于Java的图形图像处理环境,设计并实现了以图形图像处理系统,展示如何通过利用Java实现对图形图像的各种处理。关键词:Java 绘图板 图形图像编辑 滤镜处理 边缘处理Image processing software design and implementationAbstract:With the rapid development of computer technology, gra

    4、phic chart of image technology in various fields of research and application deeply and widely increasingly. Due to the image of the realization of the algorithm, so that the processing faster, the better for the people service. Image processing of information is very big, the requirements of proces

    5、sing speed is high. Java powerful operation and image display function, make the image processing become more simple and intuitive. And the system all operating very simple design, need not have the professional knowledge, also can realize image and image processing.Java is a fully object-oriented l

    6、anguage, the design of the Java language focus on objects and interface, it provides simple class mechanism as well as the dynamic model of the interface. This paper, based on the Java graphics image processing environment, the design and realized by graphical image processing system, and shows how

    7、to use Java to achieve through graphic image of processing.Key words:Java; Drawing board; Graphic image editing; Filter processing; Edge processing引 言随着图形图像处理技术的发展,从七十年代中期开始,随着计算机技术和人工智能、思维科学研究的迅速发展,图形图像处理向更高、更深层次发展。图形图像是用各种观测系统以不同形式和手段观测客观世界而获得的,可以直接或间接作用于人眼并进而产生视知觉的实体。其最广义的观点是指视觉信息。例如照片、图画、电视画面以及光

    8、学成像等。人类的大部分信息都是从图像中获得的。目前国内外市场依然是以Adobe公司的Photoshop为主流的图形图像处理软件,软件拥有强大的处理能力,丰富的工具库,代表着计算机图形图像处理领域的最高技术标准。进入21世纪,随着计算机技术的迅猛发展和相关理论的不断完善,数字图像处理技术在许多应用领域受到广泛重视并取得了重大的开拓性成就,如航空航天、生物医学工程、工业检测、机器人视觉、公安司法、军事制导、文化艺术等领域。图形图像处理技术已成为一门引人注目、前景远大的新型学科。本文是基于Java图形图像处理软件,Java编程语言是一种跨平台的编程语言,在编写图形用户界面方面,也要支持跨平台功能。为

    9、此Java提供了强大而丰富的AWT包和Swing包,使得Java功能越来越强大,界面越来越美观。Java图形图像用户界面的编写普遍采用构件化思想来进行,AWT和Swing本身提供的也是许多标准的构件和容器。本软件将所学的理论知识与实际应用相结合,运用Java编程语言,实现绘图功能、图形图像的常规编辑功能、滤镜处理功能、边缘处理功能,以达到进一步提高程序开发能力的目的。第一章 绪论图形图像信息是人类获得外界信息的主要来源,因为大约有70%的信息是通过人眼获得的,而人眼获得的都是图形图像信息。在近代科学研究、军事技术、工农业生产、医学、气象及天文学领域中,人们越来越多地利用图形图像信息来认识和判断

    10、事物,解决实际问题。本设计能实现基本的绘画功能以及图形图像的基本编辑。1.1课题背景1.1.1 计算机图形图像学的发展简史麻省理工学院(MIT) 旋风I号(Whirlwind)计算机的附件诞生了。该显示器用一个类似于示波器的阴极射线管(CRT)来现实一些简单的图形。1958年美国Calcomp公司由联机的数字记录仪发展成滚筒式绘图仪,GerBer公司把数控机床发展成为平板式绘图仪。在整个50年代,只有电子管计算机,用机器语言编程,主要用于科学计算,为这些计算机配置的图形设备仅具有输出功能。计算机图形学处于准备和酝酿时期,并称之为:“被动式”图形学。到50年代末期,MIT的林肯实验室在“旋风”计

    11、算机上看法SAGE空中防御体系,第一次使用具有指挥和控制功能的CRT显示器,操作者可以用笔在屏幕上指出被确定的目标。1974年,在Colorado大学召开了第一届SIGGRAPH年会,并取得巨大的成功,当时大约有600位来自世界各地的专家参加会议。到1997年,参加会议的人数已经增加到48,700。因为每年只录取大约50篇论文,在Computer Graphics杂志上发表,因此论文的学术水平较高,基本上代表图形图像学的主流方向。1.1.2现有图形图像处理软件随着对图形图像处理需求的扩大,现有的图形图像处理软件多种多样,数不胜数。本文简单介绍两个比较有代表性的图形图像处理软件:Photosho

    12、pPhotoshop是平面图形图像处理业界霸主Adobe公司推出的跨越PC和MAC两界首屈一指的大型图形图像处理软件。它功能强大,操作界面友好,得到广大第三方开发厂家的支持,从而也赢得众多用户的青睐。Photoshop是目前公认的最好的通用平面美术设计软件,它的功能完善,性能稳定,使用方便,所以在几乎所有的广告、出版、软件公司,Photoshop都是首选的平面工具。通过Photoshop可以对图形图像修饰、对图形图像进行编辑,以及对图形图像的色彩处理,另外,还有绘图和输出功能。在实际生活和工作中,可以将数码相机拍摄下来的照片进行编辑和修饰,也可以将现有的图形图像和照片,用扫描仪扫如计算机进行加

    13、工处理,还可以把摄像机摄入的内容转移到计算机上,然后用它实现对影像的润色。总之,Photoshop可以使你的图形图像产生特技效果,如果和其它工具软件配合使用,还可以进行高质量的广告设计、美术创意和三维动画制作。由于Photoshop功能强大,目前正在被越来越多的图形图像编排领域、广告和形象设计领域以及婚纱影楼等领域广泛使用,是一个非常受欢迎的应用软件。1.2 课题研究的目的及意义随着科学技术的不断发展,计算机的更新速度不断提高,人们的思想文化素质的提高,对图形图像的要求也越来越高。因此把原始图形图像与计算机结合起来,从而创作出许多更加完美的图像,满足人们的需求,计算机图形图像处理,是指利用计算

    14、机对图像图像进行一系列加工,以便获得人们所需要的效果。图形图像是人们获取和交换信息的主要来源,人类感知外界信息,80%以上是通过视觉得到的。因此,图形图像处理的应用领域必然涉及到人类生活和工作的方方面面。图形图像是用各种观测系统以不同形式和手段观测客观世界而产生视知觉的实体。比如人的视觉就是以观测系统,通过它得到的图形图像就是客观景物在人心目中形成的影像。视觉是人类观察世界、认知世界的重要功能手段。图形图像带有大量的信息,百闻不如一见,一图值千金都说明这个事实。为此开发这个图形图像处理软件,能过处理一些图形图像,并对图形图像处理技术此方面进行深入的研究。第二章 图形图像处理软件开发技术基础2.

    15、1 Java Swing 简介 浏览Java的主页(http:/java.sun.con/)时,可以找到对Swing的说明,他被描述成一组可定制的图形组件,可以在运行时指定这些组件的外观风格。不过,Swing实际上不只这些,它允许使用Java语言进行企业级开发。程序员可以使用Swing建立包含许多功能强大的组件的大型Java应用程序,并且可以更容易地扩充或者修改这些组件以控制它们的外观和行为。那么,为了能较好地发挥Swing的优势来为自己的Java应用程序增色,首先就要对Swing有一个总体的认识。2.1.1 Swing的特性Swing的特性有以下三个方面:一、可插拔外观风格Swing类最让人

    16、激动的一个方面是能够规定每个组件的外观风格,甚至可以在运行时重新设置外观风格。这种特性叫做“可插拔外观风格”(Pluggable Look-and-Feel,或简称PLAF)。Swing能够模拟集中外观风格,并且它目前支持Window、Unix Motif和“本地”Java Metal外观风格。此外,Swing允许用户在运行时转换外观风格,而不必关闭应用程序。这样,用户甚至可以为每一个Swing组件建立自己的外观风格。二、轻型组件绝大多数Swing组件都是轻型的。在最完美的情况下,这意味着这些组件并不依赖本地对等组件来绘制自己。相反,它们使用简化的图形基本元素在屏幕上描绘自己,甚至允许部分图像

    17、是透明的。只是少数顶层容器不是轻型的(如Jframe和JWindow)。这个设计允许程序设计人员在运行时绘制(和重新绘制)自己的应用程序的外观风格,而不是对主机操作系统的外观风格进行这样的尝试。此外,Swing组件的设计支持对组件行为随意修改。例如,可以告诉几乎所有的Swing组件用户是希望接受输入焦点还是希望拒绝输入焦点,可以告诉它应该如何处理键盘输入。三、如何使用Swing不是人人都为了同一个原因而使用Swing。实际上,因为有着各种级别的必须预先具备的知识,所以Swing库有许多使用级别。以下是一些可能的用途:1. 在打算建立自己的企业级应用程序时使用Swing组件。第一种方法是大多数S

    18、wing组件所使用的方法。在这时,使用Swing组件类似于使用AWT组件。常见的组件、容器和布局管理器都可以从Swing程序包中获得,它们有助于建立并快速运行应用程序。如果擅长使用AWT组件进行编程,只需要浏览对每个组件的粗略介绍,就可以开始使用了。只有在使用一些更大并且更新的组件(如表和文本),或者打算将每个组件用作JavaBean进行可视编程时,才必须考虑更多的问题。2. 建立自定义Swing组件或者扩展已经存在的组件。建立自定义组件或者扩展现有的组件需要更深入的了解Swing。这是一定要了解Swing体系结构、事件和较低级别的类。此外,如果决定细分Swing组件,则必须承担处理这个组件的

    19、责任,否则,新组建的执行情况就可能是不定的。3. 为一个或者多个Swing组件覆盖或者建立一个新的外观风格。最后,用户可能希望更改一个或者多个Swing组件的外观风格。这是可以使用的3种方法中最复杂的一种方法,它要求全面了解每个组件的设计,体系结构基本原理和图形基本元素。此外,用户必须了解如何使用Swing的UIManager和UIDefaults类来“设置”每个组件的外观风格。2.1.2 Swing程序包和类 Swing库中的程序包很多,只在此大致介绍在后面的图像浏览器的实现中用到的程序包。其中用得最多的当然是javax.swing,另外有javax.swing.border、javax.s

    20、wing.event、javax.swing.tree、javax.swing.filechooser。以下给出了这些程序包的简短描述。Swing包是JFC(Java Foundation Classes)的一部分,由许多包组成,如表2.1。包描述Com.sum.swing.plaf.motif用户界面代表类,它们实现Motif界面样式Com.sum.java.swing.plaf.windows用户界面代表类,它们实现Windows界面样式Javax.swingSwing组件和使用工具Javax.swing.borderSwing轻量组件的边框Javax.swing.colorchooser

    21、JcolorChooser的支持类/接口Javax.swing.event事件和侦听器类Javax.swing.filechooserJFileChooser的支持类/接口Javax.swing.pending未完全实现的Swing组件Javax.swing.plaf抽象类,定义UI代表的行为Javax.swing.plaf.basic实现所有标准界面样式公共功能的基类Javax.swing.plaf.metal用户界面代表类,它们实现Metal界面样式Javax.swing.tableJtable组件Javax.swing.text支持文档的显示和编辑Javax.swing.text.htm

    22、l支持显示和编辑HTML文档Javax.swing.text.html.parserHtml文档的分析器Javax.swing.text.rtf支持显示和编辑RTF文件Javax.swing.treeJtree组件的支持类Javax.swing.undo支持取消操作表2.1 Swing包 2.2 MVC体系结构 Swing使用模型视图控制器体系结构(MVC)作为它的每个组件的基本设计。实质上,MVC将GUI组件拆分成三个元素,每个元素都对组件的表现起着至关重要的作用。2.2.1 模型 模型包括每个组件的状态数据。不同类型的组件有不同的模型。例如,滚动条组件的模型可能包含有关可调整“滑尺”当前位

    23、置、最大值、最小值和滑尺宽度(与值的范围有关)的信息。另一方面,菜单可能只包含一个用户用来从中进行选择的菜单项列表。不论组件在屏幕上是如何被描绘的,这些信息总是相同的,模型数据总是独立于组件的可视表示。2.2.2 视图视图是指组件在屏幕上的表现形式。可以参见两个不同GUI平台上一个应用程序窗口,这是现实视图如何不同的一个好例子。又如,几乎所有窗口框架都有一个位于窗口顶端的标题栏。不过,标题栏的左边可能有一个关闭框(类似于Mac OS平台),或者可能在标题栏的右边有一个关闭框(与Windows平台中的类似)。2.2.3 控制器控制器使用户界面的一部分,它指示组件如何与事件进行交互。事件的形式有很

    24、多种,例如,鼠标单击、获得或失去焦点、触发特定菜单命令的键盘事件,甚至是重新绘制某一部分屏幕的指示。控制器决定了每个组件如何对事件做出反应。Swing通常使用一个叫做模型代理(modek-delegate)的MVC设计的简化变体。这个设计将视图和控制器对象合并到一个元素中,即UI代理,该元素将组件绘制到屏幕上,并处理GUI事件。模型负责维护有关组件状态的信息。使用Java语言捆绑图形功能和事件处理会容易一些,因为许多事件处理是使用AWT的。模型与UI代理之间的通信是双向的。第三章 图形图像软件的设计 软件需求分析是设计优良的重要组成部分,一份好的需求分析说明,可以使程序设计的复杂性降到最低。需

    25、求分析与总体设计是软件具体实现前的必要环节,具体介绍如下。3.1图形处理模块的设计3.1.1结构设计(1)菜单栏的设计(2)画图区的设计(3)工具栏的设计(4)其他功能设计3.1.2功能描述该模块主要有菜单栏、工具栏、画图区组成,菜单栏具有新建、打开、保存等常见的功能;工具栏可以选择用户需要的图形样式、设置参数、插入文本等操作;画图区就是简单绘图区域,用户在画图区可自由绘制图形。右击工具栏可设置工具是否可拖动。还可以根据不同的需要设置背景色,画笔大小、画笔颜色。能够在任意点添加文字并设置文字样式和字体。3.1.3图形处理模块结构图菜单栏工具栏状态栏文件编辑设置帮助画图区文件操作形状选择设置鼠标

    26、状态画笔矩形直线新建打开打开保存文背景直线自由保存自由矩形直线圆矩形直线自由保存打开圆画笔圆矩形立方体画笔大小背景色立方体背景色画笔文字样式色画笔大小画笔色文字样式画笔色图3.1 图形绘制模块3.2 图像处理模块的设计3.2.1结构设计(1)菜单栏的设计及功能实现:菜单栏主要包括文件、图像增强、图像分割、图像变换、前进后退、图像缩放。(2)图像处理区的设计:将整个界面分为两个部分,左边部分是打开的原图像,右边部分显示的是处理后的图像。3.2.2功能描述(1) 文件:此功能主要实现图像的文件操作,包括打开一个图像、清空图像、对图像进行保存、退出软件。(2) 图像增强:此功能主要实现对图像进行加强

    27、边缘、锐化、模糊、浮雕、灰度变换处理。(3) 图像分割:此功能主要实现对图像进行边缘检测处理。(4) 图像变换:此功能主要实现对图像进行平滑处理。(5) 前进后退:此功能主要实现图像的上一张、下一张读取。(6) 图像缩放:此功能主要实现图像的放大缩小功能。3.2.3结构图 图3.2 图像处理模块的业务流程各个分模块的功能如图3.3-3.5 图3.3图像编辑模块 图3.4 滤镜处理模块 图3.5 边缘处理模块 第四章 软件具体实现软件系统分析设计完成后,就是开始对系统设计的实施阶段,以便完成系统的性能和功能。这是一个严格谨慎的过程,必须认真进行。系统的具体设计实现主要完成各模块之间的具体界面设计

    28、问题以及核实系统是否达到实际要求。4.1 绘图功能的详细设计与实现4.1.1 菜单栏菜单栏包括文件、编辑、设置、帮助四部分。其中,文件菜单实现了新建、打开、保存、退出功能;编辑菜单实现了撤销和恢复功能;设置菜单实现了画笔颜色、画笔大小和立方体宽度的设置;帮助菜单实现了关于画图板的帮助信息。在Java中,菜单的构成有三个基本要素:MenuBar、Menu、MenuItem。Menu、MenuItem类的继承关系如图4.1所示图4.1 菜单类的继承关系从图4.1中可以看出,菜单相关的类都继承自MenuComponent,而不是Component,因此它无法像普通组件那样设置前景色、背景色、字体。构

    29、造菜单首先要通过JmenuBar建立一个菜单栏,它是菜单容器。然后使用Jmenu建立菜单,每个菜单再通过JmenuItem建立菜单项。菜单的构造方法:Jmenu():建立一个新的Jmenu。Jmenu(Action a):建立一个支持Action的新的Jmenu。Jmenu(String s): 以指定的字符串名称建立一个新的JmenuJmenu Jmenu:以指定的字符串名称建立一个新的Jmenu,并决定这个菜单是否具有下拉属性。4.1.2工具栏工具栏是一系列快捷操作的按钮,分别是:新建、打开、保存、自由画笔、直线、空心矩形、实心矩形、空心椭圆、实心椭圆、圆、实心圆、空心圆角矩形、实心圆角矩

    30、形、3D矩形、3D矩形、3D长方体、橡皮、设置背景色、画笔颜色、画笔粗细、添加文字,用来实现相应的功能。另外还为工具栏设置了按钮图片和鼠标右击事件,右击鼠标可以设置工具栏是否可拖动。构造工具栏时使用JToolBar创建一个工具栏对象,然后使用add()方法将带图标的按钮加到工具栏中。JToolBar的构造函数:JToolBar():建立一个新的JToolBar,位置为默认的水平方向。JToolBar(int orientation):建立一个指定位置的JToolBar。JToolBar(String name):建立一个指定名称的JToolBarJToolBar(String name,int

    31、 orientation):建立一个指定名称和位置的JToolBar。4.1.3画图区画图区可以绘制各种图形,可以进行擦除操作,还可以根据实际需要添加文本。绘图的操作一般在paint()或paintComponent()方法中进行,建立一个JPanel的子类,重写paintComponent()方法,利用该方法的Graphics类型参数的绘图方法进行绘图。下面介绍一下基本图形的绘制方法:(1)直线:绘制直线是通过使用Graphics的drawline方法来实现的,其原型如下:Void drawline(int x1,int y1,int x2,int y2)这个函数将使用当前颜色,在图形坐标系

    32、统中的(x1,y1)至(x2,y2)之间绘制一条直线。(2)矩形:常见的矩形有两种:实体的(solid)、圆角矩形(rounded),这些矩形的绘制是用Graphics的一些方法来完成的,方法如下:Void drawRect(int x,int y,int w,int h)Void drawRoundRect(int x,int y,int w,int h,int arcWidth,int arcHeight)除了绘制以外,还可以填充矩形,这由以下的Graphics方法来实现:Void fillRect(int x,int y,int w,int h)Void fillRoundRect(in

    33、t x,int y,int w,int h, int arcWidth,int arcHeight)(3)原形和椭圆:从数学上讲,圆形是椭圆的一种特殊情况,在Java中这种关系仍然成立。在Java中,椭圆(当然也有特殊情况下的圆形)的定位定形是通过它的外接矩形来完成的。因此,在它的绘制和填充方法中,其参数均为对应外接矩形的有关信息。这些方法的原型如下:void drawOval(int x,int y,int width,int height)void fillOval(int x,int y,int width,int height)如果参数width和height的值相等,那么绘制出来的将

    34、是一个圆形。4.1.4状态栏状态栏是显示鼠标的状态的信息栏,随时反馈鼠标信息。鼠标事件对应MouseEvent类。它有两个监听者接口与之对应,一个是MouseListener接口(它有5个事件),一个是MouseMotionListener(它有两个事件)接口。(1) MouseListener接口mousePressed:鼠标键被按下时调用。mouseReleased:鼠标被释放时调用。mouseClicked:合并上述两个事件为一次鼠标点击事件。mouseEntered:进入指定区域。mouseExited:离开指定的区域。它们的参数是MouseEvent,通过getX和getY方法,能够

    35、得到鼠标点击时鼠标指针的x和y坐标。通过getClickCount方法,可以区别是单击操作,还是双击操作。(2)MouseMotionListener接口mouseMoved:鼠标移动。mouseDragged:用户拖动鼠标。4.2 图像编辑的详细设计与实现4.2.1public void init()本方法实现了对图片查看器的界面的整体布局及按钮的初始化。对页面的总体布局采用了以下主要代码进行实现setLayout(newBorderLayout();add(pathBar, BorderLayout.NORTH); add(picContainer, BorderLayout.CENTER

    36、); add(ctrBar,BorderLayout.SOUTH); resize(640, 400);设置顶部路径栏,及其文字显示;代码如pathBar = new,JPanel();pathBar.setLayout(new BorderLayout();pathInfo.setText(图片查看器); pathBar.add(pathInfo);同时对图片显示区域,底部的控制栏的设置也运用了相似的代码进行实现,在此就不再重复。各按钮除了“打开”一按钮外,其他的各按钮均设置为false。这是因为只有“打开”图片后才能进行以下的图像实现循环浏览、放大缩小等操作。4.2.2 public vo

    37、id actionPerformed(ActionEvent)在本方法中主要实现了用户对底部控制栏各按钮的点击后,图片查看器进行的相对应的操作反应。方法中一开始用JButton click = (JButton) e.getSource();获取按键源,然后根据click与程序设定的已知的类进行比较决定进行相应的反应。if(click = openbtn);if(click = prebtn & pic != null);等一系列进行判断后,进行或是打开文件open()方法的调用;或是pre()方法的调用;其他各操作也大同小异,在此就不再赘述。4.2.3. public void pre()及

    38、public void next()pre与next方法实现了对当前图片的上一张下一张的浏览。因为在第一次打开文件时就将该路径下所有符合要求的图片存储在String pics中。通过if(i = 0) i = pics.length-1; else i -;其中i为当前的图片位置数。通过dir = path + + picsi;获得文件的路径,然后调用loadImage(dir);此方法将在后面介绍;与上面的方法相对应的是此方法实现了对当前图片下一张的浏览,实现原理与上相同,if(i = pics.length-1) i = 0; else i+;通过调用loadImage(dir);一方法实

    39、现。4.2.4. public void zoomin()此方法实现了对当前的图片进行按设置比例缩小操作。在进行缩小操作前,先对图片的大小进行判断,看是否已经缩小到最小,若最小则显示提示信息“已经缩至最小!”;否则进行缩小操作。在此过程中调用了picTrans()方法,以及repaint(); 重绘组件的方法。4.2.5. public void oripic()及public void delete()此方法实现了将放大或缩小后的图片大小还原的操作。同时也调用picTrans()方法,以及repaint(); 重绘组件的方法。具体的picTrans()方法将在下面详细描述。此方法具体实现见附

    40、件;public void delete()方法将图片彻底删除,删除后图片彻底被粉碎,回收站里面都不能找到。因此要慎用此按钮。4.2.6. String类程序中运用了三个不同的String类,从而实现了需要查看的图片的路径的操作,并且在启动图片查看器时,图片的路径能够在路径栏显示出来。同时还设置了String 数组用于存储用户选定的目录下所有指定格式的图片,这样可以实现循环浏览图片等操作。4.3滤镜处理的详细设计与实现所谓滤镜,就是把原有的画面进行艺术过滤,得到一种艺术或更完美的展示,滤镜的品种很多,应用广泛。在图像的滤镜处理中,有一部分是通过卷积来实现的。4.3.1 图像增强 卷积滤镜同样用

    41、一个矩阵于图象可形成如模糊、边缘检测、锐化、浮雕和斜角等多种效果。卷积滤镜重新计算每个像素,并根据矩阵将像素及其周围的象素要加得也该像素的新颜色。最常用的矩阵是3x3的矩阵,如图4.2所示:图4.2在这个矩阵中P代表本身的像素,而N代表周围的像素。那么图4.3这个矩阵: 图4.3可以看出将这个矩阵用于图象时,图象没有变化,因为除自已外周围的像素均为0,即周围像素对中间的P像素没有影响。将矩阵存入一个数组,并将它作为ConvolutionFilter类构造函数的一个参数,可实现卷积滤镜效果,除了矩阵参数处ConvolutionFilter构造函数还有其它的一些参数:matrixX : 矩阵的 x

    42、 维度(矩阵中列的数目)。默认值是 0。matrixY: 矩阵的 y 维度(矩阵中行的数目)。默认值是 0。matrix: 用于矩阵转换的值的数组;返回一个副本。数组中的项数必须等于 matrixX*matrixY。divisor: 矩阵转换中使用的除数。默认值是 1。这个参数如果与矩阵值的总和相等,那么图象的亮度无变化。比如图4.4这个矩阵: 图4.4里面有5个1,那么矩阵总值为5,如果divisor参设为5,则图象的亮度无变化。如果本参数为1,那么图象的亮度是原图象的5/1倍,这时图象就很亮了。如果本参数为10,那么原图片的亮度为5/10,显然图片就变暗了。bias: 要添加到矩阵转换结果

    43、的偏差。默认值是 0。preserveAlpha: 值为 false 表明卷积应用于所有通道,包括 Alpha 通道。值为true表示只对颜色通道应用卷积。默认值为true。clamp: 对于源图像之外的像素,如果值为true,则表明通过复制输入图像给定边缘处的颜色值,沿着输入图像的每个边框按需要扩展输入图像。如果值为 false,则表明应按照color和alpha属性中的指定使用其它颜色。默认值是true。color: 要替换源图像之外的像素的十六进制颜色。alpha: 替换颜色的Alpha。下面是几个基本效果的矩阵:基本模糊(除数 5)如图4.5:图4.5锐化(除数 1)如图4.6:图4.

    44、6边缘检测(除数 1)如图4.7:图4.7浮雕效果(除数 1)如图4.8: 图4.84.3.2图像边缘检测由于图像中对象的边缘表现为灰度变化, 因此, 可以通过计算灰度的不连续性来增强和检测边缘。目前边缘检测的方法有很多, 比如基于微分算子的、基于小波变换的、基于数学形态学的边缘检测等。其中最简单、最传统的方法就是空域微分算子的边缘检测方法, 它们不仅可以检测二维边缘, 而且可用于检测三维边缘。图像的边缘有两个属性: 方向和幅度。垂直于边缘方向像素变化剧烈, 那么对应于连续的情形就是函数梯度较大的地方。传统的边缘检测就是利用这个特点, 对图像的每个像素点进行一阶或二阶微分来确定边缘像素点。其中

    45、, 一阶微分图像的峰值处对应图像的边缘点; 而二阶微分图像的零值处对应图像的边缘点。基于一阶导数的边缘检测算子包括Roberts算子、Prewitt算子、Sobel算子等。具体算法实现过程就是通过22(Roberts算子)或33的模板作为卷积核与图像中的每个像素点作卷积运算, 然后选取适当的阈值来提取边缘。基于二阶导数的边缘检测算子有Laplacian算子和LOG算子。由于图像中的噪声也会产生边缘, 而Laplacian算子对噪声非常敏感, 因此它很少单独用来进行边缘检测。LOG算子实际上是对Laplacian算子的一种改进。它先用高斯滤波器对图像进行平滑处理, 然后用Laplacian算子来

    46、增强边缘,将边缘点转换成零交叉点, 最后通过寻找零交叉点对边缘进行定位。边缘检测算子一阶::Roberts Cross算子,Prewitt算子,Sobel算子,Canny算子, Kirsch算子,罗盘算子;二阶: Marr-Hildreth,在梯度方向的二阶导数过零点。当我们沿着剖面线从左到右经过时,在进入和离开斜面的变化点,一阶导数为正。在灰度级不变的区域一阶导数为0.在边缘与黑色一边相关的跃变点二阶导数为正,在边缘与亮色一边相关的跃变点二阶导数为负,沿着斜坡和灰度为常数的区域为0.也就是说一阶导数可以用于检测图像中的一个点是否是边缘的点(也就是判断一个点是否在斜坡上)。同样,二阶导数的符号可以用于判断一个边缘像素是在边


    注意事项

    本文(基于Java的图形图像处理软件的设计与实现.doc)为本站会员(精***)主动上传,沃文网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知沃文网(点击联系客服),我们立即给予删除!




    关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服点击这里,给沃文网发消息,QQ:2622162128 - 联系我们

    版权声明:以上文章中所选用的图片及文字来源于网络以及用户投稿,由于未联系到知识产权人或未发现有关知识产权的登记,如有知识产权人并不愿意我们使用,如有侵权请立即联系:2622162128@qq.com ,我们立即下架或删除。

    Copyright© 2022-2024 www.wodocx.com ,All Rights Reserved |陕ICP备19002583号-1

    陕公网安备 61072602000132号     违法和不良信息举报:0916-4228922