如何从图像元数据中读取有关电压/光束能量,成像模式,采集日期/时间戳等的信息? (标签)

问题描述 投票:1回答:1

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

I would like to know the commands to access all the metadata of DM images/spectra.

我意识到我所有在两个日期之间拍摄的80伏的STEM图像(比如说02.11.2017-05.04.2019)都会因同一因素而导致比例校准错误(所有这些图像的比例需要乘以1.21)。

我想写一个脚本,它将比例值乘以一个因子,仅适用于扫描模式下80kV的图像,在一段时间内拍摄子文件夹的文件夹中的所有图像或DM中打开的所有图像并保存新的比例值。

我查看了这个网站http://digitalmicrograph-scripting.tavernmaker.de/other%20resources/Old-DMHelp/AllFunctions.html,但只发现了如何调用比例值(ImageGetDimensionCalibration)。如果我找到如何调用元数据,我总体上知道如何基于其他脚本编写脚本。

如果有人可以为我编写整个脚本,我将非常感谢您的努力。

tags metadata dm-script
1个回答
0
投票

All general meta-data is organized in the image tag-structure

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

Example of Image Tags

右侧的所有信息都是图像标签,它们按层次结构树组织。

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

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

提示:以下最小脚本可能很有用。它为最前面的图像打开了一个标签浏览窗口,但是作为一个无模式对话框(即你可以保持它打开并与其他部分交互): GetFrontImage().ImageGetTagGroup().TagGroupOpenBrowserWindow(0)

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

STEM图像采集的信息 - 就扫描引擎和探测器而言 - 很可能是在DigiScan子树中。

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

Calibration values are not stored in the image tag-structure

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

Example of calibration values

对于您的脚本,以下内容非常重要,因为您需要为标签中的“元数据”和要更改的“校准”提供不同的命令。

Accessing meta-data by script

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

F1 TagGroup

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

  • 通过树的所有“路径”只是个别名称(完全键入)
  • 对于每个“分支”,您必须使用单个冒号:
  • 设置/获取标记值的命令都需要输入“root”tagGroup对象和“path”作为字符串。 get命令需要一个匹配类型的变量来存储值,set命令需要应该写入的值。 = get命令自身返回true或false,具体取决于是否可以找到标记路径并且可以读取值。

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

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()

© www.soinside.com 2019 - 2024. All rights reserved.