偶数尺寸线性滤波器的相关性原理及中心定义(附实例)
嘿,我来帮你把这两个问题讲明白~
1. 偶数尺寸滤波器的相关性计算原理
相关性计算的核心逻辑其实和奇数尺寸滤波器是一致的:滑动滤波器窗口遍历图像,将滤波器的每个元素与图像对应位置的元素相乘,再把所有乘积相加,得到对应位置的相关值。
唯一的区别在于对齐方式:奇数尺寸的滤波器有一个明确的中心像素,计算时会把这个中心和图像的每个像素对齐;而偶数尺寸的滤波器没有天然的单个中心像素,所以通常是约定滤波器的窗口以某种偏移方式和图像的像素(或像素间隙)对齐,最终只要保证滤波器完全覆盖图像上的某块区域,就计算该区域的乘积和。
2. 偶数维度滤波器的“中心”定义与实例计算
关于“中心”的定义
偶数维度的滤波器没有单个像素可以作为绝对中心,行业里常用的约定是:
- 从坐标角度看,2×2滤波器的“中心参考点”是(0.5, 0.5)(以滤波器左上角为(0,0)的话),也就是四个像素的中间位置;
- 在实际相关性计算中,我们不需要纠结这个虚拟的中心,更关注滤波器的滑动覆盖范围:只要滤波器能完全放在图像的某块区域上,就计算该区域的乘积和。
具体实例计算
给定:
import numpy as np filter = np.array([[a, b], [c, d]]) image = np.array([[0, 1, 0], [1, 1, 1], [0, 1, 0]])
我们做互相关计算(注意:相关性不翻转滤波器,卷积才会翻转),步骤如下:
图像是3×3,2×2滤波器能覆盖的有效区域有4个(对应滤波器左上角在图像的(0,0)、(0,1)、(1,0)、(1,1)位置):
- 当滤波器左上角对齐图像(0,0):覆盖图像区域
[[0,1],[1,1]],计算得:0*a + 1*b + 1*c + 1*d = b + c + d - 当滤波器左上角对齐图像(0,1):覆盖图像区域
[[1,0],[1,1]],计算得:1*a + 0*b + 1*c + 1*d = a + c + d - 当滤波器左上角对齐图像(1,0):覆盖图像区域
[[1,1],[0,1]],计算得:1*a + 1*b + 0*c + 1*d = a + b + d - 当滤波器左上角对齐图像(1,1):覆盖图像区域
[[1,1],[1,0]],计算得:1*a + 1*b + 1*c + 0*d = a + b + c
最终的相关性计算结果是一个2×2的数组:
[[b+c+d, a+c+d], [a+b+d, a+b+c]]
如果用Python工具库计算,比如scipy.signal.correlate(image, filter, mode='valid'),得到的结果和上面手动计算的一致。
内容的提问来源于stack exchange,提问作者datascienceandpizza
相关产品推荐
相关产品推荐

