跳到内容

如何开始使用编码来自动化图像分析第1部分:简单的过程

拍手,你在标题中看到了一个“编码”这个词的帖子,你没有吓坏或釉。这是第一步。

编码似乎有这样的耻辱;人们倾向于认为他们永远无法学习的难以理解的废话,并且它对日常科学家没有实际使用。希望在您到达本文的结尾时,您会发现这不是案例,并准备好送给自己。

别担心,我会保持简单。在这里,我将向您展示如何在imagej中使用编码以自动化图像分析,释放您的时间,以便更重要的是试图弄清楚谁偷窃缓冲区。

编码101.

没有多少人知道这一点ImageJ.附带一个名为“命令录音机”的东西。这是一个方便的小工具,遵循您在程序中所采取的每个动作,并吐出何时恢复您刚才所做的代码,而是单击。这意味着您可以在不实际编写单一代码的情况下代码。所以对任何人说他们永远无法学习编码的人,我说你甚至不必!

现在,让我们通过一个简单的例子来贯彻,我将解释一些编码的绝对基础。我将使用命令录音机编写一个宏(一个代码集合),它将打开专有的格式图像(.zvi),水平翻转它,将其保存为tiff并关闭它:

您可以看到每次单击命令的每次,都会在命令记录器窗口中显示一条新行。在过程结束时,有四行代码是所有imagej需要知道再次重复该过程。点击创造按钮将此代码导出到宏编辑器窗口,我们可以进一步使用它。

了解代码

所以现在,我创建了一个如下所示的宏:

PICT 1 COPY.

但是这是什么意思?让我们将该代码分解为单个碎片,使其更容易理解:

  • 每行包含一个操作,具有半冒号来标记该操作的结尾。
  • 每个动作包括“功能”和“参数”。
    • 函数是告诉imagej的指示什么要做 - 这些是每一行上的第一个单词,并以红色显示。它们之后是包含其参数的括号。
    • 参数告诉imagej.如何这样做 - 这些放在括号内,并通过逗号分隔。这些以蓝色显示。函数通常只有一个参数,但可以有多个或根本没有。

PICT 2.

知道这一点,你可以看到,在这个例子中,我的宏使用函数“打开”,“运行”,“保存”和“关闭”,每个接下来的包含额外信息Imagej的参数需要使这些函数确实是我刚刚做的点击菜单做了。要进一步打破它们:

  • “打开”的参数是我打开的图像的目录/文件名。
  • “运行”的参数是我想要运行的命令(水平翻转)。
  • “救世主”功能有两个参数;第一个是保存为(TIFF)的文件类型,第二个是我想要保存它的目录/文件名。
  • “关闭”函数没有添加参数。任何没有分配参数的函数都以其默认参数执行。“关闭”函数的默认参数是当时选择的任何窗口的名称,所以在我的代码中,此行将关闭所选窗口。

如果您没有编码体验,则无法了解这些功能或参数,但命令记录器显示您确切需要哪些代码来复制操作。您可以在30秒内完成您的第一个宏,没有以前的编码知识。这真的很简单。

编辑宏

现在我有一个宏来翻转我的图像;唯一的问题是当前参数使其专门用于Image-0001.在我的图片文件夹。但是,我可以删除“打开”和“保存”的参数,以便它适用于任何文件。所以我的代码现在看起来像这样:

PICT 3.

通过删除告诉imagej的参数,该参数从并保存到的文件,“打开”和“保存”函数都会要求我每次运行宏时选择文件名和位置,但然后恰好继续其他所有内容像之前一样。

要保存此宏,我可以选择文件 - >保存从宏编辑器窗口。现在我可以使用它再次打开它来编辑或运行此宏编辑…跑步…命令中的命令插件 - >宏来自主ImageJ工具栏的菜单。

概括

显然,这是一个非常简单的例子,并没有真正节省了很多时间,但你可以自动化的操作可以比只翻转图像更广泛。编码语言全面地足以自动化几乎任何图像处理或数据提取和操纵,具有足够的实践。

命令记录器是使用imagej编码语言掌握的最简单方法,因为您可以使用图像播放,并在屏幕上观看不同的命令弹出。您使用的越多,您就越看到模式的模式和语言的逻辑结构。

很快就查询后续文章,我将解释如何进一步自动化图像分析和处理多个图像,同时使用批处理宏工具。

有用的网址

2评论

  1. 弗拉拉 2016年5月18日晚上10:50

    嘿,
    谢谢你的文章 - 真的很有用!您是否有关于如何为变量文件名进行宏运行的建议?我的形象有3个通道,因此我必须在“运行”命令之前,继续在“运行”命令之前选择Dotofferent Windows。我不确定如何使对象成为我选择的变量(窗口)。我的其他选项如果每次运行代码时替换文件名(非常粗略但仍然比单击)更快!)。完全明白,如果这是在下一个部分!非常感谢。

    • 加雷斯麦考西 2016年7月28日11:21

      如果您一次只使用一个图像,则可能不需要指定图像名称,imagej将自动运行它找到的第一个打开的映像上的命令。如果虽然您有多个开放,则可以使用“gettitle()”函数返回当前所选窗口的标题。您可以定义一个变量(一个容器,该容器包含一定值)来存储此功能并在需要时调用它。所以通过添加行“Rawimage = getTitle();”您将创建一个名为“Rawimage”的新变量,该变量将包含窗口标题。之后,在宏中的任何点,您可以使用“SelectWindow(Raimimage)”功能来选择原始图像。
      我不确定你需要什么,但听起来“setslice(n)”或“stack.setchannel(n)”函数也会有所帮助。有了这些,用要选择的频道的数量替换“n”。“运行(”拆分渠道“);”功能也可能是有用的,它将将通道拆分为单独的窗口。

发表评论

你一定是登录发表评论。

本网站使用AkisMet减少垃圾邮件。了解如何处理评论数据

滚动到顶部
分享Via
复制链接