比较两个图像是否相同?

时间:2015-04-30 10:30:10

标签: image-processing comparison dm-script

这可能很容易,但我仍然有点挣扎。 如果我想知道它们是否相同,我如何比较两个图像? 假设我有一个图像A和图像B我想做类似

的事情

if ( A == B ) ...

但这不起作用。

2 个答案:

答案 0 :(得分:2)

我认为您需要更明确地指出相同的含义。在DigitalMicrograph中的图像分析框架内,可能是(f.e。):

  

1)光盘上的相同文件。

其他人已经回答了这个问题。但为简单起见 - 如果图像在DM中打开,您可以找到哪个"文件"它由以下代码链接:

image img := GetFrontImage()
imageDocument doc = img.ImageGetOrCreateImageDocument()
OKDialog("--> "+doc.ImageDocumentGetCurrentFile())

请注意,光盘上的文件链接到imageDocuments,而不是图像。

  

2)所有像素中的相同像素值

只需比较图像差异的总和!

image A
image B
if ( 0 == sum(A-B) ) OKDialog( "Identical!" )

代码假定两个图像的类型相同,但您可以单独检查类型。

  

3)相同的记忆对象

您可能有多个变量引用相同的'图像',即您有一个图像作为局部变量,然后迭代图像列表以识别列表中的图像。为此,您可以使用imageLabel或imageID。内存中的任何图像都会自动分配给每个图像。当imageLabels在变为空闲时重新使用,imageID从应用程序启动(从1开始)单调增加。我认为imageID是一般使用的更好的。

image A
image B
if ( A.ImageGetLabel() == B.ImageGetLabel() ) OKDialog( "Identical!" )
if ( A.ImageGetID() == B.ImageGetID() ) OKDialog( "Identical!" )
  

4)图像是特定的“唯一”图像。图像,但它已被保存并再次打开。

此处的典型情况是与数据相关联的调查图像。您可能想要打开数据和调查图像并检查是否正确'调查图像。 为此,有一个特定的脚本对象称为"全局图像ID"您可以在“帮助”部分的“对象”部分中找到有关信息的信息。它类似于校验和,但不是一个。此ID由4个长值组成,这些值在创建图像时创建,之后从不更改。 (因此更改图像数据值或标记不会更改此全局ID。)上面imageID的主要区别在于,当您保存&时,全局ID仍然存在。加载图片。

Global Image ID

答案 1 :(得分:0)

当检查文件是否相同时(因此逻辑上应遵循图像),您可以对这两个文件进行MD5校验和并进行比较。如果校验和相同,则文件相同,因此图像必须相同。