intp=ip.getPixel(u,v);//取列为u,行为v位置的像素的值
ip.putPixel(u,v,255-p);//设置列为u,行为v位置的像素值
}
}
}
}//endofclass
用户要实现该接口的两个方法。
publicintsetup(Stringarg,ImagePlusim)
系统执行PlugInFilter类型的插件时,首先调用setup方法获得插件本身的一些信息。
该方法利用打开图象的ImagePlus对象im中包含的信息,进行版本校验,处理参数的设置等操作。
publicvoidrun(ImageProcessorip)
该方法接收ImageProcessor类型的对象,其中包含待处理的图象及其相关信息。
上面的程序段里利用了相关的方法获取图象尺寸、像素等信息。
另外上述的run()方法中还可以通过直接操作像素数组来实现类似的功能,但效率要高多了,程序段如下:
如果用户要实现复杂的界面和交互,可以扩展plugFrame插件。
该插件的示例如下:
importij.*;
importij.process.*;importij.gui.*;importjava.awt.*;
importij.plugin.frame.*;
publicclassTestFrameextendsPlugInFrame{publicTestFrame(){
super("Plugin_Frame");
TextAreata=newTextArea(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->CompileandRun…选择要编译和执行的插件。
这种方式,插件编译后会立即被加载和执行,如果是PluginFilter插件则一定要用菜单方式打开一幅可被处理的图像文件,否则插件执行会报错。
4、菜单设置
要从菜单上执行该插件功能。
选择Plugins->Shortcuts->InstallPlugins….在
弹出的对话框中设置如下:
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工程上右键打开菜单,选择工程属性,打开javaBuildPath->Libraries。
先将原先的1.5版本的jre删除,然后选择AddLibraries,在librariestype类型列表框中选择”jresystemlibrary”,再选择”alternateJRE”,按InstallJREs按牛,在新的对话框中选择”Add”,在新的对话框中选择”Browse按纽,选择ImageJ目录下的jre目录即可。
确认后jre1.4就被添加进了了,选择JRE为刚添加的jre版本的就OK了。
此时可以选择运行ImageJ的
main()方法,成功则显示ImageJ的主界面。
注意,在librariestype类型列表框不要选择J2EE1.4,而要使用jresystem
library去添加jre1.4,否则会报java/lang/NoClassDefFoundError:
java/lang/Object)。
•这时如果ImageJ下Plugins目录下有插件源代码,则浏览窗口提示有错误。
提示的错误是“declarepackage“”notexpectpackageXXX”。
这是因为插件的java文件前面没有package语句,因为这些代码并不打到
IJ.jar包里去,不影响ImageJ本身的编译。
切记不要给插件加package
声明语句,否则虽然错误提示没了,插件执行却会出错。
•要开发插件,只需要在Plugins下创建新的类即可,要继承相应的接口,实现要求的方法,注意将自动添加的包声明去掉。
•要编译插件,在eclipse菜单中选择project->clean即可。
•要使用最新的IJ.jar可以通过ImageJ菜单的help->ImageJnews选择升级。
大量的插件可以通过ImageJ菜单的help->plugins在线访问。
7、使用宏程序
对于经常使用的一系列的插件调用,可以通过ImageJ的Plugins->Macros->Record记录成为宏程序,这样只要选择执行该宏就可以实现原先的一系列操作料。
要充分发掘ImageJ的功能,需要熟悉Image主要的类结构和相互关系,下面按照功能介绍以下主要的包的类图结构。
四、主要的包介绍
类型(所在包)
主要类
类说明
图象(包ij)
ImagePlus
该类的一个对象和一幅要处理的图象(或图象序列)
相对应。
包含有图象处理类ImageProcessor抽象类。
ImageStack
可扩充图象序列(栈),依附于ImagePlus对象
图象处理器
(包Ij.process)
ImageProcessor
这是一个抽象类,有四个派生类
ByteProcessor
用于8位(byte)类型的灰度图象和索引彩色图象的处理类。
其子类BinaryProcessor实现了仅包含0
和255两个像素值的图象。
ShortProcessor
16位灰度图象的处理类。
FloatProcessor
32位(浮点型)图象的处理类。
ColorProcessor
32位彩色(3X8位RGB通道加上8位α通道
浮)图象的处理类。
插件
(包ij.plugin)
plugin
包含voidrun(Stringarg)方法。
不需要先打开图象。
插件(包
ij.plugin.filter)
PlugInFilter
要实现下面两个方法
intsetup(Stringarg,ImagePlusimp)voidrun(ImageProcessorip)
插件(包
ij.plugin.Frame)
PlugInFrame
用户要实现界面相关的消息处理
)
类型(所在包
主要类
类说明
GUI
(包ij.gui)
ColorChooser
颜色选取对话框类
NewImage
交互式创建新图象的类
GenericDialog
提供一套标准交互字段可配置的对话
框窗口类
ImageCanvas
Awt中Canvas的子类,描述窗口中
显示图象的映射关系(源矩形框、缩
放因子),也处理发送到该窗口的键盘
和鼠标事件
ImageWindow
Awt中Frame的子类,用于显示
ImagePlus类型图象的屏幕窗口。
该类对象包含一个ImageCanvas类的实例,用于图象的实际显示。
Roi
定义一个用户选取的感兴趣区域。
是
ROI类(Line,OvalRoi,PolygonRoi)
等的超类
窗口管理
(包lj)
WindowManger
提供一套静态方法用于ImageJ窗口
管理
工具(包Ij)
提供了一套静态工具方法,包括图象
选取、创建、打开和保存以及操作环境信息获得的方法
五、重要类方法介绍
1、创建图象和图象栈
ImageJ中有多种方式创建图象。
ImagePlus类中支持创建一个空的ImagePlus对象、从URL路径中创建、从给定的Image图象中创建、从ImageProcess对象中也可以创建、从给定的图象栈中可以创建、可以创建一个空的图象栈、可以返回与当前ImagePlus相关联的图象栈。
IJ类支持创建一个给定参数的ImagePlus图象
NewImage类用几个静态方法支持创建ImagePlus图象和图象栈
ImageProcessor支持用Image的CreateImage()方法创建当前图象的副本并以
标准Image图象返回。
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()setWeightingFactors()
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)加噪声随即量valthreshold(intth)//
多幅像素运算,ImageProcessor组合2幅图的方法: copyBits(ImageProcessor,int,int,intmode) mode运算类型中在Blitter中定义: COPY/ADD/AND/COPY_INVERTED/DIFFERENCE/DIVIDE/ 9、滤波器 imageProcessor类提供滤波方法: voidconvolve(float[]kernel,intw,inth) 对当前图象执行线形卷积,滤波k
展开阅读全文
相关搜索
|