基于JAVA平台的图像处理软件的设计与实现_第1页
基于JAVA平台的图像处理软件的设计与实现_第2页
基于JAVA平台的图像处理软件的设计与实现_第3页
基于JAVA平台的图像处理软件的设计与实现_第4页
基于JAVA平台的图像处理软件的设计与实现_第5页
已阅读5页,还剩11页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、基于java平台的图像处理软件的设计与实现基于java平台的图像处理软件的设计与实现摘要:随着计算机技术的迅速发展,数字图像处理技术在各个领域的研究和应用日益深入和广泛。java是sun公司推出的一种面向对象编程语言。java非常适合于企业网络和internet环境,现已成为internet中最受欢迎、最有影响的编程语言之一。目前国内使用java语言开发的图像处理系统比较少,这也增加了这方面的研究价值。本论文首先对java处理图形图像的算法做介绍,并设计java gui(图形用户界面)用来显示图像处理的结果。关键词:java graphics 2d,图形图像,java gui,多媒体,数字图像

2、一、绪论4(一)课题来源5(二)课题的目的和意义5(三)本软件的特点5(四) java语言的发展概况51.java语言的诞生52.java语言的发展63.java语言的成熟6(五)java语言的特点61、简单性62、面向对象73、分布式74、健壮性75、安全性76、可移植性7二、问题分析7(一)功能设计7(二)设计问题81、理论问题:82、技术问题:83、实践问题:8(三)设计原则8(四)开发工具的选择8(五)使用到的主要技术91、java.awt92、java.awt.image93、java.awt.color9三、设计与实现10(一)总体结构设计101、对bufferedimages类对

3、象进行图像数据处理方案如下:102、软件的组成和功能103、软件功能测试:14四 结束语14参考文献16一、绪论20世纪70年代以来,随着计算机的广泛应用,其使用者对其画面表现能力的需求也随之提高,数字图像处理技术应运而生,它是一门迅速发展的新兴学科,目的是在计算机上实现和强化人的视觉以及人对视觉信息的加工处理能力。目前国内外市场依然是以adobe公司的photoshop为主流的图形图像处理软件,软件拥有强大的处理能力,丰富的工具库,代表着计算机图形图像处理领域的最高技术标准。进入21世纪,随着计算机技术的迅猛发展和相关理论的不断完善,数字图像处理技术在许多应用领域受到广泛重视并取得了重大的开

4、拓性成就,如航空航天、生物医学工程、工业检测、机器人视觉、公安司法、军事制导、文化艺术等领域。图形图像处理技术已成为一门引人注目、前景远大的新型学科。 internet是全球最大的计算机网络,它起源于1968年美国国防部高级研究计划局 (arpa-advanced research project agency)主持研制用于支持军事研究的计算机实验网arpanet。网络的发展,同时为图形图像技术提供了发展的空间,并且网络的多媒体化,丰富化,同时也对图形图像处理提出了更高的要求,google的卫星地图便是非常成功的例子如今,各式各样的,形形色色的精美图片,在各个领域得到了广泛的应用,图形图像技术

5、已经成为必不可少的应用。 (一)课题来源本课题根据我大三学习期间所学习的java开发课程结合现在网上流行图形图像处理软件,因为个人对这个领域比较感兴趣,这个图形图像软件的编写是对我大学期间所学知识的一个总结。(二)课题的目的和意义主要目的在于通过基于java平台的图像处理软件的设计与实现,研究java语言的面向对象编程和多媒体编程,并了解其图形绘制机制和多线程原理.进一步熟悉javaapi类库,对面向对象编程有更加深入的学习和掌握。本选题的意义在于对图形图像处理领域方面的深入和探究,试图开发出具有实用价值的,或者具有一定参考价值的软件产品.并且可以进一步了解和掌握软件开发的全过程,改善和提高自

6、身的软件设计和开发能力。同时,自身对图形图像的处理比较感兴趣,能够增加自身对编程的学习和认识。 (三)本软件的特点由于自身技术的限制,在开发上面不能展示太多的功能和特色,加上java语言本身在图形图像处理方面并不是很出色,所以在功能上只包含了几何变换,访射变换,钝化,锐化,颜色变换等操作。选择使用java语言作为软件的编程语言,是因为java语言的简单和可移植性强的特点,它能够跨平台运行,使用起来比较方便,不像c+那样,是基于源代码的移植,不能够跨平台运行,对于软件开发没有java那样便捷,并且java在图形图像这方面的研究较少,希望在这上面有所发现。(四) java语言的发展概况1.java

