当前位置:文档之家› 基于JAVA的 图像处理软件

基于JAVA的 图像处理软件

基于JAVA的 图像处理软件
基于JAVA的 图像处理软件

成绩:

JA V A编程B实验报告实验七:基于JAVA的图像处理软件

实验时间:2012年6月10 日星期日

JAVA编程B实验报告一、实验名称

Java编程B综合性实验

二、实验目的

1、掌握J2SE应用程序的设计。

2、掌握抽象窗口工具包AWT的使用。

3、掌握应用程序用户界面的开发工具包SWING的使用

三、实验平台

操作系统:Windows 7

JDK:JDK 1.7

IDE:Eclipse 3.5

四、结构框图

五、实验内容

1、抽象窗口工具包(Abstract Window Toolkit ,AWT)简介 功能:包含用于创建用户界面和绘制图形图像的所有类。

描述:包含用于创建用户界面和绘制图形图像的所有类。在AWT 术语中,诸如按钮或滚动条之类的用户界面对象称为组件。Component 类是所有AWT 组件的根。有关所有AWT 组件的公共属性的详细描述,请参见 Component 。

当用户与组件交互时,一些组件会激发事件。AWTEvent 类及其子类用于表示AWT 组件能够激发的事件。有关AWT 事件模型的描述,请参见 AWTEvent 。 容器是一个可以包含组件和其他容器的组件。容器还可以具有布局管理器,用来控制容器中组件的可视化布局。AWT 包带有几个布局管理器类和一个接口,此接口可用于构建自己的布局管理器

2、用户界面的开发工具包Swing 简介

Swing 是一个用于开发Java 应用程序用户界面的开发工具包,以抽象窗口工具包(AWT )为基础使跨平台应用程序可以使用任何可插拔的外观风格。Swing 开发人员只用很少的代码就可以利用Swing 丰富、灵活的功能和模块化组件来创建优雅的用户界面。

创建图形界面步骤:(1)导入Swing 包;(2)选择界面风格;(3)设置顶层容器;(4)设置按钮和标签;(5)将组件放到容器上;(6)为组件增加边框;(7)处理事件;(8)辅助技术支持。

导入Swing 包

下面语句导入Swing 包

import javax.swing.*;

大部分Swing程序用到了AWT的基础底层结构和事件模型,因此需要导入两个包:

import java.awt.*;

import java.awt.event.*;

如果图形界面中包括了事件处理,那么还需要导入事件处理包:

import javax.swing.event.*;

选择界面风格

Swing允许选择程序的图形界面风格常用的有java风格,windows风格等。

下面的代码用于选择图形界面风格,这里选择的是跨平台的Java界面风格。

try { UIManager.setLookAndFeel(

UIManager.getCrossPlatformLookAndFeelClassName( )); }

catch (Exception e) { }

设置顶层容器

图形界面至少要有一个顶级Swing容器,顶级Swing容器为其它Swing组件在屏幕上的绘制和处理事件提供支持。常用的顶级容器:

JFrame(框架):表示主程序窗口

JDialog(对话框):每个JDialog对象表示一个对话框,对话框属于二级窗口

JApplet(小程序):在浏览器内显示一个小程序界面

一个框架包括边界、菜单栏、工具栏、状态栏,以及中间占主要部分的窗格。窗格也可以看作是一种面板,但它是框架的一个组成部分;组件不会直接放到框架上,而是放在若干个面板上,这些面板再放到窗格上。

用框架对象的getContentPane()函数来获得窗格,再调用窗格的add()函数放置面板。

public static void main(String[ ]args){JFrame frame=new

JFrame("SwingApplication");

JPanel panel1=new JPanel();

frame.getContentPane().add(panel1,BorderLayout.CENTER);

......//

添加其他组件

frame.pack();frame.setVisible(true);}

模式使用

关键是java.awt.*里面的两个与显示设备有关的类:GraphicsEnvironment 和GraphicsDevice。

GraphicsEnvironment为Java应用程序提供了特定平台的 GraphicsDevice 对象和 Font 对象集合。这些GraphicsDevice可以是各种本机和远端机器的资源,如屏幕、打印机或者是Image Buffer,甚至是Graphics2D绘图方法的目标对象。

而GraphicsDevice就是指特定的图形环境了,如屏幕和打印设备等。这样,我们就可以用GraphicsDevice来操纵屏幕了。GraphicsDevice提供的setFullScreenWindow()方法就是设置全屏幕用的。

事件处理

监听器:ActionListener

方法:actionPerformed

事件:ActionEvent

● String getActionCommand()

actioncommand是控件内部的一个字符串,用于标识控件的状态。

此函数可以取得控件的状态,从而决定到底该做什么。

● int getModifiers()

取得“产生此事件时,用户同时按下的组合键”

● long getWhen()

取得“产生此事件时的时间戳”

事件产生原因:点击按钮,在列表框中选择内容,在文本框中点回车,计时器到期

监听器:AdjustmentListener

方法:adjustmentValueChanged

事件:AdjustmentEvent

● Adjustable getAdjustable()

adjustable是一个接口,各种滚动条都实现了这个接口。

● int getAdjustmentType()

取得滚动类型,共有UNIT_INCREMENT,UNIT_DECREMENT,BLOCK_INCREMENT,BLOCK_DECREMENT,TRACK共5种类型

● int getValue()

取得滚动滑块的当前值

事件产生原因:滚动条的滚动

监听器:ItemListener

方法:itemStateChanged

事件:ItemEvent

● Objedt getItem()

取得被选中的元素。注意,返回值是Object,还应该进行强制类型转换。

● ItemSelectable getItemSelectable()

ItemSelectable是一个接口,代表那些包含了n个可供选择的子元素的对象。此方法返回产生此事件的对象。此方法的作用主要在于,如果一个列表框是允许多选的,那么上面的方法就不好用了,应该用此方法得到列表对象,再取得被选中的多个元素。

● int getStateChange()

取得选择的状态,是SELECTED还是DESELECTED

事件产生原因:各种按钮的点击,列表框的选择

监听器:FocusListener

方法:focusGained、focusLost

事件:FocusEvent

● Component getOppositeComponent()

得到“参与焦点变换的”另一个对象。如果是焦点取得事件,则返回之前拥有焦点的对象;如果是焦点失去事件,则返回得到焦点的对象。若焦点转移到另外一个应用程序,返回null

● boolean isTemporary()

焦点是临时性转移还是永久转移。临时性转移:用鼠标拖动窗口或者窗口变

为非激活状态。其他为永久性转移。

事件产生原因:各种组件的焦点变化

监听器:KeyListener

方法:keyPressed、keyReleased、keyTyped

事件:KeyEvent

● char getKeyChar()

此方法只在keytyped中有效,返回按下的字符。比如按下shift+a,返回'A'

● int getKeyCode()

取得键盘上按键的整数编码。请注意,是键盘上的按键,比如F1,Ctrl,Home 键等等,都有相应编码。不支持组合键,也就是说“Shift+a”和“a”返回同样的内容,都是小写a的ASCII码。但是大键盘的数字键和小键盘的数字键返回内容不同。

● static String getKeyM odifiersText(int modifiers)

将掩码转化为字符串,比如“Ctrl”,“Ctrl+Shift”等。注意它是static 方法

● static String getKeyText(int keyCode)

返回keyCode代表的按钮的名字,比如"Home","F1"等。注意它是statci方法

事件产生原因:在各种组件上敲击键盘

监听器:MouseListener

方法:mouseClicked、mousePressed、mouseReleased

mouseEntered、mouseExited

事件:MouseEvent

● Point getLocationOnScreen()

返回鼠标相对于显示屏幕的绝对坐标(Java1.6版提供)

● int getXOnScreen()

返回鼠标相对于显示屏幕的X的绝对坐标(java 1.6版提供)

● int getYOnScreen()

返回鼠标相对于显示屏幕的Y的绝对坐标(java 1.6版提供)

● Point getPoint()

返回鼠标相对于组件的绝对坐标

● int getX()

返回鼠标相对于组件的X的绝对坐标

● int getY()

返回鼠标相对于组件的Y的绝对坐标

● void translatePoint(int x, int y)

给鼠标的做用点加上一个偏移量。比如2个参数分别是10, 20,你要用鼠标画直线,当你鼠标指向100,100开始画,实际上的线是画在110,120处

● int getClickCount()

产生此事件时鼠标共点击了多少下(单击、双击、三击……)

● int getButton()

产生此事件时,鼠标的哪个键被点击了:NOBUTTON, BUTTON1, BUTTON2 或者 BUTTON3

