首页 imageJ中文开发教程

imageJ中文开发教程

举报
开通vip

imageJ中文开发教程 ImageJ开发教程 (苑永超 整理,仅供参考,勿作商业用途) 目录 一、ImageJ简述.................................................................................................... 2 二、ImageJ内部结构..........................................................................................

imageJ中文开发教程
ImageJ开发教程 (苑永超 整理,仅供参考,勿作商业用途) 目录 一、ImageJ简述.................................................................................................... 2 二、ImageJ内部结构............................................................................................. 3 三、ImageJ通过插件扩展功能的方法 .................................................................... 4 三、插件编辑、编译、运行与部署 ......................................................................... 6 四、主要的包介绍 .................................................................................................. 8 五、重要类方法介绍 ............................................................................................ 10 1、创建图象和图象栈 ....................................................................................... 10 2、创建图象处理器 .......................................................................................... 11 3、载入和存储图象 .......................................................................................... 11 4、图象参数 ..................................................................................................... 11 5、操作像素 ..................................................................................................... 11 6、图象转换 ..................................................................................................... 12 7、直方图与图象统计量 ................................................................................... 12 8、点运算......................................................................................................... 12 9、滤波器......................................................................................................... 13 10、几何运算 ................................................................................................... 13 11、图形运算 ................................................................................................... 14 12、显示图象和图象栈 ..................................................................................... 14 13、图象栈上的操作 ........................................................................................ 15 14、感兴趣的区域 ............................................................................................ 16 15、图象属性 ................................................................................................... 17 16、用户交互 ................................................................................................... 17 17、插件 .......................................................................................................... 18 18、窗口管理 ................................................................................................... 19 19、其他函数 ................................................................................................... 19 六、学习资源 ....................................................................................................... 20 ImageJ官网(http://rsb.info.nih.gov/ij/index.html)上有英文的用户手册和 教程,以及一些例子。本教程主要是为看英文比较累的朋友提供一些快速的入门。 如果想在 ImageJ 上开发自己的图象处理算法,建议先熟悉 java 编程知识。本 教程基本不对 ImageJ菜单中提供的各种文件操作、图象编辑、图象处理、图象 分析等功能作详细介绍,请读者自行探索;也不准备介绍数字图象处理的各种算 法和操作,本文假定读者是图象处理方面的专业人士,本教程的重点是如何进行 二次开发,如果不特别指出,文中的部分内容和例子都为 ImageJ软件包自带或 采自相关书籍(如《数字图像处理-java语言描述》),中文注释是后加的。 一、ImageJ简述 图象处理的流程无外乎就是打开图象数据文件,将图象数据加载到内存,然 后对该内存中的图象数据进行一系列处理(分割、检测、滤波、合成、识别、显 示等等),最后可能还需要将处理结果保存成某种 格式 pdf格式笔记格式下载页码格式下载公文格式下载简报格式下载 的文件。 对于一般的用户来说,类似 ACDsee 之类的傻瓜式的软件足够了。但是科 学人士除了希望有广泛的、成熟的处理算法库可以直接调用外,一般还希望开发 自己的特有的图象处理算法、特有的图象处理步骤、甚至特有的交互过程。 ImageJ就是这样的工具软件。 ImageJ是基于 Java的,ImageJ在设计上实现了一个可以扩展的基本框架, 开发人员可以通过其提供的接口来扩展图象处理功能。ImageJ 提供了很多现成 的功能,这些功能可以通过菜单来调用,也可以调用相应的类的方法的 API。 用户只要按照接口要求开发好自己的处理模块,并按照要求部署和配置, Image就可以自动加载和调用。 ImageJ是完全开源和免费的,特别适合教学和科研。其关键的特征有: 1、 在菜单上集成了一系列的交互式工具,用于创建、加载、编辑、分析、 处理、保存图象,支持常见的图象文件格式。 目前,ImageJ主菜单上的集成的主要功能: ! File: 打开、保存、创建新的图象文件。 ! Edit:图象的编辑和绘制操作。 ! Image:图象的修改、转换、几何操作。 ! Process:图象的点运算、滤波器、以及多幅图象之间算法操作。 ! Analysze:对图象数据进行统计分析、用直方图或其他格式显示出来。 ! Plugin:编辑、编译、执行、管理用户自己定义的插件。 2、 提供简单的插件机制,帮助开发人员专注于自己的图象处理过程的开 发,从而扩展 ImageJ的功能。 3、 提供宏语言或 javascript 脚本以及解释器,可以通过组合现有的函数, 来实现客户化的处理过程。这种方式不需要用户具有 Java 知识。此外 还有一些使用其他脚本语言扩展的方式。 用户要想在 ImageJ的基础上扩展自己的图象处理功能、进行二次开发,需 要了解 Image内部结构。 二、ImageJ内部结构 上面是一个 ImageJ的内部结构图,我们结合该图以“打开并显示一个图象” 的功能为例说明一下 ImageJ的工作原理: 1、首先创建一个打开文件类 FileOpener对象,并调用其 Open方法。 2、该 Open方法首先从图象文件中读取像素数据,并放到数组 pixels[]中。 3、随后创建一个 ImagePlus的对象。如图所见,这个对象成员中包含有一 些指针,指向其他对象: ! 一个图象处理器对象 ImageProcessor的子类:该对象主要是提供对 当前图象数据的处理操作。(像素数据保存有对应的像素数组 pixels[])。 ! 一个图象栈对象 ImageStack:用来保存多幅图象数据或图象处理的 中间数据。 ! 文件信息类对象 fileInfo:存有图象的尺寸、位深度等的相关信息。 ! AWT的图象对象类 img:通过操作将图象数据映射到 Image对象上, 实现图象的显示。 ! Frame窗口类的子类对象 ImageWindow:实现对图象窗口的管理。 上述这些对象在FileOpener对象的open方法中创建,并赋予 ImagePlus 中的相应成员:ip,stack,fileInfo,img,win。 4、如果该图象需要显示,则调用 ImagePlus的 show方法。 图 1 ImageJ图象及图象栈的内部表示 该方法调用图象处理器对象 ip 的 createImage()方法创建和图象数组数 据对应的图象类 Image对象。并将 img指向它。 然后创建 ImageWindow窗口。设置窗口画布、窗口布局等。 最后通过 ImagePlus的 draw()方法调用完成绘制。 切记: FileOpener 的 open()方法返回的是对应的 ImagePlus 对象。通过该对象, 我们可以毫不费力地找到上述相关的对象,尤其是拥有众多图像处理操作和算法 的 ImageProcessor,调用需要的方法,从而快捷地完成我们的工作。 三、ImageJ通过插件扩展功能的方法 插件是一种小型的程序模块,该模块遵循简单的 标准 excel标准偏差excel标准偏差函数exl标准差函数国标检验抽样标准表免费下载红头文件格式标准下载 化接口,可以被集成到 软件框架中,从而扩展宿主软件的功能。ImageJ 的许多内置的图象处理功能也 是通过插件来实现的。这里所谓的简单的标准化接口其实就是 Java的接口类。 ImageJ提供如下三种不同的接口插件: ! PlugIn:启动该插件时不需要打开一幅图象 ! PlugInFilter:启动该插件时,需要传递给该插件一幅打开图象的指针。 该插件的操作将施加在该图象上。 ! PlugInFrame:该插件可以扩展一个独立的操作交互界面。 很显然,通过 PlugIn 扩展的插件,如果要处理图象,则需要自己去处理获 取图象数据,这可以通过获取一个已经被打开的图象文件的指针、自己打开或新 创建一个图象文件并获取指针,或直接在内存中开辟图象数据的方式实现。 该方式的自由度很高。该接口的用法示例如下: // 对话框打开并显示一个图像文件 import ij.plugin.*; import ij.plugin.frame.*; import ij.*; public class Test_PlugIn implements PlugIn { public void run(String arg) { Opener xx = new Opener(); xx.open() ; } } // end of class 用户要实现该接口的 run方法。 实际上,用的最多的是通过 PlugInFilter扩展的插件。该接口的示例如下: // 实现将一幅 8bit位的灰度图取反 import ij.ImagePlus; import ij.plugin.filter.PlugInFilter; import ij.process.ImageProcessor; public class My_Inverter implements PlugInFilter { public int setup(String arg, ImagePlus im) { return DOES_8G; // this plugin accepts 8-bit grayscale images } public void run(ImageProcessor ip) { int w = ip.getWidth(); // 获得图象宽度 int h = ip.getHeight(); // 获得图象高度 // iterate over all image coordinates for (int u = 0; u < w; u++) { for (int v = 0; v < h; v++) { int p = ip.getPixel(u, v); // 取列为 u,行为 v位置的像素的值 ip.putPixel(u, v, 255 - p); // 设置列为 u,行为 v位置的像素值 } } } } // end of class 用户要实现该接口的两个方法。 public int setup(String arg, ImagePlus im) 系统执行 PlugInFilter 类型的插件时,首先调用 setup 方法获得插件本身的 一些信息。该方法利用打开图象的 ImagePlus对象 im中包含的信息,进行版本 校验,处理参数的设置等操作。 public void run(ImageProcessor ip) 该方法接收 ImageProcessor类型的对象,其中包含待处理的图象及其相关 信息。上面的程序段里利用了相关的方法获取图象尺寸、像素等信息。另外上述 的 run()方法中还可以通过直接操作像素数组来实现类似的功能,但效率要高多 了,程序段如下: public void run(ImageProcessor ip) { int w = ip.getWidth(); // 获得图象宽度 int h = ip.getHeight(); // 获得图象高度 byte[] pixels = (byte[])ip.getPixels() ; // 获得像素数组 // iterate over all image coordinates for (int u = 0; u < w; u++) { for (int v = 0; v < h; v++) { int p = 0xff & pixels[v*w+u] ; // 取列为 u,行为 v位置的像素的值 pixels[v*w+u] = (byte)(0xFF-p); // 设置列为 u,行为 v位置的像素值 } } } 如果用户要实现复杂的界面和交互,可以扩展 plugFrame插件。该插件的示 例如下: import ij.*; import ij.process.*; import ij.gui.*; import java.awt.*; import ij.plugin.frame.*; public class TestFrame extends PlugInFrame { public TestFrame() { super("Plugin_Frame"); TextArea ta = new TextArea(15, 50); add(ta); pack(); GUI.center(this); show(); } } 系统创建该窗体插件,用户可以定义自己的用户界面、交互流程,当然前提要对 java的 AWT或 Swing编程比较熟悉。 三、插件编辑、编译、运行与部署 1、 源码部署 用户的插件的源代码应该位于 ImageJ安装目录的plugins目录或一个下一级 目录。如果放到其他目录,ImageJ将不能识别。 2、 源码编辑 用户可以选择 ImageJ的菜单 Plugins->New,在选择对应的插件类型,来生 成相应的插件原型源代码,用户可以在该代码的基础上编写自己的插件。但是 ImageJ内置的 java代码编辑器不能提供在线的语言帮助,不是很方便。用户可 以通过 Eclipse或其他集成编辑器开发插件。 3、 编译 ImageJ 自带了 java 编译器,可以在 ImageJ 的菜单中使用。选择 Plugins->Compile and Run… 选择要编译和执行的插件。这种方式,插件编译 后会立即被加载和执行,如果是 PluginFilter插件则一定要用菜单方式打开一幅 可被处理的图像文件,否则插件执行会报错。 4、 菜单设置 要从菜单上执行该插件功能。选择 Plugins->Shortcuts->Install Plugins….在 弹出的对话框中设置如下: Plugin:从下拉列表中把你的插件选择出来(ImageJ已经对部署到 Plugins或下一级的 目录下的插件自动识别出来料)。 Menu:选择要将菜单项放到那个子菜单项目下。(一般插件放到 plugins 或 plugins/shortcuts下)。 Command:显示在菜单上的对应的菜单项的名称。 Shortcuts:对应的快捷键(一般是 F+数字,如 F4)。 Argument:该插件需要的参数,对应插件的 setup方法中要传入的参数。 5、 从菜单中去除菜单项 选择 Plugins->Shortcuts->remove…,从对话框列表中选择要删除的菜单项 名称。ImageJ重起后生效。 6、 使用 Eclipse开发插件 使用 Eclipse 的好处:a、随时可以得到语法帮助,b、相关类和方法的 用法帮助,c、自动补全完成功能,d、调试和跟踪代码的执行。开发效率将 大大提高。 使用 Eclipse步骤如下: ! 从官网下载最新的 ImageJ 源码包(我下载的是这个链接的包 http://rsb.info.nih.gov/ij/download/src/ij145e-src.zip)。 ! 用 eclips建一个 java的空的工程(我命名为 ImageJ),将 ij145e-src.zip 包解开,将其中的 source下的子目录等内容拷贝到 ImageJ下。 ! 通过选择”project->clean”来编译 ImageJ工程,Complier.java会报错,这 是因为使用的缺省的 java1.5版本太高。具体做法是:将 ImageJ安装包 自带的 jre目录拷贝到 ImageJ的目录下,在工程浏览窗口的 ImageJ工 程上右键打开菜单,选择工程属性,打开 javaBuild Path->Libraries。先 将原先的 1.5版本的 jre删除,然后选择 Add Libraries,在 libraries type 类型列表框中选择”jre system library”,再选择”alternate JRE”,按 Install JREs按牛,在新的对话框中选择”Add”, 在新的对话框中选择”Browse按 纽,选择 ImageJ目录下的 jre目录即可。确认后 jre1.4就被添加进了了, 选择 JRE为刚添加的 jre版本的就 OK了。此时可以选择运行 ImageJ的 main()方法,成功则显示 ImageJ的主界面。 注意,在 libraries type类型列表框不要选择 J2EE1.4,而要使用 jre system library 去添加 jre1.4,否则会报 java/lang/NoClassDefFoundError: java/lang/Object)。 ! 这时如果 ImageJ下 Plugins目录下有插件源代码,则浏览窗口提示有错 误。提示的错误是“declare package “” not expect package XXX”。这是 因为插件的 java 文件前面没有 package 语句,因为这些代码并不打到 IJ.jar 包里去,不影响 ImageJ 本身的编译。切记不要给插件加 package 声明语句,否则虽然错误提示没了,插件执行却会出错。 ! 要开发插件,只需要在 Plugins下创建新的类即可,要继承相应的接口, 实现要求的方法,注意将自动添加的包声明去掉。 ! 要编译插件,在 eclipse菜单中选择 project->clean即可。 ! 要使用最新的 IJ.jar可以通过 ImageJ菜单的 help->ImageJ news 选择升 级。大量的插件可以通过 ImageJ菜单的 help->plugins在线访问。 7、 使用宏程序 对 于 经 常 使 用 的 一 系 列 的 插 件 调 用 , 可 以 通 过 ImageJ 的 Plugins->Macros->Record记录成为宏程序,这样只要选择执行该宏就可以实现 原先的一系列操作料。 要充分发掘 ImageJ的功能,需要熟悉 Image主要的类结构和相互关系,下 面按照功能介绍以下主要的包的类图结构。 四、主要的包介绍 类型(所在包) 主要类 类说明 ImagePlus 该类的一个对象和一幅要处理的图象(或图象序列) 相对应。包含有图象处理类 ImageProcessor 抽象 类。 图象(包 ij) ImageStack 可扩充图象序列(栈),依附于 ImagePlus对象 ImageProcessor 这是一个抽象类,有四个派生类 ByteProcessor 用于 8 位(byte)类型的灰度图象和索引彩色图象 的处理类。其子类 BinaryProcessor实现了仅包含 0 和 255两个像素值的图象。 ShortProcessor 16位灰度图象的处理类。 FloatProcessor 32位(浮点型)图象的处理类。 图象处理器 (包 Ij.process) ColorProcessor 32位彩色(3X8位 RGB通道加上 8位α通道 浮)图象的处理类。 插件 (包 ij.plugin) plugin 包含 void run(String arg)方法。 不需要先打开图象。 插件(包 ij.plugin.filter) PlugInFilter 要实现下面两个方法 int setup(String arg, ImagePlus imp) void run(ImageProcessor ip) 插件(包 ij.plugin.Frame) PlugInFrame 用户要实现界面相关的消息处理 图 2 ImageJ中 ij包的类图 类型(所在包) 主要类 类说明 ColorChooser 颜色选取对话框类 NewImage 交互式创建新图象的类 GenericDialog 提供一套标准交互字段可配置的对话 框窗口类 ImageCanvas Awt 中 Canvas 的子类,描述窗口中 显示图象的映射关系(源矩形框、缩 放因子),也处理发送到该窗口的键盘 和鼠标事件 ImageWindow Awt 中 Frame 的子类,用于显示 ImagePlus 类型图象的屏幕窗口。该 类对象包含一个 ImageCanvas 类的 实例,用于图象的实际显示。 GUI (包 ij.gui) Roi 定义一个用户选取的感兴趣区域。是 ROI类(Line,OvalRoi,PolygonRoi) 等的超类 窗口管理 (包 lj) WindowManger 提供一套静态方法用于 ImageJ 窗口 管理 工具(包 Ij) 提供了一套静态工具方法,包括图象 选取、创建、打开和保存以及操作环 境信息获得的方法 图 3 ImageJ中 ij.process包的类图 输入输出 (包 jj.io) 包含从文件度取(载入)和往文件写 入各种格式和编码图象的类 五、重要类方法介绍 1、创建图象和图象栈 ImageJ中有多种方式创建图象。 ImagePlus类中支持创建一个空的 ImagePlus对象、从 URL路径中创建、从给 定的 Image 图象中创建、从 ImageProcess 对象中也可以创建、从给定的图象 栈中可以创建、可以创建一个空的图象栈、可以返回与当前 ImagePlus 相关联 的图象栈。 IJ类支持创建一个给定参数的 ImagePlus图象 NewImage类用几个静态方法支持创建 ImagePlus图象和图象栈 ImageProcessor支持用 Image的 CreateImage()方法创建当前图象的副本并以 标准 Image图象返回。 图 4 ImageJ中 jj.io包的类图 2、创建图象处理器 ImageProcessor 对象表示可以被创建、处理、销毁但一般不能在屏幕上显示的 图象。 ImagePlus 的 getProcessor 返回指向图象的 ImageProcessor 对象的引用,如 果没有,则创建一新的,如果没有 Image则返回空。setProcessor设置该对象 ImageProcessor提供了创建 createProcessor,复制 duplicate。 子类中可以从 Image图象创建或按照指定尺寸、色彩等参数构造。 3、载入和存储图象 IJ类中提供了很多类似菜单功能的静态方法: Run(“Open…”/”Revert”/”Save”) 可用于 IO的方法 open(path)/openImage(path)/save(path)/saveAs(fmt,path) Opener类提供了重载的 open()/openImage()/openMultiple()方法 打开模式设置,以及针对特定格式的打开方法、保存方法。 FileOperner类从该类保存的文件信息的位置上打开或保存图象 4、图象参数 ImageProcessor中获得图象的宽度和高度、打开或关闭像素插值 ColorProcessor提供彩色转灰度,权值获取/设置 getWeightingFactors() set WeightingFactors() 5、操作像素 ImageProcessor提供了很多坐标访问方法: getPixel(x,y)/putPixel(x,y,val) get(x,y)/put()x,y是 2D索引不验证参数的版本 get(i)/put(i)是按照 1D索引访问 带 f是浮点型的版本。 获取像素数组指针 getPixels 还可以整行/整列/整个数组的操作 彩色图象使用 getRGB()/setRGB()/getHSB()/setHSB()等进行 6、图象转换 ImageProcessor实现了不同类型间图象相互转换的基本方法(非破坏性转换) convertToByte/convertToShort/convertToFloat/convertToRGB ImagePlus类型可以通过 ImageConvert类的方法进行转换(破坏性转换) convertToGray8()/convertToGray16()/convertToGray32()/ convertToRGB()/converToHSB/convertHSBToRGB convertRGBStackToRGB(将 RGB栈转成单幅的 RGB图象) 诸如此类 7、直方图与图象统计量 ImageProcessor的方法 获取图象或感兴趣区的直方图 Int[] getHistogram() Int[] getHistogramMax() Int[] getHistogramMin() Int[] getHistogramSize() Int[] setHistogramRange() Int[] setHistogramSize() 其 他 的 统 计 量 可 通 过 ImageStatictics 及 其 子 类 ByteStatictics\ShortStatictics\ FloatStatictics\ColorStatictics\StackStatictics实现。 8、点运算 对 ImageProcessor类型的对象的整幅图或感兴趣区域的全体像素施加该运算。 abs() 给每个像素替换成其绝对值 add(val) /and(val)/or(val)/sqr()/sqrt()/xor/log() applyTable(int []lut) // 查表影射 autoThreshold() // 转 2值图象 gamma(g) // gamma矫正 max(val)/ min(val) // 将所有大于/小于 val的值设置成 val multiply(val)乘/noise(val)加噪声随即量 val threshold(int th) // 快递公司问题件快递公司问题件货款处理关于圆的周长面积重点题型关于解方程组的题及答案关于南海问题 为 Image Static void error ( String title,String msg ) //对话框标题由 title指定 Static void log ( String msg) // 在日志窗口中显示一行 msg Static void write ( String msg ) // 向日志窗口写入一行 msg 对话框: Static double getNumber(String prompt, double defVal) // 读取用户输入的数字 Static String getString (String prompt, String defVal) // 读取用户输入的字符串 Static void noImage() // 提示没有图象对话框 Static void showMessage( String msg) // 提示消息 Static void showMessage ( String title,String msg ) //对话框标题由 title指定 Static boolean showMessageWithCancel(String title,String msg) // 用户按取消 则返回 false 进展条和状态条: Static void showProgress(double prog) // 更新 ImageJ中进度条, 0<=prog<=1 Proj>1则进度条被删除。 Static void showProgress(int I, int n) // 0<=i
本文档为【imageJ中文开发教程】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: 免费 已有0 人下载
最新资料
资料动态
专题动态
is_011910
暂无简介~
格式:pdf
大小:988KB
软件:PDF阅读器
页数:20
分类:互联网
上传时间:2011-09-26
浏览量:1215