7、语言的诞生 它是有sun公司开发出来的.它的诞生主要得益于家用电器的芯片.开始时,它的开发者想用c+语言来开发电器的芯片,但是,由于芯片的种类各不相同,因此,程序要进行多次编译.尤其是c+中的指针操作,一旦操作不慎,就会引起问题,程序可以出错误,但是家用电器不能出错误.为此,它的开发者将c+语言进行简化,去掉指针操作,去掉运算符重载等,去掉c+中的多重继承,得到了java语言,将它变为一种解释执行的语言,在每个芯片上装上一个java语言虚拟机器。刚开始java语言被称之为oak语言(橡树语言)。这个也就是java语言的安全性,它安全的主要根源就是抛弃掉了c+中指针的使用,从而变成了java中的

8、包装类的使用。2.java语言的发展 它的发展得益于互联网的发展.刚开始时,互联网的发展比较缓慢,每个网页上面都是静态的画面,不能与用户进行操作.即使是后来的cgi也只是在服务器端进行运行,速度太慢,人们迫切需要能够在浏览器端能与用户进行交换,并且画面能够动起来,但是,www上的机器是各种各样,操作系统也是千差万别,后来人们想到了oak语言,它是解释型执行语言,只要每个机器上的浏览器能够有它的虚拟机器,oak语言就可以运行,因此oak语言发展起来,后来改名为java语言.现在网络上流行开发语言是java语言。它是当前社会软件开发的主流语言,主要得益于它的使用简单和可移植性强。3.java语言的

9、成熟 java语言现在逐渐成熟起来,它的类已经近千个,它的类无所不包,而且还可以通过第三方购买类,为java语言的发展提供了良好的发展前景.同时它也是跨平台的语言,因此许多软件开发商,硬件开发上也争先恐后地想乘上java语言的快车,都声称支持java语言,它对微软发起了有力的挑战,而且sun公司正努力开发java芯片。目前java程序已经能运行在从windows系列、unix系列、mac os系列到linux等几乎所有操作系统平台上,而且特别重要的是它已经能做到一次编写,到处运行;另一方面,与c 等传统程序设计语言相比,用java来开发gui应用程序的难度已经大大降低;加上java语言所具有的

10、纯面向对象、网络功能强大等特性,使得java非常适于用来编制应用软件。(五)java语言的特点java语言的特点总结主要有以下6点:1、简单性 java语言类似于c+,所以c+程序员可以很容易的掌握,但是java语言又是对c+语言的一种简单化,它摒弃了c+中容易犯错误的地方,例如指针的使用和内存管理。而且还提供了丰富的类库,给程序员的开发带了很大的方便。2、面向对象 面向对象可以说是java语言最重要的特性,java语言的设计完全是面向对象的,它不像c语言那样是面向程序设计的。java语言支持静态和动态的代码重用和继承,3、分布式 java语言包括一个支持http和ftp基于tcp/ip协议的

11、子库,因此java程序可以使用url打开并且访问网络上的对象,和访问本系统的对象几乎一样。可以为分布环境尤其是internet提供的动态内容。4、健壮性java致力于检查编译和运行时候的错误,类型检查帮助检查出很多开发早期的错误,java自己操纵内存,减少了很多内存出错的可能性。5、安全性java的安全性可以从两个方面进行保证,一方面,像指针和内存的释放等c+功能被摒弃,避免了非法内存操作。另一方面,用java创建浏览器时候,语言功能和浏览器本身提供的功能结合起来使它更加安全。6、可移植性 大多数的语言产生的目标代码只能运行在一种cpu上面,即使是那种支持多种cpu的编译器,也不可能一下产生多

12、种适合的目标代码。如果你要在多个cpu上运行,就要编译多次,这给编程技术带来了很大的不便。而java编译器就不同了,它产生的目标代码是针对一种并不存在的jvm虚拟机,这种虚拟机能够掩盖不同cpu的差别,是目标代码可以运行在任何一台装有虚拟机的平台上。二、问题分析(一)功能设计本软件java 2d 编程和多线程编程的结合应用,主要功能定位于通过java 2d api对图形进行处理的一些机制。整个软件的操作简单,设计清晰明了,目的在于功能和效果的测试。软件的整体布局上简洁实用,美观大方。方便使用,功能说明清晰,由于自己的技术水平有限,图片的处理效果可能不太理想,但是能够体现出java在图形处理方面

