如何找到两幅图像之间的相关性

7

我需要帮助来解决一个问题。我目前有一个使用matplotlib中的imshow方法生成两张图片的python脚本。我的任务是找到这两张图片之间的相关性,或者说是相似度。这两张图片大小相同,并且都使用jet色图。
如果这不够清楚,请告诉我是否需要更详细的解释。如果有人能提供如何完成此任务的示例代码,那将非常有帮助。


1
你可能想尝试http://dsp.stackexchange.com,他们可能能够给你一些关于如何测量图像相似度的指针。 - entropy
2个回答

10
你是否看过Scipy信号处理包?
from scipy import signal
cor = signal.correlate2d (im1, im2)

我会为您计算2D相关性。


1
尝试在我的数据集上使用(图像大小为1280 * 720),大约花了15分钟,结果仍未出现,所以我不得不终止该进程。除了图像太大之外,有什么想法为什么会发生这种情况吗? - Neeraj Komuravalli
@NeerajKomuravalli 我怀疑这只是图像的大小问题。我预计交叉相关的计算工作将随着Nx和Ny的平方乘积而增加。也许尝试测量不同(较小)图像所需的时间并绘制图表 - 这应该为您的数据集实际需要的时间提供指示。 - lxop

2

寻找两张图片的相关性的另一种方法是使用OpenCV中的filter2D函数。在filter2D函数中,您可以将其中一张图片作为InputArray(或“src”)传递,将另一张图片作为卷积核。这将给出相关性,并且速度很快。对于256x256的图像,使用scipy中的signal.correlate2d大约需要18秒。而使用filter2D对于相同的图像只需要大约0.008秒。

import cv2

corr = cv2.filter2D(image1, ddepth=-1, kernel=image2)

我也建议传递浮点图像而不是uint8图像,因为使用uint8图像可能会导致不便的舍入误差。
# convert to float32
image1_norm = cv2.normalize(image1, None, alpha=0, beta=1, norm_type=cv2.NORM_MINMAX, dtype=cv2.CV_32F)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接