如何从图像元数据中读取 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 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()
.
这里是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 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()
.