● boolean isPopupTrigger()

是否能够触发一个弹出式菜单。由于各平台触发弹出式菜单的情况不一样,因此应该在mousePressed 和 mouseReleased中都检测一下

事件产生原因:在任何组件上点击鼠标、将光标移动进来或出去

监听器:MouseMotionListener

方法:mouseDragged、mouseMoved

事件:MouseEvent

事件产生原因:在任何组件上移动鼠标

监听器:MouseWheelListener

方法:mouseWheelMoved

事件:MouseWheelEvent

● int getScrollType()

滚动的类型,是按块滚动WHEEL_BLOCK_SCROLL还是按单位滚动

WHEEL_UNIT_SCROLL

● int getScrollAmount()

返回为相应此事件应该滚动的单位数。此方法有效的前提是按单位滚动。

● int getWheelRotation()

鼠标滚轮滚动过程中”咔嚓“声的数目。向上滚为负值,向下滚为正值

事件产生原因:在任何组件上滚动鼠标中键

监听器:WindowListener

方法:windowOpened、windowClosing、windowClosed、windowIconified windowDeiconified、windowActivated、windowDeactivated

事件:WindowEvent

● Window getWindow()

返回发生此事件的window对象

● Window getOppositeWindow()

若发生了焦点转移,返回另一个参与此事件的window对象,或者null

● int getOldState()

窗口变化前的状态:NORMAL、ICONIFIED、MAXIMIZED_BOTH

● int getNewState()

窗口变化后的状态

事件产生原因:窗口发生变化

监听器:WindowFocusListener

方法:windowGainedFocus、windowLostFocus

事件:WindowEvent

事件产生原因:窗口得到或失去焦点

监听器:WindowstateListener

方法:WindowstateChanged

事件:WindowEvent

事件产生原因:窗口状态改变

四、代码分析

package imust.imageprocessing;

import java.awt.*;

import java.awt.event.*;

import java.awt.image.*;

import java.io.File;

import java.io.FileFilter;

import java.io.IOException;

import javax.imageio.ImageIO;

import javax.swing.*;

public class ImageProcessing extends JFrame { String filepath="";

String filename="";

File file2;

BufferedImage buffimg=null;

ImageIcon ic;

Image ia,l;

JLabel jLabel1=null;

BorderLayout borderLayout1=new BorderLayout();

JMenuBar jmb=new JMenuBar();

JMenu file,edit,view,suofang,gray,see,save,move,niuqu; public ImageProcessing(String title){

super(title);

file=new JMenu("文件");

JMenuItem dakai=new JMenuItem("打开");

dakai.addActionListener(new dakai_actionAdapter(this));

file.add(dakai);

file.addSeparator();

JMenuItem tuichu=new JMenuItem("退出");

tuichu.addActionListener(new tuichu_actionAdapter(this));

file.add(tuichu);

jmb.add(file);

suofang=new JMenu("缩放");

JMenuItem suoxiao=new JMenuItem("缩小");

suoxiao.addActionListener(new

testImage_suoxiao_actionAdapter(this));

this.getContentPane().setLayout(borderLayout1);

suofang.add(suoxiao);

suofang.addSeparator();

JMenuItem fangda=new JMenuItem("放大");

fangda.addActionListener(new

testImage_fangda_actionAdapter(this));

suofang.add(fangda);

jmb.add(suofang);

edit=new JMenu("旋转");

JMenuItem xuanzhuan90=new JMenuItem("旋转90度");

xuanzhuan90.addActionListener(new

xuanzhuan90_actionAdapter(this));

edit.add(xuanzhuan90);

edit.addSeparator();

JMenuItem xuanzhuan180=new JMenuItem("旋转180度");

xuanzhuan180.addActionListener(new

xuanzhuan180_actionAdapter(this));

edit.add(xuanzhuan180);

edit.addSeparator();

JMenuItem xuanzhuan270=new JMenuItem("旋转270度");

xuanzhuan270.addActionListener(new

xuanzhuan270_actionAdapter(this));

edit.add(xuanzhuan270);

jmb.add(edit);

gray=new JMenu("图像灰度处理");

JMenuItem huidu=new JMenuItem("灰度变换");

huidu.addActionListener(new huidu_actionAdapter(this));

gray.add(huidu);

gray.addSeparator();

JMenuItem junhenghua=new JMenuItem("直方图均衡化");

junhenghua.addActionListener(new

junhenghua_actionAdapter(this));

gray.add(junhenghua);

jmb.add(gray);

//////////////////zyf/////////////////////////////

see=new JMenu("变形");

JMenuItem lashen=new JMenuItem("拉伸");

lashen.addActionListener(new

testImage_lashen_actionAdapter(this));

see.add(lashen);

see.addSeparator();

JMenuItem zhankuan=new JMenuItem("展宽");

zhankuan.addActionListener(new

testImage_zhankuan_actionAdapter(this));

see.add(zhankuan);

see.addSeparator();

jmb.add(see);

niuqu=new JMenu("扭曲");

JMenuItem niuqu1=new JMenuItem("扭曲");

niuqu1.addActionListener(new

testImage_niuqu1_actionAdapter(this));

niuqu.add(niuqu1);

niuqu.addSeparator();

jmb.add(niuqu);

save=new JMenu("保存");

JMenuItem saveas=new JMenuItem("另存为");

saveas.addActionListener(new saveas_actionAdapter(this));

save.add(saveas);

save.addSeparator();

jmb.add(save);

move=new JMenu("移动");

JMenuItem lmove=new JMenuItem("向左移动");

lmove.addActionListener(new

testImage_lmove_actionAdapter(this));

move.add(lmove);

move.addSeparator();

JMenuItem rmove=new JMenuItem("向右移动");

rmove.addActionListener(new saveas_actionAdapter(this));

move.add(rmove);

move.addSeparator();

jmb.add(move);

//////////////////zyf/////////////////////////////

view=new JMenu("关于");

JMenuItem banben=new JMenuItem("版本说明");

banben.addActionListener(new banben_actionAdapter(this));

view.add(banben);

jmb.add(view);

//zyf

this.setSize(800,600);

this.setJMenuBar(jmb);

jLabel1=new JLabel("",JLabel.CENTER);

JScrollPane pane = new JScrollPane(jLabel1);

this.add(pane,borderLayout1.CENTER);

this.setVisible(true);

}

public static void main(String[] args) {

ImageProcessing testImage1=new ImageProcessing("基于J2SE的数字图像处理软件");

testImage1.addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent e){ System.exit(0);

}

});

}

//////////////////通过文件选择对话框打开图片并显示\\\\\\\\\

