mobile wallpaper 1mobile wallpaper 2mobile wallpaper 3mobile wallpaper 4mobile wallpaper 5mobile wallpaper 6mobile wallpaper 7mobile wallpaper 8mobile wallpaper 9mobile wallpaper 10mobile wallpaper 11mobile wallpaper 12mobile wallpaper 13
6921 字
21 分鐘
空间域图像增强
2026-04-27

第 3 章 空间域图像增强#

学习目标:掌握”直接在像素空间操作像素/邻域”的所有经典算法。 本章是图像处理教材的”核心应用第一章”,公式密集但直觉清晰——每种技术都对应一个具体的工程问题。


3.1 什么是”空间域”增强?#

3.1.1 术语辨析:增强 vs 复原#

初学者很容易混淆这两个词:

概念目标依据本章讲对应章节
增强 (Enhancement)让图像看起来更好主观视觉、经验第 3、4 章
复原 (Restoration)让图像还原为未退化的样子客观模型(PSF、噪声)第 5 章

简记

  • 增强 = 美图秀秀(“好看就行”)
  • 复原 = 刑侦降噪(“必须是真实的样子”)

增强的评判标准是主观感受——因此同一张图不同场景下”最好的”增强方法可能不同。

3.1.2 空间域的数学定义#

定义 3.1(空间域处理):设输入图像 (f(x, y)),处理算子 (T[\cdot]),输出 [ g(x, y) = T[f(x, y)] ] 则称 (T) 为空间域算子,如果:

  • (T) 的输出 (g(x, y)) 仅依赖于 (f) 在点 ((x, y)) 或其某个邻域 (S_{xy}) 内的像素值。

由邻域大小分类:

邻域类型(S_{xy})名称
单点({(x, y)})点变换 / 灰度映射
小窗(m \times n) 邻域邻域运算 / 空间滤波
全图整幅图全局变换(如 HE)
点变换: 邻域运算:
┌───┬───┬───┐
(x, y) │ │ │ │
│ ├───┼───┼───┤
T[·] │ │★ │ │ ← 中心像素
│ ├───┼───┼───┤
▼ │ │ │ │
g(x, y) └───┴───┴───┘
T[整个窗口]

3.1.3 空间域 vs 频率域:地位的等价性#

卷积定理(第 4 章详证)保证:任何线性空间邻域运算都可以等价地在频率域用乘法实现: [ g = f * h \quad \Longleftrightarrow \quad G(u,v) = F(u,v) \cdot H(u,v) ]

因此,理论上空间域能做的滤波,频域都能做。选择依据只剩工程层面:

场景首选原因
核小(≤ 7×7)空间域缓存友好、常数小
核大(≥ 31×31)频率域FFT 的 (O(N \log N)) 碾压 (O(N k^2))
非线性操作(中值、双边)空间域频域无定义
设计带阻/陷波频率域在频域”画一笔”即可

记住:空间域直观、频率域优雅。本章学前者,第 4 章学后者,它们是同一枚硬币的两面


3.2 基本灰度变换(点变换)#

3.2.1 通式#

定义 3.2(灰度变换 / LUT):无邻域信息的点变换可写为 [ s = T(r), \quad r \in [0, L-1], ; s \in [0, L-1] ] 其中 (r) 是输入灰度,(s) 是输出灰度,(T) 是单调(通常)函数。

工程实现诀窍:把 (T) 预先算成长度 256 的查找表(LUT),然后对整幅图做数组下标取值——这比逐像素算函数快 10-100 倍。

# 把 T 离散化成 LUT,一次性完成
table = np.array([T(r) for r in range(256)], dtype=np.uint8)
out = table[img] # numpy 高级索引,向量化
# 或等价的:cv2.LUT(img, table)

3.2.2 图像反转 (Negative)#

[ s = L - 1 - r ]

几何含义:(T) 是一条从 ((0, L-1)) 到 ((L-1, 0)) 的直线,经过对角线反射。

应用场景

  • 医学 X 光片:骨骼吸收多 → 胶片亮 → 背景黑;医生习惯看”黑色骨骼白色背景”,反转后更符合直觉。
  • 夜间摄影反相:凸显暗部细节。
原图: 0 █████░░░ 255 反转: 0 ░░░█████ 255
暗 → 亮 亮 ← 暗

3.2.3 对数变换#

[ s = c \cdot \log(1 + r), \quad c = \frac{L - 1}{\log L} ]

加 1 防止 (\log 0)。(c) 的取值使得 (r = L-1) 时 (s = L-1),恰好填满动态范围。

