Image 模板匹配中归一化互相关的特殊情况

Image 模板匹配中归一化互相关的特殊情况,image,image-processing,template-matching,Image,Image Processing,Template Matching,我正在研究空间域中模板匹配的归一化互相关。 虽然这个方法很慢,但对我来说已经足够好了。但我在那里看到了一件奇怪的事情。让我解释以下情况: 919 919 86778 模式图像源图像 现在,当NCC进行此操作时:它发现模板图像的平均值为91,基础源图像的平均值也为91,然后它从像素中减去强度值,该像素基本上将公式中的所有项减为零,从而导致未定义的相关值,即使存在完美匹配,也找不到匹配项。! 如何避免这种情况? 我使用以下公式:来自J.P.刘易斯的《卓越》 此外,当我修改公式,从每个像素强度中减去

我正在研究空间域中模板匹配的归一化互相关。 虽然这个方法很慢,但对我来说已经足够好了。但我在那里看到了一件奇怪的事情。让我解释以下情况:

919
919
86778

模式图像源图像

现在,当NCC进行此操作时:它发现模板图像的平均值为91,基础源图像的平均值也为91,然后它从像素中减去强度值,该像素基本上将公式中的所有项减为零,从而导致未定义的相关值,即使存在完美匹配,也找不到匹配项。! 如何避免这种情况? 我使用以下公式:来自J.P.刘易斯的《卓越》

此外,当我修改公式,从每个像素强度中减去(平均值/2)时,它似乎工作得很好,但我担心这个新的相关系数在多大程度上容易受到光照的影响


编辑:当我拍摄了一张1 X 1的图案图像并且在源图像中多次出现时,情况甚至恶化了。使用上面修改过的版本,我找不到合适的匹配项。我很乐意研究你们中的许多人可能已经使用过的各种解决方法。谢谢

标准化互相关的思想是,如果向每个像素添加任意数字或将每个像素乘以任意(非负)数字,则相似性不会改变。现在取搜索图像中的任何2x2像素区域,例如

91  9
 6  7
把这个乘以0,再加上91,你就得到了一个完美的匹配。简而言之:你不能用标准化的互相关匹配一个“平坦”的模板。或者搜索图像中的“平坦”区域

请注意,这不是标准化互相关中的“错误”。你看到的效果很有道理。想象有人递给你一张全黑的照片,问你看到了什么。你的回答不会是“我和蝙蝠车很相配,因为它是全黑的”,你的回答会是“我说不出来,图像中的对比度太小了”。这正是NCC想要告诉你的,除法为零

另外,当我修改公式,从每个像素强度中减去(平均值/2)

你是说,你把分子和分母的平均数替换成了平均数/2?这听起来不是个好主意。如果模板或搜索图像区域仅包含零,则仍将得到除零的结果。更重要的是:你在计算一个没有实际意义的量(至少我想不出有任何意义)。例如,搜索区域的平均亮度将影响匹配结果

我很乐意研究各种解决方案[…]

显而易见的临时解决办法是在分母中添加少量,这样搜索图像中的“平坦”区域将不会导致零分割。然后你会得到(或多或少)一个相似性度量,如果你给每个像素加上一个任意的数字,或者把每个像素乘以一个任意的(非负的)数字,除非这个数字非常接近于0,否则这个度量不会改变

但这将为任何平面搜索区域或平面模板提供0匹配。这(如上所述)非常有意义。如果在这种情况下需要不同的行为,则不需要标准化的互相关


另一种相似性度量可能是平方欧氏距离。在计算差值之前,可以选择减去模板和搜索区域的平均值。然后你得到一个相似性度量,如果你给每个像素加上一个任意的数字,它不会改变。但如果你将每个像素乘以某个值,它就会改变。

@nikie。。。谢谢你的回复。你提到的事情确实帮助我理解了这种行为。虽然我同意,对比度是不够的,这导致NCC没有显示任何结果。但是在1X1模板图像的情况下会发生什么;我们不能在这里谈论对比度,因为对比度总是1。这是否意味着在这种情况下不能使用NCC?扩展它:我认为NCC对于对比度为1的任何模板图像/源图像区域都没有帮助。此外,我现在正在考虑在我的程序中进行检查,如果对比度为1,则使用不同的相似性度量,而不是NCC。听起来干净吗?@peterd:没错,如果模板或搜索图像中的相应区域没有对比度,则NCC是未定义的。用1x1模板谈论“相关性”是没有意义的,而且我不确定是否要使用两种不同的相似性度量。如果您认为
91,91,91
与模板
91,91,91
完美匹配,但与例如
70,70,70
不匹配,那么您可能根本不需要NCC。如果您的程序对模板
1,1,1
1,1,1.0001
获得完全不同的结果,则可能会产生奇怪的效果,因为它对前者使用了完全不同的相似性。