void dakai_actionPerformed(ActionEvent e) {

JFileChooser chooser =new JFileChooser();

if(JFileChooser.APPROVE_OPTION==chooser.showOpenDialog(this)) {

String

strSelectedPath=chooser.getSelectedFile().getPath();

File file3=chooser.getSelectedFile();

try {

buffimg = ImageIO.read(file3);

} catch (IOException a) {

a.printStackTrace();

}

filename=chooser.getSelectedFile().getName();

String cat = filename.substring(https://www.doczj.com/doc/a14099899.html,stIndexOf(".") + 1).toUpperCase();

if(cat.equalsIgnoreCase("JPG")||cat.equalsIgnoreCase("GIF")||cat. equalsIgnoreCase("PNG")||cat.equalsIgnoreCase("JPEG")){

filepath=strSelectedPath;

ic=new ImageIcon(filepath);

ia=ic.getImage();

int height=ic.getIconHeight();

int width=ic.getIconWidth();

jLabel1.setSize(width,height);

jLabel1.setIcon(ic);

repaint();

}else{

JOptionPane.showMessageDialog(null,"该软件只支持JPG、GIF、PNG格式的图像文件" ,"提示",https://www.doczj.com/doc/a14099899.html,RMATION_MESSAGE);

}

}

}

//////////////////执行拉伸操作\\\\\\\\\

void lashen_actionPerformed(ActionEvent e) {

String beishu=JOptionPane.showInputDialog("拉伸几倍长?");

int s=Integer.parseInt(beishu);

Image ia=ic.getImage();

int height=ic.getIconHeight();

int width=ic.getIconWidth();//598

Image

ib=ia.getScaledInstance(width/1,height*s,Image.SCALE_DEFAULT); ImageIcon ica=new ImageIcon(ib);

jLabel1.setIcon(ica);

repaint();

}

//////////////////执行展宽操作\\\\\\\\\

void zhankuan_actionPerformed(ActionEvent e) {

String beishu=JOptionPane.showInputDialog("拉伸几倍宽?");

int s=Integer.parseInt(beishu);

Image ia=ic.getImage();

int height=ic.getIconHeight();

int width=ic.getIconWidth();//598

Image

ib=ia.getScaledInstance(width*s,height/1,Image.SCALE_DEFAULT); ImageIcon ica=new ImageIcon(ib);

jLabel1.setIcon(ica);

repaint();

}

//////////////////执行缩放操作\\\\\\\\\

void suoxiao_actionPerformed(ActionEvent e) { String beishu=JOptionPane.showInputDialog("输入缩小倍数");

int s=Integer.parseInt(beishu);

Image ia=ic.getImage();

int height=ic.getIconHeight();

int width=ic.getIconWidth();//598

Image

ib=ia.getScaledInstance(width/s,height/s,Image.SCALE_DEFAULT); ImageIcon ica=new ImageIcon(ib);

jLabel1.setIcon(ica);

repaint();

}

//////////////////放大操作\\\\\\\\\

void fangda_actionPerformed(ActionEvent e){ String beishu=JOptionPane.showInputDialog("输入放大倍数");

System.out.println(beishu);

int s=Integer.parseInt(beishu);

System.out.println(s);

Image ia=ic.getImage();

int height=ic.getIconHeight();

int width=ic.getIconWidth();

Image

ib=ia.getScaledInstance(width*s,height*s,Image.SCALE_DEFAULT);

ImageIcon ica=new ImageIcon(ib);

jLabel1.setIcon(ica);

repaint();

}

//////////////////退出操作\\\\\\\\\

void tuichu_actionPerformed(ActionEvent e){

System.exit(0);

}

//zyf

//////////////////向左移动\\\\\\\\\

void niuqu1_actionPerformed(ActionEvent e) {

try {

Image ia=ic.getImage();

int width = ia.getWidth(this);

int height = ia.getHeight(this);

int pixels[] = new int [width * height];

PixelGrabber pg = new PixelGrabber(ia, 0, 0, width, height, pixels, 0, width);

if (pg.grabPixels() && ((pg.status()& ImageObserver.ALLBITS) !=0)) {

l = createImage(new MemoryImageSource(height,width, rowFlipPixels1(rot90Pixels(pixels, width, height), width, height), 0,height));

}

} catch (InterruptedException e1) {

e1.printStackTrace();

}

ImageIcon ica=new ImageIcon(l);

jLabel1.setIcon(ica);

repaint();

}

//zyf

//////////////////顺时针旋转90度操作\\\\\\\\\

void xuanzhuan90_actionPerformed(ActionEvent e){

try {

Image ia=ic.getImage();

int width = ia.getWidth(this);

int height = ia.getHeight(this);

int pixels[] = new int [width * height];

PixelGrabber pg = new PixelGrabber(ia, 0, 0, width, height, pixels, 0, width);

if (pg.grabPixels() && ((pg.status()& ImageObserver.ALLBITS) !=0)) {

l = createImage(new MemoryImageSource(height,width, rowFlipPixels(rot90Pixels(pixels, width, height), width, height), 0,height));

} catch (InterruptedException e1) {

e1.printStackTrace();

}

ImageIcon ica=new ImageIcon(l);

jLabel1.setIcon(ica);

repaint();

}

//////////////////顺时针旋转180度操作\\\\\\\\\

void xuanzhuan180_actionPerformed(ActionEvent e){

try {

Image ia=ic.getImage();

int width = ia.getWidth(this);

int height = ia.getHeight(this);

int pixels[] = new int [width * height];

PixelGrabber pg = new PixelGrabber(ia, 0, 0, width, height, pixels, 0, width);

if (pg.grabPixels() && ((pg.status()& ImageObserver.ALLBITS) !=0)) {

l = createImage (new MemoryImageSource (width, height,rowFlipPixels(pixels, width, height), 0, width));

}

} catch (InterruptedException e1) {

e1.printStackTrace();

}

ImageIcon ica=new ImageIcon(l);

jLabel1.setIcon(ica);

repaint();

}

//////////////////顺时针旋转270度操作\\\\\\\\\

void xuanzhuan270_actionPerformed(ActionEvent e){

try {

Image ia=ic.getImage();

int width = ia.getWidth(this);

int height = ia.getHeight(this);

int pixels[] = new int [width * height];

PixelGrabber pg = new PixelGrabber(ia, 0, 0, width, height, pixels, 0, width);

if (pg.grabPixels() && ((pg.status()& ImageObserver.ALLBITS) !=0)) {

l = createImage (new MemoryImageSource (height, width,rot90Pixels(pixels, width, height), 0, height));

} catch (InterruptedException e1) {

e1.printStackTrace();

}

ImageIcon ica=new ImageIcon(l);

jLabel1.setIcon(ica);

repaint();

}

//////////////////软件说明\\\\\\\\\

void banben_actionPerformed(ActionEvent e){

JOptionPane.showMessageDialog(null,"内蒙古科技大学2010届毕业生毕业设计\n课题名称:" +

"基于J2SE的数字图像处理软件设计\n制作人:孙龙雁\n指导教师:赵建峰\n修改:周亚峰","说明",

https://www.doczj.com/doc/a14099899.html,RMATION_MESSAGE);

}

///////////////////////////提示信息//////////////////////////////// void tishi_actionPerformed(ActionEvent e){

JOptionPane.showMessageDialog(null,"对不起,软件出错\n该版本只在原来的基础上增加了\n"+

"变形(展宽和拉伸)以及扭曲功能\n更多功能正在测试中\n\n制作by:孙龙雁\n指导教师:赵建峰\n修改by:周亚峰","说明",

https://www.doczj.com/doc/a14099899.html,RMATION_MESSAGE);

}

//////////////////灰度变换操作\\\\\\\\\

void huidu_actionPerformed(ActionEvent e){

try{

Image ia=ic.getImage();

int width = ia.getWidth(this);

int height = ia.getHeight(this);

int pixels[] = new int [width * height];

PixelGrabber pg = new PixelGrabber(ia, 0, 0, width, height, pixels, 0, width);

if (pg.grabPixels() && ((pg.status()& ImageObserver.ALLBITS) !=0)) {

l = createImage (new MemoryImageSource (width,height,RGBtoGray(pixels, width, height), 0, width));

}

} catch (InterruptedException e3) {

e3.printStackTrace();

}

ImageIcon ica=new ImageIcon(l);

jLabel1.setIcon(ica);

repaint();

}

//////////////////直方图均衡化操作\\\\\\\\\

void junhenghua_actionPerformed(ActionEvent e){

try{

Image ia=ic.getImage();

int width = ia.getWidth(this);

int height = ia.getHeight(this);

System.out.println(width);

System.out.println(height);

int pixels[] = new int [width * height];

PixelGrabber pg = new PixelGrabber(ia, 0, 0, width, height, pixels, 0, width);

if (pg.grabPixels() && ((pg.status()& ImageObserver.ALLBITS) !=0)) {

l = createImage (new MemoryImageSource (width,height,balance(pixels, width, height), 0, width));

System.out.println("if之中!");

}

} catch (InterruptedException e3) {

e3.printStackTrace();

}

ImageIcon ica=new ImageIcon(l);

jLabel1.setIcon(ica);

repaint();

}

/////////////////////////zyf////////////////////////

//////////////////向左移动\\\\\\\\\

private int[] rowFlipPixels1(int pixels[], int width, int height) {

int newPixels[] = null;

if ((width * height) == pixels.length) {

newPixels = new int[width * height];

int newIndex = 0;

for (int y = height - 1; y >= 0; y--)

for (int x = width - 2; x >= 0; x--)

newPixels[newIndex++] = pixels[y * width + x];

}

return newPixels;

}

//////////////////////////zyf/////////////////////////

/////////////////顺时针旋转180度函数\\\\\\\\\

private int[] rowFlipPixels(int pixels[], int width, int height) {

int newPixels[] = null;

if ((width * height) == pixels.length) {

newPixels = new int[width * height];

int newIndex = 0;

for (int y = height - 1; y >= 0; y--)

for (int x = width - 1; x >= 0; x--)

newPixels[newIndex++] = pixels[y * width + x];

}

return newPixels;

}

//////////////////顺时针旋转270度函数\\\\\\\\\

private int[] rot90Pixels(int pixels[], int width, int height) { int newPixels[] = null;

if ((width * height) == pixels.length) {

newPixels = new int[width * height];

int newIndex = 0;

for (int x = width - 1; x >= 0; x--)

for (int y = 0; y < height; y++)

newPixels[newIndex++] = pixels[y * width + x];

}

return newPixels;

}

//////////////////灰度变换函数\\\\\\\\\

private int[] RGBtoGray(int[] ImageSource,int width,int height){ int[]grayArray=new int[height*width];

ColorModel colorModel=ColorModel.getRGBdefault();

int i ,j,k,r,g,b;

for(i = 0; i < height;i++){

for(j = 0;j < width;j++){

k = i*width+j;

r = colorModel.getRed(ImageSource[k]);

g = colorModel.getGreen(ImageSource[k]);

b = colorModel.getBlue(ImageSource[k]);

int gray=(int)(r*0.3+g*0.59+b*0.11);

r=g=b=gray;

grayArray[i*width+j]=(255 << 24) | (r << 16) | (g << 8 )| b;

}

}

return grayArray;

}

//////////////////直方图均衡化函数\\\\\\\\\

private int[] balance(int[] srcPixArray,int width,int height){ //获取图像直方图

int[] histogram=new int[256];

int[] dinPixArray=new int[width*height];

for(int i=0;i

for(int j=0;j

int grey=srcPixArray[i*width+j]&0xff;//此处是如何得到灰度的?

histogram[grey]++;//获取各灰度级的像素点的个数

}

}

double a=(double)255/(width*height);//每一种灰度级出现在该图像中各像素点的概率

double[] c=new double[256];

c[0]=(a*histogram[0]);//出现的概率乘以出现的次数,干什么用?

for(int i=1;i<256;i++){

c[i]=c[i-1]+(int)(a*histogram[i]);//累积直方图

}

for(int i=0;i

for(int j=0;j

int grey=srcPixArray[i*width+j]&0x0000ff;

int hist=(int)c[grey];//映射到新的灰度

dinPixArray[i*width+j]=255<<24|hist<<16|hist<<8|hist;

}

}

return dinPixArray;

}

}

///////////////////////////zyf/////////////////////////////

class testImage_niuqu1_actionAdapter implements java.awt.event.ActionListener{//拉伸

ImageProcessing adaptee;

testImage_niuqu1_actionAdapter(ImageProcessing adaptee){

this.adaptee=adaptee;

}

public void actionPerformed(ActionEvent e){

adaptee.niuqu1_actionPerformed(e);

}

}

class testImage_lashen_actionAdapter implements java.awt.event.ActionListener{//拉伸

ImageProcessing adaptee;

testImage_lashen_actionAdapter(ImageProcessing adaptee){

this.adaptee=adaptee;

}

public void actionPerformed(ActionEvent e){

https://www.doczj.com/doc/a14099899.html,shen_actionPerformed(e);

}

}

class testImage_zhankuan_actionAdapter implements java.awt.event.ActionListener{//展宽

ImageProcessing adaptee;

testImage_zhankuan_actionAdapter(ImageProcessing adaptee){ this.adaptee=adaptee;

}

public void actionPerformed(ActionEvent e){

adaptee.zhankuan_actionPerformed(e);

}

}

class testImage_lmove_actionAdapter implements java.awt.event.ActionListener{//向左移动

ImageProcessing adaptee;

testImage_lmove_actionAdapter(ImageProcessing adaptee){

this.adaptee=adaptee;

}

public void actionPerformed(ActionEvent e){

adaptee.tishi_actionPerformed(e);

}

}

class testImage_rmove_actionAdapter implements

南京邮电大学数字图像处理与图像通信复习资料

2016年上学期《数字图像处理与图像通信》资料 ===================================================== 一、选择题(共20题) 1、采用幂次变换进行灰度变换时,当幂次取大于1时,该变换是针对如下哪一类图像进行增 强。( B) A 图像整体偏暗 B 图像整体偏亮 C图像细节淹没在暗背景中 D图像同时存在过亮和过暗背景 2、图像灰度方差说明了图像哪一个属性。( B ) A 平均灰度 B 图像对比度 C 图像整体亮度 D图像细节 3、计算机显示器主要采用哪一种彩色模型( A ) A、RGB B、CMY或CMYK C、HSI D、HSV 4、采用模板[-1 1]T主要检测( A )方向的边缘。 A.水平 B.45? C.垂直 D.135? 5、下列算法中属于图象锐化处理的是:( C ) A.低通滤波 B.加权平均法 C.高通滤波 D. 中值滤波 6、维纳滤波器通常用于( C ) A、去噪 B、减小图像动态范围 C、复原图像 D、平滑图像 7、彩色图像增强时, C 处理可以采用RGB彩色模型。 A. 直方图均衡化 B. 同态滤波 C. 加权均值滤波 D. 中值滤波 8、__B__滤波器在对图像复原过程中需要计算噪声功率谱和图像功率谱。 A. 逆滤波 B. 维纳滤波 C. 约束最小二乘滤波 D. 同态滤波 9、高通滤波后的图像通常较暗,为改善这种情况,将高通滤波器的转移函数加上一常数量以 便引入一些低频分量。这样的滤波器叫 B。 A. 巴特沃斯高通滤波器 B. 高频提升滤波器 C. 高频加强滤波器 D. 理想高通滤波器 10、图象与灰度直方图间的对应关系是 B __ A.一一对应 B.多对一 C.一对多 D.都不 11、下列算法中属于图象锐化处理的是: C A.低通滤波 B.加权平均法 C.高通滤 D. 中值滤波 12、一幅256*256的图像,若灰度级数为16,则存储它所需的比特数是:( A ) A、256K B、512K C、1M C、2M 13、噪声有以下某一种特性( D ) A、只含有高频分量 B、其频率总覆盖整个频谱 C、等宽的频率间隔内有相同的能量 D、总有一定的随机性 14. 利用直方图取单阈值方法进行图像分割时:(B) a.图像中应仅有一个目标 b.图像直方图应有两个峰 c.图像中目标和背景应一样大 d. 图像中目标灰度应比背景大 15. 在单变量变换增强中,最容易让人感到图像内容发生变化的是( C )

彩色图像处理

1种颜色 颜色定义:颜色是对象的一种属性,它取决于三个因素。 (1)光源-照射光的光谱特性或光谱能量分布 (2)物体-被照射物体的反射特性 (3)成像接收器(眼睛或成像传感器)-光谱能量吸收特性 2色模型 颜色模型,也称为颜色空间或颜色系统,是用于精确校准和生成各种颜色的一组规则和定义。其目的是在某些标准下以通常可接受的方式简化颜色规格。可以通过坐标系描述颜色模型,并且系统中的每种颜色都可以由坐标空间中的单个点表示。 RGB模型:此模型是行业中的颜色标准。通过更改红色和绿色蓝色三种颜色的亮度及其叠加,可以获得各种颜色。该标准几乎涵盖了人类视觉可以感知的所有颜色,并且是目前使用最广泛的颜色模型之一。

CMY模型:颜色合成方法由绿色,品红色和黄色三种基本原色组成。因为彩色显示不是直接来自光的颜色,而是光被对象吸收并被产生的残留光反射,所以CMY模型也称为减法混合模型。 CMYK模型:将黑色添加到CMY模型。 RGB和CMY之间的转换:在MATLAB中,可以通过imcompliance()函数轻松实现RGB和CMY之间的转换 cmy = imcomplement(rgb); rgb = imcomplement(cmy); HSI模型:HSI模型基于人类视觉系统,并通过使用色相,饱和度和强度三个元素直接描述颜色 @亮度是指人们感到光亮的阴影。光的能量越大,亮度越大。 @Hue是颜色的最重要属性,它决定颜色的本质,颜色的本质由反射光的主波长确定。不同的波长产生不同的色彩感觉。

@饱和度是指颜色的深度和强度,饱和度越高,颜色越深。饱和深度与白色的比率有关,白色比率越大,饱和度越低。 从RGB到HSI的颜色转换及其实现 数字; 子图(1,2,1); rgb = imread('plane.bmp)。 imshow(rgb); title('rgb'); 子图(1,2,2); hsi = rgb2hsi(rgb); imshow(hsi); title('hsi'); 从HSI到RGB的颜色转换及其实现 数字 子图(1,2,1);

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

目录 引言 (4) 第一章绪论 (5) 1.1.1 计算机图形图像学的发展简史 (5) 1.1.2现有图形图像处理软件 (5) 1.2课题研究的目的及意义 (6) 第二章图形图像处理软件开发技术基础 (7) 2.1 Java Swing 简介 (7) 2.1.1 Swing的特性 (7) 2.1.2 Swing程序包和类 (8) 2.2 MVC体系结构 (9) 2.2.1 模型 (9) 2.2.2 视图 (9) 2.2.3 控制器 (10) 第三章图形图像软件的设计 (11) 3.1图形处理模块的设计 (11) 3.1.1结构设计 (11) 3.1.2功能描述 (11) 3.1.3图形处理模块结构图 (11) 3.1.4主要类设计.................................................................... 错误!未定义书签。 3.2 图像处理模块的设计 (12) 3.2.1结构设计 (12) 3.2.3结构图 (13) 4.1 绘图功能的详细设计与实现 (15) 4.1.1 菜单栏 (15) 4.1.2工具栏 (16) 4.1.3画图区 (16) 4.1.4状态栏 (17) 4.2 图像编辑的详细设计与实现 (18) 4.3滤镜处理的详细设计与实现 (19) 4.3.1 图像增强 (19) 4.3.2图像边缘检测 (21) 4.3.3 图像平滑处理 (23) 4.3.4 系统测试 (24) 结论 (26) 致谢 (27)

图形图像处理软件的设计与实现 摘要:随着计算机技术的迅速发展,图形图图像技术在各个领域的研究和应用日益深入和广泛。由于图形图像各种算法的实现,使得其处理速度越来越快,能更好的为人们服务。图形图像处理的信息量很大,对处理速度的要求也比较高。Java 强大的运算和图像展示功能,使图像处理变得更加的简单和直观。同时系统所有的操作设计得十分简单方便,无需具备有专业的知识,也能实现图像图像处理。 Java是一种完全面向对象的语言,Java语言的设计集中于对象及其接口,它提供了简单的类机制以及动态的接口模型。本文基于Java的图形图像处理环境,设计并实现了以图形图像处理系统,展示如何通过利用Java实现对图形图像的各种处理。 关键词:Java 绘图板图形图像编辑滤镜处理边缘处理

图像处理技术的研究现状和发展趋势

图像处理技术的研究现状和发展趋势 庄振帅 数字图像处理又称为计算机图像处理,它是指将图像信号转换成数字信号并利用计算机对其进行处理的过程。数字图像处理最早出现于20世纪50年代,当时的电子计算机已经发展到一定水平,人们开始利用计算机来处理图形和图像信息。数字图像处理作为一门学科大约形成于20世纪60年代初期。早期的图像处理的目的是改善图像的质量,它以人为对象,以改善人的视觉效果为目的。图像处理中,输入的是质量低的图像,输出的是改善质量后的图像,常用的图像处理方法有图像增强、复原、编码、压缩等。首次获得实际成功应用的是美国喷气推进实验室(JPL)。他们对航天探测器徘徊者7号在1964年发回的几千张月球照片使用了图像处理技术,如几何校正、灰度变换、去除噪声等方法进行处理,并考虑了太阳位置和月球环境的影响,由计算机成功地绘制出月球表面地图,获得了巨大的成功。随后又对探测飞船发回的近十万张照片进行更为复杂的图像处理,以致获得了月球的地形图、彩色图及全景镶嵌图,获得了非凡的成果,为人类登月创举奠定了坚实的基础,也推动了数字图像处理这门学科的诞生。在以后的宇航空间技术,如对火星、土星等星球的探测研究中,数字图像处理都发挥了巨大的作用。数字图像处理取得的另一个巨大成就是在医学上获得的成果。1972年英国EMI公司工程师Housfield发明了用于头颅诊断的X射线计算机断层摄影装置,也就是我们通常所说的CT(Computer Tomograph)。CT的基本方法是根据人的头部截面的投影,经计算机处理来重建截面图像,称为图像重建。1975年EMI公司又成功研制出全身用的CT 装置,获得了人体各个部位鲜明清晰的断层图像。1979年,这项无损伤诊断技术获得了诺贝尔奖,说明它对人类作出了划时代的贡献。与此同时,图像处理技术在许多应用领域受到广泛重视并取得了重大的开拓性成就,属于这些领域的有航空航天、生物医学过程、工业检测、机器人视觉、公安司法、军事制导、文化艺术等,使图像处理成为一门引人注目、前景远大的新型学科。随着图像处理技术的深入发展,从70年代中期开始,随着计算机技术和人工智能、思维科学研究的迅速发展,数字图像处理向

计算机图形学与图像处理教案

精编资料 了解图形学与图像处理的发展,应用以及当前国际国内研究的热点和重要成果;理解图形学与图像处理对图元以及图像的分析与理解的以及二维与三维形状重建等;... 图形,图像 计算机图形学与图像处理教案 学时:36,其中讲授26学时,上机10学时。 适用专业:信计专业与数学专业。 先修课程:高等数学、线性代数、数据结构、VC++或者C# 一、课程的性质、教育目标及任务: 计算机图形学与图像处理实际上是两门课程的一个综合。这是一门研究图形学与图像处理的基本理论、方法及其在智能化检测中应用的学科,是计算机科学与技术等电子信息类本科专业的专业课。 本课程侧重于对图形学的基本图元的基本生成,以及图像处理中对图像在空间域与频率域的基本处理算法的研究。并对图形学与图像处理基本理论和实际应用进行系统介绍。目的是使学生系统掌握图形学与图像处理的基本概念、原理和实现方法,学习图形学与图像处理分析的基本理论、典型方法和实用技术,具备解决智能化检测与控制中应用问题的初步能力,为在计算机视觉、模式识别等领域从事研究与开发打下扎实的基础。 二、教学内容基本要求: 1.了解图形学与图像处理的发展、应用以及当前国际国内研究的热点和重要成果; 2.理解图形学与图像处理对图元以及图像的分析与理解的以及二维与三维形状重建等; 3.掌握图形学与图像处理中最基本、最广泛应用的概念、原理、理论和算法以及基本技术和方法; 4.能够运用一门高级语言编写简单的图形学与图像处理软件,实现各种图形学与图像处理的算法。 三、主要教学内容:

学习图形学的基本概念,了解光栅显示系统的原理;掌握基本图元的生成算法:直线的生成算法、曲线的生成算法、多边形的生成算法;掌握区域填充、线段剪裁以及多边形的剪裁;掌握图元的几何变换、以及投影的基本理论。 了解图像的概念;图像数字化的基本原理:取样、量化、数字图像的表示;线性系统理论在图像变换,滤波中的应用:线性系统理论、离散图像变换、小波变换;图像编码压缩、增强,以及复原的基本方法:无失真压缩、有失真压缩、变换编码、压缩标准、图像滤波原理、复原滤波器、直方图运算、点运算;图像识别的基本原理和方法:图像分割、图像分析、图像分类; 四、学时安排 总课时72学时,图形学36学时,其中包括26个学时讲授,10个学时上机;图像处理36学时,其中包括26个学时讲授,10个学时上机; 五、参考书目: (1), Donald Hearn & M,Pauline Baker (2),< Computer Graphics with OpenGL, Third Edition> Donald Hearn & M,Pauline Baker (3),计算机图形学实用技术陈元琰,张晓竞,科学出版社 (4),计算机图形学倪明田,吴良芝北京大学出版社 (5) <>, Rafael C. Gonzalez & Richard E. Woods. Publishing House of Electronics Industry. (6) << Image Processing ,Analysis, and Machine Vision ( second Edition)>> ,Milan Sonka, V aclav Hlavac. Publishing House of People Post 第一讲图形学基本概念 重点: 了解图形学概念;掌握图形学中的几个概念:分辨率,光栅,扫描线,像素,帧缓冲器;了解图形学的基本用途;掌握图形学光栅扫描显示系统的工作原理; 难点: 光栅扫描显示系统的工作原理; 教学方法: 课堂讨论式教学方法,基于问题式以及启发式教学方法相结合。双语教学。 主要内容: 1,什么是计算机图形学? 2,计算机图形学的主要用途是什么? 3,计算机图形学中的一些基本概念: 什么是分辨率?什么是光栅?什么是光栅扫描系统的扫描线?什么是像 素?什么是帧缓冲器?什么是刷新率?

java图形图象处理论文

摘要 随着计算机技术的迅速发展,数字图像处理技术在医学领域的研究和应用日益深入和广泛。现代医学已越来越离不开医学图像处理技术。医学图像处理技术在临床诊断、教学科研等方面发挥了重要的作用。计算机图像处理技术与影像技术的结合从根本上改变了医务人员进行诊断的传统方式。充分地利用这些技术可以提高诊断的正确性和准确性,提高诊断效率,降低医疗成本,可以更加充分地发挥各种医疗设备的功能。而且,随着数字化、智能化进程的深人,图像处理技术在医疗卫生领域将会有更加广阔的应用前景。 Java是Sun公司推出的一种面向对象编程语言。Java非常适合于企业网络和Internet 环境,现已成为Internet中最受欢迎、最有影响的编程语言之一。目前国内使用Java语言开发的图像处理系统比较少,这也增加了这方面的研究价值。 本文首先对图像增强和图像分割中的几种算法进行了介绍,包括线性灰度变换,伪彩色处理,平滑处理,中值滤波,阈值分割,边缘检测等。然后用Java语言对上述各算法编程实现,并设计Java GUI(图形用户界面)用来显示图像处理的结果,以及创建一个数据库用于存储医学图像。 关键词:医学图像;图像增强;图像分割;面向对象

Abstract As the computer technique’s quickly development, the image process technique having been more deeply and widely in the use and study of medical science. The modern medical science can not work well without the medical image processing technology; it has made an important use in clinical diagnosis and education study. The combination of the image processing technique and imaging technique has changed the way that traditional diagnosis. Make adequately use of this techniques will be increase accuracy, increase the efficiency of diagnosis, decrease the cost of medical treatment and make the most use of function with medical treatment equipments. Moreover, as the deeply with the arithmetic figure and the intelligence, the image processing technique will have a more wonderful future. Java is a kind of object-oriented programming language from the company of Sun. The Java is becoming a most welcome and influence programming language which suits for the business network and the environment of internet. Currently, use Java language to developed image processing system is not very frequency in our country. So, this is a cause of increasing the value of study. This project introduces some kinds of algorithms in image enhancement and image segmentation. It includes linear grey level transformation, pseudo-color processing, smooth processing, median filter, threshold segmentation, edge detection and so on. Then, use Java to program and realize. And show the result of image processing using Java GUI (Graphical User Interface), as well as create a database to stock medical image. Key Words: medical image; image enhancement; image segmentation; object-oriented

图形图像处理期末考试A、B卷及答案

计算机专业《图形图像处理》期末考试试卷(A) 考试时间:90分钟 姓名____________ 学号____________ 成绩______________ 填空题(50分)每空1分 除了使用按钮进行软件的退出之外,还有其他3种方法同样可以将软件关闭,分别是 ___________、___________、___________。 新建文件的方法有3种,分别是___________、___________、___________。 打开文件的方法有3种,分别是___________、___________、___________。 将鼠标光标放置在_________栏的蓝色区域上双击,即可将窗口在最大化和还原状态之间切换。按键盘中的_______键可以将工具箱、属性栏和控制面板同时显示或隐藏。 在RGB【颜色】面板中【R】是___________颜色、【G】是___________颜色、【B】是___________颜色。 图像文件的大小以___________和___________为单位,它们之间的大小换算单位为___________KB=___________MB。 按键盘中的___________键,可以将当前工具箱中的前景色与背景色互换。 当利用工具绘制矩形选区时,按下键盘中的___________形态的选择区域; 按下键盘中的___________形态的选择区域;按下键盘中的 绘制___________形态的选择区域。 在Photoshop系统中,新建文件默认分辨率值为___________像素点/英寸,如果进行精美彩印刷图片的分辨率最少应不低于__________像素点/英寸。 在【通道】面板底部有四个按钮,它们的功能分别是:___________按钮、___________按 钮、___________按钮、___________按钮。 在利用滤镜菜单栏中的【高斯模糊】命令进行虚化的投影效果制作时,应注意图层面板中的___________选项不被勾选。 可以快速弹出【画笔预设】面板的快捷键是_______。 在图像文件中创建的路径有两种形态,分别为________和________。 矢量图形工具主要包括______工具、______工具、______工具、______工具、______工具和______工具。 在Photoshop 7.0软件中,可以将输入的文字转换成________和_______进行编辑,也可以将其进行栅格化处理,即将输入文字生成的文字层直接转换为________。另外还可以将输入的_______和

彩色图像处理存在的问题及应对策略(附图)

彩色图像处理存在的问题及应对策略(附图)相对于黑白图像处理,彩色图像处理有明显的优势,但是应考虑以下关键问题: 一、色彩准确性 色彩准确性即彩色图像处理需要考虑的颜色精度和差异程度。 许多图像处理中,处理算法必须区分检测到的颜色和目标值之间的差异。因此颜色的准确性非常重要,决定里一个算法的成败。 决定色彩准确性的的是插值算法,插值可能导致颜色检测的细微差异,因为它需要周围像素来确定每个像素的颜色值。 二、色彩串扰性 色彩串扰也是影响色彩准确性的关键因素。色彩串扰是由于红、蓝、绿通道的光谱响应之间相当大的重叠造成的。 当通道之间有大量重叠时,某些颜色系列,尤其是黄或蓝绿色系列,会有很大的不确定性。 色彩串扰会导致色彩伪像和色彩混淆。色彩处理时需要注意提取目标与背景色彩串扰的大小,可通过偏光镜等尽量避免色彩串扰。 ▲棱镜相机中使用的二向色涂层比拜耳滤光片产生更陡的光谱曲线,以最大限度地减少由色彩串扰引起的不确定性。

三、莫尔图案 当图像中包含重复阵列图像时,图像会出现摩尔条纹。 大规模混叠可导致莫尔图案的出现。虽然任何需要捕获更高空间频率的相机都会出现这种效果,但拜耳相机 - 再次因为插值技术 - 更容易出现这种情况。 ▲具有重复颜色混叠的区域中的人造颜色图案可以出现在拜耳图像中。 四、色彩对分辨率的影响 与单色系统相比,彩色相机大大降低了相机的有效分辨率。 虽然拜耳相机可能有500万像素(5百万像素),但插值过程会“平均”许多小细节,使有效分辨率达到整个像素数的三分之一左右。 彩色图像处理存在以上四个问题,因此进行彩色图像处理时需要采取以下四种措施: 一、光照水平和灵敏度 根据系统的亮度级别和可容忍的增益/噪声级别,选择合适的关照说以及相机色彩灵敏度。

计算机图形学与图形图像处理技术分析

计算机图形学与图形图像处理技术分析 计算机技术的普及与发展带动了全社会的进步,现代社会活动中几乎所有领域都在使用计算机技术,该技术为企业节约了大量的生产成本,提高了工作效率,改变了人们的生活方式。计算机图形学和图形图像技术在人们工作中的使用日益频繁,凸显了现代科学应用领域对该技术研究的重要性,本文就计算机图形学与图形图像处理技术从定义、区别和联系以及具体应用几方面展开论述,期望该技术能够为人们的工作和生活提供更大便利。 标签:计算机图形学;图形图像处理;技术 1概述 1.1概念 计算机图像处理是指利用计算机技术,来对图像进行一定的加工和分析,以获取最终的目标图像及结果。 目前该项处理技术在应用中,主要经过两个基本过程。第一,转化要研究的图像,把它变成通过计算机能够清晰辨别的数据,这样把图像存放在计算机中;第二,在将电脑中的图像做出相关处理与转化时,将采用不同形式的计算方法进行处理。 1.2图像的分类 根据图像能否在计算机上处理,将图像的种类进行了以下归类: 第一类,数字化图像。由于科技的迅猛发展,图像已经逐渐走向数字化。同时,数字化图像具有与生俱来的优势,例如处理方法便捷、精准度高等,满足了现代化国家的需求。 第二类,模拟图像。在现代生活中,模拟图像到处可以看到,比如胶片照相机相片、光学图像等,这些都是模拟图像。模拟图像一般在输出时较方便快捷,但是也有不是很灵活、精密度不够的缺陷。 2计算机图形与图像技术的区别与联系 计算机图形处理技术与图像处理技术是两种技术,两种技术密不可分,两者的有机融合才能将图像和图像处理更加符合客户需求,两者的转换和联系如图1所示,但两者也有若干区别: (1)理论基础不同。计算机图形学的理论基础是计算几何、分型、透视、变换、仿射理论、分形理论等,而计算机图像处理技术的理论基础是统计学、模

JAVA图像处理分段线性拉伸

import com.sun.media.jai.widget.DisplayJAI; import java.awt.GridLayout; import javax.media.jai.JAI; import javax.media.jai.PlanarImage; import javax.swing.BorderFactory; import javax.swing.JScrollPane; import javax.swing.border.TitledBorder; /* * PieceWise.java * 版权所有- 贺向前 * 邮件:hexiangqian@https://www.doczj.com/doc/a14099899.html, * QQ: 910019784 * 未经授权,不得复制、传播。 */ /** * * @author Administrator */ public class PieceWise extends javax.swing.JFrame { /** Creates new form PieceWise */ public PieceWise() { initComponents(); setTitle("分段线性拉伸"); setLayout(new GridLayout(2,2)); } private PlanarImage loadImage(String fileName){ PlanarImage im=JAI.create("fileload",fileName); return im; } private void showImage(PlanarImage im,String str){ DisplayJAI dj=new DisplayJAI(im); JScrollPane jp=new JScrollPane(dj); TitledBorder titledBorder=BorderFactory.createTitledBorder(str); jp.setBorder(titledBorder); add(jp); } /** This method is called from within the constructor to * initialize the form. * WARNING: Do NOT modify this code. The content of this method is

图形图像处理基础知识.

图形图像处理技能培训和鉴定标准 1定义 使用计算机及图形图像输入输出设备和图形图像处理软件处理静态或动态图形图像的工作技能。 2适用对象 从事工艺美术、室内装璜、广告艺术、建筑外观、产品模型、影视图像、图文排版、图文印刷、计算机多媒体技术工作人员以及其他需要掌握图形图像处理软件操作技能的社会劳动者。 3相应等级 图像制作员:专项技能水平达到相当于于中华人民共和国职业资格技能等级四级。能独立、熟练地应用图形图像制作软件基本功能完成静态或动态图形图像处理工作。 高级图像制作员:专项技能水平达到相当于于中华人民共和国职业资格技能等级三级。能独立、熟练地结合应用图形图像软件基本功能完成静态和动态图形图像处理工作。图像制作师:专项技能水平达到相当于于中华人民共和国职业资格技能等级二级。能独立、熟练地结合应用图形图像软件的功能完成静态和动态图形图像创意和设计工作。 4培训期限 图像制作员:短期强化培训 100~120学时。 高级图像制作员:短期强化培训 150~170学时。 图像制作师:短期强化培训 150~170学时。 5技能标准

5.1图像制作员 5.1.1一般知识要求 了解平面及立体构图基本知识和计算机彩色模式及基本配色原理; 掌握微机及常用图形图像处理设备 (如鼠标器、扫描仪、打印机等基本连接和简单使用的相关知识; 掌握计算机 DOS 和 Windows 两种操作系统的基本知识和基本命令的使用, 特别是文件管理、图形图像文件格式及不同格式的特点和相互间转换的基本知识; 掌握点阵图像和矢量图形的特点; 了解动画的基本概念。 5.1.2技能要求 具有图形图像制作软件基本的使用能力; 具有基本的图像扫描设备和输出设备的使用能力; 实际能力要求达到:能使用图形图像处理相关软件和图像扫描、输出设备独立完成三维静态图像和动画制作工作。 5.2高级图像制作员 5.2.1一般知识要求 了解平面和立体构图基本知识和计算机彩色模式及基本配色原理; 掌握微机及常用图形图像处理设备 (如鼠标器、扫描仪、打印机等基本连接和简单使用的相关知识;

数字图像处理之彩色图像的处理

实验六彩色图像的处理 一、实验目的 1、掌握matlab中RGB图像与索引图像、灰度级图像之间转换函数。 2、了解RGB图像与不同颜色空间之间的转换。 3、掌握彩色图像的直方图处理方法。 二、实验内容及步骤 1、RGB图像与索引图像、灰度级图像的转换。 close all RGB=imread('flowers.tif'); [R_i,map]=rgb2ind(RGB,8);%RGB图像转换为8色的索引图像 figure imshow(R_i,map) [R_g]=rgb2gray(RGB);%RGB图像转换为灰度级图像 figure imshow(R_g)

思考: 将RGB 图像’flowers.tif ’分别转换为32色、256色、1024色索引图像,是否调色板所表示的颜色值越多图像越好? close all

RGB=imread('flowers.tif'); [R_i1,map]=rgb2ind(RGB,8);%RGB图像转换为8色的索引图像 [R_i2,map]=rgb2ind(RGB,32);%RGB图像转换为32色的索引图像 [R_i3,map]=rgb2ind(RGB,256);%RGB图像转换为256色的索引图像 [R_i4,map]=rgb2ind(RGB,1024);%RGB图像转换为1024色的索引图像 Subplot(221);imshow(R_i1,map);title('8色的索引图像'); Subplot(222);imshow(R_i2,map);title('32色的索引图像'); Subplot(223);imshow(R_i3,map);title('256色的索引图像'); Subplot(224);imshow(R_i4,map);title('1024色的索引图像'); 结论:随着索引值的增加图像的质量也有增加,更加清晰,色彩也更加鲜明。但不是不是颜色值越多越好。当索引值过高时,会出现无法识别而致模糊的情况出现。 2、RGB图像与不同颜色空间的转换。 (1) RGB与HSI颜色空间的转换 HSI应用于彩色图像处理。实验六文件夹中rgb2hsi( )函数将RGB颜色空间转换为HSI 空间并显示各分量,hsi2rgb( )函数是将HSI颜色空间转换为RGB颜色空间。 close all

图形与图像处理

第三章图形与图像处理 教学目标:了解图形与图像概述;了解静止图像压缩标准;了解显 示设备与扫描仪;掌握图像处理软件。 重点难点:图像处理软件。 教学内容:1.图形与图像概述 2.静止图像压缩标准 3.显示设备与扫描仪 4.图像处理软件 教学课时:3学时 教学过程: 3.1 图形与图像概述 一、光与色彩 图形与图像都是视觉媒体元素。 光的本质是电磁波,其电磁光谱如下: 可见光 104 106 108 1010 1012 1014 1016频率(Hz) 4 102 100 10-2 10-4 10-6 10-8波长(m)

可见光:780nm~380nm波长 色彩是人类视觉对可见光的感知结果,在可见光谱内不同波长的光会引起不同颜色感觉 光的波长与颜色对照 三基色原理:将红、绿、蓝三种颜色按照不同的比例进行组合,就可以引起人眼对自然界的全部颜色感觉。 颜色模式:指表示色彩的数字方法。 ①RGB相加混合模式 RGB模式适用于显示器这类发光物体。 RGB是由三种基本颜色Red红、Green绿、Blue蓝组成,每种颜色的亮度大小用数字0-255表示,共有1670万种颜色。 R=G=B=0 黑色 R=G=B=255 白色 0

CMYK是由Cyan青色、Magenta品红色、Yellow黄色、Black 黑色组成,每种颜色用百分数0-100%来表示。 C=M=Y=K=0% 白色 C=M=Y=K=100% 黑色③HSB模式 HSB模式是根据人对颜色的感觉来描述的,适合从事艺术绘画的人描述色彩的方法。 HSB是由Hue色调、Saturation饱和度、Brightness亮度组成。 色调由可见光谱中各分量的波长来确定。 饱和度表示色彩的浓淡程度(掺入白光)。 亮度表示色彩的明亮程度(光的能量)。 色度=色调+饱和度④YUV/YIQ模式 YUV模式用于PAL彩色电视制式,其中: Y表示亮度信号,可构成灰色图像 U、V表示色度信号,是构成色彩的两分量 ⑤黑白模式与灰度模式 黑白模式采用1bit表示一个像素,只能显示黑色和白色,适合制作黑白的线条图。 灰度模式采用8bit表示一个像素,形成256个等级,适合用来模拟黑白照片的图像效果。 二、图形与图像 1.图形(矢量图形、几何图形) 矢量图是用一组命令来描述图形,这些命令给出构成图形的各

第11章java图像图形处理

第十一章图形图像处理 在前边的章节的图形用户界面的处理中,已经看到了图像的应用。本章将简要介绍如何在用户屏幕上绘制图形以及如何显示图像。 图形 在前边我们已经介绍了用户屏幕和容器的概念,也看到了如何在容器中添加组件。一般来说,在用户屏幕上绘制图形其实就是在容器组件上绘制图形。因此需要注意以下两点:1)组件中的坐标系统 容器组件的坐标系统类似于屏幕的坐标系统,坐标原点(0,0)在容器的左上角,正x 轴方向水平自左向右,正y轴方向垂直自上向下。 在java中,不同的图形输出设备拥有自己的设备坐标系统,该系统具有与默认用户坐标系统相同的方向。坐标单位取决于设备,比如,显示的分辨率不同,设备坐标系统就不同。一般来说,在显示屏幕上的计量单位是像素(每英寸大约90个像素),在打印机上是点(每英寸大约600个点)。Java系统自动将用户坐标转换成输出设备专有的设备坐标系统。 2)图形环境(graphics context) 由于在组件上绘制图形使用的用户坐标系统被封装在Graphics2D类的对象中,所以Graphics2D被称之为图形环境。它提供了丰富的绘图方法,包括绘制直线、矩形、圆、多边形等。 下边我们先介绍与绘制图形相关的类,再介绍绘制图形的方法和步骤。 11.1.1 绘制图形的类 与绘制图形有关的类的层次结构如下: |- | |- |-

Graphics 类是所有图形类的抽象基类,它允许应用程序可以在组件(已经在各种设备上实现)上进行图形图像的绘制。Graphics 对象封装了 Java 支持的基本绘制操作所需的状态信息,其中包括组件对象、绘制和剪贴坐标的转换原点、当前剪贴区、当前颜色、当前字体、当前的逻辑像素操作方法(XOR 或 Paint)等等。 Graphics2D类是从早期版本()中定义设备环境的Graphics类派生而来的,它提供了对几何形状、坐标转换、颜色管理和文本布局更为复杂的控制。它是用于在Java(tm)平台上绘制二维图形、文本和图像的基础类。 GraphicsDevice类定义了屏幕和打印机这类可用于绘制图形的设备。 GraphicsEnvironment类定义了所有可使用的图形设备和字体设备。 GraphicsConfiguration类定义了屏幕或打印机这类设备的特征。在图形绘制过程中,每个 Graphics2D 对象都与一个定义了绘制位置的目标相关联。GraphicsConfiguration 对象定义绘制目标的特征(如像素格式和分辨率等)。在Graphics2D对象的整个生命周期中都使用相同的绘制标准。 Griphics和Graphics2D类都是抽象类,我们无法直接创建这两个类的对象,表示图形环境的对象完全取决于与之相关的组件,因此获得图形环境总是与特定的组件相关。 创建Graphics2D 对象时,GraphicsConfiguration 将为Graphics2D 的目标(Component 或 Image)指定默认转换,所有 Graphics2D 方法都采用用户空间坐标。 一般来说,图形的绘制过程分为四个阶段:确定绘制内容、在指定的区域绘制、确定绘制的颜色、将颜色应用于绘图面。有三种绘制操作:几何图形、文本和图像。 绘制过程中,Graphics2D对象的6个重要属性如下: Paint 颜料属性决定线条绘制的颜色。它也定义填充图形的颜色和模式,系统默认的颜料属性是组件的颜色。 Font 字体属性定义了绘制文本时所使用的字体,系统默认的字体是组件的字体设置。 Stroke 画笔属性确定线型,如实线、虚线或点划线等。该属性也决定线段端点的形状。系统默认的画笔是方形画笔,绘制线宽为1的实线,线的末端为方形,斜角线段接口为45度斜面。 Transform 转换属性定义渲染过程中应用的转换方法。可以使绘制的图形平移、旋转和

java像素级图像处理与识别方法

java像素级图像处理与识别方法 2008-06-21 19:00 转载,挺不错的文章 朋友要求帮忙做一个图片识别的小程序,因为要用在特定的环境下,所以决定采用java语言实现。首先用matlab实现了识别算法的仿真,因为只是对特定的数字组合的识别,所以非常的简单,放弃采用比较复杂的识别算法,采用最普通的像素比较的识别算法。(如果背景噪声比较复杂,可以考虑先滤波后识别)在写java程序的时候发现一些问题,网上关于图片像素级操作的资料不是太多,有的还不是太正确,特此写出自己的成果与大家分享。 核心类:BufferedImage,ImageIO ImageIO类提供图象读写接口,可以对URL,InputStream等操作,得到图像信息十分的方便。 ImageIO在.*的包中,属于jdk中的标准类。提供的方法有: read() 例:BufferedImage imd=(new File(file)); write() 例:(imd, "JPEG", new File("C:\\test"+k+".gif")); etRGB(j,i); 现在我们得到了像素,可以看出像素是一个一维数组,你如果不习惯可以考虑保存在一个二维的数组中,然后就来实施你的看家算法,什么小波变换,拉普拉斯算子,尽管来吧。怎么样是不是很方便呢什么你好像看不太懂,好给你一些源程序好了,包括像素分解和识别算法。 源代码 /* * Created on 2005-11-29 * * TODO To change the template for this generated file go to * Window - Preferences - Java - Code Style - Code Templates */ package .*;

Java图形用户界面实验报告

西安邮电大学 (计算机学院) 课内实验报告 实验名称:图形用户界面 专业名称:计算机科学与技术 班级:计科1405班 学生姓名:高宏伟 学号:04141152 指导教师:刘霞林 实验日期:一、实验目的 了解图形用户界面基本组件窗口、按钮、文本框、选择框、滚动条等的使用方法,了解如何使用布局管理器对组件进行管理,以及如何使用Java 的事件处理机制。 二、实验要求 1. 掌握使用布局管理器对组件进行管理的方法。

2. 理解Java 的事件处理机制,掌握为不同组件编写事件处理程序的方法。 3. 掌握编写独立运行的窗口界面的方法。 4. 掌握组件的使用方法。 5. 了解对话框的使用方法。 三、实验内容 (一)算术测试。 实验要求: 编写一个算术测试小软件,用来训练小学生的算术能力。程序由3个类组成,其中Teacher类对象负责给出算术题目,并判断回答者的答案是否正确; ComputerFrame类对象负责为算术题目提供视图,比如用户可以通过 ComputerFrame类对象提供的GUI界面看到题目,并通过该GUI界面给出题目的答 案;MainClass是软件的主类。 程序模板: public class Teacher { int numberOne,numberTwo; String operator=""; boolean right; public int giveNumberOne(int n) { numberOne=(int)()*n)+1; return numberOne; } public int giveNumberT wo(int n) { numberTwo=(int)()*n)+1; return numberTwo; } public String giveOperator() { double d=(); if(d>= operator="+"; else operator="-"; return operator; } public boolean getRight(int answer) { if("+")) { if(answer==numberOne+numberTwo) right=true; else right=false; }

图像识别技术和图像处理技术

摘要 本文对图形图像处理系统的发展现状和所采用的主要技术进行了详细分析,确定了相应的结构和主要功能,以及实际开发中所采取的技术。系统在Windows XP平台下实现,本课题是采用Visual C++作为编程工具,采用面向对象的程序设计技术实现一个图形绘制和图像处理的应用软件。主要工作分为三类,包括基本图形绘制与编辑、简单的图像处理、图像格式的转换。图形方面主要是设计图形基类,以及继承图形基类的具体图形类。通过对独立功能的封装,可以为今后需要的图形图像的应用奠定基础。系统的优点有:充分体现了面向对象的设计思想,充分运用了C++的特性,比如封装、多态、继承。程序结构清晰,可读性好,程序中做了充分的注释。图形绘制部分避免了传统的switch case的繁琐结构。容易扩充和移植。 最后,对系统进行测试表明,系统功能达到了预期的要求,界面友好,操作简便,运行也较稳定,是一个完成基本功能的图形图像系统。 总体上,本文介绍了系统开发设计的全过程和设计过程中部分代码,也对系统测试的过程进行简单描述,同时对系统中采用的关键技术也作了一些必要的说明,对图像变换的基本原理,图像处理的基本原理和各种图像格式做了详细的阐述。 关键词:图形;图像;多态;继承

Abstract This article has carried on the detailed analysis about graph image processing system development and using of the key technology,identify the corresponding structure and central function, as well as the system adopts technology in the actual development. The system realizes under the Windows XP platform, the topic use Visual C++ as a programming tool, use object-oriented programming techniques to achieve a graphic and image processing software. Major work is divided into three categories, basic drawing and editing graphics, simple image processing, and image format conversion. The graph aspect is designs the graph base class , as well as inherits the graph bas e class’s specific graph class. Through independent function's encapsulation, for the future’s needs of the graphic images lays the foundation. The system merit has: the object-oriented design’s thought application of the c++ properties, for example encapsulation, pol ymorphism, and inheritance. Program’s structure is clear, good readability, codes has the full annotation in the program. The graph plan’s part has avoided complicated structure of the traditional switch case. Easy expansion and transplantation. Finally, system’s testing shows, s ystem’s functions achieve the expected demand, friendly interface, and the operation is simple, also a much stable operation, it has basic functions of the graphic image system. As a whole, this paper describes the system design process and part of the process of designing code, also carries on the simple description to the system test process, meanwhile it made some necessary explanations about key technology in the system, it made the detailed description to image transform of the basic

相关主题
文本预览
相关文档 最新文档