小波变换:多分辨率分析与图像小波去噪 / 增强【计算机视觉】
- 小波变换(Wavelet Transform)
-
- Ⅰ、引言
-
-
- 短时傅里叶变换(STFT):傅里叶到小波的过渡
-
- Ⅱ、小波变换原理:从母小波到多分辨率分析
-
- 一、母小波(Mother Wavelet):小波变换的基础模板
-
- (1)计算机视觉常用母小波完整数学表达式
- 二、小波基:由母小波伸缩+平移生成的自适应窗口
-
- (1)一维小波基公式
- (2)二维小波基公式(图像专用)
- 三、小波变换:图像与小波基的内积运算
-
- (1)二维连续小波变换(CWT,仅理论参考)
- (2)二维离散小波变换(DWT,工程实用版)
- 四、图像小波分解:LL、LH、HL、HH 频带的数学定义
-
- 符号与物理意义
- 工程实用版(滤波形式,直接对应代码)
- 五、小波逆变换:从频带重构图像
-
- (1)核心公式(工程实用版)
- (2)公式关键参数解读
- (3)核心逻辑补充
- (4)db2 小波重构实例
- Ⅲ、二维图像小波分解结构:LL、LH、HL、HH
-
- 一、二维小波分解的完整流程
- 二、小波二维分解(2D-DWT)的4个分量数学定义
-
- (1)LL 低频近似分量
- (2)LH 水平细节分量
- (3)HL 垂直细节分量
- (4)HH 对角细节分量
- 三、多级小波分解(多分辨率金字塔)
-
- 多级分解的 CV 应用价值
- 四、小波分解的物理意义
- Ⅳ、小波图像融合的数学原理
-
- 一、小波融合的数学本质
- 二、小波分解的数学表达(融合基础)
- 三、频带融合的数学规则
-
- 1. LL 低频融合(加权平均)
- 2. LH / HL 边缘融合(绝对值取大)
- 3. HH 细节与噪声融合(取大+阈值)
- 四、小波逆变换(重构数学原理)
- 五、小波融合的数学意义
- Ⅴ、小波图像压缩的数学原理与工程实现
-
- 一、小波压缩的数学本质
- 二、小波压缩的核心数学规则
-
- 1. 系数阈值量化(核心步骤)
- 2. 压缩比计算
- 三、小波压缩的工程流程
- 四、小波压缩的核心优势(对比JPEG)
- 五、典型应用场景
- Ⅵ、总结
-
- 上一章
- 下一章
小波变换(Wavelet Transform)
小波变换是一种多分辨率、局部化的时/空频分析工具,可将图像从空域拆解为不同尺度的低频近似(轮廓)与高频细节(边缘/纹理/噪声)分量,解决了傅里叶变换“无空间定位”、短时傅里叶变换“固定窗宽”的缺陷,是计算机视觉中图像去噪、增强、融合、压缩、特征提取的核心进阶工具。
注意:本文所有代码均可导入Jupyter Notebook 完整代码仓库地址:🔗 GitHub:https://github.com/KnifeWen007/CV—StudyNotebook
Ⅰ、引言
傅里叶变换虽实现了图像从空域到频域的转换,但仅能反映全局频率分布,无法定位“某一频率出现在图像哪个位置”;短时傅里叶变换(STFT)通过滑动窗弥补了空间定位能力,却因窗宽固定,无法兼顾高频细节的空间精度与低频轮廓的频率精度。
小波变换的核心突破在于:用可伸缩、可平移的“小波基” 替代傅里叶变换的“无限长正弦基”,对图像实现“高频用窄窗(抓细节/定位)、低频用宽窗(看趋势/频率)”的自适应分析。这种多分辨率特性,让小波成为计算机视觉中处理非平稳图像信号(如边缘、纹理、局部噪声)的最优工具之一。
短时傅里叶变换(STFT):傅里叶到小波的过渡
(1)STFT 的核心定位:解决傅里叶的“空间定位缺失”
傅里叶变换的致命短板是“只知频率、不知位置”——比如一张包含边缘和噪声的图像,傅里叶能检测到二者对应的高频成分,却无法区分“边缘在左上角、噪声在右下角”。
为弥补这一缺陷,短时傅里叶变换(Short-Time Fourier Transform,STFT)提出了核心解决方案:给图像叠加固定大小的滑动窗,对每个窗口内的局部区域单独做傅里叶变换,从而获得“频率-窗口位置”的二维信息,实现频率的空间定位。 (2)STFT 数学定义(CV 视角)
对二维图像
I
(
x
,
y
)
I(x,y)
I(x,y),STFT 的表达式为:
STFT
(
τ
x
,
τ
y
,
u
,
v
)
=
∬
−
∞
+
∞
I
(
x
,
y
)
⋅
w
(
x
−
τ
x
,
y
−
τ
y
)
⋅
e
−
j
(
u
x
+
v
y
)
d
x
d
y
\\text{STFT}(\\tau_x, \\tau_y, u, v) = \\iint_{-\\infty}^{+\\infty} I(x,y) \\cdot w(x-\\tau_x, y-\\tau_y) \\cdot e^{-j(ux+vy)} dxdy
STFT(τx,τy,u,v)=∬−∞+∞I(x,y)⋅w(x−τx,y−τy)⋅e−j(ux+vy)dxdy
-
w
(
x
−
τ
x
,
y
−
τ
y
)
w(x-\\tau_x, y-\\tau_y)
w(x−τx,y−τy):二维窗函数(如矩形窗、高斯窗),τ
x
,
τ
y
\\tau_x, \\tau_y
τx,τy 为窗口中心坐标; -
u
,
v
u, v
u,v:频率分量; - 本质:窗口约束下的局部傅里叶变换,窗口滑动遍历整幅图像。 (3)STFT 的核心缺陷(CV 场景下)
STFT 虽解决了频率定位问题,却因“固定窗宽”陷入新的困境,这也是它在计算机视觉中极少单独使用的核心原因:
- 窄窗:空间定位精准(能看清边缘位置),但频率分辨率低(无法区分边缘和噪声的高频差异);
- 宽窗:频率分辨率高(能区分不同高频),但空间定位模糊(无法精准定位边缘);
- 硬伤:窗宽一旦选定,整幅图像分析过程中全程固定,无法同时兼顾高频细节的定位与低频轮廓的分频。 (4)STFT 与小波变换的核心对比
| 窗口特性 | 固定大小、固定形状,全程不可调 | 可伸缩(宽窄自适应)、可平移,频率适配 |
| 基函数 | 无限长正弦波 + 固定窗 | 局部化小波基(短、震荡、快速衰减) |
| 分辨率特性 | 全局统一分辨率,高频/低频无法兼顾 | 多分辨率:低频高频率分辨率、高频高空间分辨率 |
| CV 应用局限 | 易产生块伪影,仅辅助分析,极少单独落地 | 无窗效应,保边性好,广泛用于去噪/融合/压缩 |
(5)STFT 的 CV 应用价值
STFT 在计算机视觉中虽极少作为核心工具落地,但它的“局部化频率分析”思路为小波变换奠定了基础——小波变换本质是对 STFT 的升级:用“可伸缩的小波基”替代“固定窗 + 正弦基”,从根本上解决了窗宽固定的缺陷。
Ⅱ、小波变换原理:从母小波到多分辨率分析
小波变换是对短时傅里叶变换(STFT)的核心升级:放弃固定时间-频率窗,改用可伸缩、可平移的小波基函数,实现高频信号精确定位、低频信号精细分频的自适应多分辨率分析,完美适配图像边缘、纹理、轮廓等非平稳视觉信号的处理需求,是计算机视觉领域高精度图像处理(去噪/增强/融合)的核心理论基础。
一、母小波(Mother Wavelet):小波变换的基础模板
母小波是生成所有小波基的唯一原始函数,需满足三大核心数学约束:
零均值约束:
∫
−
∞
+
∞
ψ
(
t
)
d
t
=
0
\\int_{-\\infty}^{+\\infty}\\psi(t)dt = 0
∫−∞+∞ψ(t)dt=0 物理意义:函数正负震荡且积分和为0,能精准捕捉图像中灰度突变(边缘/纹理);
能量有限约束:
∫
−
∞
+
∞
∣
ψ
(
t
)
∣
2
d
t
<
∞
\\int_{-\\infty}^{+\\infty}|\\psi(t)|^2dt < \\infty
∫−∞+∞∣ψ(t)∣2dt<∞ 物理意义:能量集中在局部空域,适配图像局部特征(如人脸眼角、建筑边缘)的分析;
容许条件约束:
C
ψ
=
∫
−
∞
+
∞
∣
ψ
^
(
ω
)
∣
2
∣
ω
∣
d
ω
<
∞
C_\\psi = \\int_{-\\infty}^{+\\infty}\\frac{|\\hat{\\psi}(\\omega)|^2}{|\\omega|}d\\omega < \\infty
Cψ=∫−∞+∞∣ω∣∣ψ^(ω)∣2dω<∞ 物理意义:保证小波变换可逆,处理后的频带分量可重构回原始图像。
(1)计算机视觉常用母小波完整数学表达式
| Haar 小波 |
ψ ( t ) = { 1 , 0 ≤ t < 1 2 − 1 , 1 2 ≤ t < 1 0 , 其他 \\psi(t) = \\begin{cases} 1, & 0\\leq t < \\frac{1}{2} \\\\ -1, & \\frac{1}{2}\\leq t < 1 \\\\ 0, & \\text{其他} \\end{cases} ψ(t)=⎩ ⎨ ⎧1,−1,0,0≤t<2121≤t<1其他 |
ψ ( x , y ) = ψ ( x ) ⋅ ψ ( y ) \\psi(x,y) = \\psi(x) \\cdot \\psi(y) ψ(x,y)=ψ(x)⋅ψ(y)(张量积) |
计算最快、正交,适合快速验证、边缘初检 | 低(仅测试用) |
| Daubechies-2(db2) |
ψ ( t ) = 2 ∑ k = 0 3 g k ϕ ( 2 t − k ) ,
g k = ( − 1 ) k h 1 − k \\psi(t) = \\sqrt{2}\\sum_{k=0}^{3}g_k\\phi(2t-k),\\ g_k=(-1)^kh_{1-k} ψ(t)=2∑k=03gkϕ(2t−k), gk=(−1)kh1−k滤波系数: h 0 = 1 + 3 4 2 , h 1 = 3 + 3 4 2 h_0=\\frac{1+\\sqrt{3}}{4\\sqrt{2}},h_1=\\frac{3+\\sqrt{3}}{4\\sqrt{2}} h0=421+3,h1=423+3 h 2 = 3 − 3 4 2 , h 3 = 1 − 3 4 2 h_2=\\frac{3-\\sqrt{3}}{4\\sqrt{2}},h_3=\\frac{1-\\sqrt{3}}{4\\sqrt{2}} h2=423−3,h3=421−3 |
ψ ( x , y ) = ψ ( x ) ⋅ ψ ( y ) \\psi(x,y)=\\psi(x)\\cdot\\psi(y) ψ(x,y)=ψ(x)⋅ψ(y) |
正交紧支撑,保边性好,无边界伪影 | 高(去噪/融合首选) |
| 墨西哥帽小波 |
ψ ( t ) = 2 3 π − 1 / 4 ( 1 − t 2 ) e − t 2 / 2 \\psi(t) = \\frac{2}{\\sqrt{3}}\\pi^{-1/4}(1-t^2)e^{-t^2/2} ψ(t)=32π−1/4(1−t2)e−t2/2 |
ψ ( x , y ) = ψ ( x 2 + y 2 ) \\psi(x,y) = \\psi(\\sqrt{x^2+y^2}) ψ(x,y)=ψ(x2+y2) |
光滑连续,旋转不变性,适配圆形特征 | 中(医学影像/特征检测) |
| Morlet 小波 |
ψ ( t ) = ( e j ω 0 t − e − ω 0 2 / 2 ) e − t 2 / 2
( ω 0 ≥ 5 ) \\psi(t) = (e^{j\\omega_0 t}-e^{-\\omega_0^2/2})e^{-t^2/2}\\ (\\omega_0\\geq5) ψ(t)=(ejω0t−e−ω02/2)e−t2/2 (ω0≥5) |
ψ ( x , y ) = ψ ( x 2 + y 2 ) \\psi(x,y) = \\psi(\\sqrt{x^2+y^2}) ψ(x,y)=ψ(x2+y2) |
复小波,时频精度均衡,纹理细节分析 | 中(纹理分类/高频特征) |
补充说明:二维图像小波变换通常采用张量积形式(
ψ
(
x
,
y
)
=
ψ
(
x
)
⋅
ψ
(
y
)
\\psi(x,y) = \\psi(x) \\cdot \\psi(y)
ψ(x,y)=ψ(x)⋅ψ(y)),即将一维母小波分别作用于图像的 x 轴(列)和 y 轴(行),实现二维频带分解。
二、小波基:由母小波伸缩+平移生成的自适应窗口
小波基是母小波通过尺度变换(伸缩)+ 平移变换 + 能量归一化生成的函数族,尺度因子控制“分析粒度”,平移因子控制“分析位置”。
(1)一维小波基公式
ψ
a
,
b
(
t
)
=
1
∣
a
∣
ψ
(
t
−
b
a
)
\\psi_{a,b}(t) = \\frac{1}{\\sqrt{|a|}} \\psi\\left( \\frac{t – b}{a} \\right)
ψa,b(t)=∣a∣
1ψ(at−b)
-
a
a
a:尺度因子(a
>
0
a>0
a>0),a
a
a 越小小波基越窄(分析高频/细节),a
a
a 越大越宽(分析低频/轮廓); -
b
b
b:平移因子,控制小波基在空域的位置(对应图像像素的行列坐标); -
1
∣
a
∣
\\frac{1}{\\sqrt{|a|}}
∣a∣1:能量归一化系数,保证不同尺度小波基的能量一致。
(2)二维小波基公式(图像专用)
ψ
a
,
b
x
,
b
y
(
x
,
y
)
=
1
∣
a
∣
ψ
(
x
−
b
x
a
,
y
−
b
y
a
)
\\psi_{a,b_x,b_y}(x,y) = \\frac{1}{|a|} \\psi\\left( \\frac{x – b_x}{a}, \\frac{y – b_y}{a} \\right)
ψa,bx,by(x,y)=∣a∣1ψ(ax−bx,ay−by)
- 适配性优化:将一维平移因子
b
b
b 拆分为b
x
b_x
bx(列平移)、b
y
b_y
by(行平移),直接对应图像像素坐标;归一化系数改为1
∣
a
∣
\\frac{1}{|a|}
∣a∣1,补偿二维空域的尺度缩放。
三、小波变换:图像与小波基的内积运算
小波变换的本质是“图像信号与小波基的内积”,核心作用是将空域图像转换为频域系数,实现“轮廓/边缘/噪声”的分离。
(1)二维连续小波变换(CWT,仅理论参考)
W
f
(
a
,
b
x
,
b
y
)
=
∬
−
∞
+
∞
I
(
x
,
y
)
⋅
ψ
a
,
b
x
,
b
y
∗
(
x
,
y
)
d
x
d
y
W_f(a,b_x,b_y) = \\iint_{-\\infty}^{+\\infty} I(x,y) \\cdot \\psi^*_{a,b_x,b_y}(x,y) dxdy
Wf(a,bx,by)=∬−∞+∞I(x,y)⋅ψa,bx,by∗(x,y)dxdy
工程说明:CWT 计算量极大,且系数冗余,计算机视觉中完全不使用,仅用于理解小波变换的数学本质。
(2)二维离散小波变换(DWT,工程实用版)
W
f
(
j
,
k
x
,
k
y
)
=
1
2
j
∬
−
∞
+
∞
I
(
x
,
y
)
⋅
ψ
(
x
−
k
x
⋅
2
j
2
j
,
y
−
k
y
⋅
2
j
2
j
)
d
x
d
y
W_f(j,k_x,k_y) = \\frac{1}{2^j} \\iint_{-\\infty}^{+\\infty} I(x,y) \\cdot \\psi\\left( \\frac{x – k_x\\cdot2^j}{2^j}, \\frac{y – k_y\\cdot2^j}{2^j} \\right) dxdy
Wf(j,kx,ky)=2j1∬−∞+∞I(x,y)⋅ψ(2jx−kx⋅2j,2jy−ky⋅2j)dxdy
- 离散化优化:
- 尺度因子
a
=
2
j
a=2^j
a=2j(j
j
j 为分解级数,取整数),仅保留2的幂次尺度,降低计算量; - 平移因子
b
x
=
k
x
⋅
2
j
b_x=k_x\\cdot2^j
bx=kx⋅2j、b
y
=
k
y
⋅
2
j
b_y=k_y\\cdot2^j
by=ky⋅2j(k
x
,
k
y
k_x,k_y
kx,ky 为整数),与图像像素下采样步长对齐; - 归一化系数
1
2
j
\\frac{1}{2^j}
2j1,补偿尺度缩放带来的能量变化。
四、图像小波分解:LL、LH、HL、HH 频带的数学定义
图像经一层二维小波变换后,会被分解为 4 个正交频带子带,其数学原型由内积形式定义·:
{
f
2
j
0
(
m
,
n
)
=
⟨
f
2
j
−
1
(
x
,
y
)
,
ϕ
(
x
−
2
m
,
y
−
2
n
)
⟩
(LL 低频近似子带)
f
2
j
1
(
m
,
n
)
=
⟨
f
2
j
−
1
(
x
,
y
)
,
ψ
1
(
x
−
2
m
,
y
−
2
n
)
⟩
(HL 水平高频子带)
f
2
j
2
(
m
,
n
)
=
⟨
f
2
j
−
1
(
x
,
y
)
,
ψ
2
(
x
−
2
m
,
y
−
2
n
)
⟩
(LH 垂直高频子带)
f
2
j
3
(
m
,
n
)
=
⟨
f
2
j
−
1
(
x
,
y
)
,
ψ
3
(
x
−
2
m
,
y
−
2
n
)
⟩
(HH 对角高频子带)
\\begin{cases} f_{2^j}^0(m,n) = \\langle f_{2^{j-1}}(x,y),\\ \\phi(x-2m,y-2n) \\rangle \\quad &\\text{(LL 低频近似子带)} \\\\ f_{2^j}^1(m,n) = \\langle f_{2^{j-1}}(x,y),\\ \\psi^1(x-2m,y-2n) \\rangle \\quad &\\text{(HL 水平高频子带)} \\\\ f_{2^j}^2(m,n) = \\langle f_{2^{j-1}}(x,y),\\ \\psi^2(x-2m,y-2n) \\rangle \\quad &\\text{(LH 垂直高频子带)} \\\\ f_{2^j}^3(m,n) = \\langle f_{2^{j-1}}(x,y),\\ \\psi^3(x-2m,y-2n) \\rangle \\quad &\\text{(HH 对角高频子带)} \\end{cases}
⎩
⎨
⎧f2j0(m,n)=⟨f2j−1(x,y), ϕ(x−2m,y−2n)⟩f2j1(m,n)=⟨f2j−1(x,y), ψ1(x−2m,y−2n)⟩f2j2(m,n)=⟨f2j−1(x,y), ψ2(x−2m,y−2n)⟩f2j3(m,n)=⟨f2j−1(x,y), ψ3(x−2m,y−2n)⟩(LL 低频近似子带)(HL 水平高频子带)(LH 垂直高频子带)(HH 对角高频子带)
符号与物理意义
|
f 2 j − 1 ( x , y ) f_{2^{j-1}}(x,y) f2j−1(x,y) |
第
j − 1 j-1 j−1 层输入图像(初始为原始图像 I ( x , y ) I(x,y) I(x,y)) |
|
⟨ ⋅ , ⋅ ⟩ \\langle \\cdot,\\cdot \\rangle ⟨⋅,⋅⟩ |
内积运算(等价于卷积+2倍下采样) |
|
ϕ ( x − 2 m , y − 2 n ) \\phi(x-2m,y-2n) ϕ(x−2m,y−2n) |
二维尺度函数(低通滤波,提取平缓灰度信息) |
|
ψ 1 ( x , y ) = ψ ( x ) ϕ ( y ) \\psi^1(x,y)=\\psi(x)\\phi(y) ψ1(x,y)=ψ(x)ϕ(y) |
水平高频小波基(提取行方向突变) |
|
ψ 2 ( x , y ) = ϕ ( x ) ψ ( y ) \\psi^2(x,y)=\\phi(x)\\psi(y) ψ2(x,y)=ϕ(x)ψ(y) |
垂直高频小波基(提取列方向突变) |
|
ψ 3 ( x , y ) = ψ ( x ) ψ ( y ) \\psi^3(x,y)=\\psi(x)\\psi(y) ψ3(x,y)=ψ(x)ψ(y) |
对角高频小波基(提取对角纹理/噪声) |
|
2 m , 2 n 2m,2n 2m,2n |
下采样步长(分解后子带尺寸为原图 1/2×1/2) |
|
f 2 j k ( m , n ) f_{2^j}^k(m,n) f2jk(m,n) |
第
j j j 层第 k k k 个频带的小波系数 |
工程实用版(滤波形式,直接对应代码)
{
L
L
(
j
+
1
)
=
1
2
∑
m
,
n
h
(
m
)
h
(
n
)
⋅
L
L
(
j
)
(
x
−
m
,
y
−
n
)
L
H
(
j
+
1
)
=
1
2
∑
m
,
n
h
(
m
)
g
(
n
)
⋅
L
L
(
j
)
(
x
−
m
,
y
−
n
)
H
L
(
j
+
1
)
=
1
2
∑
m
,
n
g
(
m
)
h
(
n
)
⋅
L
L
(
j
)
(
x
−
m
,
y
−
n
)
H
H
(
j
+
1
)
=
1
2
∑
m
,
n
g
(
m
)
g
(
n
)
⋅
L
L
(
j
)
(
x
−
m
,
y
−
n
)
\\begin{cases} LL(j+1) = \\frac{1}{2}\\sum_{m,n} h(m)h(n) \\cdot LL(j)(x-m, y-n) \\\\ LH(j+1) = \\frac{1}{2}\\sum_{m,n} h(m)g(n) \\cdot LL(j)(x-m, y-n) \\\\ HL(j+1) = \\frac{1}{2}\\sum_{m,n} g(m)h(n) \\cdot LL(j)(x-m, y-n) \\\\ HH(j+1) = \\frac{1}{2}\\sum_{m,n} g(m)g(n) \\cdot LL(j)(x-m, y-n) \\end{cases}
⎩
⎨
⎧LL(j+1)=21∑m,nh(m)h(n)⋅LL(j)(x−m,y−n)LH(j+1)=21∑m,nh(m)g(n)⋅LL(j)(x−m,y−n)HL(j+1)=21∑m,ng(m)h(n)⋅LL(j)(x−m,y−n)HH(j+1)=21∑m,ng(m)g(n)⋅LL(j)(x−m,y−n)
-
L
L
LL
LL:低频近似(图像轮廓,能量占比~80%) -
L
H
LH
LH:水平高频(水平边缘) -
H
L
HL
HL:垂直高频(垂直边缘) -
H
H
HH
HH:对角高频(纹理/噪声,能量占比~2%) -
h
(
n
)
h(n)
h(n):低通滤波器(db2:[
0.48296
,
0.83652
,
0.22414
,
−
0.12941
]
[0.48296, 0.83652, 0.22414, -0.12941]
[0.48296,0.83652,0.22414,−0.12941]) -
g
(
n
)
g(n)
g(n):高通滤波器(db2:[
−
0.12941
,
−
0.22414
,
0.83652
,
−
0.48296
]
[-0.12941, -0.22414, 0.83652, -0.48296]
[−0.12941,−0.22414,0.83652,−0.48296]) -
1
2
\\frac{1}{2}
21:归一化系数,补偿2倍下采样导致的亮度衰减
五、小波逆变换:从频带重构图像
小波逆变换(IDWT)是小波分解的逆过程,核心作用是将处理后的频带分量重新组合为空域图像,实现“精准修改、无损还原”。
(1)核心公式(工程实用版)
L
L
(
j
)
=
1
2
∑
m
,
n
[
h
(
m
)
h
(
n
)
⋅
L
L
(
j
+
1
)
+
h
(
m
)
g
(
n
)
⋅
L
H
(
j
+
1
)
+
g
(
m
)
h
(
n
)
⋅
H
L
(
j
+
1
)
+
g
(
m
)
g
(
n
)
⋅
H
H
(
j
+
1
)
]
(
x
+
m
,
y
+
n
)
LL(j) = \\frac{1}{2} \\sum_{m,n} \\Bigg[ h(m)h(n)\\cdot LL(j+1) + h(m)g(n)\\cdot LH(j+1) + \\\\ g(m)h(n)\\cdot HL(j+1) + g(m)g(n)\\cdot HH(j+1) \\Bigg]_{(x+m, y+n)}
LL(j)=21m,n∑[h(m)h(n)⋅LL(j+1)+h(m)g(n)⋅LH(j+1)+g(m)h(n)⋅HL(j+1)+g(m)g(n)⋅HH(j+1)](x+m,y+n)
(2)公式关键参数解读
|
L L ( j ) LL(j) LL(j) |
第
j j j 层低频近似分量(重构后的上一层低频) |
多级分解需从最细层逐层重构 |
|
h ( n ) / g ( n ) h(n)/g(n) h(n)/g(n) |
重构滤波器(分解滤波器的反转) | db2 重构
h = [ − 0.12941 , 0.22414 , 0.83652 , 0.48296 ] h=[-0.12941, 0.22414, 0.83652, 0.48296] h=[−0.12941,0.22414,0.83652,0.48296] |
|
1 2 \\frac{1}{2} 21 |
尺度归一化系数 | 必须保留,否则重构图像亮度异常 |
|
( x + m , y + n ) (x+m, y+n) (x+m,y+n) |
滤波器滑动偏移 | 对应图像像素的行列偏移,避免边界失真 |
(3)核心逻辑补充
(4)db2 小波重构实例
- 分解滤波器:
h
分解
=
[
0.48296
,
0.83652
,
0.22414
,
−
0.12941
]
h_{分解}=[0.48296, 0.83652, 0.22414, -0.12941]
h分解=[0.48296,0.83652,0.22414,−0.12941],g
分解
=
[
−
0.12941
,
−
0.22414
,
0.83652
,
−
0.48296
]
g_{分解}=[-0.12941, -0.22414, 0.83652, -0.48296]
g分解=[−0.12941,−0.22414,0.83652,−0.48296]; - 重构滤波器:
h
重构
=
r
e
v
e
r
s
e
(
h
分解
)
=
[
−
0.12941
,
0.22414
,
0.83652
,
0.48296
]
h_{重构}=reverse(h_{分解})=[-0.12941, 0.22414, 0.83652, 0.48296]
h重构=reverse(h分解)=[−0.12941,0.22414,0.83652,0.48296],g
重构
=
r
e
v
e
r
s
e
(
g
分解
)
=
[
−
0.48296
,
0.83652
,
−
0.22414
,
−
0.12941
]
g_{重构}=reverse(g_{分解})=[-0.48296, 0.83652, -0.22414, -0.12941]
g重构=reverse(g分解)=[−0.48296,0.83652,−0.22414,−0.12941];
核心说明:重构滤波器反转是保证小波变换正交性的关键,无此操作会导致重构图像失真。
Ⅲ、二维图像小波分解结构:LL、LH、HL、HH
在计算机视觉中,图像本质是二维离散像素信号(像素值随坐标(x,y)变化),一维小波变换无法适配其二维特性,因此需采用二维离散小波变换(2D-DWT) 处理。2D-DWT 的核心逻辑是“分维度分解”:先对图像行方向做一维小波变换,再对列方向做一维小波变换,最终将原始图像拆解为4个物理意义明确的频带子图(LL、LH、HL、HH),也是后续图像去噪/增强/融合的操作基础。
一、二维小波分解的完整流程
2D-DWT 分解分为“行滤波+下采样”和“列滤波+下采样”两步,以灰度图像为例,具体流程如下:
第一步:行方向小波变换
- 对图像的每一行像素,分别用低通滤波器 h 和高通滤波器 g 做卷积运算:
- 低通滤波结果:保留行方向的低频信息(如行内平缓的灰度变化);
- 高通滤波结果:保留行方向的高频信息(如行内的边缘、灰度突变);
- 对滤波结果做 2 倍下采样(取偶数位置像素),行方向数据量减半;
- 最终行变换后,图像分为“行低频矩阵”和“行高频矩阵”两部分,列数不变、行数减半。
第二步:列方向小波变换
- 对第一步得到的“行低频矩阵”和“行高频矩阵”,分别按列做卷积+下采样:
- 对“行低频矩阵”列滤波:低通得 LL、高通得 LH;
- 对“行高频矩阵”列滤波:低通得 HL、高通得 HH;
- 对列滤波结果做 2 倍下采样,列方向数据量减半;
最终结果:原始图像被分解为 4 个尺寸为原图 1/4 的子图(LL、LH、HL、HH),4 个子图像素总数与原图一致,无信息丢失。
补充:滤波器选择(以 db2 小波为例)
- 低通滤波器 h = [0.48296, 0.83652, 0.22414, -0.12941](保留低频、平滑信号);
- 高通滤波器 g = [-0.12941, -0.22414, 0.83652, -0.48296](保留高频、捕捉突变); 滤波器长度决定分解精度,db2 是 CV 中最常用的选择(兼顾计算速度与保边效果)。
二、小波二维分解(2D-DWT)的4个分量数学定义
| LL | 行低频+列低频 | 图像全局轮廓、背景、主体结构 | ~80% | 如人脸图像的脸型、建筑图像的整体框架 | 极少修改,保留核心信息 |
| LH | 行低频+列高频 | 水平方向边缘、线条、灰度突变 | ~10% | 如地平线、文字的水平笔画、桌面的水平边 | 增强/保留(提升边缘清晰度) |
| HL | 行高频+列低频 | 垂直方向边缘、线条、灰度突变 | ~8% | 如建筑的垂直线条、文字的竖笔画、柱子 | 增强/保留(提升边缘清晰度) |
| HH | 行高频+列高频 | 对角纹理、细节、噪声(高斯/椒盐) | ~2% | 如图像的颗粒感、噪点、对角纹理细节 | 去噪时抑制、增强时适度保留 |
import cv2
import pywt
import numpy as np
import matplotlib.pyplot as plt
# 解决中文显示问题
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False
def wavelet_bands_compare(image_path, wavelet='db2'):
# 读取图像
img = cv2.imread(image_path)
if img is None:
raise ValueError("无法读取图像!请检查路径或文件格式(jpg/png)")
# 转灰度图(小波分解用)和RGB图(显示用)
gray_img = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY).astype(np.float64)
img_rgb = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
# 1级二维小波分解
coeffs = pywt.wavedec2(gray_img, wavelet=wavelet, level=1)
LL, (LH, HL, HH) = coeffs
# 频带归一化(0-255)
def normalize_band(band):
min_val = np.min(band)
max_val = np.max(band)
if max_val – min_val == 0:
return band
return (band – min_val) / (max_val – min_val) * 255
# 归一化处理
LL_norm = normalize_band(LL).astype(np.uint8)
LH_norm = normalize_band(LH).astype(np.uint8)
HL_norm = normalize_band(HL).astype(np.uint8)
HH_norm = normalize_band(HH).astype(np.uint8)
# 绘制对比图(1行5列)
plt.figure(figsize=(20, 6))
# 原始图像
plt.subplot(1, 5, 1)
plt.imshow(img_rgb)
plt.title('原始图像', fontsize=14, pad=10)
plt.axis('off')
# LL低频分量
plt.subplot(1, 5, 2)
plt.imshow(LL_norm, cmap='gray')
plt.title('LL 低频近似分量\\n(图像骨架)', fontsize=12, pad=10)
plt.axis('off')
# LH水平细节分量
plt.subplot(1, 5, 3)
plt.imshow(LH_norm, cmap='gray')
plt.title('LH 水平细节分量\\n(水平边缘)', fontsize=12, pad=10)
plt.axis('off')
# HL垂直细节分量
plt.subplot(1, 5, 4)
plt.imshow(HL_norm, cmap='gray')
plt.title('HL 垂直细节分量\\n(垂直边缘)', fontsize=12, pad=10)
plt.axis('off')
# HH对角细节分量
plt.subplot(1, 5, 5)
plt.imshow(HH_norm, cmap='gray')
plt.title('HH 对角细节分量\\n(纹理+噪声)', fontsize=12, pad=10)
plt.axis('off')
plt.tight_layout()
plt.show()
# 输出基础信息
print("="*50)
print(f"原始图像尺寸:{gray_img.shape} (高×宽)")
print(f"各频带尺寸:{LL_norm.shape} (均为原图1/4)")
print(f"使用小波基:{wavelet}")
print("="*50)
# 批量处理测试图
if __name__ == "__main__":
# 测试图像路径(替换为本地路径)
test_images = [
"building.jpg",
"lighthouse.jpg",
"cat.jpg",
"lenna_noisy.jpg"
]
# 批量执行
for img_path in test_images:
print(f"\\n{img_path}")
try:
wavelet_bands_compare(image_path=img_path, wavelet='db2')
except Exception as e:
print(f"❌ 处理{img_path}失败:{str(e)}")
print("\\n所有图像可视化完成!")
(1)LL 低频近似分量
- 数学本质:
L
L
=
I
∗
ϕ
(
x
)
⊗
ϕ
(
y
)
LL = I * \\phi(x) \\otimes \\phi(y)
LL=I∗ϕ(x)⊗ϕ(y)(图像与二维尺度函数做卷积+下采样); - 核心特征:灰度变化平缓,是图像的“骨架”,包含图像最核心的视觉信息;
- 分解特性:可对 LL 继续做 2D-DWT 得到 LL2、LH2、HL2、HH2(二级分解),数学上表示为:
L
L
2
(
m
,
n
)
=
∑
x
′
,
y
′
L
L
(
x
′
,
y
′
)
⋅
ϕ
(
x
′
−
2
m
)
⋅
ϕ
(
y
′
−
2
n
)
LL2(m,n) = \\sum_{x',y'} LL(x',y') \\cdot \\phi(x'-2m) \\cdot \\phi(y'-2n)
LL2(m,n)=x′,y′∑LL(x′,y′)⋅ϕ(x′−2m)⋅ϕ(y′−2n) LL2 可继续分解为 LL3 等,形成“多分辨率金字塔”; - 实例:对一张包含猫的图像,LL 分量能清晰看到猫的整体轮廓,但看不到胡须、花纹等细节。

(2)LH 水平细节分量
- 数学本质:
L
H
=
I
∗
ϕ
(
x
)
⊗
ψ
(
y
)
LH = I * \\phi(x) \\otimes \\psi(y)
LH=I∗ϕ(x)⊗ψ(y)(行方向低通+列方向高通); - 核心特征:仅响应列方向的灰度突变(行方向平缓),对应图像中水平走向的边缘; 物理意义:
ϕ
(
x
)
\\phi(x)
ϕ(x) 保留行方向的平缓信息,ψ
(
y
)
\\psi(y)
ψ(y) 提取列方向的灰度差(突变),因此仅对水平边缘敏感; - 实例:对包含海平面的图像,LH 分量会清晰显示海平面的水平边缘,而垂直的灯塔边缘则几乎无响应。

(3)HL 垂直细节分量
- 数学本质:
H
L
=
I
∗
ψ
(
x
)
⊗
ϕ
(
y
)
HL = I * \\psi(x) \\otimes \\phi(y)
HL=I∗ψ(x)⊗ϕ(y)(行方向高通+列方向低通); - 核心特征:仅响应行方向的灰度突变(列方向平缓),对应图像中垂直走向的边缘; 物理意义:
ψ
(
x
)
\\psi(x)
ψ(x) 提取行方向的灰度差,ϕ
(
y
)
\\phi(y)
ϕ(y) 保留列方向的平缓信息,因此仅对垂直边缘敏感; - 实例:对包含高楼的图像,HL 分量会清晰显示高楼的垂直轮廓线,而水平的窗户边缘则几乎无响应。

(4)HH 对角细节分量
- 数学本质:
H
H
=
I
∗
ψ
(
x
)
⊗
ψ
(
y
)
HH = I * \\psi(x) \\otimes \\psi(y)
HH=I∗ψ(x)⊗ψ(y)(行+列方向高通); - 核心特征:响应行+列方向的灰度突变,对应对角纹理、微小细节,也是图像噪声的主要载体; 物理意义:
ψ
(
x
)
\\psi(x)
ψ(x) 和ψ
(
y
)
\\psi(y)
ψ(y) 同时提取行、列方向的灰度差,因此对任意方向的微小突变(噪声/对角纹理)都敏感; - 实例:对含高斯噪声的人像图,HH 分量中噪声点会以高亮像素呈现,而人脸的对角纹理(如眼角)也会保留。

三、多级小波分解(多分辨率金字塔)
import cv2
import pywt
import numpy as np
import matplotlib.pyplot as plt
# 中文显示设置
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False
def show_all_level_wavelet(image_path, wavelet='db2'):
# 读取图像
img = cv2.imread(image_path)
if img is None:
raise ValueError("未找到lighthouse.jpg,请确认文件路径正确!")
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY).astype(np.float64)
img_rgb = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
h, w = gray.shape
print(f"原始图像尺寸:{h}×{w}")
# 归一化函数
def norm(band):
return ((band – band.min()) / (band.max() – band.min() + 1e-8) * 255).astype(np.uint8)
# 存储分解结果
levels_data = {}
# 1级分解
coeffs1 = pywt.wavedec2(gray, wavelet=wavelet, level=1)
LL1, (LH1, HL1, HH1) = coeffs1
levels_data[1] = {
'LL': norm(LL1), 'LH': norm(LH1), 'HL': norm(HL1), 'HH': norm(HH1),
'shape': LL1.shape
}
print(f"1级分解 – LL1尺寸:{LL1.shape}(原图1/4)")
# 2级分解
coeffs2 = pywt.wavedec2(LL1, wavelet=wavelet, level=1)
LL2, (LH2, HL2, HH2) = coeffs2
levels_data[2] = {
'LL': norm(LL2), 'LH': norm(LH2), 'HL': norm(HL2), 'HH': norm(HH2),
'shape': LL2.shape
}
print(f"2级分解 – LL2尺寸:{LL2.shape}(原图1/16)")
# 3级分解
coeffs3 = pywt.wavedec2(LL2, wavelet=wavelet, level=1)
LL3, (LH3, HL3, HH3) = coeffs3
levels_data[3] = {
'LL': norm(LL3), 'LH': norm(LH3), 'HL': norm(HL3), 'HH': norm(HH3),
'shape': LL3.shape
}
print(f"3级分解 – LL3尺寸:{LL3.shape}(原图1/64)")
# 可视化多分辨率金字塔
plt.figure(figsize=(20, 5))
plt.subplot(1, 4, 1)
plt.imshow(img_rgb)
plt.title('0级 – 原始图像', fontsize=12)
plt.axis('off')
plt.subplot(1, 4, 2)
plt.imshow(levels_data[1]['LL'], cmap='gray')
plt.title(f'1级 – LL1\\n{levels_data[1]["shape"][0]}×{levels_data[1]["shape"][1]}', fontsize=10)
plt.axis('off')
plt.subplot(1, 4, 3)
plt.imshow(levels_data[2]['LL'], cmap='gray')
plt.title(f'2级 – LL2\\n{levels_data[2]["shape"][0]}×{levels_data[2]["shape"][1]}', fontsize=10)
plt.axis('off')
plt.subplot(1, 4, 4)
plt.imshow(levels_data[3]['LL'], cmap='gray')
plt.title(f'3级 – LL3\\n{levels_data[3]["shape"][0]}×{levels_data[3]["shape"][1]}', fontsize=10)
plt.axis('off')
plt.suptitle('小波分解多分辨率金字塔(LL分量)', fontsize=14)
plt.tight_layout()
plt.show()
# 可视化各层级完整频带
fig, axes = plt.subplots(3, 4, figsize=(18, 12))
fig.suptitle('1/2/3级小波分解完整频带', fontsize=16)
# 1级分解行
axes[0, 0].imshow(levels_data[1]['LL'], cmap='gray')
axes[0, 0].set_title('1级 LL(图像骨架)', fontsize=10)
axes[0, 0].axis('off')
axes[0, 1].imshow(levels_data[1]['LH'], cmap='gray')
axes[0, 1].set_title('1级 LH(水平边缘)', fontsize=10)
axes[0, 1].axis('off')
axes[0, 2].imshow(levels_data[1]['HL'], cmap='gray')
axes[0, 2].set_title('1级 HL(垂直边缘)', fontsize=10)
axes[0, 2].axis('off')
axes[0, 3].imshow(levels_data[1]['HH'], cmap='gray')
axes[0, 3].set_title('1级 HH(纹理/噪声)', fontsize=10)
axes[0, 3].axis('off')
# 2级分解行
axes[1, 0].imshow(levels_data[2]['LL'], cmap='gray')
axes[1, 0].set_title('2级 LL(更粗轮廓)', fontsize=10)
axes[1, 0].axis('off')
axes[1, 1].imshow(levels_data[2]['LH'], cmap='gray')
axes[1, 1].set_title('2级 LH(大尺度水平细节)', fontsize=10)
axes[1, 1].axis('off')
axes[1, 2].imshow(levels_data[2]['HL'], cmap='gray')
axes[1, 2].set_title('2级 HL(大尺度垂直细节)', fontsize=10)
axes[1, 2].axis('off')
axes[1, 3].imshow(levels_data[2]['HH'], cmap='gray')
axes[1, 3].set_title('2级 HH(大尺度纹理)', fontsize=10)
axes[1, 3].axis('off')
# 3级分解行
axes[2, 0].imshow(levels_data[3]['LL'], cmap='gray')
axes[2, 0].set_title('3级 LL(全局轮廓)', fontsize=10)
axes[2, 0].axis('off')
axes[2, 1].imshow(levels_data[3]['LH'], cmap='gray')
axes[2, 1].set_title('3级 LH(超大尺度水平细节)', fontsize=10)
axes[2, 1].axis('off')
axes[2, 2].imshow(levels_data[3]['HL'], cmap='gray')
axes[2, 2].set_title('3级 HL(超大尺度垂直细节)', fontsize=10)
axes[2, 2].axis('off')
axes[2, 3].imshow(levels_data[3]['HH'], cmap='gray')
axes[2, 3].set_title('3级 HH(超大尺度纹理)', fontsize=10)
axes[2, 3].axis('off')
plt.tight_layout()
plt.subplots_adjust(top=0.92)
plt.show()
# 输出应用说明
print("\\n各层级应用价值:")
print("1级分解:细节最丰富,噪声也最明显 → 适合去噪、精细边缘检测、细节增强")
print("2级分解:平衡轮廓与细节 → 适合图像融合、特征提取、中等尺度分析")
print("3级分解:仅保留全局轮廓,细节极少 → 适合图像压缩、轮廓提取、粗粒度分析")
# 执行主函数
if __name__ == "__main__":
try:
show_all_level_wavelet(image_path="lighthouse.jpg", wavelet='db2')
except Exception as e:
print(f"程序执行错误:{str(e)}")
单次小波分解仅能得到“1级频带”,为实现更精细的多尺度分析,可对 LL 分量重复执行 2D-DWT,形成“多级分解金字塔”:




多级分解的 CV 应用价值
- 低层级(1级):聚焦图像细节、噪声,适合去噪、细节增强;
- 高层级(2/3级):聚焦图像全局轮廓,适合图像融合、轮廓提取;
- 工程建议:CV 中常用 1~3 级分解,超过 3 级后 LL 分量信息过少,无实际应用价值。
四、小波分解的物理意义
Ⅳ、小波图像融合的数学原理
一、小波融合的数学本质
小波图像融合的本质是:在小波变换域中,对多幅图像的分解系数进行加权、选取或组合,再通过逆变换重构得到融合图像。 设两幅待融合图像为
f
A
(
x
,
y
)
f_A(x,y)
fA(x,y)、
f
B
(
x
,
y
)
f_B(x,y)
fB(x,y),融合图像为
f
F
(
x
,
y
)
f_F(x,y)
fF(x,y),则数学流程为:
{
W
{
f
A
}
=
分解
(
f
A
)
⟹
{
L
L
A
,
L
H
A
,
H
L
A
,
H
H
A
}
W
{
f
B
}
=
分解
(
f
B
)
⟹
{
L
L
B
,
L
H
B
,
H
L
B
,
H
H
B
}
W
{
f
F
}
=
F
(
W
{
f
A
}
,
W
{
f
B
}
)
f
F
=
W
−
1
(
W
{
f
F
}
)
\\begin{cases} W\\{f_A\\} = \\text{分解}\\big(f_A\\big) \\implies \\{LL_A, LH_A, HL_A, HH_A\\} \\\\ W\\{f_B\\} = \\text{分解}\\big(f_B\\big) \\implies \\{LL_B, LH_B, HL_B, HH_B\\} \\\\ W\\{f_F\\} = F\\big(W\\{f_A\\}, W\\{f_B\\}\\big) \\\\ f_F = W^{-1}\\big(W\\{f_F\\}\\big) \\end{cases}
⎩
⎨
⎧W{fA}=分解(fA)⟹{LLA,LHA,HLA,HHA}W{fB}=分解(fB)⟹{LLB,LHB,HLB,HHB}W{fF}=F(W{fA},W{fB})fF=W−1(W{fF}) 其中:
- (W{\\cdot}):二维离散小波变换(2D‑DWT)
- (W^{-1}{\\cdot}):逆二维离散小波变换(IDWT)
- (F(\\cdot)):频带系数融合算子
二、小波分解的数学表达(融合基础)
对图像 (f(x,y)) 进行一层二维小波分解,得到四个子带:
{
L
L
(
x
,
y
)
=
(
f
∗
ϕ
)
(
x
,
y
)
↓
2
L
H
(
x
,
y
)
=
(
f
∗
ψ
h
)
(
x
,
y
)
↓
2
H
L
(
x
,
y
)
=
(
f
∗
ψ
v
)
(
x
,
y
)
↓
2
H
H
(
x
,
y
)
=
(
f
∗
ψ
d
)
(
x
,
y
)
↓
2
\\begin{cases} LL(x,y) = \\big(f * \\phi\\big)(x,y) \\downarrow 2 \\\\ LH(x,y) = \\big(f * \\psi^h\\big)(x,y) \\downarrow 2 \\\\ HL(x,y) = \\big(f * \\psi^v\\big)(x,y) \\downarrow 2 \\\\ HH(x,y) = \\big(f * \\psi^d\\big)(x,y) \\downarrow 2 \\end{cases}
⎩
⎨
⎧LL(x,y)=(f∗ϕ)(x,y)↓2LH(x,y)=(f∗ψh)(x,y)↓2HL(x,y)=(f∗ψv)(x,y)↓2HH(x,y)=(f∗ψd)(x,y)↓2
- (\\phi):二维尺度函数(低通)
- (\\psih,\\psiv,\\psi^d):水平、垂直、对角小波函数(高通)
- (*):卷积运算
- (\\downarrow 2):行列各 2 倍下采样
三、频带融合的数学规则
1. LL 低频融合(加权平均)
LL 代表图像轮廓与结构,采用加权线性融合:
L
L
F
(
i
,
j
)
=
α
⋅
L
L
A
(
i
,
j
)
+
(
1
−
α
)
⋅
L
L
B
(
i
,
j
)
LL_F(i,j) = \\alpha \\cdot LL_A(i,j) + (1-\\alpha)\\cdot LL_B(i,j)
LLF(i,j)=α⋅LLA(i,j)+(1−α)⋅LLB(i,j)
- (\\alpha\\in[0,1]):加权系数,通常取 (\\alpha=0.5)
2. LH / HL 边缘融合(绝对值取大)
LH、HL 对应水平、垂直边缘,采用系数绝对值最大准则:
L
H
F
(
i
,
j
)
=
{
L
H
A
(
i
,
j
)
,
∣
L
H
A
∣
>
∣
L
H
B
∣
L
H
B
(
i
,
j
)
,
else
LH_F(i,j)= \\begin{cases} LH_A(i,j),&|LH_A|>|LH_B|\\\\ LH_B(i,j),&\\text{else} \\end{cases}
LHF(i,j)={LHA(i,j),LHB(i,j),∣LHA∣>∣LHB∣else
H
L
F
(
i
,
j
)
=
{
H
L
A
(
i
,
j
)
,
∣
H
L
A
∣
>
∣
H
L
B
∣
H
L
B
(
i
,
j
)
,
else
HL_F(i,j)= \\begin{cases} HL_A(i,j),&|HL_A|>|HL_B|\\\\ HL_B(i,j),&\\text{else} \\end{cases}
HLF(i,j)={HLA(i,j),HLB(i,j),∣HLA∣>∣HLB∣else
3. HH 细节与噪声融合(取大+阈值)
HH 对应细节与噪声,采用绝对值取大+阈值去噪:
H
H
F
(
i
,
j
)
=
{
H
H
A
,
∣
H
H
A
∣
>
∣
H
H
B
∣
,
∣
H
H
A
∣
>
T
H
H
B
,
∣
H
H
B
∣
>
∣
H
H
A
∣
,
∣
H
H
B
∣
>
T
0
,
else
HH_F(i,j)= \\begin{cases} HH_A,&|HH_A|>|HH_B|,\\ |HH_A|>T\\\\ HH_B,&|HH_B|>|HH_A|,\\ |HH_B|>T\\\\ 0,&\\text{else} \\end{cases}
HHF(i,j)=⎩
⎨
⎧HHA,HHB,0,∣HHA∣>∣HHB∣, ∣HHA∣>T∣HHB∣>∣HHA∣, ∣HHB∣>Telse
- (T):噪声阈值
四、小波逆变换(重构数学原理)
由融合系数 (LL_F, LH_F, HL_F, HH_F) 重构图像:
f
F
(
x
,
y
)
=
W
−
1
{
L
L
F
,
L
H
F
,
H
L
F
,
H
H
F
}
f_F(x,y) = W^{-1}\\big\\{LL_F, LH_F, HL_F, HH_F\\big\\}
fF(x,y)=W−1{LLF,LHF,HLF,HHF} 其离散形式为:
f
F
(
x
,
y
)
=
∑
m
,
n
L
L
F
(
m
,
n
)
ϕ
(
x
−
2
m
)
ϕ
(
y
−
2
n
)
+
∑
m
,
n
L
H
F
(
m
,
n
)
ϕ
(
x
−
2
m
)
ψ
(
y
−
2
n
)
+
∑
m
,
n
H
L
F
(
m
,
n
)
ψ
(
x
−
2
m
)
ϕ
(
y
−
2
n
)
+
∑
m
,
n
H
H
F
(
m
,
n
)
ψ
(
x
−
2
m
)
ψ
(
y
−
2
n
)
\\begin{aligned} f_F(x,y) =& \\sum_{m,n} LL_F(m,n)\\phi(x-2m)\\phi(y-2n) \\\\ &+ \\sum_{m,n} LH_F(m,n)\\phi(x-2m)\\psi(y-2n) \\\\ &+ \\sum_{m,n} HL_F(m,n)\\psi(x-2m)\\phi(y-2n) \\\\ &+ \\sum_{m,n} HH_F(m,n)\\psi(x-2m)\\psi(y-2n) \\end{aligned}
fF(x,y)=m,n∑LLF(m,n)ϕ(x−2m)ϕ(y−2n)+m,n∑LHF(m,n)ϕ(x−2m)ψ(y−2n)+m,n∑HLF(m,n)ψ(x−2m)ϕ(y−2n)+m,n∑HHF(m,n)ψ(x−2m)ψ(y−2n)
import cv2
import pywt
import numpy as np
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False
# 读取图像
img = cv2.imread('cat.jpg')
if img is None:
raise ValueError("未找到cat.jpg!请确认路径正确")
img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
h, w = img.shape[:2]
mid = w // 2
# 生成高模糊图
img1 = img.copy()
img1[:, :mid] = cv2.GaussianBlur(img1[:, :mid], (35, 35), 15)
img2 = img.copy()
img2[:, mid:] = cv2.GaussianBlur(img2[:, mid:], (35, 35), 15)
# 转灰度
gray1 = cv2.cvtColor(img1, cv2.COLOR_RGB2GRAY)
gray2 = cv2.cvtColor(img2, cv2.COLOR_RGB2GRAY)
# 小波融合
def wavelet_fusion(im1, im2, wavelet='db2', level=1):
coeffs1 = pywt.wavedec2(im1, wavelet=wavelet, level=level)
coeffs2 = pywt.wavedec2(im2, wavelet=wavelet, level=level)
fused_coeffs = []
for c1, c2 in zip(coeffs1, coeffs2):
if isinstance(c1, np.ndarray):
fused = 0.5 * c1 + 0.5 * c2
fused_coeffs.append(fused)
else:
fused_sub = tuple(np.where(np.abs(x) > np.abs(y), x, y) for x, y in zip(c1, c2))
fused_coeffs.append(fused_sub)
fused_img = pywt.waverec2(fused_coeffs, wavelet=wavelet)
return np.clip(fused_img, 0, 255).astype(np.uint8)
# 执行融合
fused_gray = wavelet_fusion(gray1, gray2)
# 可视化
plt.figure(figsize=(20, 7))
plt.subplot(1, 3, 1)
plt.imshow(img1)
plt.title('左侧高模糊图', fontsize=16)
plt.axis('off')
plt.subplot(1, 3, 2)
plt.imshow(img2)
plt.title('右侧高模糊图', fontsize=16)
plt.axis('off')
plt.subplot(1, 3, 3)
plt.imshow(fused_gray, cmap='gray')
plt.title('小波融合后清晰图', fontsize=16)
plt.axis('off')
plt.tight_layout()
plt.show()

五、小波融合的数学意义
Ⅴ、小波图像压缩的数学原理与工程实现
小波图像压缩是基于“小波变换能量集中特性”的高效压缩方案,核心优势是:在大幅降低数据量的同时,最大限度保留图像核心视觉信息(远优于传统JPEG的DCT压缩),是医学影像、遥感图像、高清图像压缩的主流技术。
一、小波压缩的数学本质
图像经小波分解后,80%以上的能量集中在LL低频分量,LH/HL/HH高频分量仅包含边缘/细节/噪声,且大部分高频系数绝对值趋近于0。 小波压缩的本质是:
压缩
=
小波分解
+
高频系数阈值量化
+
稀疏编码
\\text{压缩} = \\text{小波分解} + \\text{高频系数阈值量化} + \\text{稀疏编码}
压缩=小波分解+高频系数阈值量化+稀疏编码
解压
=
稀疏解码
+
逆小波变换
\\text{解压} = \\text{稀疏解码} + \\text{逆小波变换}
解压=稀疏解码+逆小波变换
二、小波压缩的核心数学规则
设图像
f
(
x
,
y
)
f(x,y)
f(x,y) 经1级小波分解得到系数
{
L
L
,
L
H
,
H
L
,
H
H
}
\\{LL, LH, HL, HH\\}
{LL,LH,HL,HH},压缩流程的数学表达:
1. 系数阈值量化(核心步骤)
保留LL分量全部系数,对高频分量按阈值过滤:
L
H
Q
(
i
,
j
)
=
{
L
H
(
i
,
j
)
,
∣
L
H
(
i
,
j
)
∣
>
T
0
,
∣
L
H
(
i
,
j
)
∣
≤
T
LH_Q(i,j) = \\begin{cases} LH(i,j), & |LH(i,j)| > T \\\\ 0, & |LH(i,j)| \\leq T \\end{cases}
LHQ(i,j)={LH(i,j),0,∣LH(i,j)∣>T∣LH(i,j)∣≤T
H
L
Q
(
i
,
j
)
=
{
H
L
(
i
,
j
)
,
∣
H
L
(
i
,
j
)
∣
>
T
0
,
∣
H
L
(
i
,
j
)
∣
≤
T
HL_Q(i,j) = \\begin{cases} HL(i,j), & |HL(i,j)| > T \\\\ 0, & |HL(i,j)| \\leq T \\end{cases}
HLQ(i,j)={HL(i,j),0,∣HL(i,j)∣>T∣HL(i,j)∣≤T
H
H
Q
(
i
,
j
)
=
{
H
H
(
i
,
j
)
,
∣
H
H
(
i
,
j
)
∣
>
T
0
,
∣
H
H
(
i
,
j
)
∣
≤
T
HH_Q(i,j) = \\begin{cases} HH(i,j), & |HH(i,j)| > T \\\\ 0, & |HH(i,j)| \\leq T \\end{cases}
HHQ(i,j)={HH(i,j),0,∣HH(i,j)∣>T∣HH(i,j)∣≤T
-
T
T
T:压缩阈值(T
T
T 越大,压缩比越高,细节丢失越多) - 工程常用阈值:
T
=
k
⋅
mean
(
∣
L
H
∣
+
∣
H
L
∣
+
∣
H
H
∣
)
T = k \\cdot \\text{mean}(|LH|+|HL|+|HH|)
T=k⋅mean(∣LH∣+∣HL∣+∣HH∣)(k
k
k 取1~3)
2. 压缩比计算
压缩比
=
原始数据量
保留系数数量
\\text{压缩比} = \\frac{\\text{原始数据量}}{\\text{保留系数数量}}
压缩比=保留系数数量原始数据量
- 1级小波压缩:保留LL(1/4数据)+ 少量高频系数,压缩比可达4:1~10:1;
- 2级小波压缩:保留LL2(1/16数据),压缩比可达16:1~50:1。
三、小波压缩的工程流程
import cv2
import pywt
import numpy as np
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False
# 读取图像
img = cv2.imread('lenna.jpg', 0)
if img is None:
raise ValueError("未找到lenna.jpg!请确认图片路径正确")
# 计算原始数据量(字节)
h, w = img.shape
original_size = h * w * 1 # 灰度图1字节/像素
original_size_mb = original_size / 1024 / 1024 # 转换为MB
# 小波压缩核心函数
def wavelet_compress(img, wavelet='db2', level=1, k=2):
# 小波分解
coeffs = pywt.wavedec2(img, wavelet=wavelet, level=level)
LL, (LH, HL, HH) = coeffs
# 计算阈值
threshold = k * np.mean(np.abs(LH) + np.abs(HL) + np.abs(HH))
# 高频系数阈值量化
LH_q = np.where(np.abs(LH) > threshold, LH, 0)
HL_q = np.where(np.abs(HL) > threshold, HL, 0)
HH_q = np.where(np.abs(HH) > threshold, HH, 0)
# 计算压缩后非零系数数量 & 压缩后数据量(仅存储非零系数,模拟实际存储)
non_zero_LL = np.count_nonzero(LL)
non_zero_LH = np.count_nonzero(LH_q)
non_zero_HL = np.count_nonzero(HL_q)
non_zero_HH = np.count_nonzero(HH_q)
total_non_zero = non_zero_LL + non_zero_LH + non_zero_HL + non_zero_HH
compress_size = total_non_zero * 1 # 非零系数1字节/个
compress_size_mb = compress_size / 1024 / 1024
# 计算压缩比
compress_ratio = original_size / total_non_zero
# 逆变换解压
coeffs_q = (LL, (LH_q, HL_q, HH_q))
img_recon = pywt.waverec2(coeffs_q, wavelet=wavelet)
img_recon = np.clip(img_recon, 0, 255).astype(np.uint8)
return img_recon, compress_ratio, original_size_mb, compress_size_mb
# 执行压缩(k=2,压缩比约8:1)
img_recon, cr, ori_mb, com_mb = wavelet_compress(img, k=2)
# 打印数据对比
print(f"===== 小波压缩数据对比 =====")
print(f"原始图像数据量:{ori_mb:.4f} MB")
print(f"压缩后数据量:{com_mb:.4f} MB")
print(f"压缩比:{cr:.1f}:1")
print(f"数据量减少:{((ori_mb – com_mb)/ori_mb)*100:.1f}%")
# 可视化对比
plt.figure(figsize=(15, 7))
plt.subplot(1, 2, 1)
plt.imshow(img, cmap='gray')
plt.title(f'原始Lenna图({ori_mb:.4f} MB)', fontsize=14)
plt.axis('off')
plt.subplot(1, 2, 2)
plt.imshow(img_recon, cmap='gray')
plt.title(f'小波压缩后({com_mb:.4f} MB,压缩比{cr:.1f}:1)', fontsize=14)
plt.axis('off')
plt.tight_layout()
plt.show()

四、小波压缩的核心优势(对比JPEG)
五、典型应用场景
Ⅵ、总结
本文系统介绍了二维离散小波变换(2D‑DWT)的数学原理、分解结构、以及在图像融合与图像压缩中的典型应用。
L
L
LL
LL 与水平、垂直、对角高频分量
L
H
LH
LH、
H
L
HL
HL、
H
H
HH
HH,实现了图像信息的多尺度、分频带解析,为后续处理提供基础。
整体来看,小波变换具有多分辨率分析、局部化特性和完全重构能力,在图像特征提取、多源信息融合、数据压缩与传输等计算机视觉任务中结构清晰、效果稳定,是经典且实用的图像处理方法。
上一章
傅里叶变换:从空域到频域的图像分析【计算机视觉】https://blog.csdn.net/R_Feynman_/article/details/158626321?spm=1001.2014.3001.5502
下一章
图像去雾:从直方图增强到暗通道先验【计算机视觉】https://blog.csdn.net/R_Feynman_/article/details/158807328?spm=1001.2014.3001.5501


