数字图像基础
从光的形成到像素矩阵 · 取样量化、分辨率、内插、邻域邻接连通性与 D4/D8/Dm 距离度量。
🎯学习目标
- 理解数字图像的定义、形成模型(照度×反射)与表示方法;
- 掌握图像取样与量化的概念,以及空间分辨率、灰度分辨率;
- 理解图像内插(最近邻、双线性)及其应用;
- 掌握像素间的邻域(4/D/8)、邻接(4/8/m)、通路、连通、区域与边界;
- 熟练计算欧氏距离、D4(城市街区)、D8(棋盘)距离;
- 理解直方图、概率统计量(均值、方差)等数学工具。
1什么是数字图像
图像可定义为一个二维函数 $f(x,y)$,其中 $x, y$ 是空间平面坐标,在任一坐标处的幅值 $f$ 称为图像在该点的强度或灰度。
- 单色(灰度)图像:每个像素亮度用一个数值表示,通常 0~255,0 为黑、255 为白,中间为灰度。
- 彩色图像:用红、绿、蓝三元组的二维矩阵表示,每个分量也在 0~255 之间,0 表示该基色不存在,255 表示取最大值。
- 像素的二维排列可用矩阵表示。
数字图像就是一张"数字表格"
想象一个 Excel 表格:
- 每个格子存一个数字(0-255)
- 0 = 黑色,255 = 白色,中间 = 灰色
- 这个表格就是"灰度图像"
彩色图像就是三个这样的表格叠在一起:
- 一个存红色(R)
- 一个存绿色(G)
- 一个存蓝色(B)
比如一张 100×100 的彩色图片 = 3 × 100 × 100 = 30000 个数字
数字图像处理的起源与应用
| 方向 | 典型任务 |
|---|---|
| 人类分析(增强/复原) | 图像传输后复原、空间应用增强、医学图像;增强或复原模糊/损毁的图像 |
| 机器感知 | OCR 字符识别、人脸识别、指纹/生物特征识别 |
| 最新领域 | 数码相机/摄像机、基于内容的图像/视频检索、水印、电影特技、VR、文生图、文生视频 |
把图像想象成乐高积木:
- 每个积木块 = 一个像素
- 积木块的颜色 = 像素的灰度值
- 积木块越多 = 图像越清晰
分辨率就是"有多少个积木块":
- 100×100 = 1万个像素(很模糊)
- 1920×1080 ≈ 200万个像素(高清)
- 4K = 约800万个像素(超清)
为什么灰度是 0-255?
- 计算机用 8 位二进制存储
- 8 位能表示 2^8 = 256 个数(0 到 255)
- 0 = 最暗(纯黑),255 = 最亮(纯白)
彩色图像的存储:
- 每个像素需要 3 个数字(R, G, B)
- 每个分量都是 0-255
- 所以一个像素 = 3 字节
- 一张 1920×1080 彩色图 = 1920 × 1080 × 3 ≈ 6MB
核心意思:
数字图像就是一张"数字表格",每个格子存一个数字,代表这个位置有多亮。
举个例子:
一张 4×4 的灰度图像就是这样一个表格:
列0 列1 列2 列3
行0 100 120 130 110
行1 115 125 135 120
行2 130 140 150 140
行3 125 135 145 135
每个数字代表这个位置的亮度:
- 0 = 纯黑
- 255 = 纯白
- 中间的数字 = 不同程度的灰色
彩色图像就是三个这样的表格叠在一起:
- 一个存红色(R)
- 一个存绿色(G)
- 一个存蓝色(B)
比如像素 (0,0) 的颜色是 (200, 100, 50):
- 红色分量 = 200(比较红)
- 绿色分量 = 100(有点绿)
- 蓝色分量 = 50(不太蓝)
- 合起来 = 橙色
生活类比:
就像乐高积木,每个积木块就是一个像素,积木块的颜色就是像素的灰度值,积木块越多,图像越清晰。
为什么这样设计:
因为计算机用 8 位二进制存储,8 位能表示 2^8 = 256 个数(0 到 255),这样存储最高效。
2简单的图像形成模型
坐标处的幅值满足 $0 < f(x,y) < \infty$,可由两个分量表征:
$$f(x,y) = i(x,y) \cdot r(x,y)$$
$$i(x,y) \text{ —— 入射分量(光源照射到场景的总量)}, \quad 0 < i(x,y) < \infty$$
$$r(x,y) \text{ —— 反射分量(物体反射光的总量)}, \quad 0 < r(x,y) < 1$$
单色图像在 $(x_0, y_0)$ 处的强度 $l = f(x_0, y_0)$,且 $L_{\min} \leq l \leq L_{\max}$。区间 $[L_{\min}, L_{\max}]$ 称为灰度级,通常移位为 $[0, L-1]$:$l=0$ 为黑色,$l=L-1$ 为白色。
图像 = 灯光 × 物体反射
为什么同一张照片里:
- 白墙看起来亮?→ 反射率高(r 大)
- 黑衣服看起来暗?→ 反射率低(r 小)
- 阴影处暗?→ 灯光弱(i 小)
公式 f = i × r 就是说:
亮度 = 有多少光照过来 × 物体反射多少光
相机拍照的物理过程:
- 光源发出光(太阳、灯)
- 光照到物体上
- 物体反射一部分光
- 反射的光进入相机
- 相机记录下来 = 照片
公式 f = i × r 的实际意义:
场景1:白天拍白墙
- i(阳光)= 100(很强)
- r(白墙反射)= 0.9(反射90%)
- f = 100 × 0.9 = 90(很亮)
场景2:白天拍黑衣服
- i(阳光)= 100(很强)
- r(黑衣服反射)= 0.1(反射10%)
- f = 100 × 0.1 = 10(很暗)
场景3:晚上拍白墙
- i(月光)= 10(很弱)
- r(白墙反射)= 0.9(反射90%)
- f = 10 × 0.9 = 9(比较暗)
所以:照片亮度 = 光源强度 × 物体反射率
核心意思:
图像的亮度 = 有多少光照过来 × 物体反射多少光
举个例子:
拍一张照片,里面有白墙、黑衣服、阴影:
位置 光源强度(i) 反射率(r) 亮度(f=i×r)
白墙阳光 100 0.9 90(很亮)
黑衣服 100 0.1 10(很暗)
阴影白墙 30 0.9 27(较暗)
所以:
- 白墙亮是因为反射率高(r=0.9)
- 黑衣服暗是因为反射率低(r=0.1)
- 阴影暗是因为光照弱(i=30)
生活类比:
就像你用手电筒照不同颜色的纸:白纸反射大部分光 → 看起来亮;黑纸吸收大部分光 → 看起来暗;同一张纸,手电筒越亮,纸看起来越亮。
为什么这样设计:
因为很多图像处理算法都需要分离"光照"和"反射"这两个因素,比如图像增强、去阴影等。
3图像取样与量化 ⭐
把传感器获取的连续图像变成数字图像,需要两个离散化过程:
取样 Sampling
对坐标值 (x,y) 进行离散数字化 —— 把 xy 平面分成网格。
量化 Quantization
对幅值 f 进行离散数字化 —— 把灰度分成有限级。
数字图像的表示
表示为 $M \times N$ 的数字阵列,每个元素是一个像素。出于存储与硬件考虑,灰度级数通常取 2 的整数次幂:
$$\text{灰度区间 } [0, L-1], \quad L = 2^k \quad (k \text{ 为量化比特数})$$
$$\text{存储所需比特数 } b = M \times N \times k$$
取样 = 拍照,量化 = 四舍五入
取样就像用手机拍照:
- 连续的现实世界 → 变成一个个像素点
- 就像把一幅画分成很多小格子
量化就像给每个格子打分:
- 从 0(纯黑)到 255(纯白)
- 只能用整数,不能用 0.5 这种
- 就像考试成绩只有整数分
为什么用 2 的幂(256=28)?
- 计算机用二进制,2 的幂最方便存储
取样(Sampling)= 决定"拍多少个点"
- 就像决定用多少个格子覆盖画面
- 格子越多 = 分辨率越高 = 图像越清晰
- 格子越少 = 分辨率越低 = 图像越模糊
量化(Quantization)= 决定"每个点用多少级灰度"
- 就像决定用多少个灰度等级
- 256级(8位)= 灰度变化很平滑
- 2级(1位)= 只有纯黑和纯白(黑白图)
举例:
- 取样:把图像分成 100×100 的网格
- 量化:每个格子用 0-255 的数字表示亮度
常见误区:
- 取样不是"裁剪",是"网格化"
- 量化不是"四舍五入",是"分级"
为什么用 2 的幂?
- 计算机用二进制
- 8位 = 256级,16位 = 65536级
- 这样存储和计算最高效
核心意思:
取样 = 决定"拍多少个点",量化 = 决定"每个点用多少级灰度"
举个例子:
把一个连续的图像变成数字图像,需要两步:
第一步:取样(网格化)
把图像分成 4×4 的网格:
原始连续图像 → 16 个采样点
第二步:量化(分级)
每个采样点用 0-255 的数字表示亮度:
采样点(0,0) → 亮度 100
采样点(0,1) → 亮度 120
...
对比:
取样率 量化级数 效果
100×100 256级 小图,灰度平滑
100×100 2级 小图,黑白分明
1000×1000 256级 大图,灰度平滑
1000×1000 2级 大图,黑白分明
生活类比:
取样就像用手机拍照,决定用多少像素;量化就像给照片打分,决定用多少个等级。
为什么这样设计:
因为计算机用二进制,8 位 = 256 级,16 位 = 65536 级,这样存储和计算最高效。
4空间分辨率与灰度分辨率
| 类型 | 含义 | 度量 |
|---|---|---|
| 空间分辨率 | 图像中可分辨的最小细节 | 单位距离的线对数 / 像素数(如 dpi 每英寸点数:1250/300/150/72 dpi) |
| 灰度分辨率 | 灰度级中可分辨的最小变化 | 量化灰度所用比特数(如 8/12/16 bit) |
核心意思:
空间分辨率 = 图像有多少个像素点,灰度分辨率 = 每个像素点用多少级灰度
举个例子:
两幅图像对比:
图像A:100×100像素,256级灰度
- 总像素:10,000个
- 灰度范围:0-255
- 效果:小图,灰度平滑
图像B:1000×1000像素,2级灰度
- 总像素:1,000,000个
- 灰度范围:只有0和255
- 效果:大图,但只有黑白两色
图像C:1000×1000像素,256级灰度
- 总像素:1,000,000个
- 灰度范围:0-255
- 效果:大图,灰度平滑(最佳)
存储计算:
- 图像A:100×100×8位 = 80,000位 = 10KB
- 图像B:1000×1000×1位 = 1,000,000位 = 125KB
- 图像C:1000×1000×8位 = 8,000,000位 = 1MB
生活类比:
- 空间分辨率:像照片的"尺寸"(5寸、7寸、10寸)
- 灰度分辨率:像照片的"色彩细腻程度"
- dpi(每英寸点数):像打印精度(300dpi比72dpi清晰)
为什么灰度通常用256级(8位)?
因为8位二进制刚好能表示256个数,存储和计算最高效。再少(如128级)会出现伪轮廓,再多(如512级)人眼分辨不出差别。
5图像内插(重取样)
内插:使用已知数据估计未知值,用于放大、收缩、旋转、几何校正等(增加或减少像素数量),也叫图像重取样。
最近邻内插
Nearest Neighbor双线性内插
Bilinear$$\text{双线性内插(插值点 } (i+u, j+v), \ u,v \in [0,1] \text{):}$$
$$g_A = f(i,j) + [f(i,j+1) - f(i,j)] \cdot v$$
$$g_B = f(i+1,j) + [f(i+1,j+1) - f(i+1,j)] \cdot v$$
$$g(i+u, j+v) = g_A + (g_B - g_A) \cdot u$$
核心意思:
内插 = 根据已知像素估算未知像素的值,用于放大/缩小图像
举个例子:
把2×2图像放大到4×4:
原始图像(2×2):
100 200
150 250
最近邻内插:
- 找最近的像素,直接复制
- 结果:会出现"马赛克"(锯齿)
100 100 200 200
100 100 200 200
150 150 250 250
150 150 250 250
双线性内插:
- 用周围4个像素加权平均
- 结果:更平滑,但有点模糊
100 125 175 200
125 150 200 225
150 175 225 250
150 175 225 250
对比:
方法 效果 速度 适用场景
最近邻 有锯齿 最快 实时处理
双线性 平滑 中等 一般用途
双三次 最平滑 最慢 高质量需求
生活类比:
- 最近邻:像把小照片直接放大,能看到像素块
- 双线性:像用模糊滤镜放大,边缘更平滑
- 双三次:像专业软件放大,质量最好
为什么需要内插?
因为图像放大时,新像素位置没有对应的原始像素,需要根据周围像素估算。
6像素间的基本关系 ⭐
相邻像素:4 邻域、D 邻域、8 邻域
| 邻域 | 坐标集合 |
|---|---|
| N4(p) | (x+1,y), (x-1,y), (x,y+1), (x,y-1) |
| ND(p) | (x+1,y+1), (x+1,y-1), (x-1,y+1), (x-1,y-1) |
| N8(p) | N4(p) ∪ ND(p),共 8 个 |
邻接性、通路、连通、区域与边界
令 V 为定义邻接性的灰度值集合:
- 4 邻接:p、q 灰度都在 V 中,且 q 在 N4(p) 中;
- 8 邻接:p、q 灰度都在 V 中,且 q 在 N8(p) 中;
- m 邻接(混合邻接):p、q 灰度都在 V 中,且满足 ① q 在 N4(p) 中,或 ② q 在 ND(p) 中且 N4(p)∩N4(q) 中没有 V 中的像素。
m 邻接用于消除 8 邻接带来的多通路二义性。
想象你站在一个像素上,看看周围有谁:
4邻域(N4)= 上下左右
- 只看直接相邻的4个像素
- 就像你在十字路口,只能看前后左右
D邻域(ND)= 对角线
- 只看4个对角的像素
- 就像你看四个角落
8邻域(N8)= 全部邻居
- 4邻域 + D邻域 = 8个像素
- 就像你在九宫格中心,看周围8格
邻接性 = "谁和谁连着"
4邻接:只和上下左右连着
- 就像只能横竖走
8邻接:和周围8个都连着
- 就像可以横竖斜走
m邻接(混合邻接)= 消除歧义
- 8邻接会有"多条路"的问题
- m邻接加了限制,确保"只有一条路"
- 就像规定"斜着走必须先横竖走一步"
为什么需要m邻接?
- 8邻接可能导致"连通区域计数"出错
- m邻接让连通关系更明确
核心意思:
像素的"邻居"有三种:上下左右、对角线、全部八个方向
举个例子:
站在像素 P 的位置,看看周围有谁:
N4(4邻域)= 上下左右
[ ] [↑] [ ]
[←] [P] [→]
[ ] [↓] [ ]
ND(D邻域)= 对角线
[↖] [ ] [↗]
[ ] [P] [ ]
[↙] [ ] [↘]
N8(8邻域)= 全部邻居
[↖] [↑] [↗]
[←] [P] [→]
[↙] [↓] [↘]
邻接性 = "谁和谁连着"
- 4邻接:只和上下左右连着
- 8邻接:和周围8个都连着
- m邻接:消除歧义的特殊规则
为什么需要m邻接?
8邻接会导致"多条路径"的问题,m邻接加了限制,确保"只有一条路径"。
生活类比:
4邻接像只能横竖走;8邻接像可以横竖斜走;m邻接像规定"斜着走必须先横竖走一步"。
为什么这样设计:
因为不同的邻接方式适用于不同的图像处理任务,m邻接是为了消除8邻接带来的多通路二义性。
核心意思:
通路 = 从一个像素走到另一个像素的路径,连通 = 两个像素之间有通路
举个例子:
二值图像(1=白,0=黑):
1 1 0 1 1
1 0 0 0 1
0 0 1 1 1
1 1 1 0 0
1 0 0 0 1
4邻接通路(只能横竖走):
从(0,0)到(2,2):
(0,0)→(0,1)→(1,1)→(2,1)→(2,2)
但(1,1)是0(黑),走不通!
所以(0,0)和(2,2)在4邻接下不连通
8邻接通路(可以横竖斜走):
从(0,0)到(2,2):
(0,0)→(1,1)→(2,2)
虽然(1,1)是0,但8邻接可以斜着走
所以(0,0)和(2,2)在8邻接下连通
连通区域:
4邻接:白色像素分成多个小区域
8邻接:白色像素连成一大片
边界:
区域的外缘像素就是边界
就像国家的边境线
生活类比:
- 4邻接:像只能横竖走的车
- 8邻接:像可以横竖斜走的人
- 连通区域:像一片连续的湖泊
- 边界:像湖泊的岸边
为什么需要m邻接?
因为8邻接会导致"多条路径"的问题,让连通区域计数出错。m邻接通过附加条件消除了这种歧义。
7距离度量 ⭐(必考)
距离函数 $D$ 须满足:① $D(p,q) \geq 0$($p=q$ 时为 0);② $D(p,q)=D(q,p)$(对称);③ $D(p,z) \leq D(p,q)+D(q,z)$(三角不等式)。设 $p(x,y)$、$q(u,v)$:
| 距离 | 公式 | 等距轮廓 |
|---|---|---|
| 欧氏距离 $D_e$ | $\sqrt{(x-u)^2 + (y-v)^2}$ | 圆 |
| D4(城市街区/曼哈顿) | $|x-u| + |y-v|$ | 菱形 |
| D8(棋盘) | $\max(|x-u|, |y-v|)$ | 正方形 |
三种距离 = 三种走路方式
假设你要从 A 点走到 B 点:
欧氏距离(De):
- 直线走过去(最短路径)
- 像鸟飞过去
D4 城市街区距离:
- 只能横着走或竖着走(不能斜着走)
- 像在城市街区走路,要绕过建筑物
D8 棋盘距离:
- 可以横、竖、斜着走
- 像国际象棋里的国王走法
举例:从 (0,0) 到 (3,4)
- De = 5(直线距离)
- D4 = 7(横走3 + 竖走4)
- D8 = 4(斜走4步)
场景:你在一个城市里,从 A 点走到 B 点
欧氏距离(De)= 直线距离
- 像鸟一样飞过去
- 最短,但现实中往往走不了
- 公式:√(Δx² + Δy²)
D4 城市街区距离 = 横着走 + 竖着走
- 像在曼哈顿的街区走路
- 只能沿着街道走,不能穿墙
- 公式:|Δx| + |Δy|
D8 棋盘距离 = 横竖斜都能走
- 像国际象棋的国王
- 可以走对角线
- 公式:max(|Δx|, |Δy|)
数值示例:从 (0,0) 到 (3,4)
计算过程: De = √(3² + 4²) = √(9+16) = √25 = 5 D4 = |3| + |4| = 3 + 4 = 7 D8 = max(3, 4) = 4
大小关系:D8 ≤ De ≤ D4
- 棋盘距离最短(可以斜着走)
- 欧氏距离居中(直线)
- 城市街区距离最长(只能横竖走)
等距轮廓形状:
- De = 圆(所有到原点距离相等的点连成圆)
- D4 = 菱形(正方形旋转45度)
- D8 = 正方形
核心意思:
三种距离 = 三种走路方式:直线走、横竖走、斜着走
举个例子:
从 A(0,0) 走到 B(3,4):
欧氏距离(De)= 直线距离
计算:√(3² + 4²) = √(9+16) = √25 = 5
类比:像鸟一样飞过去
D4 城市街区距离 = 横着走 + 竖着走
计算:|3| + |4| = 3 + 4 = 7
类比:像在曼哈顿街区走路,不能穿墙
D8 棋盘距离 = 横竖斜都能走
计算:max(3, 4) = 4
类比:像国际象棋的国王走法
大小关系:D8 ≤ De ≤ D4
- 棋盘距离最短(可以斜着走)
- 欧氏距离居中(直线)
- 城市街区距离最长(只能横竖走)
等距轮廓形状:
- De = 圆(所有到原点距离相等的点连成圆)
- D4 = 菱形(正方形旋转45度)
- D8 = 正方形
生活类比:
想象你在一个城市里:欧氏距离像直升机,直线飞过去;D4距离像出租车,只能沿着街道走;D8距离像国王,可以斜着走。
为什么这样设计:
因为不同的距离度量方式适用于不同的场景,比如路径规划、图像处理中的距离变换等。
8数学工具与直方图
阵列运算与线性操作
图像可用矩阵表示,阵列相乘是逐元素相乘,矩阵相乘是线性代数乘法。一个算子 H 若同时满足加性与同质性,则为线性操作:
$$H[a \cdot f_1 + b \cdot f_2] = a \cdot H[f_1] + b \cdot H[f_2] \quad \text{(线性)}$$
代数运算
| 运算 | 定义 | 应用 |
|---|---|---|
| 加法 | C(x,y)=A(x,y)+B(x,y) | 多帧平均去除叠加性噪声(g=(g₁+…+g_N)/N,噪声均值0且互不相关)、图像叠加 |
| 减法 | C(x,y)=A(x,y)-B(x,y) | 检测两幅图像差异/变化、去除不需要的叠加图案(如 DSA 血管造影) |
几何空间变换与图像配准
仿射变换可对坐标做尺度、旋转、平移、偏移;分前向映射(扫描输入像素算输出位置,可能多对一/空洞)与后向映射(扫描输出位置回算输入,更有效)。图像配准用约束点(控制点)求解 8 个系数,需至少 4 对点。
直方图与概率统计
灰度级 $r_k$ 的归一化直方图:$p(r_k)=n_k/n$($n_k$ 为灰度 $r_k$ 的像素数,$n$ 为总像素数)。统计量:
$$\text{平均灰度(均值)} \quad m = \sum z_k \cdot p(z_k)$$
$$\text{方差} \quad \sigma^2 = \sum (z_k - m)^2 \cdot p(z_k) \quad \leftarrow \text{反映对比度}$$
⭐重点例题
解:$\Delta x=|4-1|=3$,$\Delta y=|5-1|=4$。
欧氏 $$D_e = \sqrt{3^2+4^2} = \sqrt{25} = 5$$
$$D_4$$(城市街区) $$= 3 + 4 = 7$$
$$D_8$$(棋盘) $$= \max(3,4) = 4$$
记忆:恒有 $D_8 \leq D_e \leq D_4$。
解:$L=256 \Rightarrow k=\log_2 256=8$ bit。$b=1024 \times 768 \times 8=6{,}291{,}456$ bit $\approx$ 768 KB。
🎯自测(点击展开)
取样和量化分别离散化什么?
图像形成模型 f=i·r 中 i 和 r 的取值范围?
N8(p) 怎么由 N4 和 ND 组成?各有几个像素?
D4、D8、欧氏距离的等距轮廓各是什么形状?
引入 m 邻接的目的是什么?
方差在图像里反映什么?
📝强化题库
选择题点选即时判分;填空题输入后"检查"或"显示答案"。