Avizo用户使用手册-5
[TOC]
Chapter 5
5 创建配方以自动执行工作流
配方(Recipes)仅在Microsoft Windows平台上可用。
Avizo允许创建用户自定义的recipes配方,用于自动执行一系列模块。Avizo配方便于应用高层次的工作流,例如滤波、分割以及从图像中提取用户自定义的统计信息。配方把你的知识整合起来,并以push button(一键式)方案的形式提供给其他用户使用。
有一个专用工作室可用于创建、编辑和执行配方。该工作室可以通过选择Workroom Toolbar工作间工具栏上的Recipes图标来启动。该工作室由三个面板组成:一个通用3D查看器实例、一个以列表形式展示步骤序列的专用Recipes面板,以及一个显示当前步骤模块属性的Properties面板。主要的交互区域是Recipes面板,你可以在其中编辑和执行配方(见图5.1)。一旦从Recipes面板的下拉菜单中选中某个配方,就可以对其进行回放和编辑。Avizo会加载在你主目录的标准配方文件夹中找到的所有配方。默认情况下,该文件夹位于%APPDATA%/Thermo Fisher Scientific/Recipes。你可以单击Load Recipe加载其他配方,也可以单击Save Recipe把配方保存到磁盘,以便与其他用户共享。
图 5.1:配方面板The Recipes Panel。
你可以单击Edit Recipe来更改配方名称,并为其添加一些文档说明(见图5.2)。
图 5.2:编辑配方Edit Recipe。
然后,该文档说明就会显示在配方面板中。
图 5.3:配方文档说明显示Recipe Documentation Display。
配方既可以一次性执行完毕,也可以带breakpoints断点执行——在后一种情况下,配方的执行会在用户自定义的步骤处暂停(见图5.4)。默认情况下,配方会按照你保存时的状态来配置各模块。断点允许你在运行时更改配方中所用模块的属性。通过这种方式,只需更改一个参数就可以多次执行配方,以评估该参数的敏感性。例如,你可以更改阈值,以评估孔隙率是否对该分割参数敏感。
注意:需要用户交互的模块(例如绘制paint)会自动强制产生一个断点。
对于每个步骤,你都可以开启/关闭把结果保存到磁盘,以及把结果导出到Project工作室。如果关闭了到Project工作室的导出,那么一旦数据不再需要,就会从内存中移除。此操作可以让你降低内存消耗。
注意:只有在Production Mode生产模式开启时,你的结果才会被保存到磁盘。
图 5.4:配方步骤操作Recipe Step Actions。
配方回放完成后,把鼠标悬停在某个步骤上会显示该结果图像的预览缩略图(见图5.5)。
图 5.5:配方预览Recipe Preview。
在每个步骤上,都可以对其结果拍摄快照并保存到应用程序数据目录中。默认情况下,使用的是在Edit > Preferences > Auto Display中定义的显示模块。不过,你也可以添加一个带断点的显式快照步骤来更改它。执行配方时,它会在该步骤暂停,并允许你在Properties面板中自定义显示模块(见图5.6)。
图 5.6:添加快照Adding a Snapshot。
本文档分为以下几节:
Creating and editing recipes创建和编辑配方Using breakpoints, recomputing another region, and processing full data使用断点、重新计算另一个区域以及处理完整数据Recipes in a TCL commandTCL命令中的配方Recipes Limitations配方的限制
5.1 创建和编辑配方Creating and Editing Recipes
本节通过一个简单的示例,说明如何创建和编辑配方。在这个示例中,将针对糖果基体内部的气泡,对来自Avizo教程目录的巧克力棒数据集进行分析。我们首先建立一个处理工作流:
- 加载
AVIZO_ROOT/data/tutorials/chocolate-bar.am - 附加一个
Image Processing > Smoothing And Denoising > Median Filter。在其Properties中选择Interpretation 3D,将Iterations设置为1,然后单击Apply。 - 将一个
Image Segmentation > Binarization > Auto Thresholding模块附加到chocolate-bar.filtered对象,然后单击Apply。 - 将一个
Image Processing > Separating and Filling > Fill Holes模块附加到chocolate-bar.labels数据,选择3D选项,然后单击Apply。 - 将一个
Compute > Arithmetic模块附加到chocolate-bar.filled数据,把它的InputB端口连接到chocolate-bar.labels。在Expression字段中输入A-B,然后单击Apply。 - 将一个
Measure And Analyze > Individual Measures > Label Analysis模块附加到Result数据(前一个Arithmetic模块的结果),把它的Intensity Image端口连接到chocolate-bar.am,然后单击Apply。 - 将一个
Ortho Slice附加到chocolate-bar.label以可视化结果。
现在你的Project View应该与图5.7类似。
图 5.7:气泡分析工作流Bubble Analysis Workflow。
- 将一个
Create Recipe模块附加到Result.label(前一个Label Analysis模块的结果),然后单击Apply。Avizo会自动切换到Recipes工作室(见图5.8)。
图 5.8:配方工作室Recipes Workroom。
测试这个配方,并把它再次应用到原始数据上:
- 通过选择
Workroom Toolbar中的图标切换到Project工作室。 - 从主菜单中选择
Project > Remove All Objects。 - 加载
AVIZO_ROOT/data/tutorials/chocolate-bar.am - 通过单击
Workroom Toolbar中的选项卡切换到Recipes工作室。 - 确保
chocolate-bar.am显示在Recipes面板的Input下拉框中。 - 在
chocolate-bar.am上回放该配方。配方将计算出如图5.9所示的统计信息。
图 5.9:巧克力棒气泡统计Chocolate Bar Bubble Statistics。
当你对配方感到满意时,保存该配方以便再次使用和共享。
- 在
Recipes面板中,单击Save Recipe。 - 使用
File Browser导航到你想保存配方的目录。默认情况下,配方存储在%APPDATA%/Thermo Fisher Scientific/Recipes,但你也可以把它们保存到任何其他位置。
5.2 来自多输出的配方Recipe from multi-outputs
配方可以从多个输出数据创建。要创建此类配方,请在对象池中选择这些数据,右键单击其中之一,然后从Object Popup创建一个Create Recipe模块。
所创建配方的输入数量取决于所选数据是如何被创建出来的——通过比较它们的历史日志、合并和/或串接它们来确定。
需要注意的是,尽管对象池中所有类型的对象都可以被选中,但配方只能通过右键单击某个数据来创建,相机路径(camera path)和颜色图(colormap)类型的对象除外。所有被选中的模块,以及相机路径和颜色图类型的数据,都不会被纳入配方的创建过程。
5.3 使用断点Using Breakpoints
断点可用于在某个特定步骤处暂停配方,以便让你手动更改一个或多个参数。在本教程中,你将更改Label Analysis模块中的Measure Group。
- 启动Avizo。
- 加载
AVIZO_ROOT/data/tutorials/chocolate-bar.am - 将一个
Volume Rendering附加到chocolate-bar.am - 将一个
Extract Subvolume模块附加到chocolate-bar.am数据,并提取图像的一小部分(见图5.10和图5.11)。
图 5.10:在chocolate-bar.am上执行Extract Subvolume。
图 5.11:提取出的子体积Extracted Subvolume。
- 从
Recipes面板加载AVIZO_ROOT/data/tutorials/recipes/Bubble-Analysis.hxrecipe。 - 将配方输入设置为提取出的图像(即
chocolate-bar.view),并在Label Analysis步骤处设置一个断点(见图5.12)。
图 5.12:Label Analysis步骤处的断点。
- 运行配方直到它到达断点。在此阶段,无法更改输入数据,也无法退出
Recipes工作室。只有该工具的属性可供更改。在Measures端口中,选择Standard Shape Analysis。单击Play继续(见图5.13)。
图 5.13:修改后继续执行配方Continue a Recipe After Modifications。
本教程中描述的配方也可以使用Recipe面板上的Load Recipe,直接从AVIZO_ROOT/data/tutorials/recipes/Bubble-Analysis.hxrecipe加载。
5.4 TCL命令中的配方Recipes in a TCL Command
配方保存到磁盘后,可以从TCL脚本中回放。可用的TCL命令如下:
- 设置一个配方:
theRecipesController setCurrentMacro recipeName - 为配方设置一个输入:
theRecipesController setInput numInput currentInput - 回放配方:
theRecipesController playMacroNoPause - 获取配方的最后结果:
theRecipesController getLastResult - 启用/禁用生产模式:
theRecipesController setProductionMode value [0: off | 1: on]
5.5 配方的限制Recipe Limitations
配方机制存在一些已知的限制:
步骤删除Step Deletion
- 除了快照步骤(快照步骤总是可以删除)之外,你只能删除配方的第一个步骤或最后一个步骤。
- 如果配方的最后一个步骤有多个输入,那么该步骤无法被删除。删除该步骤将意味着会有多个配方结果,因为被删除步骤的各个输入都会成为新的输出。目前,配方机制只能处理一个最终的配方结果。
- 如果配方中只剩下一个步骤,则该步骤无法被删除。示例:像
Or Image这样的模块所在的步骤,如果它是最后一个步骤,就不能被删除。 - 输入步骤无法被删除。
步骤插入Step Insertion
- 目前,只有快照步骤可以被插入到配方中。
默认显示Default Display
- 不能使用
Ortho Views模块,因为该模块只能有一个实例。
配方中间数据的清理Clean of recipe intermediate data
当配方的某个中间结果与前一个中间结果存在连接时,这最后一个结果必须被显式地导出到
Project工作室,以免被配方清理过程移除。示例:当连续执行一个
Generate Surface步骤(生成曲面数据)然后再执行一个Surface Normals步骤(从该曲面生成矢量场数据)时,就可能出现这个问题。矢量场数据必然与曲面数据存在连接,因为没有曲面数据它就无法存在。然而,当前的配方机制无法检测数据之间的这类依赖关系。因此,曲面数据可能会被自动配方清理过程移除,而实际上下一个步骤仍需通过矢量场用到它。为避免此类问题,在本示例中,Generate Surface步骤的结果必须被显式地导出到Project工作室,以确保它不会被配方清理过程移除。
