ImageVerifierCode 换一换
格式:DOCX , 页数:14 ,大小:2.18MB ,
资源ID:23770737      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/23770737.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(数字图像处理报告.docx)为本站会员(b****8)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

数字图像处理报告.docx

1、数字图像处理报告数字图像处理报告姓 名: 张 行 学 号: 201203284 班 级: 计科11202 序 号: 31 院 系: 计算机科学学院 1、实验目的1.了解数字图像处理技术2.通过上机实验编写算法实现各种功能3.加深对数字图像处理的认识二、实验原理1.模糊处理(1)了解空间域图像模糊的各种方法;(2)通过编写程序掌握采用直方图均衡化进行图像模糊的方法;2.图像旋转(1)改变像素矩阵值,达到旋转的效果;3.图像锐化(1)了解并掌握使用微分算子进行图像边缘检测的基本原理;(2)编写程序使用Laplacian算子(二阶导数算子)实现图像锐化,进一步理解图像锐化的实质;(3)掌握使用不同梯

2、度算子(一阶导数算子)进行图像边缘检测的原理、方法,根据实验结果分析各种算子的工作效果;三、实验内容主要是图像的几何变换的编程实现,具体包括图像的读取、改写,图像模糊,图像的锐化,图像的旋转等.具体要求如下:1编程实现图像模糊;2编程实现图像的锐化;3编程实现图像的旋转;4编程实现以任意角度对图像进行旋转变换四、源代码实现语言:javapackage cn.lk.test1;import java.awt.*;import java.awt.event.*;import java.awt.image.*;import javax.swing.*;import java.io.*;import

3、java.awt.geom.AffineTransform;public class ImagePanel extends JPanel Image image; / 被处理的图像 BufferedImage bufImage; / 用于显示的缓冲区图像 BufferedImage originalBufImage; / 原始缓冲区图像 Graphics2D g2D; / 图形环境 LookupTable LUT;/ 查找表 / 载入图像 public void loadImage(String fileName) image = this.getToolkit().getImage(file

4、Name); / 获取图像 MediaTracker mt = new MediaTracker(this); / 实例化媒体加载器 mt.addImage(image, 0); / 增加待加载图像到媒体加载器 try mt.waitForAll(); / 等待所有图像的加载完成 catch (Exception ex) ex.printStackTrace(); / 输出出错信息 / 创建原始缓冲区图像 originalBufImage = new BufferedImage(image.getWidth(this), image.getHeight(this), BufferedImage

5、.TYPE_INT_ARGB); g2D = originalBufImage.createGraphics(); / 创建缓冲区图像的图形环境 g2D.drawImage(image, 0, 0, this); / 传输源图像数据到缓冲区图像中 bufImage = originalBufImage; repaint(); / 重绘组件 / 过滤图 public void applyFilter(float data) if (bufImage = null) return; / 如果bufImage为空则直接返回 Kernel kernel = new Kernel(3, 3, data)

6、; ConvolveOp imageOp = new ConvolveOp(kernel, ConvolveOp.EDGE_NO_OP, null); / 创建卷积变换操作对象 BufferedImage filteredBufImage = new BufferedImage( image.getWidth(this), image.getHeight(this), BufferedImage.TYPE_INT_ARGB); / 过滤后的缓冲区图像 imageOp.filter(bufImage, filteredBufImage);/ 过滤图像,目标图像在filteredBufImage

7、bufImage = filteredBufImage; / 让用于显示的缓冲区图像指向过滤后的图像 repaint(); / 重绘组件 / 模糊图像 public void blur() if (bufImage = null) return; float data = 0.0625f, 0.125f, 0.0625f, 0.125f, 0.025f, 0.125f, 0.0625f, 0.125f, 0.0625f ; applyFilter(data); / 锐化图像 public void sharpen() if (bufImage = null) return; float dat

8、a = -1.0f, -1.0f, -1.0f, -1.0f, 9.0f, -1.0f, -1.0f, -1.0f, -1.0f ; applyFilter(data); / 重载applyFilter方法 public void applyFilter() LookupOp lop = new LookupOp(LUT, null); / 根据查找表,创建查找过滤器 lop.filter(bufImage, bufImage);/ 过滤图像 repaint(); public void xuZh(int degree, Color bgcolor) int iw = bufImage.get

9、Width();/ 原始图象的宽度 int ih = bufImage.getHeight();/ 原始图象的高度 int w = 0; int h = 0; int x = 0; int y = 0; degree = degree % 360; if (degree 0) degree = 360 + degree;/ 将角度转换到0-360度之间 double ang = Math.toRadians(degree);/ 将角度转为弧度 /* * 确定旋转后的图象的高度和宽度 */ if (degree = 180 | degree = 0 | degree = 360) w = iw;

