根据相关性的定义,并根据题目要求,写了对应的如下代码,运行出来的结果如下,发现并没有对应到相应的位置上。
但是想一想也是,因为所取的点是最大的点,那么在进行互相关运算的时候,如果运算的区域基本上都是有白色像素组成,那么根据相关性计算出来的值必定是要大于与模板一样的区域。
然后作业提示使用Zero-mean
,零均值去预处理模板,
g = g - np.mean(g)
再次计算得出的结果准确性相当之高(怎么就突然变成夜空中最亮的星了???)
相比是吃了没文化的亏,去了解了一下中心化(零均值化)
中心化相当于数据发生了平移,使得数据的中心为0,因为中心化后的模板有负数的存在,就可以避免初始方法中,对一个均值很大的区域计算出的结果远大于目标区域。但同样这也会引入一个新的问题。
举一个极端一点的例子,假设模板为
{
1
2
3
4
5
6
7
8
9
}
中
心
化
后
{
−
4
−
3
−
2
−
1
0
1
2
3
4
}
存
在
两
个
区
域
{
1
2
3
4
5
6
7
8
9
}
和
{
0
0
0
0
0
9
9
9
9
}
,
显
然
后
者
的
值
会
大
于
前
者
(
模
板
)
的
值
\left\{ \begin{matrix} 1 & 2 & 3\\ 4 & 5 & 6\\ 7 & 8 & 9 \end{matrix} \right\} 中心化后 \left\{ \begin{matrix} -4 & -3 & -2\\ -1 & 0 & 1\\ 2 & 3 & 4 \end{matrix} \right\} \\ 存在两个区域 \left\{ \begin{matrix} 1 & 2 & 3\\ 4 & 5 & 6\\ 7 & 8 & 9 \end{matrix} \right\} 和 \left\{ \begin{matrix} 0 & 0 & 0\\ 0 & 0 & 9\\ 9 & 9 & 9 \end{matrix} \right\},\\ 显然后者的值会大于前者(模板)的值
⎩⎨⎧147258369⎭⎬⎫中心化后⎩⎨⎧−4−12−303−214⎭⎬⎫存在两个区域⎩⎨⎧147258369⎭⎬⎫和⎩⎨⎧009009099⎭⎬⎫,显然后者的值会大于前者(模板)的值
所以只能使用于特定场合??