学习一门编程语言最好的方式,就是跟着代码进行实战。Fiji菜单栏的Help->Examples中就封装了诸多代码,其中用于生成球的代码,提供了Macro、Java、BeanScript、Python以及JavaScript等5种语言的实现方式,下面先展示一下宏语句。
Macro
首先演示Macro脚本,其效果如下
下面摘取出代码的核心部分
size = 512;
newImage("title", "32-bit black", size, size, 1);
for (y=0; y<size; y++) {
for (x=0; x<size; x++) {
dx=x-size/2; dy=y-size/2;
d = sqrt(dx*dx+dy*dy);
setPixel(x,y,-d);
}
}
resetMinAndMax;
run("Red/Green");
其中,newImage用于生成一张新的图像,窗口名为title,色彩格式为32位,尺寸是 512 × 512 512\times512 512×512,切片数为1。
然后是两层for循环,遍历图像的所有像素,将图像的灰度值以图像中心为原点,按照 ? x 2 + y 2 -\sqrt{x^2+y^2} ?x2+y2?进行赋值。
循环结束后,通过resetMinAndMax来重置最大最小值。
最后,将图像用红/绿色进行分割,即可得到一开始的图像。
这个示例程序中出现了诸多函数,这些函数大多数取了一个易于阅读的名称,比如newImage,几乎一看名字就知道这个函数用于创建一个新图像。
但这个短短的生成球的脚本中,却出现了一个非常通用的函数run,这个函数中输入的名称,往往有一个与之对应的按钮。为了找到这个按钮,可以点击菜单栏Plugins->Utilities->Find Commands,或者直接按下快捷键Ctrl+L,即可弹出命令搜索窗口。
输入Red/Green,可见其对应的菜单路径是Image->Lookup Tables,对应的Java类是ij.plugin.LutLoader(“redgreen”)。
为此,查阅菜单,Lookup Tables中的确存在一个Red/Green指令。
Examples的Python子菜单中也提供了生成球的脚本,但并不能在Example窗口中运行,为此,点击菜单Plugins->New->Macro Tool,即可弹出ImageJ的集成编译环境(IDE)。这个窗口就是此前录制宏的时候,点击Create打开的窗口,但之前并没有仔细研究,这回主动打开,可以先查阅一下菜单栏中的Language,发现除了此前知道的5种编程语言之外,还提供Clojure, Groovy, Scala这三种JDK生态的语言,以及Web语言Ruby以及科学计算语言R,涉猎范围堪称全面。
将语言选项改为Python(Jython),然后写Python代码,由于生成的也是个绿球,所以不演示图像了。
from ij import IJ, ImagePlus
from ij.process import FloatProcessor
import math
size = 512
ip = FloatProcessor(size,size)
for y in range(size):
IJ.showProgress(y,size-1)
for x in range(size):
dx=x-size/2; dy=y-size/2
d = math.sqrt(dx*dx+dy*dy)
ip.setf(x,y,-d)
ImagePlus("jython",ip).show()
IJ.run("Red/Green")
Python的处理流程与ImageJ宏还稍有差别,比如通过创建一个FloatProcessor来作为图像的主体。但其后面的run命令是统一的。