数字图像处理报告.docx

上传人:b****8 文档编号:23770737 上传时间:2023-05-20 格式:DOCX 页数:14 大小:2.18MB
下载 相关 举报
数字图像处理报告.docx_第1页
第1页 / 共14页
数字图像处理报告.docx_第2页
第2页 / 共14页
数字图像处理报告.docx_第3页
第3页 / 共14页
数字图像处理报告.docx_第4页
第4页 / 共14页
数字图像处理报告.docx_第5页
第5页 / 共14页
点击查看更多>>
下载资源
资源描述

数字图像处理报告.docx

《数字图像处理报告.docx》由会员分享,可在线阅读,更多相关《数字图像处理报告.docx(14页珍藏版)》请在冰豆网上搜索。

数字图像处理报告.docx

数字图像处理报告

数字图像处理报告

姓名:

张行

学号:

201203284

班级:

计科11202

序号:

31

院系:

计算机科学学院

 

1、实验目的

1.了解数字图像处理技术

2.通过上机实验编写算法实现各种功能

3.加深对数字图像处理的认识

二、实验原理

1. 模糊处理 

(1)了解空间域图像模糊的各种方法; 

(2)通过编写程序掌握采用直方图均衡化进行图像模糊的方法; 

2. 图像旋转 

(1)改变像素矩阵值,达到旋转的效果; 

3. 图像锐化 

(1)了解并掌握使用微分算子进行图像边缘检测的基本原理; 

(2)编写程序使用Laplacian算子(二阶导数算子)实现图像锐化,进一步理解图像锐化的实质; 

(3)掌握使用不同梯度算子(一阶导数算子)进行图像边缘检测的原理、方法,根据实验结果分析各种算子的工作效果;

三、实验内容

    主要是图像的几何变换的编程实现,具体包括图像的读取、改写,图像模糊,图像的锐化,图像的旋转等. 

    具体要求如下:

 

1.编程实现图像模糊; 

2.编程实现图像的锐化; 

3.编程实现图像的旋转; 

4.编程实现以任意角度对图像进行旋转变换

四、源代码

实现语言:

java

packagecn.lk.test1;

importjava.awt.*;

importjava.awt.event.*;

importjava.awt.image.*;

importjavax.swing.*;

importjava.io.*;

importjava.awt.geom.AffineTransform;

publicclassImagePanelextendsJPanel{

Imageimage;//被处理的图像

BufferedImagebufImage;//用于显示的缓冲区图像

BufferedImageoriginalBufImage;//原始缓冲区图像

Graphics2Dg2D;//图形环境

LookupTableLUT;//查找表

//载入图像

publicvoidloadImage(StringfileName){

image=this.getToolkit().getImage(fileName);//获取图像

MediaTrackermt=newMediaTracker(this);//实例化媒体加载器mt.addImage(image,0);//增加待加载图像到媒体加载器

try{

mt.waitForAll();//等待所有图像的加载完成

}catch(Exceptionex){

ex.printStackTrace();//输出出错信息

}

//创建原始缓冲区图像

originalBufImage=new

BufferedImage(image.getWidth(this),image.getHeight(this),

BufferedImage.TYPE_INT_ARGB);

g2D=originalBufImage.createGraphics();//创建缓冲区图像的图形环境

g2D.drawImage(image,0,0,this);//传输源图像数据到缓冲区图像中

bufImage=originalBufImage;

repaint();//重绘组件

}

//过滤图

publicvoidapplyFilter(float[]data){

if(bufImage==null)

return;//如果bufImage为空则直接返回

Kernelkernel=newKernel(3,3,data);

ConvolveOpimageOp=newConvolveOp(kernel,ConvolveOp.EDGE_NO_OP,

null);//创建卷积变换操作对象

BufferedImagefilteredBufImage=newBufferedImage(

image.getWidth(this),image.getHeight(this),

BufferedImage.TYPE_INT_ARGB);//过滤后的缓冲区图像

imageOp.filter(bufImage,filteredBufImage);//过滤图像,目标图像在filteredBufImage

bufImage=filteredBufImage;//让用于显示的缓冲区图像指向过滤后的图像

repaint();//重绘组件

}

//模糊图像

publicvoidblur(){

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);

}

//锐化图像

publicvoidsharpen(){

if(bufImage==null)

return;

float[]data={

-1.0f,-1.0f,-1.0f,

-1.0f,9.0f,-1.0f,

-1.0f,-1.0f,-1.0f

};

applyFilter(data);

}

//重载applyFilter方法

publicvoidapplyFilter(){

LookupOplop=newLookupOp(LUT,null);//根据查找表,创建查找过滤器

lop.filter(bufImage,bufImage);//过滤图像

repaint();

}

publicvoidxuZh(intdegree,Colorbgcolor){

intiw=bufImage.getWidth();//原始图象的宽度

intih=bufImage.getHeight();//原始图象的高度

intw=0;

inth=0;

intx=0;

inty=0;

degree=degree%360;

if(degree<0)

degree=360+degree;//将角度转换到0-360度之间

doubleang=Math.toRadians(degree);//将角度转为弧度

/**

*确定旋转后的图象的高度和宽度

*/

if(degree==180||degree==0||degree==360){

w=iw;

h=ih;

}elseif(degree==90||degree==270){

w=ih;

h=iw;

}else{

doublecosVal=Math.abs(Math.cos(ang));

doublesinVal=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);

BufferedImagerotatedImage=newBufferedImage(w,h,bufImage.getType());

Graphics2Dgs=(Graphics2D)rotatedImage.getGraphics();

if(bgcolor==null){

rotatedImage=gs.getDeviceConfiguration().createCompatibleImage(w,

h,Transparency.TRANSLUCENT);

}else{

gs.setColor(bgcolor);

gs.fillRect(0,0,w,h);//以给定颜色绘制旋转后图片的背景

}

AffineTransformat=newAffineTransform();

at.rotate(ang,w/2,h/2);//旋转图象

at.translate(x,y);

AffineTransformOpop=newAffineTransformOp(at,

AffineTransformOp.TYPE_BICUBIC);

op.filter(bufImage,rotatedImage);

bufImage=rotatedImage;

repaint();}

