实验1
姓名: 刘欣楠
班级: 数学强基 2301
学号: 2233310237
电子版密码: lxn-cvpr1
理论推导部分
题目
定义: 设滤波核为 $w$, 大小为 $(2k+1,2k+1)$, 图像为 $f$. 则它们的互相关或卷积 $S[f]$ 在 $(m,n)$ 处定义表达式 $$ Sf=(w\otimes f)(m,n)=\sum\limits_{i=-k}^k\sum\limits_{j=-k}^k w(i,j)f(m+i,n+j) $$ $$ Sf=(w\otimes f)(m,n)=\sum\limits_{i=-k}^k\sum\limits_{j=-k}^k w(i,j)f(m-i,n-j) $$
性质推导与证明: - 1) 线性特性
设图像 $f'=af+bg$, $f,g$ 为两幅不同图片, $a,b$ 为系数, 证明 $w\otimes f'=a(w\otimes f)+b(w\otimes g)$.
$$\begin{aligned}
w\otimes f'&=\sum\limits_{i=-k}^k\sum\limits_{j=-k}^k w(i,j)f'(m+i,n+j)\\
&=\sum\limits_{i=-k}^k\sum\limits_{j=-k}^k w(i,j)\left(af(m+i,n+j)+bg(m+i,n+j)\right)\\
&=\sum\limits_{i=-k}^k\sum\limits_{j=-k}^k aw(i,j)f(m+i,n+j)+bw(i,j)g(m+i,n+j)\\
&=a\sum\limits_{i=-k}^k\sum\limits_{j=-k}^k w(i,j)f(m+i,n+j)+ b\sum\limits_{i=-k}^k\sum\limits_{j=-k}^k w(i,j)g(m+i,n+j)\\
&=a(w\otimes f)+b(w\otimes g)
\end{aligned}$$
证明
设滤波核 $w'=aw+bv$, $w,v$ 是两个不同的滤波核, $a,b$ 为系数, 证明 $w'\otimes f=a(w\otimes f)+b(v\otimes f)$.
$$\begin{aligned}
w\otimes f'&=\sum\limits_{i=-k}^k\sum\limits_{j=-k}^k w'(i,j)f(m+i,n+j)\\
&=\sum\limits_{i=-k}^k\sum\limits_{j=-k}^k (aw(i,j)+bv(i,j))f(m+i,n+j)\\
&=\sum\limits_{i=-k}^k\sum\limits_{j=-k}^k aw(i,j)f(m+i,n+j)+bv(i,j)f(m+i,n+j)\\
&=a\sum\limits_{i=-k}^k\sum\limits_{j=-k}^k w(i,j)f(m+i,n+j)+ b\sum\limits_{i=-k}^k\sum\limits_{j=-k}^k v(i,j)f(m+i,n+j)\\
&=a(w\otimes f)+b(v\otimes f)
\end{aligned}$$
证明
设图像 $f'(m,n)=f(m-m_0,n-n_0)$, 证明 $(w\otimes f')(m,n)=(w\otimes f)(m-m_0,n-n_0)$.
证明
于是有 $f*w=w*f$.
证明
证明
设定图像和滤波核大小, 分析2D卷积操作的计算复杂度.
设图像大小为 $m\times n$, 滤波核大小为 $2k+1\times 2k+1$. 则有单次卷积复杂度是 $O(k^2)$, 一共进行 $O(mn)$ 次卷积.
所以总复杂度是 $O(nmk^2)$.
题目
2D 高斯的可分离性: 高斯函数可写为 $G_\sigma(x,y)=G_\sigma(x)\cdot G_\sigma(y)$, 如果将 $G_\sigma(x)$ 转化为 $k\times 1$ 滤波器 $u$, $G_\sigma(y)$ 转化为 $1\times k$ 滤波器 $v$, 则有 $w=u*v$. 对图像做二维高斯滤波, 等效于做两次一维高斯滤波. $$ wf=(uv)f=u(v*f) $$
注意到指数部分可分离 $\exp\left(-\frac{x^2+y^2}{2\sigma^2}\right)=\exp\left(-\frac{x^2}{2\sigma^2}\right)\cdot\exp\left(-\frac{y^2}{2\sigma^2}\right)$ 故 $G_\sigma(x,y)=G_\sigma(x)G_\sigma(y)$. 对于滤波器, 根据高斯函数的可分离性, 故分离采样的结果的卷积和二维采样的结果一致. 所以 $w*f=(u*v)*f=u*(v*f)$.
证明
两个 2D 高斯函数的卷积仍为一个 2D 高斯函数:
$G_{\sigma_1}(x,y)*G_{\sigma_2}(x,y)=G_{\sigma_1}(x)*G_{\sigma_1}(y)*G_{\sigma_2}(x)*G_{\sigma_2}(y)=G_{\sqrt{\sigma_1^2+\sigma_2^2}}(x)*G_{\sqrt{\sigma_1^2+\sigma_2^2}}(y)=G_{\sqrt{\sigma_1^2+\sigma_2^2}}(x,y)$ 即仍为二维高斯函数且 $\sigma^2=\sigma_1^2+\sigma_2^2$.
证明
题目
证明
2D 频域卷积定理: 设 $H=F*G$, $F=\text{F}(f),G=\text{F}(g),H=\text{F}(h)$, 证明 $h(m,n)=af(m,n)g(m,n)$.
证明
滤波实验部分
实验内容
-
- 设计 2D 高斯模板, 用不同边界处理方法, 对图像进行高斯滤波;
-
- 高斯核特性实验:
- 1) 高斯核与高斯核的卷积实验;
- 2) 高斯核的可分离实验;
- 3) 不同标准差的高斯核之差 (DOG) 对图像进行滤波;
-
- 设计一个图像锐化滤波器核, 完成图像的细节增强;
-
- 图像的双边滤波实验;
-
- 图像的 Fourier 变换, 显示幅度谱与相位谱; 利用高斯滤波器进行图像的频率域滤波.
实验目的
-
- 理解线性滤波器的性质, 并了解线性滤波器和非线性滤波器之间的区别;
-
- 掌握并编程实现图像的高斯滤波, 实现并验证高斯滤波的特性;
-
- 理解图像锐化滤波器的设计原理, 实现并完成图像的细节增强;
-
- 理解双边滤波的设计理念, 掌握并编程实现图像的双边滤波;
-
- 掌握图像的 Fourier 变换, 编程实现图像在频率域的高斯滤波实验.
实验环境
硬件环境: intel i9-13900hx, nvidia 4090laptop.
软件环境: python 3.12.3, numpy 1.26.4, matplotlib 3.8.4
实验原理
-
- 二维高斯函数: $G_\sigma(x,y)=\frac{1}{2\pi\sigma^2}e^{-\frac{x^2+y^2}{2\sigma^2}}$. 选定 $\sigma$, 并设定窗口大小为大于 $6\sigma$ 最近的奇数. 并基于该大小对高斯函数采样核归一化. 采用四种不同的边界处理方法.
-
- 两个标准差不同的高斯函数 $G_{\sigma_1},\ G_{\sigma_2}$, 若有 $\sigma_1>\sigma_2$, 设计 DOG 算子为 $G_{\sigma_1}-G_{\sigma_2}$ 然后进行下采样得到差分滤波模板, 窗口大小由较大的标准差 $\sigma_1$ 确定.
-
- 图像锐化滤波器设计原理 $$ f_{\text{sharp}}=f+\alpha(f-{\text{blur}})=(1+\alpha)f-\alpha f=(1+\alpha)w}f-\alpha(vf)=((1+\alpha)w-\alpha v)*f $$
-
- 图像的双边滤波原理
$$
\operatorname{BF}[I]p = \frac{1}{W_p}\sum G_{\sigma_s}!\bigl(\lVert p-q\rVert\bigr)\, G_{\sigma_r}!\bigl(\lVert I_p-I_q\rVert\bigr)\, I_q
$$
$$
W_p=\sum_{q\in\mathcal S} G_{\sigma_s}!\bigl(\lVert p-q\rVert\bigr)\, G_{\sigma_r}!\bigl(\lVert I_p-I_q\rVert\bigr)
$$
其中, $I$ 表示图像; $p$ 为图像中任意一点像素位置, $q$ 为 $p$ 点邻域 $\mathcal S$ 内的像素; $G_{\sigma_s}$ 为空间域高斯核, $G_{\sigma_r}$ 为值域(强度域)高斯核. - 5. 2D 空间卷积定理, 见理论推导部分.
实验步骤, 结果与分析
高斯滤波
实验步骤:
1) 任选一副图像, 选用至少三个不同的标准差, 给出2D高斯模板, 然后用高 斯模板和选用的图像完成滤波操作;
2) 对不同的标准差滤波后的结果进行分析;
3) 任选一个标准差, 对四种不同的边界处理图像分别进行高斯滤波.
实验结果:
不同标准差的 2D 高斯核可视化:
以 wrap 边界处理为例测试不同标准差下高斯滤波的差异, 依次选取 $\sigma=[0.5,1.0,2.0,4.0]$.
边界处理方式对比, 以 $\sigma=1.0$ 为例第一行为滤波结果, 第二行为填充后的图像.
分析:
从图 \ref{fig:1.1}, 图 \ref{fig:1.2} 实验结果中可见, 随着高斯滤波器标准差的增大, 卷积核随之增大, 同时单个像素的值随之变小, 当 $\sigma=4.0$ 时, 过于密集看不清具体数字, 但根据颜色的可视化可以大致判断大小, 并且随着卷积核增大, 从颜色变化可以看出滤波模板抽样值越发连续, 0.5 的情况下中心值占比很大, 但 2.0 时就已经小了很多, 不同位置的差异变小, 这也是为什么细节损失变多, 图像变得平滑.
而作用到图片中的滤波结果, 随着标准差的增大, 使得图像变得平滑, 丢失的细节增多, 同时去噪也更多, 在实际操作中需要根据具体图片噪声情况选择不同的高斯滤波标准差, 同时兼顾去噪和细节保留.
而如图 \ref{fig:1.3} 在四种不同边界处理中, 首先仅在图像边界附近有滤波差异, 比如填充为 0 的处理下, 滤波结果的边界也有一小圈偏黑的框, 符合高斯滤波原理. 在 Wrap 方式中, 由于图片边界还是有一定差距, 故也能明显看到滤波后的影响, 而其余两种则变化不大, 复制和镜像均与原图相似, 对滤波结果影响不大, 能更好的保留原图特征.
高斯核的特性
实验步骤 - 高斯核与高斯核的卷积 选用三个高斯函数 $G_{\sigma}$、$G_{\sigma_1}$、$G_{\sigma_2}$, 且 $\sigma^2 = \sigma_1^2 + \sigma_2^2$. 先用 $G_{\sigma_1}$ 和 $G_{\sigma_2}$ 依次对图像 $I$ 进行滤波, 得到输出图像 $I1$; 再用 $G_{\sigma}$ 对图像 $I$ 进行滤波, 得到输出图像 $I2$, 对两次滤波结果进行对比分析; - 高斯核的可分性 - 利用两个相同标准差为 $\sigma$ 的一维行列高斯模板卷积生成 2D 高斯核, 与标准差为 $\sigma$ 的 2D 高斯核模板进行对比分析; - 选用一个标准差为 $\sigma$ 的高斯核, 先用二维高斯核对图像 $I$ 进行滤波, 再用一维行列高斯滤波器依次对图像 $I$ 进行滤波, 然后对两次滤波结果及计算复杂度进行对比分析; - 不同标准差的高斯差分(DOG 算子)滤波模板设计 选用两个标准差不同的高斯函数 $G_{\sigma_1}$、$G_{\sigma_2}$, 若有 $\sigma_1 > \sigma_2$, 通过作差 $(G_{\sigma_1} - G_{\sigma_2})$ 设计 DOG 算子, 给出滤波核模板, 然后对图像滤波并进行结果分析.
实验结果
选取 $\sigma_1=1.5,\sigma_2=1.0,\sigma=1.80$ 进行高斯核卷积实验.
选取 $\sigma=1.0$ 进行可分离卷积实验. 并分别显示差异矩阵归一化结果和绝对值结果.
选取 $\sigma_1=2.0,\sigma_2=0.5$ 进行 DOG 实验.
实验分析
从实验结果图 \ref{fig:2.1} 中可见, 通过两个不同标准差的高斯核依次滤波和一个标准差为 $\sqrt{\sigma_1^2+\sigma_2^2}$ 的高斯核滤波结果几乎一致, 差异矩阵归一化后基本看不出差异, 绝对值结果也仅在边缘处有少量差异, MSE 也非常小, 说明两种方式等价.
在可分离卷积实验图 \ref{fig:2.2} 中, 通过二维高斯核滤波和两个一维高斯核依次滤波结果也几乎一致, 差异矩阵不归一化后基本看不出差异. 在归一化视图中能看到模糊的原图像, 但基本为噪点, 大概率是精度误差导致的差异. 但计算复杂度上, 二维高斯核滤波复杂度为 $O(nmk^2)$, 而两个一维高斯核依次滤波复杂度为 $O(nmk)$, 差异明显.
在 DOG 实验图 \ref{fig:2.3} 中, 通过两个不同标准差的高斯核作差得到的滤波模板, 其中心值为负, 周围为正, 说明该滤波器是一个边缘检测算子. 滤波结果中能明显看到边缘信息, 但同时也有噪点, 说明该算子对噪声也比较敏感. 并且将原图像与 DOG 滤波结果相加, 能明显增强图像的边缘信息, 但同时噪声也被放大了.
在图 \ref{fig:2.4} 中, 先做差和先卷积结果几乎一致, 说明卷积和加法可交换.
图像锐化滤波
实验步骤
选用不同的标准差, 利用高斯核设计锐化滤波算子, 给出滤波核模板, 然后对图像滤波并进行结果分析.
实验结果
取 $\alpha=2.0$, $\sigma=[0.5,1.0,1.5,2.5]$ 进行锐化实验.
实验分析
从实验结果图 \ref{fig:3.1} 中可见, 通过不同标准差的锐化滤波器对图像进行锐化处理, 能明显增强图像的边缘信息, 但同时也会放大噪声. 随着标准差的增大, 锐化效果变得更明显, 但噪声也随之增多. 需要根据具体图像情况选择合适的标准差和 $\alpha$ 值, 以达到最佳的锐化效果.
而随着标准差的增大, 从图 \ref{fig:3.2} 中可见, 锐化滤波器的中心变得更小, 周围的权重分布变得更广, 但由于 $\alpha$ 的取值, 中心点相对周围点的单点比值变大, 所以在热力图中中心点越发突出.
双边滤波
实验步骤
选用至少三组不同的标准差, 完成图像的双边滤波操作, 给出三个不同位置的双边滤波核模板, 并对滤波核和滤波结果进行对比分析.
实验结果
取 $\sigma_s=3.0$, $\sigma_r=[0.1,0.5,1.0]$ 进行双边滤波实验. 构建三维热力图显示不同位置的双边滤波器形状.
实验分析
从实验结果图 \ref{fig:4.1} 中可见, 通过不同标准差的双边滤波器对图像进行滤波处理, 能明显去除噪声, 同时保留图像的边缘信息. 随着 $\sigma_r$ 的增大, 滤波效果变得更明显, 但边缘信息也会有所损失. 需要根据具体图像情况选择合适的 $\sigma_s$ 和 $\sigma_r$ 值, 以达到最佳的滤波效果.
而从图 \ref{fig:4.1} 中的子图 (a)-(c) 可见, 双边滤波器的形状和大小会随着位置的不同而变化。在图像平坦区域 (c), 滤波器的权重分布较为均匀; 在边缘区域 (a), (b), 滤波器的权重分布会更加集中, 可以明显看到断崖, 这样就保留了边缘信息, 但随着标准差的增大断崖会越发不明显. 这也是双边滤波能够同时去噪和保留边缘信息的原因.
频率域滤波
实验步骤
1) 对图像进行 Fourier 变换,显示幅度谱与相位
2) 对高斯核进行 Fourier 变换, 得到的幅度谱和图像的幅度谱进行相乘, 将结果转换到空间域, 然后与空间域的直接滤波效果进行对比分析.
实验结果
取 $\sigma=1.0$ 进行频率域滤波实验.
实验分析
从实验结果图 \ref{fig:5.1} 中可见, 图像的幅度谱显示了图像中不同频率成分的强度, 低频成分集中在中心, 高频成分分布在外围. 相位谱则包含了图像的结构信息, 即使幅度谱被修改, 只要相位谱不变, 图像的主要结构仍然可以保留.
而从图 \ref{fig:5.2} 中可见, 通过频率域的高斯滤波器对图像进行滤波处理, 能明显去除噪声, 同时保留图像的边缘信息. 频率域滤波结果与空间域直接滤波结果几乎一致, 说明频率域滤波和空间域滤波是等价的, 符合卷积定理.
在实际操作中, 频率域滤波通常用于处理大尺寸图像, 因为通过 FFT 实现的频率域滤波在计算复杂度上更有优势, 特别是对于大尺寸图像, 频率域滤波的效率更高.
实验结论与讨论
本实验通过理论推导与数值实验验证了二维卷积的线性性、平移不变性、交换律与结合律; 同时验证了高斯核的可分离性及两个高斯核相卷积仍为高斯核 (方差平方和相加的性质). 实验表明: 对同等 $\sigma$ 的高斯滤波, 采用两个一维滤波器代替一次二维滤波能在保持结果一致性的前提下显著降低计算量; DOG 算子能有效突出尺度相关的边缘信息; 双边滤波在抑噪同时保持边缘方面优于线性平滑, 但计算成本较高. 无法被广泛使用.
在实际工程应用中,若对性能敏感应优先使用可分离滤波或 FFT 实现, 以提升性能; 对边界伪影敏感的任务建议使用镜像或复制边界处理; 双边滤波与 DOG 等非线性或差分算子需通过参数搜索 ($\sigma$、窗口大小) 获得最佳效果.