Lab2-2 从零玩转Eigen库:掌握线性代数与OpenCV互操作的神器(二)
参考自同济大学蒋磊老师编写的IPMV实验说明
同济大学自动化专业IMPV课程学习记录 (包含知识点以及实验)
Lab0 实验环境准备与OpenCV Hello World
Lab1-1 OpenCV入门与实践——从基础操作到实时视频处理(一)
Lab1-2 OpenCV入门与实践——从基础操作到实时视频处理(二)
Lab2-1 从零玩转Eigen库:掌握线性代数与OpenCV互操作的神器(一)
Lab2-2 从零玩转Eigen库:掌握线性代数与OpenCV互操作的神器!(二)
Lab4 Blending 线性混合与拉普拉斯金字塔混合对比
…
待更新
文章目录
🌫️高斯模糊与频域特征分析
0 前言
嘿!有没有想过把一张图片变得朦胧又梦幻?或者让照片里的噪点统统消失?这就是 高斯模糊(Gaussian Blur) 大显身手的时候!作为一种经典的图像处理技术,高斯模糊不仅能制造出柔和的模糊效果,还在许多图像处理任务中扮演着关键角色,比如去噪、边缘检测前的平滑处理等。
在上一篇文章中,我们探讨了 Eigen 库的基本操作、线性代数运算以及与 OpenCV 的互操作。这次,我们不但要用 OpenCV 提供的 cv2.GaussianBlur()
轻松搞定高斯模糊,还要用Eigen
库来亲手DIY一个高斯模糊算子!更进一步,我们会深入到离散傅里叶变换(DFT) 的世界,对比处理前后图像的频域特征,看看模糊前后到底发生了什么!
无论你是想优化图像识别算法,还是纯粹想要理解图像处理背后的数学原理,这篇文章都能带你轻松入门并大展身手!
1 🎯任务目标
- 使用 OpenCV 实现高斯模糊
- 使用 Eigen 自制高斯模糊算子
- 进行频域特征分析与可视化
2 🌌高斯模糊
2.1 📚高斯模糊:究竟是什么?
高斯滤波是一种经典的线性平滑滤波技术,广泛用于图像处理的预处理阶段,尤其是消除高斯噪声。想象一下:当你拍照时,如果镜头稍微失焦,或者在玻璃上哈气,你会看到一种柔和的、朦胧的效果——这正是高斯模糊带来的视觉体验。
高斯模糊的本质就是给图像“戴上眼镜”:通过对每一个像素点进行加权平均,将其与周围的像素混合,使图像显得更加平滑柔和。这个加权平均的规则就像一座山峰,从中心点向外逐渐递减,呈现出一种自然的“扩散”效果。
2.2 🔬工作原理:模糊的数学之美
2.2.1 高斯函数与高斯核
所谓的“模糊”,其实就是让每个像素点的值变成它周围像素的加权平均值。那么问题来了:如何合理分配权重?
答案是——高斯函数(Gaussian Function)。
想象一下:在一座山峰上,山顶(中心点)是最重要的点,它的权重最大。随着距离的增加,山势逐渐降低,权重也随之递减。这个过程用高斯函数来描述再合适不过了。
高斯函数(默认中心点为原点):
G ( x ) = 1 2 π σ 2 e − x 2 2 σ 2 G(x) = \frac{1} {2 \pi \sigma^2} e^{-\frac{x^2}{2\sigma^2}} \\ G(x)=2πσ21e−2σ2x2
一维高斯分布(正态分布):
然而,图像是二维的,因此我们需要扩展到二维空间:
二维高斯函数:
G ( x , y ) = 1 2 π σ 2 e − x 2 + y 2 2 σ 2 G(x, y) = \frac{1} {2 \pi \sigma^2} e^{-\frac{x^2+y^2}{2\sigma^2}} G(x,y)=2πσ21e−2σ2x2+y2
其中:
- x , y x, y x,y 是相对中心点的位置坐标。
- σ \sigma σ 是标准差,决定模糊的程度。 σ \sigma σ 越大,模糊效果越强,图像越发柔和。
2.2.2 高斯模糊的核心:卷积操作
高斯模糊的实现过程,就是用一个叫做 高斯核(Gaussian Kernel) 的小窗口对图像进行逐点扫描。想象一下,你拿着一个带有权重的小模板在图片上“扫来扫去”,每次都会用模板的权重对图像中的像素进行加权求和。
公式表示:
I b l u r r e d = ∑ i = − k k ∑ i = − k k I ( x + i , y + j ) ⋅ K ( i , j ) I_{blurred}=\displaystyle\sum_{i = -k}^{k}\sum_{i = -k}^{k}I(x+i,y+j) \cdot K(i,j) Iblurred=i=−k∑ki=−k∑kI(x+i,y+j)⋅K(i,j)
2.2.3 优化高斯模糊计算:行列分离
1. 行列分离的高斯模糊
直接用二维高斯核卷积,计算量很大。幸运的是,二维高斯核其实可以分解为两个一维高斯核的乘积。这就像用一把锋利的刀将一块大蛋糕(二维卷积)切成两条细长的条状(两个一维卷积):
G ( x , y ) = G ( x ) ⋅ G ( y ) G ( x ) = 1 2 π σ 2 e − x 2