在Matlab中解释corr2函数

时间:2014-12-07 13:47:34

标签: matlab correlation

有人可以向我解释Matlab中的相关函数corr2。我知道它是用于2D比较对象的相似性,但在等式http://prntscr.com/5e5v5c中,我怀疑它是A和B(可能是用于比较的矩阵),还有Amn和Bmn。

我问,因为我不确定Matlab是如何执行此功能的,因为我发现在几种情况下,不会对整个图像(矩阵)执行相关,而是将图像分成块而不是比较块(一个图片)与块(其他图片)。

在带有corr2方程的Matlab部分中,没有像在Matlab中的其他函数中那样将方程本身的执行方式放在引用点上(就像它所采用的书和解释的位置一样)。

1 个答案:

答案 0 :(得分:4)

相关系数是表示与各自的像素强度相关的2个图像之间的相似度的数字。

正如您所指出的,此函数用于计算此系数:

enter image description here

此处A和B是您要比较的图像,而下标索引m和n指的是图像中的像素位置。基本上,Matab所做的是为两个图像中的每个像素位置计算该像素处的强度值与整个图像的平均强度之间的差异,表示为其上具有直线的字母。

正如Kostya指出的那样,在命令窗口中键入edit corr2将显示Matlab用于计算相关系数的代码。公式基本上是这样的:

a = a - mean2(a);
b = b - mean2(b);
r = sum(sum(a.*b))/sqrt(sum(sum(a.*a))*sum(sum(b.*b)));

其中: a是输入图像,b是要与a进行比较的图像。

如果我们细分公式,我们会发现a - mean2(a)b-mean2(b)是上述等式的分子中的元素。 mean2(a)相当于mean(mean(a))mean(a(:)),即整个图像的平均强度。这只计算一次。

第3行代码计算系数。这里sum(sum(a.*b))计算元素中存在的双和,即分别考虑每个像素位置。请注意,使用sum(a)会分别计算每列中的总和,因此为了获得单个值,您需要应用sum两次。

在分母中发生的情况几乎相同,但计算是在a-mean2(a)^2b-mean2(b)^2上进行的。您可以看到这是一种标准化过程,您可以在其中考虑每个单独图像之间的像素强度差异。

关于你的最后评论,你可以将图像分解成小块并计算它们的相关系数;这可能会为非常大的图像节省一些时间,但由于一切都是矢量化的,因此计算速度非常快。它我可能在分布式处理中很有用。当然,2个图像块之间的相关系数不一定与整个图像的相关系数相同。

为了好奇,您可以查看this论文,其中突出了使用相关系数进行图像比较的一些注意事项。

希望让事情更清楚一点!