TL; 博士

何时以及为什么互相关优于平方差异(使用模板匹配时)?

细节

根据OpenCV的模板匹配的documentation(你必须向下滚动一点),平方差定义为:

opencv - 模板匹配 - 互相关与平方差异 - 何时选择一个?-LMLPHP

和互相关为:

opencv - 模板匹配 - 互相关与平方差异 - 何时选择一个?-LMLPHP

(其中 T 是模板, I 是图像)

如果我没记错的话,square diff 是唯一可以保证在每个图像中找到最佳匹配(在数字意义上)的方法(也与互相关系数相比)。

如果我们看一下互相关,我们会注意到乘法对图像中较亮的部分产生了更高的结果(因为亮像素比暗像素具有更高的数值)。这意味着,如果我们在明亮的图像上使用暗模板执行模板匹配,则在使用互相关时很可能会得到不好的结果。

例如,如果我们拍摄这张图片:

opencv - 模板匹配 - 互相关与平方差异 - 何时选择一个?-LMLPHP

并执行与此模板匹配的模板:

opencv - 模板匹配 - 互相关与平方差异 - 何时选择一个?-LMLPHP

我们得到这些结果(红色是互相关,绿色是平方差异):

opencv - 模板匹配 - 互相关与平方差异 - 何时选择一个?-LMLPHP

显然,平方差异在这里是更好的选择,因为互相关会产生非常糟糕的结果。在使用互相关而不是平方差异时,我看到的唯一优势是计算复杂性,因为互相关应该更快一点,因为它只需要计算乘积(而不是总和和平方)。

我的问题是:有什么我看不到的好处吗?我什么时候应该选择一种方法而不是另一种方法?

最佳答案

Rosa Gronchi 是对的,你应该使用归一化互相关。
归一化互相关测量是归一化向量的互相关,因此所有向量的长度为 1,均值为 0。
这样,较亮的补丁将不会比较暗的补丁具有“优势”。

关于复杂性,平方差异也必须计算乘积,因为它扩展到:

opencv - 模板匹配 - 互相关与平方差异 - 何时选择一个?-LMLPHP

乘积是使用快速傅立叶变换算法计算的。

关于opencv - 模板匹配 - 互相关与平方差异 - 何时选择一个?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/48543029/

10-11 17:43