GitHub上markdown的显示效果有些和我在线编辑的有些出入。需要更好的阅读体验可以通过在线预览markdown的方式:https://markdown.lovejade.cn/
极简总结步骤:
- 将图片转为像素矩阵
- 确认卷积核并进行矩阵运算 接下来分步骤详细拆解
所有图片均由像素点组成。每个像素都由颜色通道值组成。对于最常见的三通道像素值(rgb三通道),每个通道占一个字节,也就是8个二进制位,计算机中也经常用3个16进制表示。例如:红色像素 (255, 0, 0) → 字节表示为 [0xFF, 0x00, 0x00]。
那么对于一个2*2像素的rgb图像,可以被转为这样的像素矩阵:
[(R1,G1,B1), (R2,G2,B2)] // 第一行像素
[(R3,G3,B3), (R4,G4,B4)] // 第二行像素
高斯模糊效果所用的卷积核的公式:
K(x,y)=12πσ2e−x2+y22σ2
LaTeX代码:
K(x, y) = \\frac{1}{2\\pi \\sigma^2} e^{-\\frac{x^2 + y^2}{2\\sigma^2}}
变量解释:(x,y):像素相对于核中心的坐标 σ:标准差,控制模糊强度(σ>0)。 数学原理在此不做展开解释
详细说明这个卷积核是如何构造出来的:
- 确定采样点:对于 3×3 的核,我们取 x 和 y 在 [-1, 0, 1] 上的整数值。因此需要计算以下9个点的值: (x,y) = (-1,-1), (-1,0), (-1,1), (0,-1), (0,0), (0,1), (1,-1), (1,0), (1,1)
- 计算各点的高斯值: G(-1,-1) = (1/2π)e^(-(1+1)/2) = (1/2π)e^-1 ≈ 0.0585 G(-1,0) = (1/2π)e^(-(1+0)/2) = (1/2π)e^-0.5 ≈ 0.0965 G(-1,1) = 同 G(-1,-1) ≈ 0.0585 G(0,-1) = 同 G(-1,0) ≈ 0.0965 G(0,0) = (1/2π)e^0 = 1/2π ≈ 0.1592 G(0,1) = 同 G(0,-1) ≈ 0.0965 G(1,-1) = 同 G(-1,-1) ≈ 0.0585 G(1,0) = 同 G(-1,0) ≈ 0.0965 G(1,1) = 同 G(-1,-1) ≈ 0.0585
- 将上述值排列成矩阵:
- 计算归一化系数:总和 ≈ 4×0.0585 + 4×0.0965 + 0.1592 ≈ 0.234 + 0.386 + 0.159 ≈ 0.779。归一化系数为 1/0.779 ≈ 1.2837
- 归一化后的核:将每个元素乘以归一化系数: 0.0585×1.2837 ≈ 0.075 0.0965×1.2837 ≈ 0.124 0.1592×1.2837 ≈ 0.204
- 近似为整数:为了简化计算,通常会将核中的值近似为最接近的整数比例: 0.075 ≈ 1/16 0.124 ≈ 2/16 0.204 ≈ 4/16
因此得到常用的整数比例核:
假设有一个 3×3 的 RGB 图像和一个 3×3 高斯核。图像的像素矩阵为:
[
[[100, 50, 20], [200, 100, 30], [50, 60, 70]],
[[80, 90, 10], [150, 120, 80], [90, 80, 70]],
[[70, 60, 50], [110, 100, 90], [40, 30, 20]]
]
高斯核为:
那么计算步骤可表示为(以R通道为例):
- 提取 R 通道的 3×3 区域:
[[100, 200, 50],
[80, 150, 90],
[70, 110, 40]]
- 逐元素乘以核权重并求和:
100 * 0.0625 + 200 * 0.125 + 50 * 0.0625 +
80 * 0.125 + 150 * 0.25 + 90 * 0.125 +
70 * 0.0625 + 110 * 0.125 + 40 * 0.0625 = 122.5
- 对 G、B 通道重复上述操作,得到输出像素
[122, 92, 52]。那么,一个3*3像素的区域,在与卷积核矩阵运算后,就变为单个像素。 - 最后,需要注意的是,对于一个4 * 4像素的图像,需要操作的矩阵运算次数为4次。原理很容易理解,将卷积核理解为一个窗口,对左上角9个像素进行矩阵运算后,将这个“窗口”向右平移一个单位,再进行矩阵运算。每次平移一个单位,如此往复,最终就是进行4次矩阵运算,输出一个2*2像素的图像。