图形的模糊与锐化参考算法.docx
- 文档编号:7794963
- 上传时间:2023-01-26
- 格式:DOCX
- 页数:11
- 大小:92.18KB
图形的模糊与锐化参考算法.docx
《图形的模糊与锐化参考算法.docx》由会员分享,可在线阅读,更多相关《图形的模糊与锐化参考算法.docx(11页珍藏版)》请在冰豆网上搜索。
图形的模糊与锐化参考算法
您的位置:
咨询直通车>>>岗位入门知识>>>IT类
[JAVA例子]模糊与锐化
∙发布时间:
2009-01-2510:
33:
36
∙来源:
网络
∙点击数:
683
importjava.awt.*;
importjava.awt.event.*;
importjava.awt.image.*;
importjavax.swing.*;
importjava.io.*;
//图像的模糊与锐化
publicclassBlurAndSharpenDemoextendsJFrameimplementsActionListener{
privateJPaneljPanel=newJPanel();//面板jPanel用于容纳模糊、锐化、还原图像按钮
privateJButtonbuttonFile;//打开图像文件按钮
privateJButtonbuttonBlur;//模糊图像按钮
privateJButtonbuttonSharpen;//锐化图像按钮
privateJButtonbuttonReset;//还原图像按钮
ImagePanelimagePanel=newImagePanel();//创建ImagePanel对象用于绘制图像
publicBlurAndSharpenDemo(){
super("图像的模糊与锐化演示");//调用父类构造函数
ContainercontentPane=getContentPane();//得到容器
buttonFile=newJButton("打开图像文件");//实例化组件
buttonFile.addActionListener(this);//增加事件监听
buttonBlur=newJButton("模糊图像");
buttonBlur.addActionListener(this);
buttonSharpen=newJButton("锐化图像");
buttonSharpen.addActionListener(this);
buttonReset=newJButton("还原图像");
buttonReset.addActionListener(this);
jPanel.add(buttonBlur); //增加组件到面板上
jPanel.add(buttonSharpen);
jPanel.add(buttonReset);
contentPane.add(jPanel,BorderLayout.SOUTH);//增加组件到容器上
contentPane.add(buttonFile,BorderLayout.NORTH);
contentPane.add(imagePanel,BorderLayout.CENTER);
//设置窗口
this.setSize(280,230);//设置窗口大小
this.setVisible(true);//设置窗口可见
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//关闭窗口时退出程序
}
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);//设置还原图像按钮可用
}
//还原图像按钮buttonBlur事件处理
elseif(button==this.buttonReset){
imagePanel.reset();//还原图像
buttonReset.setEnabled(false);//设置还原图像按钮不可用
}
}
publicstaticvoidmain(String[]args){
newBlurAndSharpenDemo();
}
publicclassImagePanelextendsJPanel{
Imageimage; //被处理的图像
BufferedImagebufImage; //用于显示的缓冲区图像
BufferedImageoriginalBufImage; //原始缓冲区图像
Graphics2Dg2D; //图形环境
//载入图像
publicvoidloadImage(StringfileName){
image=this.getToolkit().getImage(fileName); //获取图像
MediaTrackermt=newMediaTracker(this);//实例化媒体加载器
mt.addImage(image,0);//增加待加载图像到媒体加载器
try{
mt.waitForAll();//等待所有图像的加载完成
}catch(Exceptionex){
ex.printStackTrace();//输出出错信息
}
//创建原始缓冲区图像
originalBufImage=newBufferedImage(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);
}
//恢复图像
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);
}
}
}
}
参考算法2:
importjava.awt.BorderLayout;
importjava.awt.Color;
importjava.awt.Dimension;
importjava.awt.Font;
importjava.awt.Graphics;
importjava.awt.Graphics2D;
importjava.awt.GridLayout;
importjava.awt.Image;
importjava.awt.MediaTracker;
importjava.awt.event.ActionEvent;
importjava.awt.event.ActionListener;
importjava.awt.image.BufferedImage;
importjava.awt.image.ConvolveOp;
importjava.awt.image.Kernel;
importjavax.swing.JButton;
importjavax.swing.JFrame;
importjavax.swing.JPanel;
publicclassSharpenFuzzyextendsJFrame{
privateJPanelcontentPane;
privateBorderLayoutborderLayout1=newBorderLayout();
//添加的组件
privateJPaneljpanel=newJPanel();
privateJButtonjb1=newJButton();
privateJButtonjb2=newJButton();
privateJButtonjb3=newJButton();
privateGridLayoutgridLayout=newGridLayout();
//创建ShowPanel类的实例
PanelDemopd=newPanelDemo();
publicvoidinitial(){
//设置各组件的属性
contentPane=(JPanel)this.getContentPane();
contentPane.setLayout(borderLayout1);
this.setSize(newDimension(380,550));
this.setTitle("图像的明暗处理演示");
jb1.setFont(newFont("Dialog",Font.BOLD,13));
jb1.setText("SharpImage");
jb1.addActionListener(newActionListener(){//添加事件监听器
publicvoidactionPerformed(ActionEvente){
jb1_actionPerformed(e);
}
});
jb2.setFont(newFont("Dialog",Font.BOLD,13));
jb2.setText("BiurImage");
jb2.addActionListener(newActionListener(){//添加事件监听器
publicvoidactionPerformed(ActionEvente){
jb2_actionPerformed(e);
}
});
jb3.setFont(newFont("Dialog",Font.BOLD,13));
jb3.setText("Reset");
jb3.addActionListener(newActionListener(){//添加事件监听器
publicvoidactionPerformed(ActionEvente){
jb3_actionPerformed(e);
}
});
jpanel.setLayout(gridLayout);
jpanel.add(jb1,null);
jpanel.add(jb2,null);
jpanel.add(jb3,null);
contentPane.add(jpanel,BorderLayout.SOUTH);
//在窗口中部添加ShowPanel面板
contentPane.add(pd,BorderLayout.CENTER);
this.setVisible(true);
}
publicvoidjb1_actionPerformed(ActionEvente){
pd.sharpImage();//调用锐化方法
pd.repaint();//绘制锐化后的图像
}
publicvoidjb2_actionPerformed(ActionEvente){
pd.blurImage();//调用模糊方法
pd.repaint();//绘制模糊后的图像
}
publicvoidjb3_actionPerformed(ActionEvente){
pd.reset();//缓冲区图像为源图像
pd.repaint();//绘制源图像
}
publicstaticvoidmain(String[]args){
newSharpenFuzzy().initial();
}
}
classPanelDemoextendsJPanel{
privateBorderLayoutborderLayout=newBorderLayout();
//定义新属性
Imageimage;//源图像
BufferedImagebi1;//缓冲区图像
BufferedImagebi2;//缓冲区图像
BufferedImagebi3;//缓冲区图像
Graphics2Dg2d;//图像上下文
publicPanelDemo(){
this.setLayout(borderLayout);
loadImage();//加载图片
createBufferedImage();//创建缓冲区图像
bi1=bi2;
this
.setSize(newDimension(image.getWidth(this),image
.getHeight(this)));//设置面板大小
}
publicvoidloadImage(){
//加载图片
image=this.getToolkit().getImage(
//这里如果不填写一个存在的图片,程序会抛出空指针异常
ClassLoader.getSystemResource("chaojikatong.jpg"));//创建Image对象
MediaTrackermt=newMediaTracker(this);
mt.addImage(image,0);
try{
mt.waitForAll();
}catch(Exceptione){
e.printStackTrace();//表示加载失败
}
if(image.getWidth(this)==-1){
System.out.println("不能创建图象");//如果不存在退出程序
System.exit
(1);
}
}
publicvoidcreateBufferedImage(){
//根据image对象创建一个缓冲区图像
bi2=newBufferedImage(image.getWidth(this),image.getHeight(this),
BufferedImage.TYPE_INT_ARGB);
//向缓冲区图像中输入原image对象的图象数据
g2d=bi2.createGraphics();
g2d.drawImage(this.image,0,0,this);//绘制缓冲区图像
//创建另一个空的缓冲区图像,大小和类型相同的bi3
bi3=newBufferedImage(image.getWidth(this),image.getHeight(this),
BufferedImage.TYPE_INT_ARGB);
}
publicvoidsharpImage(){//锐化图像的方法
float[]data={-1.0f,-1.0f,-1.0f,10.f,-1.0f,-1.0f,-1.0f,-1.0f};
Kernelkernel=newKernel(3,3,data);
ConvolveOpco=newConvolveOp(kernel,ConvolveOp.EDGE_NO_OP,null);//创建卷积过滤器
co.filter(bi2,bi3);//将存储源图像的缓冲区图像的数据经卷积过滤器处理后进入另一个缓冲区
bi1=bi3;//bi1指向处理后的图像缓冲区bi3
}
publicvoidblurImage(){//模糊图像的方法
float[]data={0.0625f,0.125f,0.0625f,0.125f,0.25f,0.125f,
0.0625f,0.125f,0.0625f};
Kernelkernel=newKernel(3,3,data);
ConvolveOpco=newConvolveOp(kernel,ConvolveOp.EDGE_NO_OP,null);//创建卷积过滤器
co.filter(bi2,bi3);//将存储源图像的缓冲区图像的数据经卷积过滤器处理后进入另一个缓冲区
bi1=bi3;//bi1指向处理后的图像缓冲区bi3
}
publicvoidreset(){
g2d.setColor(Color.black);
g2
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 图形 模糊 锐化 参考 算法