13、的基本功能。(二)设计问题本课题研究的目标是:建立一个基于java平台的符合当代社会理念、具有实用价值的、综合效益很高的图片处理机制。要解决的主要问题有以下几点:1、理论问题: 如今网络上图形图像处理软件随处可见,花样繁多,用处各有不同。如何设计出自己的风格,又要体现出实用性,不流于形式,是需要慎重考虑的。2、技术问题:运用到的java中的多媒体编程,java 2d,多线程的严格使用,体系结构,安全性,使用到的工具,都是我们要慎重考虑的问题,也是开发一个好的图像处理软件的必备要求。3、实践问题:现在网络上流行的图形图像处理软件功能强大,花样繁多,需要从实践中不断总结,不切实际地模仿别人,拷贝别

14、人,是不可取的。(三)设计原则本课题的主要开发原则遵循以下几点:1、界面风格简洁自然,切忌浮躁夸张的风格,为实用者带来一个轻松的交流环境;2、软件的主要功能要基本完整,包括锐化,钝化,拉伸,颜色暗亮,图片翻转、等等;3、 遵循java的图像处理机制,保证代码运行的稳定性和可靠性。(四)开发工具的选择 esclipes是java开发的一种软件,他的性能好使用方便,适用于中小型企业和普通的软件开发。在这里要用到以下的一些工具:1、java编译器 java编译器将java源代码文件编译成可执行的java字节码。java源代码文件的扩展名为 . java,java编译器把这种扩展名的文件编译成扩展名为

15、.class的文件。源文件中的每个类在编译后都将产生一个class文件,这意味一个java源代码文件可能编译生成多个class文件。2、java解释器 java解释器对编译生成的字节码格式的可执行程序的运行提供支持,它是运行非图形java程序的命令行工具。(五)使用到的主要技术 图像是按空间位置组织的像素的集合,而像素则定义了某个显示位置的图像外观,java 2d api 在处理图像中提供了一些实用的处理机制,java 2d api的图像处理主要是针对bufferedimage类创建图像进行的,bufferedimage类对象是直接在内存中创建的,用来保存和操作从文件中或url中检索的图像数据

16、,并提供一组在bufferedimage对象上进行图像处理操作的xyzop类,例如,affinetransformop、bandcombineop、colorconverop、convolveop、lookupop、rescaleop等类,这些类可用于图像的缩放等几何变换、仿射变换、边缘检测、钝化、锐化、增强对比、图像颜色校正等操作,并可以通过graphics2d对象将图像数据显示在屏幕设备上。对图像的各种操作一般是通过被称为过滤器(filter)的图像操作类实现的。1、java.awt java.awt包含了一些新增的2d api类和界面。其中graphics2d继承于java.awt.gr

17、aphics,是描绘2d图形的对象。当对象要被描绘时,piant或update方法会自动根据适当的图形上下文,然后调用graphics2d对象的绘制方法。2、java.awt.image java 2d api的即时模式图像处理类和接口处理像素映射图像的技术。在java.awt.image包中,java 2d api中的图像操作类定义了许多过滤器,源图像经过过滤,产生出新图像。3、java.awt.color java.awt.color包定义了colorspace类。该类包含在当前颜色空间和两个标准颜色之间进行转换的方法。 三、设计与实现(一)总体结构设计软件的处理结构如下图: 源图像图像处

18、理操作目标图像过滤器(二)具体设计 1、对bufferedimages类对象进行图像数据处理方案如下:1) 创建bufferedimage对象,将图像数据存储在bufferedimage对象中。2) 确定图像数据处理模式,变换方式。3) 确定变换矩阵kernel。4) 变换操作,图像数据处理,应用图像数据处理操作类。5) 通过graphics2d对象将图像显示在屏幕上 2、软件的组成和功能1) 软件的组成如下 2) 软件的功能介绍如下:1.“翻转”功能 相应代码如下:/* 图像翻转变换方法 */ public void turnbufferedimage() bfdimage2 = new b

