ImageJ脚本编程:做个球

发布时间:2024年01月18日

宏示例:生成球

学习一门编程语言最好的方式,就是跟着代码进行实战。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指令。

IDE

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命令是统一的。

文章来源:https://blog.csdn.net/m0_37816922/article/details/135609463
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。