10、 h = ih; else if (degree = 90 | degree = 270) w = ih; h = iw; else double cosVal = Math.abs(Math.cos(ang); double sinVal = Math.abs(Math.sin(ang); w = (int) (sinVal * ih) + (int) (cosVal * iw); h = (int) (sinVal * iw) + (int) (cosVal * ih); x = (w / 2) - (iw / 2);/ 确定原点坐标 y = (h / 2) - (ih / 2); Buf

11、feredImage rotatedImage = new BufferedImage(w, h, bufImage.getType(); Graphics2D gs = (Graphics2D) rotatedImage.getGraphics(); if (bgcolor = null) rotatedImage = gs.getDeviceConfiguration().createCompatibleImage(w, h, Transparency.TRANSLUCENT); else gs.setColor(bgcolor); gs.fillRect(0, 0, w, h);/ 以给

12、定颜色绘制旋转后图片的背景 AffineTransform at = new AffineTransform(); at.rotate(ang, w / 2, h / 2);/ 旋转图象 at.translate(x, y); AffineTransformOp op = new AffineTransformOp(at, AffineTransformOp.TYPE_BICUBIC); op.filter(bufImage, rotatedImage); bufImage = rotatedImage; repaint(); / 恢复图像 public void reset() if (bu

13、fImage = null)return; bufImage = originalBufImage; / g2D.drawImage(image, 0, 0, this); repaint(); / 调用paint()方法重绘组件 public void paint(Graphics g) super.paintComponent(g); / 如果bufImage非空,则在组件上绘制它 if (bufImage != null) Graphics2D g2 = (Graphics2D) g; g2.drawImage(bufImage, (this.getWidth() - bufImage.

14、getWidth() / 2, (this.getHeight() - bufImage.getHeight() / 2, this); package cn.lk.test1;import java.awt.*;import java.awt.event.*;import java.awt.image.*;import javax.swing.*;import java.io.*;import javax.swing.JFrame;public class PicOption extends JFrame implements ActionListener private JPanel jP

15、anel = new JPanel(); / 面板jPanel用于容纳模糊、锐化、还原图像按钮 private JButton buttonFile; / 打开图像文件按钮 private JButton buttonBlur; / 模糊图像按钮 private JButton buttonSharpen; / 锐化图像按钮 private JButton buttonXuZh;/旋转图片 private JButton buttonReset; / 还原图像按钮 ImagePanel imagePanel = new ImagePanel();/ 创建ImagePanel对象用于绘制图像 /

16、 构造函数 public PicOption() super(图片处理); Container contentPane = getContentPane(); / 得到容器 buttonFile = new JButton(打开图像文件); / 实例化组件 buttonFile.addActionListener(this); / 增加事件监听 buttonBlur = new JButton(模糊图像); buttonBlur.addActionListener(this); buttonSharpen = new JButton(锐化图像); buttonSharpen.addAction

17、Listener(this); buttonXuZh=new JButton(旋转图片); buttonXuZh.addActionListener(this); buttonReset = new JButton( 还原图片 ); buttonReset.addActionListener(this); buttonReset.setEnabled(false); jPanel.add(buttonBlur); / 增加组件到面板上 jPanel.add(buttonSharpen); jPanel.add(buttonXuZh); jPanel.add(buttonReset); cont

18、entPane.add(jPanel, BorderLayout.SOUTH); / 增加组件到容器上 contentPane.add(buttonFile, BorderLayout.NORTH); contentPane.add(imagePanel, BorderLayout.CENTER);/ 设置窗口 this.setSize(900, 600); / 设置窗口大小 this.setLocation(200, 50);/ 设置窗口出现的位置 this.setVisible(true); / 设置窗口可见 this.setDefaultCloseOperation(JFrame.EXI

19、T_ON_CLOSE); / 关闭窗口时退出程序 public static void main(String args) new PicOption(); Override public void actionPerformed(ActionEvent e) JButton button = (JButton) e.getSource(); / 获取事件源 / 打开图像文件按钮buttonFile事件处理 if (button = this.buttonFile) JFileChooser chooser = new JFileChooser(); / 实例化文件选择器 chooser.se

20、tFileSelectionMode(JFileChooser.FILES_ONLY); / 设置文件打开模式为仅打开文件 chooser.setCurrentDirectory(new File(.); / 设置文件选择器当前目录 / 设置图像文件过滤器 chooser.setFileFilter(new javax.swing.filechooser.FileFilter() public boolean accept(File file) / 可接受的文件类型 String name = file.getName().toLowerCase(); return name.endsWith

21、(.gif) | name.endsWith(.jpg) | name.endsWith(.jpeg) | file.isDirectory(); public String getDescription() / 文件描述 return 图像文件 ); int result = chooser.showOpenDialog(this); / 显示文件选择对话框 if (result = JFileChooser.APPROVE_OPTION) / 得到用户行为 String fileName = chooser.getSelectedFile().getAbsolutePath(); / 得到

22、选择的文件名 imagePanel.loadImage(fileName); / 截入图像并显示 / 模糊图像按钮buttonBlur事件处理 else if (button = this.buttonBlur) imagePanel.blur(); / 模糊图像 buttonReset.setEnabled(true); / 设置还原图像按钮可用 / 锐化图像按钮buttonSharpen事件处理 else if (button = this.buttonSharpen) imagePanel.sharpen(); / 锐化图像 buttonReset.setEnabled(true); /

23、 设置还原图像按钮可用 /旋转图片事件处理 else if(button=this.buttonXuZh) imagePanel.xuZh(30, Color.black); buttonReset.setEnabled(true); / 还原图像按钮buttonReset事件处理 else if (button = this.buttonReset) imagePanel.reset(); / 还原图像 buttonReset.setEnabled(false); / 设置还原图像按钮不可用 五、实验结果1.实验原图2.模糊3.锐化2.旋转5、实验小结 通过本次实验,让我能熟练的运用java语言来编写代码,掌握了java语言文件操作的一些基本函数及其含义。领悟到了编程过程中,变量定义的重要性。以及对数字图像处理知识的掌握及应用。了解了图像的处理过程以及如何读取,写入,获取像素点。对数字图像处理有了更深的了解,以后会更加努力学习知识,让自己不打断成长。

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1