原始 MediaWiki 页面

我知道编辑这个网站吗?
the Fiji distribution of ImageJ本页介绍与 the Fiji distribution of ImageJ 相关的内容。点击徽标查看详情。

图像表达式解析器

自迁移出 MediaWiki 以来,本页内容尚未经过审查。如果您愿意帮忙,请查看帮助指南

满足

该插件位于ProcessImage Expression Parser

该插件解析均使用数学表达式并使用图像作为变量计算结果。例如:

  • 2*A
  • A*(B+30)
  • sqrt(A^2+B^2)*cos(C)
  • A > B
  • gauss(A, 0.8)

其中A、B和C是相同尺寸的打开图像。

从版本2.x开始,支持基于逐像素的操作,并支持Imglib算法。

解析能力由 JEP 库提供:Java Expression Parser v.jep-2.4.1-ext-1.1.1-gpl。作者是 Nathan Funk 和 Richard Morris 在 GPL 下发布的最后一个版本,请参阅Singular System。在内部,该插件使用 Imglib 来处理图像。

在内部,图像是通过将复制到新的浮点类型图像来处理的,居民剪切效果。返回的结果图像也是浮点类型。

用户界面

饮料版本(从 ImageJ 启动)使用 GUI。

启动后,它会显示一个窗口,用户输入数学表达式、变量(大写字母,最多26个变量)和规范函数。该表达式由JEP库的解析器检查(http://www.singularsys.com/jep/)。如果无效,则显示一条有用的错误消息。

可以使用+/-按钮添加变量。它们与ImageJ中打开的图像相匹配。

当图像是RGB图像时,它们会以特殊的方式进行处理:

-它们分为3个RGB通道;

  • 每个通道单独解析和评估;
  • 3个结果图像重新组合成3个通道合成图像。

GUI 部分使用 Jigloo GUI 构建器构建 http://www.cloudgarden.com/jigloo/.

支持的功能

以下是自版本 2.1 起支持的函数和算法的列表。

支持 ImgLib 算法

描述 语法
高斯本质 高斯(img,西格玛)
弗洛伊德-斯坦伯格恐惧不决(img)  
图像归一化(总和为1) 标准化(img)

###支持的功能

描述 语法      
欧拉品牌 电子      
π pi      
标准运营商 +、-、*、/、^、%      
正弦 罪恶      
余弦 cos      
正切 棕褐色      
不一致弦 阿辛      
反余弦 acos      
相似切 阿坦      
相似切 2 参数 atan2(y,x) atan2(y,x) atan2(y,x) atan2(y,x)
双曲正弦      
双曲余弦 科什      
双曲正切 正切      
自然对数 日志      
指数 经验      
电源 战马      
平方根 开方      
绝对值 腹肌      
圆形 圆形      
楼层 楼层      
天花板 天花板      
布尔贡献 !、&&、||、<、>、!=、==、>=、<=      

扩展解析器

使用新功能扩展解析器相对容易。

基本上,您必须编写一个实现 fiji.expressionparser.function.ImgLibFunction 的函数。完成后,必须将其添加到解析器类中,以便它知道它。请参阅 fiji.expressionparser.ImgLibParser 方法 addStandardFunctions() 中的示例。

然而,在 fiji.expressparser.function 包中有一些抽象函数来简化扩展过程:

fiji.expressionparser.function.TwoOperandsPixelBasedAbstractFunction

这是带有两个参数且仅对像素值进行操作的函数的母类。也就是说:结果图像上的像素值将仅取决于源图像中同一位置处的像素值。

例如,查看扩展它的 fiji.expressionparser.function.ImgLibArcTangent2 。新函数基本上只需在方法 evaluate(final R t1, Final R t2) 中实现对数字的实际操作。

fiji.expressionparser.function.SingleOperandPixelBasedAbstractFunction

同样的事情,但是对于具有单个参数的函数。例如,请参阅 fiji.expressionparser.function.ImgLibAbs

fiji.expressionparser.function.SingleOperandAbstractFunction

这是一个更通用的抽象类,允许处理整个图像操作。有两种方法可以实现:

  • *evaluate(Image img)* 指定函数对整个图像执行的操作;
  • evaluate(R t) 指定函数对标量执行的操作。

相关示例,请参阅 ImgLibNormalize

fiji.expressionparser.function.TwoOperandsAbstractFunction

相同的事情,但有两个参数。由于单例扩展可以向左或向右,所以有更多的方法可以实现,并且不一定会产生相同的结果。

有关示例,请参阅 ImgLibGaussConv。在此示例中,您将看到如何处理错误或无效参数。

从其他地方调用插件

可以从其他类或脚本语言调用插件。以Python为例: from ij import WindowManager from net.imglib2.img import ImagePlusAdapter from net.imglib2.img.display.imagej import ImageJFunctions from fiji.process import Image_Expression_Parser

# Make an ImgLib image from the current image
imp = WindowManager.getCurrentImage()
img = ImagePlusAdapter.wrap(imp)

# In python, the map can be a dictionary, relating 
# variable names to images
map = {'A': img}
expression = 'A^2'

# Instantiate plugin
parser = Image_Expression_Parser()

# Configure & execute
parser.setImageMap(map)
parser.setExpression(expression)
parser.process()
result = parser.getResult() # is an ImgLib image

# Copy result to an ImagePlus and display it
result_imp = ImageJFunctions.show(result)
result_imp.resetDisplayRange()
result_imp.updateAndDraw() 这是 Jeff Hanson 贡献的 [Javascript](/scripting/javascript) 中的另一个示例:
// This script was created as an javascript equivalent of the Python example here:
//   https://fiji.sc/Image_Expression_Parser#calling-the-plugin-from-elsewhere

importClass(Packages.fiji.process.Image_Expression_Parser); 
importClass(java.util.HashMap);
importPackage(Packages.mpicbg.imglib);

expression = 'A^2';

imp = IJ.getImage();

img = Packages.mpicbg.imglib.image.ImagePlusAdapter.wrap(imp);

imgMap = new java.util.HashMap();
imgMap.put('A', img);
parser = new Packages.fiji.process.Image_Expression_Parser();
parser.setImageMap(imgMap);
parser.setExpression(expression);
parser.process();
result = parser.getResult();
resultImp = Packages.mpicbg.imglib.image.display.imagej.ImageJFunctions.copyToImagePlus(result);
IJ.run(resultImp, "Enhance Contrast", "saturated=0.35");
resultImp.show(); ## 版本历史
  • v1.0 - 2010年2月 - 第一个工作版本。
  • v1.1 - 2010 年 4 月 - 表达式字段现在有了历史记录。
  • v2.0 - 2010 年 5 月 - 完整逻辑重写:
    • functions are now handled by code specific for ImgLib;
    • support for ImgLib algorithms and non pixel-based operations, such as gaussian convolution;
    • faster evaluation, thanks to dealing with ImgLib images as objects within the parser instead of pixel per pixel evaluation.
  • v2.1 - 2010 年 6 月 - GUI 现在生成一个新的单独线程进行处理,释放资源以重绘 GUI 面板本身(感谢 Albert Cardona 和斐济人的输入)。
  • v2.2 - 2010 年 6 月 - 公开发布第一个版本。 RGB 图像由 GUI 以特殊方式处理:它们的每个通道都单独处理,然后组合在一起形成合成图像。

这个插件的愿望清单

我们有兴趣知道如何扩展这个插件,以便它满足您的需求。请get in touch