关键性质(必考)

  • (r) 小时,(\log) 曲线斜率大 → 暗部被拉伸
  • (r) 大时,斜率小 → 亮部被压缩

物理根源(与第 1 章呼应)

  • 韦伯定律:人眼对亮度的感知接近对数
  • 自然图像的动态范围往往 (10^4) 以上(太阳 vs 阴影),直接显示会丢失大量细节
  • 对数变换 ≈ 模拟人眼响应

经典应用——傅里叶频谱可视化: [ F(u, v) \in [10^{-6}, 10^{8}] \xrightarrow{\log} \log(1 + |F|) \in [0, 20] ] 不做 log,直接 imshow(|F|) 只看到中心一个亮点,其他全黑。这就是为什么第 4 章画频谱永远要先 np.log1p

3.2.4 幂律变换(Gamma 校正)#

[ s = c \cdot r^\gamma ]

单参数 (\gamma):

(\gamma)效果典型值
(\gamma < 1)拉伸暗部,压缩亮部(类似 log)0.4(LCD 补偿)
(\gamma = 1)无变化(直线)-
(\gamma > 1)拉伸亮部,压缩暗部2.2(CRT 物理特性)

Gamma 的历史渊源(重要!)#

CRT 显示器的发光亮度与输入电压的关系近似为: [ L_{\text{display}} = V_{\text{input}}^{2.2} ]

如果图像像素值线性地作为 (V),那么显示出来的亮度 (L) 会比真实场景偏暗。为了补偿,图像在存储时就做 (\gamma = 1/2.2 \approx 0.45) 的反向预处理: [ V_{\text{store}} = L_{\text{scene}}^{1/2.2} ]

sRGB 色彩空间就标准化了这套流程。因此:

  • 你看到的 uint8 像素值不是线性光强度,而是 gamma 编码后的值
  • 做任何线性计算(合成、HDR、去噪)前,要先”解码”:(L = V^{2.2})
  • 最后显示前再编码回去

⚠️ 这是图像处理中最大的坑之一。很多算法在 uint8 空间直接平均是错的,在 linear float 空间平均才对。

应用:暗图提亮#

# 原图偏暗,用 γ=0.5 提亮
gamma = 0.5
lut = np.array([((i / 255.0) ** gamma) * 255 for i in range(256)], np.uint8)
bright = cv2.LUT(img, lut)

3.2.5 分段线性变换#

单个幂律或对数都是”全局”变换,有时我们只想操作某段。

对比度拉伸 (Contrast Stretching)#

[ s = \begin{cases} \alpha r & 0 \le r < r_1 \ \beta (r - r_1) + s_1 & r_1 \le r < r_2 \ \gamma (r - r_2) + s_2 & r_2 \le r \le L - 1 \end{cases} ]

常用三段折线把 ([r_1, r_2]) 的窄动态范围拉伸到 ([0, L-1]),两侧压扁。

s ▲
L-1 ┤ ╱
│ ╱
│ ╱ ← 陡峭中段:强对比度
│ ╱
│ ╱
0 ┤─┘ ┌──────────→ r
r1 r2

极端情形:令 (r_1 = r_2 = T),(\alpha = 0, \gamma = 0, \beta = \infty),退化为阈值化(第 10 章 Otsu)。

灰度切割 (Gray-Level Slicing)#

只保留某个灰度区间,其他置 0(或保持原值): [ s = \begin{cases} L-1 & r \in [A, B] \ 0 & \text{otherwise} \end{cases} ] 用于突出特定对象(如 CT 中某密度的组织)。

位平面切片 (Bit-Plane Slicing)#

将 8-bit 图拆成 8 张二值图,第 (k) 位图: [ b_k(x, y) = \lfloor f(x, y) / 2^k \rfloor \mod 2 ]

观察(非常重要):

  • 高位 (b7, b6):图像的主体结构
  • 低位 (b0, b1):几乎是随机噪声

启示

  1. 图像压缩只存高 4-5 位损失很小
  2. 隐写术 (Steganography) 把秘密信息藏在 b0 里,肉眼看不出
  3. 数字水印、指纹

3.3 直方图处理(本章重点,面试高频)#

3.3.1 直方图的严格定义#

