如何从图像元数据中读取 voltage/beam 能量、成像模式、采集 date/timestamp 等信息? (标签)

How to read info on voltage/beam energy, imaging mode, acquisition date/timestamp, etc. from image meta-data? (Tags)

这里是DM脚本初学者,几乎没有编程技巧。

我想知道访问 DM images/spectra 所有元数据的命令。

我意识到我在 2 个日期(比如 2017 年 11 月 2 日至 2019 年 4 月 5 日)之间拍摄的所有 STEM 图像在 80 kV 下的比例校准都因相同的因素而错误(所有此类图像的比例需要乘以1.21).

I would like to write a script which multiplies the scale value by a factor only for images in scanning mode at 80 kV taken during a period for all images in a folder with subfolders or for all images opened in DM and save the new scale value.

我查看了这个网站http://digitalmicrograph-scripting.tavernmaker.de/other%20resources/Old-DMHelp/AllFunctions.html,但只找到了如何调用比例值 (ImageGetDimensionCalibration)。如果我知道如何调用元数据,我对如何根据其他脚本编写脚本有一个大概的想法。

如果有人能为我写出整个脚本,我将不胜感激。

所有通用元数据都组织在图像标签结构中

如果您打开图像的图像显示信息,您可以看到这一点。 (通过菜单,或按 CTRL + D)然后浏览到“标签”部分:

右边的所有信息都是图片标签,它们以分层树的形式组织起来。

这棵树是什么样子的,什么信息写在哪里,是完全开放的,将取决于您使用的 GMS 版本,硬件的配置方式等。自定义脚本也可能会改变这些信息。

因此,对于脚本编写,请打开您要修改的数据并查看此树。

Hint: The following min-script can be useful. It opens a tag-browsing window for the front-most image but as a modeless dialog (i.e. you can keep it open and interact with other parts):

GetFrontImage().ImageGetTagGroup().TagGroupOpenBrowserWindow(0)

您需要检查的信息是最有可能Microscope Info 子树中找到的信息。在这里,通常会存储在采集过程中从显微镜收集到的所有信息。那里有什么,将取决于您的系统及其设置方式。

STEM 图像采集的信息 - 就扫描引擎和检测器而言 - 最有可能DigiScan 子树中。

Data Bar 子树通常包含创建日期和时间等

校准值未存储在图像标签结构中

您将不会在此标签结构中找到的是图像校准,即 DM 实际用于显示校准的值值。这些值是“一个级别”,可以在这里说:

了解下面的脚本很重要,因为对于标签中的“元数据”和要更改的“校准”,您需要不同的命令。

通过脚本访问元数据

您需要从标签中读取的脚本命令都在此处的 F1 帮助文档中进行了描述:

本质上,您需要一个命令来获取图像的“根”TagGroup,即ImageGetTagGroup(),然后在这棵树中遍历。 这可能看起来令人困惑 - 因为对于不同类型的存储标签有很多略有不同的命令 - 但基本位很简单:

  • 通过树的所有“路径”只是个人名称(完全
  • 对于每个“分支”,您必须使用一个冒号 :
  • set/get 标记值的命令都需要输入“root”tagGroup 对象和字符串形式的“path”。 get命令需要匹配类型的变量来存储值,set命令需要应该写入的值。 = get 命令本身 return truefalse 取决于标签是否-可以找到路径并且可以读取值。

所以下面的脚本将从上面示例中显示的图像的标签中读取“图像模式”:

string mode
GetFrontImage().ImageGetTagGroup().TagGroupGetTagAsString( "Microscope Info:Imaging Mode", mode )
OKDialog( "Mode: " + mode )

更详细一点的形式:

string mode // variable to hold the value
image img   // variable for the image
string path // variable/constant to specify the where
TagGroup tg // variable to hold the "tagGroup" object

img := GetFrontImage()                  // Use the selected image
tg = img.ImageGetTagGroup()             // From the image get the tags (root)
path = "Microscope Info:Imaging Mode"   // specify the path

if ( tg.TagGroupGetTagAsString( path, mode ) )
    OKDialog( "Mode: " + mode )
else
    Throw( "Tag not found" )

如果标签不是字符串而是一个值,您将需要相应的命令,即 TagGroupGetTagAsNumber().