比较两个图像是否相同?
Comparing two images as being identical?
这可能很容易,但我仍然有点挣扎。
如果我想知道两张图片是否相同,如何比较它们?
假设我有一张图片 A
和一张图片 B
我想做类似
的事情
if ( A == B ) ...
但这不起作用。
在检查文件是否相同时(因此逻辑上应该遵循图像),您可以对两个文件进行 MD5 校验和比较。如果校验和相同,则文件相同,因此图像必须相同。
我认为您需要更清楚地说明 相同 的含义。在 DigitalMicrograph 的图像分析框架内,它可以是 (f.e.):
1) The identical file on disc.
其他人已经回答了这个问题。但为简单起见 - 如果图像在 DM 中打开,您可以通过以下代码找出它链接到哪个 "file":
image img := GetFrontImage()
imageDocument doc = img.ImageGetOrCreateImageDocument()
OKDialog("--> "+doc.ImageDocumentGetCurrentFile())
请注意,光盘上的文件链接到 imageDocuments,而不是图像。
2) The identical pixel values in all pixels
简单比较图像差异之和!
image A
image B
if ( 0 == sum(A-B) ) OKDialog( "Identical!" )
代码假定两张图片的类型相同,但您可以分别检查类型。
3) The identical memory object
您可能有多个变量引用同一个 'image',即您将一个图像作为局部变量,然后遍历图像列表以在列表中识别该图像。为此,您可以使用 imageLabel 或 imageID。内存中的任何图像都会自动分配给每个图像。当 imageLabels 在变得空闲时被重新使用时,imageIDs 从应用程序启动时单调增加(从 1 开始)。我认为 imageID 通常是更好用的。
image A
image B
if ( A.ImageGetLabel() == B.ImageGetLabel() ) OKDialog( "Identical!" )
if ( A.ImageGetID() == B.ImageGetID() ) OKDialog( "Identical!" )
4) The image is a specific 'unique' image, but it has been saved and opened again.
此处的典型场景是链接到数据的调查图像。您可能想要打开数据和调查图像并检查它是否是 'correct' 调查图像。
为此,有一个名为 "Global Image ID" 的特定脚本对象,您可以在 'Objects' 部分的 F1 帮助部分找到相关信息。它类似于校验和,但又不完全一样。此 ID 由 4 个长值组成,这些值是在创建图像时创建的,之后永远不会更改。 (因此更改图像数据值或标签不会更改此全局 ID。)与上面的图像 ID 的主要区别在于,当您保存和加载图像时全局 ID 仍然存在。
这可能很容易,但我仍然有点挣扎。
如果我想知道两张图片是否相同,如何比较它们?
假设我有一张图片 A
和一张图片 B
我想做类似
if ( A == B ) ...
但这不起作用。
在检查文件是否相同时(因此逻辑上应该遵循图像),您可以对两个文件进行 MD5 校验和比较。如果校验和相同,则文件相同,因此图像必须相同。
我认为您需要更清楚地说明 相同 的含义。在 DigitalMicrograph 的图像分析框架内,它可以是 (f.e.):
1) The identical file on disc.
其他人已经回答了这个问题。但为简单起见 - 如果图像在 DM 中打开,您可以通过以下代码找出它链接到哪个 "file":
image img := GetFrontImage()
imageDocument doc = img.ImageGetOrCreateImageDocument()
OKDialog("--> "+doc.ImageDocumentGetCurrentFile())
请注意,光盘上的文件链接到 imageDocuments,而不是图像。
2) The identical pixel values in all pixels
简单比较图像差异之和!
image A
image B
if ( 0 == sum(A-B) ) OKDialog( "Identical!" )
代码假定两张图片的类型相同,但您可以分别检查类型。
3) The identical memory object
您可能有多个变量引用同一个 'image',即您将一个图像作为局部变量,然后遍历图像列表以在列表中识别该图像。为此,您可以使用 imageLabel 或 imageID。内存中的任何图像都会自动分配给每个图像。当 imageLabels 在变得空闲时被重新使用时,imageIDs 从应用程序启动时单调增加(从 1 开始)。我认为 imageID 通常是更好用的。
image A
image B
if ( A.ImageGetLabel() == B.ImageGetLabel() ) OKDialog( "Identical!" )
if ( A.ImageGetID() == B.ImageGetID() ) OKDialog( "Identical!" )
4) The image is a specific 'unique' image, but it has been saved and opened again.
此处的典型场景是链接到数据的调查图像。您可能想要打开数据和调查图像并检查它是否是 'correct' 调查图像。 为此,有一个名为 "Global Image ID" 的特定脚本对象,您可以在 'Objects' 部分的 F1 帮助部分找到相关信息。它类似于校验和,但又不完全一样。此 ID 由 4 个长值组成,这些值是在创建图像时创建的,之后永远不会更改。 (因此更改图像数据值或标签不会更改此全局 ID。)与上面的图像 ID 的主要区别在于,当您保存和加载图像时全局 ID 仍然存在。