Image processing 比较两个相同的图像?

Image processing 比较两个相同的图像?,image-processing,comparison,dm-script,Image Processing,Comparison,Dm Script,这可能很容易,但我仍然有点挣扎。 如果我想知道两幅图像是否相同,我如何比较它们? 假设我有一个图像A和图像B我想做类似的事情 if(A==B). 但是这不起作用。当检查文件是否相同(因此图像应该在逻辑上遵循)时,可以对两个文件进行MD5校验和,并比较它们。如果校验和相同,则文件相同,因此图像必须相同。我认为您需要更清楚地指定相同的含义。在数字显微图像的图像分析框架内,它可以是(f.e.): 1) 光盘上的相同文件 其他人已经回答了这一问题。但为了简单起见-如果图像在DM中打开,您可以通过以下代码

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

if(A==B).


但是这不起作用。

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

我认为您需要更清楚地指定相同的含义。在数字显微图像的图像分析框架内,它可以是(f.e.):

1) 光盘上的相同文件

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

image img := GetFrontImage()
imageDocument doc = img.ImageGetOrCreateImageDocument()
OKDialog("--> "+doc.ImageDocumentGetCurrentFile())
请注意,光盘上的文件链接到的是图像文档,而不是图像

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”的特定脚本对象,您可以在“对象”部分的F1帮助部分中找到有关该对象的信息。它类似于校验和,但不完全是校验和。此ID由4个长值组成,这些长值在创建图像时创建,以后再也不会更改。(因此,更改图像数据值或标记不会更改此全局ID。)与上面的imageID的主要区别在于,保存和加载图像时,全局ID保持不变


如果我的答案没有帮助,你能发布你试图使用的代码吗?你可以看到它之前问过的问题@谢谢。第二个答案已经符合我的需要了。@TEMScripter很好。我对答案投了赞成票,所以它也比我的更突出。非常感谢你的回答。让文件“相同”是个好主意,但我的应用程序不同。我想在打开(甚至没有保存)时比较两张数码显微照片的“图像”。非常感谢。这是我想要的第三个例子。但是其他的例子也很棒!