19、ufferedimage(bfdimage1.getwidth(), bfdimage1.getwidth(), bfdimage1.gettype();databuffer db1 = bfdimage1.getraster().getdatabuffer();databuffer db2 = bfdimage2.getraster().getdatabuffer();for (int i = db1.getsize() - 1, j = 0; i = 0; i-, j+) db2.setelem(j, db1.getelem(i);if (turn) bfdimage = bfdimage

20、2;turn = false; else bfdimage = bfdimage1;turn = true;2.“锐化”功能 相应代码如下: /* 图像锐化变换方法 */public void sharpimage() bfdimage = null;float data = -1.0f, -1.0f, -1.0f, -1.0f, 10.0f, -1.0f, -1.0f,-1.0f, -1.0f ;kernel kernel = new kernel(3, 3, data);convolveop co = new convolveop(kernel, convolveop.edge_no_op

21、, null);co.filter(bfdimage1, bfdimage2);bfdimage = bfdimage2;3.“模糊”功能 相应代码如下/* 图像模糊变换方法 */public void blurimage() float data = 0.0625f, 0.125f, 0.0625f, 0.125f, 0.125f, 0.125f,0.0625f, 0.125f, 0.0625f ;kernel kernel = new kernel(3, 3, data);convolveop co = new convolveop(kernel, convolveop.edge_no_o

22、p, null);co.filter(bfdimage1, bfdimage2);bfdimage = bfdimage2;4.“变灰”功能 相应代码如下:/* 图像变灰方法 */public void grayimage() colorconvertop cco = new colorconvertop(colorspace.getinstance(colorspace.cs_gray), null);cco.filter(bfdimage1, bfdimage2);bfdimage = bfdimage2;5.“明暗度”功能 相应代码如下:/* 图像变亮方法 */public void b

23、rightenlut() short brighten = new short256;short pixelvalue;for (int i = 0; i 255) pixelvalue = 255; else if (pixelvalue 0) pixelvalue = 0;brighteni = pixelvalue;lut = new shortlookuptable(0, brighten);lookupop lop = new lookupop(lut, null);lop.filter(bfdimage1, bfdimage2);bfdimage = bfdimage2;/* 图像

24、变暗方法 */public void darkenlut() short darken = new short256;short pixelvalue;for (int i = 0; i 255) pixelvalue = 255; else if (pixelvalue 0) pixelvalue = 0;darkeni = pixelvalue;lut = new shortlookuptable(0, darken);lookupop lop = new lookupop(lut, null);lop.filter(bfdimage1, bfdimage2);bfdimage = bfd

25、image2;6.“拉伸”功能,相应代码如下:/* 图像拉伸方法 */public void transform() transform.settoscale(scalex, scaley);affinetransformop ato = new affinetransformop(transform, null);bfdimage2.creategraphics().clearrect(0, 0, bfdimage2.getwidth(this),bfdimage2.getheight(this);ato.filter(bfdimage1, bfdimage2);bfdimage = bfd

26、image2; x方向:public void setscalex(double scalex) this.scalex = scalex; y方向: public void setscaley(double scaley) this.scaley = scaley;7.“还原”功能 相应代码如下:/* 图像还原方法 */public void resume() bfdimage = bfdimage1;this.repaint(); 3、软件功能测试: 通过点击按钮触发事件,然后通过gui查看图像的变化情况,以此测试软件的处理功能是否可靠。四 结束语 经过一个月的学习和努力,软件的设计与开发

27、已经基本完成,我感觉在这段时间中受益匪浅。我从图形图像处理软件的需求分析做起,从初步设计,到具体的模块划分,再到最后的统一联结,完成一个图形图像处理软件的编写过程,我体会到技术工作的乐趣和艰辛。通过这次软件的编写,我了解到软件开发的整个过程:接到任务时首先需要作需求分析,收集材料和做一系列前期的准备工作,然后要具体的分析工作,最后再进行代码的实现和测试。另外,经过这段时的边学边做的过程,我对java的相关知识有一定了解,并且激发出了浓烈的学习兴趣,而这无疑也是非常有益的。这次实践也是大学期间一个难得的实践锻炼机会,相信这次锻炼将会为我以后的工作和学习起到指导性的作用。参考文献1 美bruce

28、eckeljava编程思想m 北京:机械工业出版社,2005:609-712。2 廖雷等java程序设计教程m(第二版)北京:中国电力出版社,2003:13-383 马 军java多线程编程初步j电脑报,2004,4(10):372-375.4 韩徐明浩 著,武传海 译java编程基础、应用与实例m北京:人民邮电出版社,2005:79-81.5 美kenneth f. krutsch.java用户界面编程指南m.北京:电子工业出版社,2005:45-89.6 rogers cadenhead. samsteach yourself java 1.2 in 24 hoursm . london:pearson,1999:22-63.7 cay s.horstmanncore java 2.volume i:fundamentals mlondon:prentice-hall,2000:167-2218 孙一林,彭波. java编程技术全接触m. 北京:清华大学出版设,2008:234-281.9 孙卫琴jav

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论