image-processing - 比较两个图像是否相同?

标签 image-processing comparison dm-script

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

如果(A==B)...

但这不起作用。

最佳答案

我认为您需要更清楚地说明相同的含义。在 DigitalMicrograph 的图像分析框架内,它可能是(例如):

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

您可能有多个变量引用同一“图像”,即您有一个图像作为局部变量,然后迭代图像列表以识别列表中的该图像。为此,您可以使用 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) The image is a specific 'unique' image, but it has been saved and opened again.

这里的一个典型场景是链接到数据的调查图像。您可能想要打开数据和调查图像并检查它是否是“正确的”调查图像。 为此,有一个名为“全局图像 ID”的特定脚本对象,您可以在“对象”部分的 F1 帮助部分中找到有关该对象的信息。它类似于校验和,但又不完全相同。该 ID 由 4 个长整型值组成,这些值在创建镜像时创建,之后不会更改。 (因此,更改图像数据值或标签不会更改此全局 ID。)与上面的 imageID 的主要区别在于,当您保存和加载图像时,全局 ID 仍然存在。

Global Image ID

关于image-processing - 比较两个图像是否相同?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29965342/

相关文章:

ios - 如何快速填充图案图像的颜色?

matlab - 如何计算配准后图像中点的新坐标?

c - 获取我的输入并在 while 循环中比较它,fgets?

f# - F# + 可变字段记录中的相等推理

multithreading - 是否可以使用多线程来加速脚本?

dm-script - 更改全局标签组后DM的用户模式未更新

java - 如何在Java中使用非标准采样因子缩放JPEG图像?

c++ - OpenCV 访问 MAT 对象中的 RGB 值

c# - 检查一组不断变化的字符串是否包含字符串的最快方法

line-plot - 分离和组合 ImageDisplay 层