定义 3.3(离散直方图):对 (L) 级灰度图 (f),直方图是函数 [ h: {0, 1, \ldots, L-1} \to \mathbb{N}, \quad h(r_k) = #{(x, y) : f(x, y) = r_k} ]

归一化直方图(概率密度估计): [ p(r_k) = \frac{h(r_k)}{MN}, \quad \sum_k p(r_k) = 1 ]

解释:(p(r_k)) 是”随机选一个像素,其灰度等于 (r_k)“的概率。

3.3.2 从直方图判读图像#

直方图形态图像特点
集中在低灰度偏暗(欠曝)
集中在高灰度偏亮(过曝)
集中在中间窄区低对比度(雾天、阴影)
均匀分布高对比度,细节丰富
双峰前景 + 背景分明 → 适合阈值分割
偏暗: 偏亮: 低对比度: 高对比度:
█ █ █ █
█ █ █ █ █
██ ██ ████ █
███ █ ██ ████ █ █
█████ ██████ █████ █
──────→ ──────→ ──────→ ──────→
0 255 0 255 0 255 0 255

3.3.3 直方图均衡化(HE)——理论推导#

这是本章最重要的算法,必须会从头推导。

步骤 1:连续形式#

假设灰度 (r) 是连续随机变量,概率密度 (p_r(r)),变换 (s = T(r)) 为单调可微函数。

目标:让输出 (s) 服从均匀分布: [ p_s(s) = \frac{1}{L-1}, \quad s \in [0, L-1] ]

由概率密度的变换公式(雅可比): [ p_s(s) = p_r(r) \left| \frac{dr}{ds} \right| ]

设 [ s = T(r) = (L-1) \int_0^r p_r(w) , dw \equiv (L-1) \cdot F_r(r) ] (即 (r) 的累积分布函数 CDF 乘以 (L-1))

求导: [ \frac{ds}{dr} = (L-1) \cdot p_r(r) ]

代入: [ p_s(s) = p_r(r) \cdot \frac{1}{(L-1) p_r(r)} = \frac{1}{L-1} ]

结论:只要 (T) 取成累积分布函数,输出就一定是均匀分布!

步骤 2:离散形式#

[ s_k = T(r_k) = (L-1) \sum_{j=0}^{k} p_r(r_j) = \frac{L-1}{MN} \sum_{j=0}^{k} n_j ] 然后取整: [ s_k \leftarrow \text{round}(s_k) ]

注意:离散 HE 不能得到严格均匀直方图,只是近似。原因是取整合并了某些灰度级。

步骤 3:伪代码#

输入:图像 f,大小 MN
1. 计算 h[0..255] (直方图)
2. 计算 CDF: C[k] = C[k-1] + h[k]
3. 归一化: s[k] = round((L-1) * C[k] / MN)
4. 输出: g(x, y) = s[ f(x, y) ]
import numpy as np
def my_equalize(img, L=256):
h, _ = np.histogram(img.ravel(), L, (0, L))
cdf = h.cumsum()
cdf_min = cdf[cdf > 0].min()
# 关键:减 cdf_min,使得最小值映射到 0
s = np.round((cdf - cdf_min) / (img.size - cdf_min) * (L - 1)).astype(np.uint8)
return s[img]

HE 的几何直觉#

一句话记忆“把 CDF 当作映射函数”

  • 原图 CDF 中”陡峭”的部分 → 对应直方图高峰 → 被拉伸
  • 原图 CDF 中”平坦”的部分 → 对应直方图低谷 → 被压缩

效果是把直方图**“摊平”**。

HE 的局限性#

HE 是全局的操作。问题:

  1. 会放大噪声:平坦区域(如墙面)被不必要地拉伸
  2. 会丢失局部细节:一张有亮天空 + 暗地面的图,HE 倾向于妥协
  3. 伪轮廓:离散取整合并灰度级

3.3.4 CLAHE:限制对比度自适应直方图均衡#

为解决全局 HE 的局限,Zuiderveld 1994 提出 CLAHE:

核心思想

  1. 分块:把图分成 (M \times N) 个小区域(tile,如 8×8)
  2. 每块独立 HE
  3. 限幅 (Clip Limit):每块直方图中超过阈值的频次被”削掉”,均匀分给其他 bin
  4. 双线性插值:像素位置处于几个 tile 之间时,用插值平滑,避免 tile 边界的块状伪影

限幅的意义

  • 若某 bin 的高度远超阈值,说明这里有大块平坦区,做 HE 会放大这里的噪声
  • 限幅 = 抑制噪声放大 + 仍保留对比度增强
clahe = cv2.createCLAHE(clipLimit=2.0, tileGridSize=(8, 8))
result = clahe.apply(gray)

参数经验

参数作用建议
clipLimit噪声抑制强度2-4(越大增强越强)
tileGridSize局部区域大小8×8(随图大小调整)

CLAHE 在医学成像、低光照相机预处理中几乎是默认选择

3.3.5 直方图匹配(规定化)#

有时我们不想要”均匀”,而想让输出图具有指定的直方图形状 (p_z(z))(来自参考图像)。

推导(利用 HE 的双向性)

  1. 对输入做 HE:(s = T(r))
  2. 对参考做 HE:(v = G(z))
  3. 由于两者 HE 后都是均匀分布,可以匹配:(s \approx v)
  4. 因此 (z = G^{-1}(s) = G^{-1}(T(r)))

伪代码

1. 对 src 计算 CDF_s
2. 对 ref 计算 CDF_r
3. 对每个 r,找最接近的 z 使 CDF_r(z) ≈ CDF_s(r)
4. 建立 LUT: r → z

应用

  • 多模态医学图像归一化(不同设备亮度分布统一)
  • 风格迁移的预处理(把夕阳照片的亮度分布迁移到白天照片)
  • 卫星影像时序一致性

3.4 空间滤波的基础理论#

3.4.1 核心概念:邻域、核、模板#

邻域 (S_{xy}):以 ((x, y)) 为中心的一个小窗口。 核 / 掩模 / 模板 (Kernel / Mask):附着在邻域上的权重矩阵 (w(s, t))。

3.4.2 相关 vs 卷积(必须搞清楚)#

这是图像处理的地基性定义,很多人搞混。

相关 (Correlation):核”直接”扫过图像 [ (w \star f)(x, y) = \sum_{s=-a}^{a} \sum_{t=-b}^{b} w(s, t) \cdot f(x+s, y+t) ]

卷积 (Convolution):核先**翻转 180°**再扫 [ (w * f)(x, y) = \sum_{s=-a}^{a} \sum_{t=-b}^{b} w(s, t) \cdot f(x-s, y-t) ]

相关:w 直接"贴"上去 卷积:w 先反射再"贴"
核 w: 反射核 w':
1 2 3 9 8 7
4 5 6 6 5 4
7 8 9 3 2 1

几何对称的核(如均值、高斯、拉普拉斯)下,相关 = 卷积。非对称(如 Sobel)下,两者差一个翻转。

为什么信号处理教材偏爱卷积?#

因为卷积满足以下良好性质(相关则不满足):

性质卷积相关
交换律✅ (f * g = g * f)
结合律
分配律
与 FT 对应✅ (f * g \leftrightarrow F \cdot G)部分

因此教材公式写卷积,但工程实现用相关(OpenCV filter2D 其实是相关)——对称核下结果一致,非对称核需要事先翻转。

LSI 系统(线性移不变系统)#

定义 3.4:若算子 (H) 同时满足

  • 线性:(H[\alpha f_1 + \beta f_2] = \alpha H[f_1] + \beta H[f_2])
  • 移不变:(H[f(x - x_0, y - y_0)] = g(x - x_0, y - y_0))

则称 (H) 为 LSI 系统。

重要定理:任何 LSI 系统 都等价于与某个固定核做卷积。这是整个”滤波”理论的根基。

3.4.3 边界处理(工程必知)#

当核中心靠近图像边界时,邻域”伸出”图像,需要虚构边界外的值。OpenCV 边界类型:

标志效果图示 (原始 abcd)
BORDER_CONSTANT填指定值(默认 0)0000|abcd|0000
BORDER_REPLICATE复制边缘aaaa|abcd|dddd
BORDER_REFLECT反射(不含边缘)dcba|abcd|dcba
BORDER_REFLECT_101反射(含边缘)默认dcb|abcd|cba
BORDER_WRAP循环abcd|abcd|abcd

经验选择

  • 一般滤波:REFLECT_101(最平滑)
  • 卷积神经网络:CONSTANT(0)(简单,配合 padding)
  • DFT 计算:CONSTANT(0)WRAP(对应循环卷积)

3.5 平滑(低通)滤波#

目标:减少灰度剧烈变化,也就是抑制高频。用途:

  1. 去噪
  2. 减小细节(模糊背景、美化肤色)
  3. 作为其他算法的预处理(如 Canny、SIFT、特征匹配)

3.5.1 均值滤波(Box / Moving Average)#

定义#

核: [ w = \frac{1}{mn} \begin{bmatrix} 1 & 1 & \cdots & 1 \ \vdots & & & \vdots \ 1 & 1 & \cdots & 1 \end{bmatrix}_{m \times n} ]

数学推断:为什么能去噪?#

假设观测 (f(x, y) = s(x, y) + \eta(x, y)),(\eta) 是零均值独立噪声,方差 (\sigma^2)。

对 (m \times n) 邻域求平均: [ \bar{f} = \bar{s} + \bar{\eta} ]

由于独立:(\text{Var}(\bar{\eta}) = \sigma^2 / (mn))。

结论:噪声标准差降低为原来的 (1 / \sqrt{mn})。核越大去噪越狠,但同时也模糊了信号,这就是”去噪-保边”的根本矛盾。

缺点#

  • 边缘(信号的高频成分)同样模糊,造成”糊边
  • 核呈矩形→ 频域为 sinc → 通带外有旁瓣 → 产生”箱效应”

工程加速:积分图#

均值滤波可以用积分图 (Summed Area Table) 做 (O(1)) 每像素:

S(x, y) = f(x, y) + S(x-1, y) + S(x, y-1) - S(x-1, y-1)
区域和 = S(x2,y2) - S(x1-1,y2) - S(x2,y1-1) + S(x1-1,y1-1)

3.5.2 高斯滤波(最常用平滑)#

定义#

[ G_\sigma(x, y) = \frac{1}{2\pi \sigma^2} \exp\left( -\frac{x^2 + y^2}{2 \sigma^2} \right) ]

核心参数 (\sigma)(标准差):

  • (\sigma) 小 → 核窄 → 轻微模糊
  • (\sigma) 大 → 核宽 → 重度模糊

核尺寸经验公式:(k = \lceil 6\sigma + 1 \rceil)(奇数),即取到 (3\sigma) 处(覆盖 99.7% 能量)。

高斯的三大优良性质#

性质 1:可分离性

[ G_\sigma(x, y) = G_\sigma(x) \cdot G_\sigma(y) ]

即二维高斯 = 两个一维高斯的乘积。这意味着 (k \times k) 卷积可以拆成两次 (k) 点一维卷积:

实现复杂度
直接二维卷积(O(k^2)) 每像素
先行后列可分离(O(2k)) 每像素

(k=25) 时加速 12 倍以上。OpenCV 内部自动分离。

性质 2:时频同形

高斯函数的傅里叶变换仍然是高斯: [ \mathcal{F}{G_\sigma} = G_{1/\sigma} ]

  • 空间上窄 (\Leftrightarrow) 频率上宽
  • 不产生振铃(Gibbs)——无旁瓣

这使高斯成为最优 LSI 低通(在时频同时最紧)。

性质 3:中心极限定理

多次卷积趋近高斯:任意核 (h) 自我卷积 (h * h * \cdots * h) (n 次),(n \to \infty) 时趋近高斯分布。

工程含义:多次均值滤波可以近似高斯滤波。

实现要点#

# 方式 1:推荐
blur = cv2.GaussianBlur(img, (0, 0), sigma) # k=0 表示按 σ 自动算
# 方式 2:手动指定 k
blur = cv2.GaussianBlur(img, (5, 5), 1.0)

金科玉律:指定 (\sigma) 比指定核大小更重要。

3.5.3 中值滤波(非线性)#

定义#

[ g(x, y) = \text{median}{f(s, t) : (s, t) \in S_{xy}} ]

非线性:不能写成 (g = w * f)。

为什么对椒盐噪声有效?#

  • 椒盐噪声 = 孤立极值(0 或 255)
  • 邻域 (n) 像素中,少数几个异常值一定排在排序的极端
  • 中值取中间 → 异常值被”投票丢弃”
  • 边缘像素仍是多数,因此边缘保留较好

均值 vs 中值的对比#

特征均值中值
数学类型线性非线性
对高斯噪声最优(MMSE)可用但不如均值
对椒盐噪声❌ 扩散脉冲✅ 强鲁棒
边缘保留❌ 糊边✅ 好
可分离
复杂度可 (O(1))每点排序 (O(k \log k))

高级变体#

  • 加权中值滤波:对邻域位置加权(离中心远的权重小)
  • 自适应中值滤波:窗口自动扩大直到能找到非极值,极端椒盐(>50%)下仍有效
  • Vector Median (VMF):用于彩色图,避免”新颜色”

3.5.4 双边滤波(保边滤波的经典)#

动机#

高斯滤波只看空间距离,把边缘两侧的像素一起平均 → 糊边。 双边滤波同时考虑空间距离灰度差异:只平均灰度相近的邻居 → 保边去噪。

公式#

[ g(x, y) = \frac{1}{W(x,y)} \sum_{(s,t) \in S} f(s, t) \cdot G_{\sigma_s}(|(x,y) - (s,t)|) \cdot G_{\sigma_r}(|f(x,y) - f(s,t)|) ]

其中 (W) 是归一化因子: [ W(x, y) = \sum_{(s,t) \in S} G_{\sigma_s}(\cdots) \cdot G_{\sigma_r}(\cdots) ]

分解理解

  • (G_{\sigma_s}):空间高斯(离中心越远权重越小)
  • (G_{\sigma_r}):灰度高斯(灰度差越大权重越小)
  • 两者相乘 → 既近又相似的邻居才参与平均

参数直觉#

参数含义效果
d邻域直径(或 (\sigma_s) 推算)大 → 平滑范围大
sigmaColor ((\sigma_r))灰度差容忍度大 → 接近高斯平滑(失去保边)
sigmaSpace ((\sigma_s))空间衰减速度同上

经典选择(8-bit 图):

  • 磨皮美颜:d=9, sigmaColor=50, sigmaSpace=50
  • 轻度去噪:d=5, sigmaColor=20, sigmaSpace=5

复杂度问题#

原始实现 (O(k^2)) 每像素,不可分离(因为 (G_r) 依赖于中心像素)。

加速算法

  • Bilateral Grid (Paris 2006)
  • Permutohedral Lattice
  • Guided Filter (He 2010):线性时间,效果接近,常被替代

3.5.5 非局部均值 (NLM)#

思想:不只看邻域,而看全图中相似的 patch

[ g(x) = \sum_{y \in \text{Image}} w(x, y) f(y), \quad w(x, y) \propto \exp\left( -\frac{|P(x) - P(y)|^2}{h^2} \right) ]

(P(x)) 是以 (x) 为中心的小 patch(如 7×7)。

直觉:在自然图像中,同一内容(如墙面纹理)会在不同位置重复出现。平均这些重复的 patch 能极大程度去噪而保持结构。

缺点:原始 (O(N^2)) 很慢,OpenCV fastNlMeansDenoising 做了加速(但还是几种方法中最慢的)。

BM3D 是 NLM 的升级版:对相似 patch 堆叠做 3D 变换 + 协同滤波,是非深度方法中的SOTA

3.5.6 平滑方法对比表#

方法类型高斯椒盐保边速度复杂度
均值线性极快(O(1))*
高斯线性✅✅(O(k))
中值非线性✅✅(O(k\log k))
双边非线性(O(k^2))
NLM非线性✅✅极慢(O(N \cdot P))

* 积分图加速


3.6 锐化(高通)滤波#

目标:突出灰度剧变(边缘、细节)。基于微分

3.6.1 从微分到差分#

连续函数的微分: [ \frac{\partial f}{\partial x} = \lim_{\Delta x \to 0} \frac{f(x + \Delta x) - f(x)}{\Delta x} ]

离散图像只能用差分。有三种方案:

差分公式精度
前向(f(x+1) - f(x))1 阶
后向(f(x) - f(x-1))1 阶
中心(\frac{f(x+1) - f(x-1)}{2})2 阶

实际用中心差分,精度高且对称。

3.6.2 一阶微分算子#

梯度向量#

图像梯度: [ \nabla f = \begin{bmatrix} g_x \ g_y \end{bmatrix} = \begin{bmatrix} \partial f / \partial x \ \partial f / \partial y \end{bmatrix} ]

幅值 (magnitude): [ M(x, y) = |\nabla f| = \sqrt{g_x^2 + g_y^2} ]

方向 (angle): [ \theta(x, y) = \arctan(g_y / g_x) ]

梯度的几何意义

  • 幅值 → 边缘强度
  • 方向 → 边缘法线(垂直于边缘

Roberts 交叉梯度#

[ g_x = \begin{bmatrix} 1 & 0 \ 0 & -1 \end{bmatrix}, \quad g_y = \begin{bmatrix} 0 & 1 \ -1 & 0 \end{bmatrix} ]

2×2、对角差分。缺点:对噪声敏感、没有对称中心。已被淘汰。

Prewitt 算子(3×3)#

[ g_x = \begin{bmatrix} -1 & 0 & 1 \ -1 & 0 & 1 \ -1 & 0 & 1 \end{bmatrix}, \quad g_y = \begin{bmatrix} -1 & -1 & -1 \ 0 & 0 & 0 \ 1 & 1 & 1 \end{bmatrix} ]

每一行”平均”三行后求差分 → 自带平滑,比 Roberts 抗噪。

Sobel 算子(最常用)#

[ g_x = \begin{bmatrix} -1 & 0 & 1 \ -2 & 0 & 2 \ -1 & 0 & 1 \end{bmatrix}, \quad g_y = \begin{bmatrix} -1 & -2 & -1 \ 0 & 0 & 0 \ 1 & 2 & 1 \end{bmatrix} ]

Prewitt 的基础上给中央行加权 2 → 更强的平滑。 Sobel 是所有经典算子中平滑与定位平衡最好的。

Sobel 核的分解(再次体现可分离): [ g_x = \begin{bmatrix} 1 \ 2 \ 1 \end{bmatrix} \otimes \begin{bmatrix} -1 & 0 & 1 \end{bmatrix} ] 第一项是平滑(高斯近似),第二项是差分。

Scharr 算子#

[ g_x = \begin{bmatrix} -3 & 0 & 3 \ -10 & 0 & 10 \ -3 & 0 & 3 \end{bmatrix} ]

相比 Sobel 更强调中心行,有更好的旋转不变性(各向同性更接近理想)。

3.6.3 二阶微分:拉普拉斯算子#

定义#

[ \nabla^2 f = \frac{\partial^2 f}{\partial x^2} + \frac{\partial^2 f}{\partial y^2} ]

二阶差分: [ \frac{\partial^2 f}{\partial x^2} \approx f(x+1, y) - 2 f(x, y) + f(x-1, y) ]

两方向相加: [ \nabla^2 f \approx f(x+1,y) + f(x-1,y) + f(x,y+1) + f(x,y-1) - 4f(x,y) ]

核(4-邻域): [ L_4 = \begin{bmatrix} 0 & 1 & 0 \ 1 & -4 & 1 \ 0 & 1 & 0 \end{bmatrix} ]

8-邻域版本加上对角: [ L_8 = \begin{bmatrix} 1 & 1 & 1 \ 1 & -8 & 1 \ 1 & 1 & 1 \end{bmatrix} ]

性质#

  1. 各向同性(旋转不变,(L_8) 更接近理想)
  2. 中心权重为负(其他行权重之和 = 中心绝对值)→ 直流(DC)响应为 0,对平坦区无响应
  3. 边缘处正负过零点 (zero-crossing) → 标记边缘位置
灰度跃变: 一阶导: 二阶导:
___ ___ ▲
___ ▲ │ ▲
___ │ │ │
───── ─────
▼ 过零点!

3.6.4 锐化的核心思想#

原理:原图 + 适当比例的边缘图 → 锐化图。

拉普拉斯锐化#

[ g(x, y) = f(x, y) - c \cdot \nabla^2 f(x, y) ]

为什么是减号? 因为拉普拉斯核中心为负 ((-4) 或 (-8)),公式等价于 [ g = f + c |\nabla^2 f| ] 直觉:在边缘处(二阶导绝对值大)增强原像素。

非锐化掩蔽 Unsharp Masking(专业后期锐化)#

流程

f ── 高斯模糊 ──> f_blur
└──── 减 ──> mask = f - f_blur (高频信息)
│ × k
f ──── 加 ──> g = f + k × mask

公式: [ g = f + k \cdot (f - \text{Blur}(f)) ]

参数 k

  • (k = 1):标准 Unsharp
  • (k > 1):High-Boost 滤波(强锐化)
  • (k < 0):变为平滑(极端情况)

为什么 Unsharp Masking 比拉普拉斯好?

  • (\sigma) 可调 → 可控”锐化尺度”(只锐化大尺度边缘还是细节)
  • 可选用双边代替高斯 → 锐化细节但不放大噪声(人像修图常用)

经典商用锐化参数(Photoshop 风格)#

参数作用典型值
Amount(k)50-200%
Radius(\sigma)1-3
Threshold屏蔽小幅差异0-20

3.6.5 梯度与二阶微分的对比#

特征梯度 (一阶)拉普拉斯 (二阶)
响应”台阶状边缘”厚线(峰)过零点(薄线)
响应”缓坡”持续响应起止点响应
对噪声较鲁棒极敏感(需先平滑 → LoG)
方向信息✅((\theta))
用途Canny、特征检测斑点检测、锐化

3.7 高阶算法:结合应用流水线#

3.7.1 经典图像增强流水线#

原图
├─ Step 1: Gamma 校正 (压缩动态范围)
├─ Step 2: CLAHE (局部对比度)
├─ Step 3: 双边/NLM (保边去噪)
├─ Step 4: Unsharp Mask (锐化细节)
└─ Step 5: 可选 sRGB → Linear 再处理
输出

3.7.2 工业例子:手机 HDR#

步骤:

  1. 捕获多曝光(-2EV, 0, +2EV)
  2. 对齐 (光流/特征)
  3. 融合:Mertens 曝光融合(多分辨率金字塔,第 7 章)
  4. 色调映射 (Tone Mapping):log/gamma
  5. 局部对比度:CLAHE
  6. 去噪:NLM / BM3D
  7. 锐化:Unsharp Mask
  8. sRGB 编码

3.8 本章要点与面试考点#

✅ 必须掌握#

  • 点变换通式 (s = T(r)),LUT 工程实现
  • Gamma、对数变换的公式与曲线形状
  • 直方图均衡化 完整推导(从 CDF 到离散实现)
  • CLAHE 的两个关键词:分块 + 限幅
  • 均值/高斯/中值/双边的公式、直觉、适用噪声、复杂度
  • 高斯的三大性质:可分离、时频同形、中心极限
  • Sobel / Laplacian 模板与符号
  • Unsharp Masking 公式

💡 高频面试题#

Q1. 推导直方图均衡化的变换函数。

要点:设 (s = T(r)),要求 (p_s) 均匀 → 由 (p_s = p_r / |ds/dr|) → (T(r) = (L-1) \int_0^r p_r dw) = CDF × (L-1)。

Q2. 均值滤波为什么会糊边?

答:边缘处像素灰度发生突变,均值把两侧灰度拉向中值 → 边界两侧的对比度被削弱。可以从频域理解:均值核 FT 为 sinc,对高频(边缘)抑制不充分,但仍降低其幅度。

Q3. 如何选择 Gaussian σ?

答:(\sigma) 决定”模糊尺度”,经验公式 (k = 6\sigma + 1) 覆盖 99.7% 能量。工程中:

  • 去中等噪声 σ=1
  • Canny 预处理 σ=1-2
  • 磨皮 σ=3-5

Q4. 给定含椒盐噪声的图,用哪种滤波?

答:中值滤波。均值/高斯会把脉冲”扩散”成 smooth 斑点;中值取排序中点,极值自动被抛弃。如果椒盐比例很高(>30%),用自适应中值

Q5. 双边滤波为什么能保边?

答:相比高斯,多了一项灰度差高斯。当邻域像素灰度与中心差异大(即穿过边缘),权重急剧下降 → 只平均边缘同一侧的像素,边缘不被跨越平均。

Q6. Unsharp Masking 与拉普拉斯锐化的差别?

答:

  • 拉普拉斯:直接用二阶导;对噪声极敏感,且尺度固定(3×3)
  • Unsharp:用 Gaussian Blur 的差;可通过 σ 控制”锐化尺度”,可用双边抑噪 → 工程首选

Q7. HE 为什么在某些图上效果很差?

答:HE 是全局操作。当图中存在明显光照差异(如半边阳光半边阴影)时,HE 用统一 CDF 无法兼顾;过度拉伸平坦区域会放大噪声。→ 换 CLAHE 解决。

Q8. 高斯核为什么被广泛使用?

三大原因:

  1. 可分离 → 实现快
  2. 傅里叶对偶为高斯 → 无振铃,时频紧
  3. 中心极限定理 → 多次其他低通的极限都趋近高斯,所以它是”最自然”的低通

3.9 延伸阅读#

  • Gonzalez, Digital Image Processing (4th ed.), Ch. 3(空间域全章)
  • Szeliski, Computer Vision (2nd ed.), §3.1-3.3
  • Burger & Burge, Principles of Digital Image Processing: Fundamentals, Ch. 4-5
  • Pratt, Digital Image Processing, Ch. 9
  • Paris & Durand, “A Fast Approximation of the Bilateral Filter”(2006,SIGGRAPH)
  • Zuiderveld, “Contrast Limited Adaptive Histogram Equalization”(1994,Graphic Gems IV)

下一章:把所有空间域滤波”搬到”频率域去,看它们换了一种面貌会多么优雅——那就是卷积定理的威力。

分享

如果這篇文章對你有幫助,歡迎分享給更多人!

空间域图像增强
https://lemusakuya.com/posts/study-notes/digital-image-processing/03_空间域图像增强/
作者
レム・咲く夜
發布於
2026-04-27
許可協議
CC BY-NC-SA 4.0

部分資訊可能已經過時

目錄