第 1 章 绪论与数字图像基础
学习目标:建立对”数字图像”的完整认知——它是什么、如何产生、如何用数学描述、如何在计算机中存储与操作。 本章是后续所有章节的地基,概念密度大,请反复咀嚼。
1.1 从”光”到”像”:图像的物理来源
要理解数字图像,必须先理解图像是如何诞生的。图像的本质,是光能量在二维平面上的分布。
1.1.1 成像过程的完整链路
一幅相机拍摄的图像,物理链路如下:
① 光源 ——发出电磁波——> ②场景 照度 i(x, y) ③反射/透射 r(x, y) │ ▼ ④ 镜头(聚焦) │ ▼ ⑤ 传感器 (CCD/CMOS) 光 → 电荷 → 电压 │ ▼ ⑥ ADC 采样 + 量化 │ ▼ ⑦ 数字图像 f[m, n] 存入存储器其中:
- 照度 (Illumination) (i(x, y)):光源落在场景表面的功率密度,单位 lux。
- 反射率 (Reflectance) (r(x, y)):场景表面的属性,(r \in [0, 1])。
- 观测到的亮度: [ f(x, y) = i(x, y) \cdot r(x, y), \quad 0 < i(x, y) < \infty, \quad 0 < r(x, y) < 1 ]
这就是图像的加性/乘性模型最原始的形态。记住这个分解——第 9 章”同态滤波”的全部理论基础都在这里:
- (i) 随空间缓慢变化(低频) → 不均匀光照的元凶
- (r) 反映物体细节(高频) → 我们真正感兴趣的内容
取对数可以把乘法拆成加法: [ \ln f(x, y) = \ln i(x, y) + \ln r(x, y) ] 随后在频域分别压制 (\ln i) 的低频、提升 (\ln r) 的高频——这就是同态滤波。
1.1.2 为什么是”二维函数”?
一个真实三维场景要变成二维图像,必须经过投影(第 2 章详细讲)。简单的针孔模型:
世界点 P = (X, Y, Z) 像平面 (焦距 f) * \ \ ↓ \ <-- 光线 --> │ \ │ O(相机) x = f X / Z y = f Y / Z所以一旦成像,三维深度 (Z) 就被”除”掉了——这是”深度恢复”/3D 重建成为困难问题的根本原因。
1.1.3 图像的数学定义(完整版)
定义 1.1(图像):一幅图像是定义在二维有界区域 (\Omega \subset \mathbb{R}^2) 上的函数 [ f: \Omega \to \mathcal{V} ]
- 若 (\mathcal{V} = \mathbb{R}) 或 ([0, L-1]) → 灰度图
- 若 (\mathcal{V} = \mathbb{R}^3) (或 ([0, 255]^3)) → 彩色图
- 若 (\mathcal{V} = \mathbb{R}^n) → 多光谱 / 高光谱图
定义 1.2(数字图像):如果 (\Omega) 被离散化为有限网格 ({(m, n) : 0 \leq m < M, 0 \leq n < N}),并且 (\mathcal{V}) 取有限集合(如 ({0, 1, \ldots, 255})),那么称 (f) 为数字图像。
⚠️ 工程化理解:一幅 8-bit 的 1920×1080 照片,就是 1920×1080×3 个整数构成的大矩阵。所有算法的本质,都是对这些数的变换。
1.2 图像处理、计算机视觉、图形学的区别
初学者经常混淆这四个领域,这里彻底讲清:
| 领域 | 输入 | 输出 | 代表任务 |
|---|---|---|---|
| 数字图像处理 | 图像 | 图像 | 去噪、增强、压缩、复原 |
| 计算机视觉 | 图像 | 语义/几何信息 | 分类、检测、分割、3D 重建 |
| 计算机图形学 | 模型参数 | 图像 | 渲染、动画、光线追踪 |
| 模式识别 | 任何数据 | 类别 | 分类、聚类(CV 是其子集) |
直观记忆法:
- 图像处理 = “P 图软件”干的事(PS、美图)
- 计算机视觉 = “让机器看懂图”(人脸识别、自动驾驶)
- 计算机图形学 = “用数学画图”(3D 游戏、CG 电影)
1.2.1 图像处理的三个层次
低层处理 (Low-level):
- 输入:像素 → 输出:像素
- 不涉及语义
- 例:去噪、锐化、HDR、Gamma 校正
- 本课程 Ch 1~9 基本都在这个层次
中层处理 (Mid-level):
- 输入:像素 → 输出:描述子/区域
- 开始”提取信息”
- 例:边缘检测、分割、特征点检测
- 本课程 Ch 10~11
高层处理 (High-level):
- 输入:描述子 → 输出:语义/决策
- 接近人类认知
- 例:识别、理解、推理
- 本课程 Ch 12 + 计算机视觉进阶课程
1.3 数字图像处理的应用(展开详解)
1.3.1 医学成像
| 模态 | 原理 | 典型处理任务 |
|---|---|---|
| X-ray | 穿透吸收差异 | 增强对比度、骨折检测 |
| CT | 多角度 X-ray + 滤波反投影重建 | 3D 重建、器官分割 |
| MRI | 核磁共振 | 去噪、多序列配准 |
| 超声 | 回波 | 散斑噪声抑制、病灶跟踪 |
| 病理 (WSI) | 高倍显微切片 | 细胞计数、癌症筛查 |
医学图像的特点:16-bit 深度、低对比度、噪声复杂、数据珍贵。CLAHE、维纳滤波、U-Net 分割是这里的常客。
1.3.2 遥感卫星
- 多光谱(Landsat 7 波段、Sentinel-2 13 波段)
- 地物分类:城市/农田/水体/森林
- 变化检测:灾害评估、违建监测
- 超分重建:从低分辨率卫星图合成高分辨率
1.3.3 工业视觉
- 尺寸测量(微米级)
- 表面缺陷(划痕、气泡)
- 字符识别(LED 码、钢印)
- 机器人视觉引导
关键词:高速(ms 级)、稳定(ppm 误报率)、可解释。所以工业现场传统算法(形态学 + 阈值)仍大量使用。
1.3.4 消费电子
手机相机 ISP 流水线就是一个”行走的图像处理教科书”:
RAW Bayer → 去马赛克 → 白平衡 → 去噪 → Gamma → HDR 融合 → 锐化 → JPEG每一步都对应本课程某一章。现代手机的”夜景模式”、“人像模式”、“4K 视频降噪”都是多帧融合 + 深度学习 + 传统图像处理的混合系统。
1.3.5 自动驾驶、安防、娱乐
- 车道线 (Ch 10 Hough)
- 行人检测 (Ch 11 HOG + Ch 12 YOLO)
- 人脸识别 (Ch 12)
- AR 贴纸、换脸、美颜(基于关键点 + 仿射 + GAN)
1.4 数字图像处理系统的组成
一个完整的数字图像处理系统包含以下六个部分,缺一不可:
┌─────────┐ ┌─────────┐ ┌─────────┐ ┌─────────┐ ┌─────────┐ │ ① 图像 │→│ ② 数字化 │→│ ③ 存储 │→│ ④ 处理 │→│ ⑤ 显示 │ │ 获取 │ │ A/D 转换│ │ 内存/硬盘│ │ CPU/GPU │ │ 显示器 │ └─────────┘ └─────────┘ └─────────┘ └─────────┘ └─────────┘ ▲ │ │ ┌───────────────────────┘ │ ▼ │ ┌─────────┐ └────────│ ⑥ 通信 │(网络/总线) └─────────┘1.4.1 图像获取 (Acquisition)
光电传感器把光子转为电荷,再转为电压。主要有两种:
CCD (Charge-Coupled Device)
- 每个像素电荷一行一行串行读出
- 读出过程中”传递”电荷(Charge-Coupled)
- 优点:噪声低、一致性好、动态范围大
- 缺点:功耗高、成本高、速度慢
- 应用:天文、科学级相机、早期数码相机
CMOS (Complementary Metal-Oxide-Semiconductor)
- 每个像素独立包含放大器,可随机寻址并行读出
- 优点:速度快、功耗低、与数字电路工艺兼容
- 缺点:早期噪声大、一致性差(现已通过背照式 BSI、堆叠式解决)
- 现代主流:从手机到单反全部采用
1.4.2 采样与量化 (A/D)
见第 2 章详述。核心思想:
- 空间采样:决定分辨率(多少像素)
- 幅度量化:决定位深(每像素多少 bit)
1.4.3 存储
单幅图像存储空间: [ \text{字节数} = M \times N \times c \times \frac{k}{8} ] 其中 (M\times N) 为分辨率,(c) 为通道数,(k) 为每通道位深。
数值实例:
- 4K RGB 8-bit 单帧:(3840 \times 2160 \times 3 \times 1 \approx 23.7) MB
- 4K HDR 10-bit:× 10/8 ≈ 30 MB
- 4K 60fps 1 分钟 RAW:30 MB × 60 × 60 ≈ 108 GB
所以视频压缩 (Ch 8) 才如此重要——不压缩根本存不下。
1.4.4 处理
- CPU:通用、串行、缓存局部性重要
- GPU:SIMD 并行,适合卷积、FFT、CNN
- NPU/DSP:手机 ISP,专用电路
- FPGA:低延迟、工业线扫
1.4.5 显示
- CRT(已淘汰):Gamma ≈ 2.2,这是为什么 sRGB 标准仍沿用这个值
- LCD/OLED:线性响应,但为兼容历史文件仍在输入端做 Gamma 校正
1.5 人类视觉系统 (HVS) 基础
很多图像处理算法设计直接模仿人眼特性。不理解 HVS,就无法理解为什么某些算法”看起来好”。
1.5.1 眼球结构简图
巩膜 ┌─────────┐角膜 → │ 晶状体 │ → 视网膜 (Retina) │ (透镜)│ │ └─────────┘ ▼ 感光细胞层 ┌──────────┐ │ 视锥+视杆 │ └────┬─────┘ ▼ 神经节细胞 │ ▼ 视神经 → 大脑视觉皮层关键参数:
| 结构 | 参数 | 工程启示 |
|---|---|---|
| 晶状体焦距 | 约 17 mm | 类比相机焦距 |
| 瞳孔直径 | 2~8 mm | 动态光圈 |
| 视网膜像素 | 约 1.26 亿感光细胞 | 相当于 126 MP 传感器 |
| 中央凹 (Fovea) | 直径 1.5 mm,视锥密度峰值 | 解释为什么”盯着看”最清晰 |
| 最小可分角 | 约 1/60 度(1 arcmin) | 视力 1.0 的定义 |
1.5.2 视锥与视杆
| 细胞 | 数量 | 功能 | 敏感度 |
|---|---|---|---|
| 视锥 Cones | 600~700 万 | 彩色、强光视觉 | 中等 |
| 视杆 Rods | 7500 万~1.5 亿 | 亮度、弱光视觉 | 极高 |
视锥有三种(L/M/S 分别对红/绿/蓝敏感)——这是三色理论、RGB 显示器、拜耳阵列的生物学基础。
1.5.3 亮度适应与韦伯定律
人眼能感知的亮度范围约 (10^{-6}) 到 (10^4) cd/m²,跨度 (10^{10})。但同一时刻只能分辨其中约 2 个数量级——这叫亮度适应 (Brightness Adaptation)。
韦伯定律 (Weber’s Law):在某一亮度 (I) 下能察觉的最小亮度差 (\Delta I): [ \frac{\Delta I}{I} \approx \text{const} ]
推论:如果把亮度 (I) 表示为 (y = \log I),则人眼感知 (\Delta y = \Delta I / I) 变为常数——即人眼的亮度感知近似对数响应。
工程后果:
- 显示器要做 Gamma 编码,让编码空间近似感知均匀
- 对数变换 (s = c\log(1 + r)) 能压缩动态范围、让暗部细节可见(Ch 3)
- JPEG 中色度量化表设计也考虑了这种非线性敏感度(Ch 8)
1.5.4 同时对比与马赫带
同时对比 (Simultaneous Contrast):同样的灰度块在不同背景下看起来亮度不同。
┌──────┬──────┐│ 黑 │ 白 ││ [灰] │ [灰] │ 中间两个灰色方块完全相同!│ │ │ 但在黑背景上显得更亮└──────┴──────┘马赫带 (Mach Bands):在灰度阶梯过渡处,人眼会看到边缘过冲——在深色区边缘显得更暗、在浅色区边缘显得更亮。
原理:视网膜神经节细胞有中心-周边拮抗感受野,相当于一个拉普拉斯滤波器。
- 中心兴奋 + 周边抑制 = 负二阶导 = 高通 / 边缘增强
这是人眼天然的边缘检测机制,直接启发了:
- 拉普拉斯算子(Ch 3)
- LoG/DoG(Ch 3、11 SIFT)
- CNN 早期层学到的边缘检测核
1.5.5 空间频率敏感度 (CSF)
人眼对不同空间频率的敏感度不同,呈带通特性:
- 太低频(大片纯色)→ 不敏感
- 中频(约 3-8 周/度)→ 最敏感
- 太高频(密集细节)→ 不敏感
这是 JPEG 量化表”中低频细、高频粗”设计的生理依据。
1.6 电磁波谱与图像获取
人眼只能看到可见光(380~780 nm),但图像处理不限于可见光。
1.6.1 全电磁波谱
波长 10⁻¹⁴m ... 10⁻¹⁰m ... 10⁻⁷m ... 10⁻³m ... 10⁰m γ射线 X射线 紫外 可见光 红外 微波 无线电能量大 ────>──── 能量小频率高 频率低可见光七色波长(记住更好): [ \text{紫}(380\text{ nm}) \to \text{蓝}(450) \to \text{青}(500) \to \text{绿}(550) \to \text{黄}(580) \to \text{橙}(600) \to \text{红}(750) ]
1.6.2 不同谱段的成像特色
| 谱段 | 波长 | 典型应用 | 代表处理 |
|---|---|---|---|
| γ 射线 | <0.01 nm | 正电子发射 (PET) | 低剂量去噪 |
| X 射线 | 0.01-10 nm | 医学透视、CT | 重建、增强 |
| 紫外 | 10-400 nm | 显微荧光、验钞 | 伪彩色 |
| 可见光 | 400-700 nm | 日常成像 | 全套算法 |
| 近红外 (NIR) | 0.7-1.4 μm | 植被监测 (NDVI)、夜视 | 多光谱融合 |
| 热红外 | 8-14 μm | 热成像枪、红外夜视 | 对比拉伸 |
| 微波 | mm-m | SAR 雷达(全天候) | 去斑、配准 |
| 无线电 | >1 m | MRI、射电望远镜 | 反投影重建 |
1.6.3 除电磁波外的成像方式
- 超声:机械波,医学/工业无损检测
- 电子显微镜:电子束,原子级分辨率
- 原子力显微镜 (AFM):机械探针扫描
- 深度相机:结构光(Kinect)、ToF(iPhone LiDAR)
处理流程和算法大同小异——所以学好”数字图像处理”,在各种模态都能迁移。
1.7 数字图像的数学表示
1.7.1 矩阵表示
一幅 (M \times N) 的灰度图像是一个矩阵: [ f = \begin{bmatrix} f(0,0) & f(0,1) & \cdots & f(0, N-1) \ f(1,0) & f(1,1) & \cdots & f(1, N-1) \ \vdots & \vdots & \ddots & \vdots \ f(M-1,0) & f(M-1,1) & \cdots & f(M-1, N-1) \end{bmatrix} ]
- (M):高度(行数,通常对应 y 轴)
- (N):宽度(列数,通常对应 x 轴)
1.7.2 坐标系混乱——新手第一大坑
冈萨雷斯教材:(f(x, y)),(x) 是行索引(向下),(y) 是列索引(向右)
y → ┌─────── x │f(0,0) f(0,1) ... ↓ │f(1,0) f(1,1) ... │ .OpenCV / NumPy:img[row, col],与教材一致
img[2, 5] # 第 2 行、第 5 列img.shape # (H, W, C)但 OpenCV 的绘制函数 却用 (x, y) 其中 (x) 是列、(y) 是行!
cv2.circle(img, (x=col, y=row), radius, color)cv2.line(img, pt1=(x1, y1), pt2=(x2, y2), color)记忆法:
- 存储/索引:
[row, col](行在前) - 绘制/画:
(x, y)(横在前,与数学直角坐标系一致)
踩过一次坑就不会忘。
1.7.3 位深度与存储
位深度 (Bit Depth) (k):每个像素用多少 bit 表示 → 灰度级 (L = 2^k)。
| 位深 | 灰度级 | 应用 |
|---|---|---|
| 1 bit | 2 级 | 传真、扫描文档 |
| 8 bit | 256 级 | 消费照片(最常见) |
| 10 bit | 1024 级 | HDR 电视、广色域视频 |
| 12 bit | 4096 级 | RAW 相机 |
| 16 bit | 65536 级 | 医学影像 (DICOM)、科研、专业后期 |
| 32-bit float | 连续 | 中间计算、HDR 渲染 |
为什么需要高位深?
- 避免伪轮廓(Ch 2 详细说)
- 后期调整空间大(暗部拉亮不露马脚)
- 医学诊断需要微弱对比度差异
1.7.4 通道数
| 类型 | 通道 | 位深 | 总 bit |
|---|---|---|---|
| 二值图 | 1 | 1 | 1 |
| 灰度图 | 1 | 8 | 8 |
| RGB | 3 | 8 | 24 |
| RGBA | 4 | 8 | 32 |
| 高光谱 | n=16~200+ | 8~16 | 极大 |
| 深度图 | 1 | 16 float | 16 |
实战注意:OpenCV 默认读入的是 BGR 而不是 RGB!matplotlib 是 RGB,所以
plt.imshow(cv2.imread(p))会看到颜色错乱。正确做法:img = cv2.imread(p)plt.imshow(cv2.cvtColor(img, cv2.COLOR_BGR2RGB))
1.8 像素间的基本关系(重点)
这一节是后续所有邻域运算、形态学、连通域分析的基础。
1.8.1 邻域 (Neighborhood)
对位于 ((x, y)) 的像素 (p),定义:
4-邻域 (N_4(p)):上下左右 4 个像素 [ N_4(p) = {(x-1, y), (x+1, y), (x, y-1), (x, y+1)} ]
对角邻域 (N_D(p)):4 个对角像素 [ N_D(p) = {(x-1, y-1), (x-1, y+1), (x+1, y-1), (x+1, y+1)} ]
8-邻域 (N_8(p) = N_4(p) \cup N_D(p)):周围 8 个像素
图示:
N_D N_4 N_D ● ● ● N_4 (p) N_4 即 ● p ● N_D N_4 N_D ● ● ●1.8.2 连通性 (Connectivity)
给定像素值集合 (V)(比如 (V = {1}) 表示”前景”):
- 4-连通:(p, q) 值都在 (V) 中,且 (q \in N_4(p))
- 8-连通:(p, q) 值都在 (V) 中,且 (q \in N_8(p))
- m-连通(混合连通):(p, q) 值都在 (V) 中,且满足以下条件之一:
- (q \in N_4(p))
- (q \in N_D(p)) 且 (N_4(p) \cap N_4(q) \cap V = \varnothing)
为什么需要 m-连通?
看这个例子(1 表示前景):
0 1 1 0 1 0 如果用 8-连通... 1 1 0中心像素到右上 1、右上 1 到中心,有两条”路径”——环路歧义,在边界跟踪时会无限循环。
m-连通规定”若对角相邻,则其共同 4-邻域内不能有前景”,强制路径唯一。
数值示例:
p: (0, 0) = 1 q: (1, 1) = 1 查 N_4(p) ∩ N_4(q) ∩ V: N_4(p) = {(-1,0), (1,0), (0,-1), (0,1)} N_4(q) = {(0,1), (2,1), (1,0), (1,2)} 公共邻居 = {(1,0), (0,1)} 若这两个位置有一个 = 1,则 p, q 不 m-连通1.8.3 路径与连通分量
- 路径:从 (p) 到 (q) 的像素序列 (p = p_0, p_1, \ldots, p_n = q),每个相邻对都连通
- 连通分量 (Connected Component):彼此连通的前景像素构成的极大集合
OpenCV:
num_labels, labels = cv2.connectedComponents(binary_img)# num_labels: 分量个数(含背景 0)# labels: 与原图同尺寸,每像素标注所属分量编号1.8.4 距离度量 (Distance Metrics)
对两像素 (p = (x_1, y_1)) 和 (q = (x_2, y_2)):
欧氏距离 (D_e): [ D_e(p, q) = \sqrt{(x_1 - x_2)^2 + (y_1 - y_2)^2} ]
- 等距面:圆
- 物理上最准确
- 缺点:有开方,计算贵
曼哈顿/城市街区距离 (D_4): [ D_4(p, q) = |x_1 - x_2| + |y_1 - y_2| ]
- 等距面:45° 旋转的正方形(菱形)
- 对应 4-连通路径长度
棋盘距离 (D_8): [ D_8(p, q) = \max(|x_1 - x_2|, |y_1 - y_2|) ]
- 等距面:正方形
- 对应 8-连通路径长度
Chamfer 距离:(D_4) 和 (D_8) 的加权组合(3-4 或 5-7-11),近似 (D_e),有 (O(N)) 快速算法。
距离图示(从中心 (\bullet) 出发 (D=2) 的等距面):
D_e = 2 D_4 = 2 D_8 = 2 ● ● ●●●●● ●●● ●●● ● ● ●●●●● ●●●●● ● ● ●●● ●●● ● ● ● ● ●●●●● 圆 菱形 正方形距离变换(DT):对二值图,给每个前景像素计算其到最近背景像素的距离,结果称为距离图,Ch 9 会用到。
1.9 基本像素运算(概览)
1.9.1 算术运算
对两幅同尺寸图像: [ g(x,y) = f_1(x,y) \pm f_2(x,y) ]
加法:
- 多帧平均降噪:(\bar{f} = \frac{1}{N}\sum_{k=1}^{N} f_k),噪声方差降为原来的 (1/N)(信噪比提升 (\sqrt{N}))
- HDR 合成
减法:
- 背景减除:(g = f - f_{\text{bg}}) 用于运动检测、CT 造影剂显示
- 时间差分:视频中检测变化
⚠️ 8-bit 整数运算会溢出:
200 + 100 = 300超 255。OpenCV 默认做饱和截断(Saturation),即 255。必须时用cv2.addWeighted或转 float。
乘法:
- 掩膜 (Masking):(g = f \cdot m),(m \in {0, 1}) 取出 ROI
- Alpha 混合:(g = \alpha f_1 + (1-\alpha) f_2)
除法:
- 阴影消除:(g = f / f_{\text{flat}})(平场校正)
- 荧光成像比值
1.9.2 逻辑运算(只对二值图)
- AND:两图都为 1 → 1(求交集 / ROI 裁剪)
- OR:任一为 1 → 1(合并)
- NOT:1↔0(反相 / 取补)
- XOR:不同则 1(差异检测)
1.9.3 单点灰度变换
[ s = T(r) ] 完整讨论见第 3 章。
1.9.4 邻域运算
[ g(x, y) = T[f(S_{xy})] ] 其中 (S_{xy}) 是以 ((x, y)) 为中心的邻域。这是滤波的统一形式,第 3 章详细展开。
1.9.5 几何变换
[ (x’, y’) = T(x, y) ] 平移、旋转、缩放、仿射、透视——第 2 章详细推导。
1.10 一个例子:从零实现 读图→灰度→统计
为了把本章所有概念串起来,我们手动走一遍最简单的流程:
import cv2import numpy as np
# 1) 读取一幅 RGB 图(实际 OpenCV 返回 BGR)img = cv2.imread('lena.png') # shape=(H, W, 3), dtype=uint8print('shape:', img.shape, 'dtype:', img.dtype)
# 2) 转灰度:按 ITU-R BT.601 加权(模拟人眼对绿敏感)# Y = 0.299*R + 0.587*G + 0.114*Bgray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
# 3) 基本统计print('min =', gray.min(), 'max =', gray.max())print('mean =', gray.mean(), 'std =', gray.std())
# 4) 直方图(手动实现)hist = np.zeros(256, dtype=np.int32)for v in gray.flatten(): hist[v] += 1# 或 NumPy 一行:hist, _ = np.histogram(gray, bins=256, range=(0, 256))
# 5) 取中间 100x100 子图H, W = gray.shapecx, cy = W // 2, H // 2roi = gray[cy-50:cy+50, cx-50:cx+50]
# 6) 在原图上画一个红色矩形(注意 BGR 和坐标)out = img.copy()cv2.rectangle(out, (cx-50, cy-50), (cx+50, cy+50), (0, 0, 255), 2)
# 7) 保存cv2.imwrite('out.png', out)消化这段代码(手动跑一遍!),本章 90% 内容就通了。
1.11 本章公式/概念速查表
| 概念 | 定义/公式 |
|---|---|
| 图像模型 | (f(x, y) = i(x, y) \cdot r(x, y)) |
| 像素坐标(教材) | (f(x, y)),(x)=行、(y)=列 |
| 像素坐标(OpenCV 绘制) | (col, row) = (x, y) |
| 存储空间 | (\text{Bytes} = MNc k / 8) |
| 灰度级 | (L = 2^k) |
| 韦伯定律 | (\Delta I / I \approx c) |
| 4-邻域 | ({(x\pm1, y), (x, y\pm1)}) |
| 8-邻域 | 4-邻域 ∪ 对角邻域 |
| (D_e) | (\sqrt{\Delta x^2 + \Delta y^2}) |
| (D_4) | ( |
| (D_8) | (\max( |
| BGR↔RGB | cv2.cvtColor(img, cv2.COLOR_BGR2RGB) |
1.12 本章要点与面试考点
✅ 必须掌握
- 图像的物理产生链路 + (f = i \cdot r) 分解
- 图像处理、CV、CG、PR 的区别
- 低/中/高层处理划分
- 人眼视锥/视杆分布与三色理论
- 韦伯定律 → 对数变换 / Gamma 设计的生理依据
- 马赫带 → 边缘增强的生理依据
- 存储空间计算 (M \times N \times c \times k/8)
- 4/8/m-邻域及为什么需要 m-连通
- 三种距离度量的等距面形状
💡 高频面试题(附完整答案)
Q1. 为什么要使用 m-连通?
答:8-连通中对角相邻的像素可能产生多条路径,在边界跟踪、连通域标记时形成环路歧义。m-连通通过附加限制”对角邻居的共同 4-邻域内不得有目标像素”,消除重复路径,使任意两连通点间的路径唯一。这是边界跟踪、Freeman 链码算法正确工作的前提。
Q2. 8-bit 图像做均值滤波为何要转 float 中间计算?
答:假设 3×3 均值,累加 9 个像素,若直接 uint8 累加,最大 255×9 = 2295,超出 255 会发生溢出/截断。解法:
- 累加前
.astype(np.float32),最后再.astype(np.uint8) - 或
cv2.blur/cv2.filter2D内部已处理
Q3. 为什么人眼对数响应,这对图像编码有什么意义?
答:韦伯定律 (\Delta I / I \approx \text{const}),即亮度的”感知增量”与绝对亮度成反比。因此 (y = \log I) 近似均匀感知。
- 若直接用 8 bit 线性存储亮度 → 暗部细节不足、亮部过剩
- Gamma 编码 (y = x^{1/2.2}) 近似对数曲线,让 8 bit 更贴合人眼:暗部精度高,亮部粗
- 这是 sRGB、JPEG、PNG 默认做 Gamma 编码的原因
Q4. RGB 转灰度的权重为什么是 0.299/0.587/0.114?
答:基于 ITU-R BT.601 标准,考虑人眼视锥对不同波长的敏感度——绿色占主导(~59%),红色次之(~30%),蓝色最低(~11%)。现代 BT.709(HDTV)权重略有调整:0.2126/0.7152/0.0722。
Q5. 一张 4096×3072 的 12-bit 彩色 RAW 图多大?
答:(4096 \times 3072 \times 3 \times 12 / 8 = 56{,}623{,}104) 字节 ≈ 54 MB。注意:
- 若是 Bayer RAW,只有 1 个采样/像素 → 1/3 大小
- 很多厂商用 16-bit 容器存 12-bit 数据,实际占用会更大
Q6. CCD 与 CMOS 的核心差异?为什么手机都用 CMOS?
答:
- CCD:电荷行间传递、串行输出 → 噪声低但速度慢、功耗高
- CMOS:每像素独立放大 + 随机寻址 → 速度快、功耗低、与数字电路工艺兼容
- 手机需要高帧率视频、低功耗、小型化 → CMOS 是唯一选择。早期 CMOS 噪声大,现代通过 BSI(背照式)、堆叠式、像素合并已基本追平 CCD。
1.13 延伸阅读
- 主教材:Gonzalez & Woods, Digital Image Processing (4th), Ch 1-2
- 生物学基础:D. H. Hubel, Eye, Brain, and Vision(视觉皮层的神经基础)
- ISP 流程:Brown, Image Understanding for iPhone Photography 报告
- 在线:HarvardX “Fundamentals of Neuroscience” 视觉部分
- 论文:Mannos & Sakrison, “The effects of a visual fidelity criterion on the encoding of images”, IEEE Trans. IT, 1974(CSF 的经典)
学完本章,建议打开一张自己拍的照片,用 Python 手动完成:读入→查看 shape/dtype→转灰度→画直方图→算 (M\times N\times k/8) 对比文件大小,把所有数字都对上。只有亲手摸过数据,概念才真正成为你的。
如果這篇文章對你有幫助,歡迎分享給更多人!
部分資訊可能已經過時





