//恢复图像

publicvoidreset(){

if(bufImage==null)return;

bufImage=originalBufImage;//

g2D.drawImage(image,0,0,this);

repaint();//调用paint()方法重绘组件

}

publicvoidpaint(Graphicsg){

super.paintComponent(g);

//如果bufImage非空,则在组件上绘制它

if(bufImage!

=null){

Graphics2Dg2=(Graphics2D)g;

g2.drawImage(bufImage,(this.getWidth()-bufImage.getWidth())/2,

(this.getHeight()-bufImage.getHeight())/2,this);

}}

}

packagecn.lk.test1;

importjava.awt.*;

importjava.awt.event.*;

importjava.awt.image.*;

importjavax.swing.*;

importjava.io.*;

importjavax.swing.JFrame;

publicclassPicOptionextendsJFrameimplementsActionListener{

privateJPaneljPanel=newJPanel();//面板jPanel用于容纳模糊、锐化、还原图像按钮

privateJButtonbuttonFile;//打开图像文件按钮

privateJButtonbuttonBlur;//模糊图像按钮

privateJButtonbuttonSharpen;//锐化图像按钮

privateJButtonbuttonXuZh;//旋转图片

privateJButtonbuttonReset;//还原图像按钮

ImagePanelimagePanel=newImagePanel();//创建ImagePanel对象用于绘制图像

//构造函数

publicPicOption(){

super("图片处理");

ContainercontentPane=getContentPane();//得到容器

buttonFile=newJButton("打开图像文件");//实例化组件

buttonFile.addActionListener(this);//增加事件监听

buttonBlur=newJButton("模糊图像");

buttonBlur.addActionListener(this);

buttonSharpen=newJButton("锐化图像");

buttonSharpen.addActionListener(this);

buttonXuZh=newJButton("旋转图片");

buttonXuZh.addActionListener(this);

buttonReset=newJButton("还原图片");

buttonReset.addActionListener(this);

buttonReset.setEnabled(false);

jPanel.add(buttonBlur);//增加组件到面板上

jPanel.add(buttonSharpen);

jPanel.add(buttonXuZh);

jPanel.add(buttonReset);

contentPane.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.EXIT_ON_CLOSE);//关闭窗口时退出程序

}

publicstaticvoidmain(String[]args){

newPicOption();

}

@Override

publicvoidactionPerformed(ActionEvente){

JButtonbutton=(JButton)e.getSource();//获取事件源

//打开图像文件按钮buttonFile事件处理

if(button==this.buttonFile){

JFileChooserchooser=newJFileChooser();//实例化文件选择器chooser.setFileSelectionMode(JFileChooser.FILES_ONLY);//设置文件打开模式为仅打开文件

chooser.setCurrentDirectory(newFile("."));//设置文件选择器当前目录

//设置图像文件过滤器

chooser.setFileFilter(newjavax.swing.filechooser.FileFilter(){

publicbooleanaccept(Filefile){//可接受的文件类型

Stringname=file.getName().toLowerCase();

returnname.endsWith(".gif")

||name.endsWith(".jpg")

||name.endsWith(".jpeg")

||file.isDirectory();

}

publicStringgetDescription(){//文件描述

return"图像文件"}});

intresult=chooser.showOpenDialog(this);//显示文件选择对话框

if(result==JFileChooser.APPROVE_OPTION){//得到用户行为

StringfileName=chooser.getSelectedFile().getAbsolutePath();//得到选择的文件名

imagePanel.loadImage(fileName);//截入图像并显示

}

}

//模糊图像按钮buttonBlur事件处理

elseif(button==this.buttonBlur)

imagePanel.blur();//模糊图像

buttonReset.setEnabled(true);//设置还原图像按钮可用

}

//锐化图像按钮buttonSharpen事件处理

elseif(button==this.buttonSharpen){

imagePanel.sharpen();//锐化图像

buttonReset.setEnabled(true);//设置还原图像按钮可用

}

//旋转图片事件处理

elseif(button==this.buttonXuZh){

imagePanel.xuZh(30,Color.black);

buttonReset.setEnabled(true);

}

//还原图像按钮buttonReset事件处理

elseif(button==this.buttonReset){

imagePanel.reset();//还原图像

buttonReset.setEnabled(false);//设置还原图像按钮不可用

}}

}

五、实验结果

1.实验原图

2.模糊

3.锐化

2.旋转

5、实验小结

通过本次实验,让我能熟练的运用java语言来编写代码,掌握了java语言文件操作的一些基本函数及其含义。

领悟到了编程过程中,变量定义的重要性。

以及对数字图像处理知识的掌握及应用。

了解了图像的处理过程以及如何读取,写入,获取像素点。

对数字图像处理有了更深的了解,以后会更加努力学习知识,让自己不打断成长。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 工作范文 > 行政公文

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

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