YCVisionLog
返回笔记
Computer Knowledge2026-10-1030 minYygz31429 人浏览已发布

数字图像处理学习指南(详细版)

为自己学习数字图像处理的指南

Notes

适用对象:本科《数字图像处理》课程学习、MATLAB 实验、课程作业、期末复习,以及希望进一步衔接计算机视觉 / 医学图像处理的同学。
推荐学习方式:理论理解 → 手算小例子 → MATLAB 实现 → 观察图像现象 → 解释原因 → 完成综合项目。
本指南默认你会接触 MATLAB,并将肺部 CT / 肺结节图像作为一个贯穿式案例。


目录

  1. 一、先弄清楚:数字图像处理到底在学什么
  2. 二、学完这门课应该达到什么水平
  3. 三、整门课程的知识地图
  4. 四、第一阶段:数字图像基础
  5. 五、第二阶段:灰度变换与直方图处理
  6. 六、第三阶段:空间域滤波
  7. 七、第四阶段:频率域图像处理
  8. 八、第五阶段:图像退化与复原
  9. 九、第六阶段:形态学图像处理
  10. 十、第七阶段:图像分割
  11. 十一、第八阶段:彩色图像、特征与进一步内容
  12. 十二、MATLAB 应该掌握到什么程度
  13. 十三、贯穿课程的 CT / 肺结节实验路线
  14. 十四、如何做实验以及如何写高质量实验报告
  15. 十五、如何做题与准备考试
  16. 十六、推荐的学习资源
  17. 十七、一个完整的 12 周学习计划
  18. 十八、每章自测清单
  19. 十九、容易踩的坑
  20. 二十、从数字图像处理衔接计算机视觉
  21. 二十一、最终验收标准

一、先弄清楚:数字图像处理到底在学什么

很多同学刚开始学习数字图像处理时,会把它理解成“学几个 MATLAB 函数处理图片”。这是不够的。

数字图像处理真正研究的是:

如何把图像表示成计算机能够处理的数据,并利用数学方法对这些数据进行变换、增强、分析、恢复、分割和理解。

一幅灰度数字图像,本质上可以表示为二维离散函数:

f(x,y)f(x,y)

其中:

  • x,yx,y:像素的空间位置;
  • f(x,y)f(x,y):该位置的灰度值。

例如一幅 8 bit 灰度图像:

f(x,y)∈[0,255]f(x,y)\in[0,255]

那么所谓“图像处理”,本质就是对这个二维矩阵进行各种数学操作。

例如:

MATLAB
I = imread('image.png'); 

读取以后得到的其实就是一个矩阵。

如果它是 512×512 的灰度图,那么:

MATLAB
size(I) 

可能得到:

TEXT
512   512 

如果它是 RGB 彩色图,则通常是:

TEXT
512   512   3 

因此,整门课程可以概括为:

TEXT
现实世界
   ↓
连续图像
   ↓ 采样、量化
数字图像矩阵
   ↓
灰度变换 / 空间滤波 / 频域滤波 / 复原
   ↓
形态学 / 边缘 / 阈值 / 分割
   ↓
目标区域 / 特征 / 测量结果
   ↓
计算机视觉、医学图像分析、深度学习 

二、学完这门课应该达到什么水平

建议把自己的学习目标分为五个层级。


Level 1:会看懂图像数据

你应该能够解释:

  • 什么是像素;
  • 什么是灰度值;
  • 什么是空间分辨率;
  • 什么是灰度分辨率;
  • 什么是位深;
  • 二值图、灰度图、索引图、RGB 图有什么区别;
  • uint8、uint16、double 在图像处理中有什么区别;
  • 为什么 MATLAB 中 imshow 对不同数据类型的解释不同;
  • 为什么 uint8(50)-uint8(100) 不会得到 -50;
  • 为什么 double 图像 [0,255] 直接 imshow 可能显示异常;
  • 4 邻域、8 邻域、m 邻接的区别;
  • 图像存储空间应该怎样计算。

达到这个水平以后,你应该不会再把“图像”仅仅看成一张图片,而是会主动思考:

它是什么数据类型?尺寸是多少?像素范围是多少?每个通道是什么?


Level 2:会解释基本算法

你应该能够不用 MATLAB 函数说明:

  • 线性灰度变换为什么可以调节亮度和对比度;
  • Gamma 变换为什么能够增强暗部或亮部;
  • 直方图均衡化为什么能够提高对比度;
  • 均值滤波为什么能够去噪但会模糊;
  • 中值滤波为什么特别适合椒盐噪声;
  • Sobel 为什么能够检测边缘;
  • Laplacian 为什么能够实现锐化;
  • 傅里叶变换为什么能够把图像转换到频率域;
  • 低频与图像平滑区域有什么关系;
  • 高频为什么与边缘、纹理相关;
  • 腐蚀与膨胀究竟改变了什么;
  • Otsu 为什么能够自动寻找阈值。

Level 3:会手算简单例子

例如给定:

[102030405060708090]\begin{bmatrix} 10&20&30\\ 40&50&60\\ 70&80&90 \end{bmatrix}

你应该能够手算:

  • 均值滤波结果;
  • 中值滤波结果;
  • Sobel 局部响应;
  • Laplacian 响应;
  • 直方图;
  • 简单灰度映射;
  • 4 邻域 / 8 邻域;
  • 腐蚀和膨胀结果;
  • DFT 的简单性质。

这是考试中非常重要的能力。


Level 4:能够独立完成 MATLAB 图像处理实验

给你一张图,你应该能够独立完成:

TEXT
读取
→ 查看属性
→ 数据类型转换
→ 图像增强
→ 去噪
→ 边缘检测
→ 二值化
→ 形态学处理
→ 区域分割
→ 结果评价
→ 保存结果 

而不是只会复制:

MATLAB
I2 = imadjust(I); 

你还应该能够解释:

为什么这里使用 imadjust?
为什么不选直方图均衡?
参数为什么这样设置?
处理以后发生了什么?
有什么副作用?


Level 5:能够解决一个完整实际问题

例如:

从肺部 CT 图像中增强肺结节区域,并得到较为干净的候选区域。

你应该能够自己设计一个流程:

TEXT
CT 图像
↓
灰度分析
↓
窗宽窗位 / 灰度拉伸
↓
去噪
↓
肺区域提取
↓
阈值分割
↓
形态学处理
↓
连通区域分析
↓
候选结节
↓
结果评价 

如果能够做到这一层,你才算真正把这门课学会。


三、整门课程的知识地图

建议始终记住下面这张课程知识地图:

MERMAID
flowchart LR
    A[数字图像基础] --> B[灰度变换]
    B --> C[直方图处理]
    C --> D[空间域滤波]
    D --> E[频率域处理]
    E --> F[图像复原]
    F --> G[形态学处理]
    G --> H[图像分割]
    H --> I[特征提取]
    I --> J[计算机视觉 / 医学图像分析]

    A --> A1[采样与量化]
    A --> A2[数据类型]
    A --> A3[像素邻域]
    D --> D1[平滑]
    D --> D2[锐化]
    E --> E1[DFT]
    E --> E2[频域滤波]
    G --> G1[腐蚀膨胀]
    G --> G2[开闭运算]
    H --> H1[阈值分割]
    H --> H2[边缘检测] 

整门课的核心逻辑可以浓缩为四句话:

  1. 图像是什么数据?
  2. 怎样改善图像?
  3. 怎样从图像中提取目标?
  4. 怎样评价处理结果?

四、第一阶段:数字图像基础

这一章看起来简单,但实际上非常重要。后面很多错误都源于基础概念不清楚。


4.1 数字图像的形成

现实中的图像通常是连续的:

f(x,y)f(x,y)

计算机无法直接存储无限连续的数据,因此需要两个过程:

采样 Sampling

对空间坐标离散化:

(x,y)→(m,n)(x,y)\rightarrow(m,n)

决定:

一幅图有多少个像素。

例如:

TEXT
256×256
512×512
1024×1024 

量化 Quantization

对灰度值离散化。

例如 8 bit:

L=28=256L=2^8=256

即:

0∼2550\sim255

12 bit:

L=212=4096L=2^{12}=4096

即:

0∼40950\sim4095

4.2 空间分辨率与灰度分辨率

空间分辨率:

图像在空间方向能够区分多细的结构。

像素数越多,通常空间细节越丰富。

灰度分辨率:

能表示多少个不同灰度级。

例如:

位深灰度级
1 bit2
8 bit256
10 bit1024
12 bit4096
16 bit65536

4.3 图像存储量

对于 M×NM\times N 图像,如果每像素 bb bit:

S=MNbS=MNb

单位是 bit。

换算为 Byte:

SByte=MNb8S_{\text{Byte}}=\frac{MNb}{8}

例如:

512×512×12 bit512\times512\times12\text{ bit}

单层数据量:

512×512×12/8512\times512\times12/8

约为:

393216 Byte393216\text{ Byte}

如果有 300 层 CT:

393216×300393216\times300

这类计算题要熟练。


4.4 图像类型

二值图像

像素只有:

0,10,1

MATLAB 常见类型:

MATLAB
logical 

灰度图像

每个像素表示亮度:

0∼2550\sim255

常见:

MATLAB
uint8 

RGB 真彩色图像

三个通道:

R(x,y),G(x,y),B(x,y)R(x,y),G(x,y),B(x,y)

MATLAB 中:

MATLAB
size(I) 

一般得到:

TEXT
M × N × 3 

索引图像

图像矩阵中的值不是直接颜色,而是查找颜色表:

TEXT
Index Matrix + Colormap 

这是考试容易考的区别。


4.5 数据类型是必须掌握的重点

MATLAB 图像处理中最常见的类型:

类型常见范围
uint80~255
uint160~65535
int16-32768~32767
single浮点
double浮点
logical0 / 1

特别重要:

uint8 的饱和运算

MATLAB
uint8(200) + uint8(100) 

理论:

300300

但是 uint8 最大只有 255,因此结果饱和:

255255

同理:

MATLAB
uint8(50) - uint8(100) 

理论:

−50-50

但 uint8 不能表示负数,因此结果:

00

4.6 imshow 的数据范围问题

这是实验中必须理解的问题。

对于:

MATLAB
uint8 

MATLAB 默认认为:

0∼2550\sim255

对于:

MATLAB
double 

MATLAB 默认认为:

0∼10\sim1

因此:

MATLAB
I = double(uint8_image);
imshow(I) 

如果 I 的实际范围是 0~255,很多像素都会被当成大于 1 的值,从而显示成白色。

正确方式之一:

MATLAB
imshow(I, [0 255]) 

或者:

MATLAB
imshow(mat2gray(I)) 

这不是“图像数据出错”,而是“显示映射范围不同”。


4.7 邻域、邻接和连通性

给定像素:

p=(x,y)p=(x,y)

4 邻域

N4(p)N_4(p)

包括:

TEXT
   ↑
←  p  →
   ↓ 

即:

(x−1,y),(x+1,y),(x,y−1),(x,y+1)(x-1,y),(x+1,y),(x,y-1),(x,y+1)

对角邻域

ND(p)N_D(p)

包括四个对角位置。


8 邻域

N8(p)=N4(p)∪ND(p)N_8(p)=N_4(p)\cup N_D(p)

4 邻接和 8 邻接

这直接影响:

  • 连通区域数量;
  • 边界;
  • 区域生长;
  • 二值图分析。

因此必须真正理解,而不能只背定义。


五、第二阶段:灰度变换与直方图处理

这一部分是图像增强的基础。


5.1 灰度变换的一般形式

设输入灰度:

rr

输出灰度:

ss

一般表示:

s=T(r)s=T(r)

本质就是:

每个输入灰度值,经过函数映射到新的灰度值。


5.2 图像负片

s=L−1−rs=L-1-r

对于 8 bit:

s=255−rs=255-r

作用:

  • 黑白反转;
  • 突出暗背景中的亮细节。

MATLAB:

MATLAB
I2 = imcomplement(I); 

5.3 对数变换

s=clog⁡(1+r)s=c\log(1+r)

作用:

  • 压缩高灰度;
  • 扩展低灰度;
  • 常用于显示傅里叶频谱。

5.4 Gamma 变换

s=crγs=cr^\gamma

重点理解:

γ<1\gamma<1

增强暗区域。

γ>1\gamma>1

压暗图像。

不要只背结论,要理解函数曲线。


5.5 分段线性变换

包括:

  • 对比度拉伸;
  • 灰度切片;
  • 阈值变换。

核心思想:

不同灰度区间采用不同映射。


5.6 直方图

直方图表示:

每个灰度值出现的次数。

如果图像为:

I(x,y)I(x,y)

灰度级 rkr_k 出现次数:

nkn_k

概率:

p(rk)=nkMNp(r_k)=\frac{n_k}{MN}

MATLAB:

MATLAB
imhist(I) 

5.7 如何从直方图判断图像

如果直方图集中在左侧:

图像整体偏暗。

集中在右侧:

图像整体偏亮。

分布范围很窄:

对比度偏低。

分布较宽:

对比度通常较高。


5.8 直方图均衡化

基本思想:

利用灰度累计分布函数重新映射灰度,使灰度尽可能充分利用动态范围。

变换:

sk=(L−1)∑j=0kp(rj)s_k=(L-1)\sum_{j=0}^{k}p(r_j)

MATLAB:

MATLAB
J = histeq(I); 

必须理解:

直方图均衡不是简单地“把直方图变成完全均匀”。


5.9 自适应直方图均衡

局部对比度增强常用:

MATLAB
J = adapthisteq(I); 

尤其在:

  • 医学图像;
  • 光照不均图像;
  • 局部细节增强

中比较有用。

但要警惕:

局部增强也可能放大噪声。


六、第三阶段:空间域滤波

空间域处理直接作用于图像像素。

基本形式:

g(x,y)=T[f(x,y)]g(x,y)=T[f(x,y)]

6.1 卷积是本章核心

很多滤波都可以表示为:

g(x,y)=∑s∑tw(s,t)f(x−s,y−t)g(x,y)=\sum_s\sum_t w(s,t)f(x-s,y-t)

其中 ww 是卷积核。

一个 3×3 均值核:

19[111111111]\frac{1}{9} \begin{bmatrix} 1&1&1\\ 1&1&1\\ 1&1&1 \end{bmatrix}

6.2 卷积必须真正会手算

给定:

[102030405060708090]\begin{bmatrix} 10&20&30\\ 40&50&60\\ 70&80&90 \end{bmatrix}

使用均值核,则中心像素:

10+20+30+40+50+60+70+80+909\frac{10+20+30+40+50+60+70+80+90}{9}

必须会手算。


6.3 平滑滤波

均值滤波

优点:

  • 简单;
  • 可以抑制随机噪声。

缺点:

  • 会模糊边缘;
  • 对椒盐噪声效果不理想。

高斯滤波

高斯函数:

G(x,y)=12πσ2e−x2+y22σ2G(x,y)=\frac{1}{2\pi\sigma^2} e^{-\frac{x^2+y^2}{2\sigma^2}}

参数:

σ\sigma

决定平滑强度。

MATLAB:

MATLAB
J = imgaussfilt(I, sigma); 

中值滤波

窗口:

TEXT
3×3 

将中心像素替换为邻域中位数。

对椒盐噪声效果很好:

MATLAB
J = medfilt2(I); 

6.4 锐化

锐化的目标:

增强边缘、轮廓和细节。


6.5 一阶导数

边缘对应灰度快速变化。

梯度:

∇f=[∂f∂x∂f∂y]\nabla f= \begin{bmatrix} \frac{\partial f}{\partial x}\\ \frac{\partial f}{\partial y} \end{bmatrix}

梯度幅值:

∣∇f∣=Gx2+Gy2|\nabla f|= \sqrt{G_x^2+G_y^2}

常用近似:

∣Gx∣+∣Gy∣|G_x|+|G_y|

6.6 Sobel 算子

典型 Sobel 核:

Gx=[−101−202−101]G_x= \begin{bmatrix} -1&0&1\\ -2&0&2\\ -1&0&1 \end{bmatrix} Gy=[−1−2−1000121]G_y= \begin{bmatrix} -1&-2&-1\\ 0&0&0\\ 1&2&1 \end{bmatrix}

必须理解:

  • GxG_x:检测水平方向灰度变化;
  • GyG_y:检测垂直方向灰度变化。

6.7 Laplacian 算子

二维 Laplacian:

∇2f=∂2f∂x2+∂2f∂y2\nabla^2 f= \frac{\partial^2f}{\partial x^2} + \frac{\partial^2f}{\partial y^2}

常见模板:

[0−10−14−10−10]\begin{bmatrix} 0&-1&0\\ -1&4&-1\\ 0&-1&0 \end{bmatrix}

或:

[−1−1−1−18−1−1−1−1]\begin{bmatrix} -1&-1&-1\\ -1&8&-1\\ -1&-1&-1 \end{bmatrix}

6.8 高频提升与反锐化掩模

模糊图像:

fˉ\bar f

掩模:

gmask=f−fˉg_{\text{mask}}=f-\bar f

增强:

g=f+kgmaskg=f+k g_{\text{mask}}

即:

g=f+k(f−fˉ)g=f+k(f-\bar f)

这个思想非常重要,因为它把:

原图 + 高频信息

联系起来。


七、第四阶段:频率域图像处理

这是很多同学觉得最难的一章。

建议不要一开始就死磕公式,而应该先理解:

空间域描述“哪里发生变化”;
频率域描述“变化得有多快”。


7.1 什么是频率

图像中:

低频

通常对应:

  • 大面积平滑区域;
  • 背景;
  • 缓慢灰度变化。

高频

通常对应:

  • 边缘;
  • 纹理;
  • 噪声;
  • 细节。

因此:

TEXT
低通滤波 → 平滑
高通滤波 → 锐化 / 边缘增强 

7.2 二维离散傅里叶变换

F(u,v)=∑x=0M−1∑y=0N−1f(x,y)e−j2π(uxM+vyN)F(u,v)= \sum_{x=0}^{M-1} \sum_{y=0}^{N-1} f(x,y) e^{-j2\pi\left(\frac{ux}{M}+\frac{vy}{N}\right)}

逆变换:

f(x,y)=1MN∑u=0M−1∑v=0N−1F(u,v)ej2π(uxM+vyN)f(x,y)= \frac{1}{MN} \sum_{u=0}^{M-1} \sum_{v=0}^{N-1} F(u,v) e^{j2\pi\left(\frac{ux}{M}+\frac{vy}{N}\right)}

本科阶段重点不是手推大矩阵 DFT,而是理解:

  • 幅度;
  • 相位;
  • 频率位置;
  • 频谱中心化;
  • 滤波。

7.3 MATLAB FFT

MATLAB
F = fft2(I); 

中心化:

MATLAB
Fc = fftshift(F); 

显示频谱:

MATLAB
S = log(1 + abs(Fc));
imshow(S, []); 

必须能解释为什么使用:

MATLAB
log(1 + abs(Fc)) 

因为频谱动态范围非常大,直接显示不利于观察。


7.4 频域滤波的一般流程

TEXT
原图
 ↓
FFT
 ↓
频谱中心化
 ↓
构造滤波器 H(u,v)
 ↓
H(u,v)F(u,v)
 ↓
逆中心化
 ↓
IFFT
 ↓
处理后的图像 

数学形式:

G(u,v)=H(u,v)F(u,v)G(u,v)=H(u,v)F(u,v)

7.5 理想低通滤波器

H(u,v)={1,D(u,v)≤D00,D(u,v)>D0H(u,v)= \begin{cases} 1,&D(u,v)\le D_0\\ 0,&D(u,v)>D_0 \end{cases}

缺点:

频域突变容易引起空间域振铃。


7.6 Butterworth 低通

H(u,v)=11+[D(u,v)D0]2nH(u,v)= \frac{1}{ 1+\left[\frac{D(u,v)}{D_0}\right]^{2n} }

比理想低通更平滑。


7.7 Gaussian 低通

H(u,v)=e−D2(u,v)2D02H(u,v)= e^{-\frac{D^2(u,v)}{2D_0^2}}

特点:

平滑过渡,振铃较小。


7.8 高频滤波

一般可以通过:

HHP=1−HLPH_{HP}=1-H_{LP}

获得。

目的:

  • 边缘增强;
  • 图像锐化。

7.9 卷积定理

必须理解:

f∗h⟷FHf*h \longleftrightarrow FH

即:

空间域卷积等价于频率域乘法。

这是连接“空间域滤波”和“频率域滤波”的桥梁。


八、第五阶段:图像退化与复原

图像增强和图像复原不是一回事。


8.1 图像增强

目标:

让图像“看起来更好”或更适合后续处理。

通常比较主观。


8.2 图像复原

目标:

根据退化模型恢复原始图像。

模型:

g(x,y)=h(x,y)∗f(x,y)+η(x,y)g(x,y)=h(x,y)*f(x,y)+\eta(x,y)

频域:

G(u,v)=H(u,v)F(u,v)+N(u,v)G(u,v)=H(u,v)F(u,v)+N(u,v)

其中:

  • ff:原始图像;
  • hh:退化函数;
  • η\eta:噪声;
  • gg:观测图像。

8.3 噪声模型

重点认识:

  • Gaussian 噪声;
  • 椒盐噪声;
  • 泊松噪声;
  • 周期噪声。

需要做到:

看到噪声现象能够大致判断应该采用什么方法。


8.4 逆滤波

理想情况下:

F^(u,v)=G(u,v)H(u,v)\hat F(u,v)=\frac{G(u,v)}{H(u,v)}

问题:

当:

H(u,v)≈0H(u,v)\approx0

时,噪声会被严重放大。


8.5 Wiener 滤波

核心思想:

在恢复图像和抑制噪声之间做折中。

本科阶段通常理解原理即可。


8.6 图像质量评价

MSE

MSE=1MN∑x=1M∑y=1N[I(x,y)−K(x,y)]2MSE= \frac{1}{MN} \sum_{x=1}^{M} \sum_{y=1}^{N} [I(x,y)-K(x,y)]^2

PSNR

PSNR=10log⁡10(MAXI2MSE)PSNR= 10\log_{10} \left( \frac{MAX_I^2}{MSE} \right)

通常:

PSNR 越高,误差越小。


SSIM

结构相似性指标更加关注:

  • 亮度;
  • 对比度;
  • 结构。

对于图像质量评价非常常用。


九、第六阶段:形态学图像处理

形态学主要处理:

图像的几何结构和形状。

重点通常是二值图像。


9.1 结构元素

MATLAB:

MATLAB
se = strel('disk', 3); 

结构元素相当于:

用一个小形状去“探测”图像中的目标。


9.2 腐蚀

记作:

A⊖BA\ominus B

直观理解:

目标区域缩小。

作用:

  • 去除小突出;
  • 分离细连接;
  • 缩小前景。

9.3 膨胀

记作:

A⊕BA\oplus B

直观理解:

目标区域扩大。

作用:

  • 填小间隙;
  • 连接邻近区域;
  • 扩张目标。

9.4 开运算

A∘B=(A⊖B)⊕BA\circ B=(A\ominus B)\oplus B

即:

TEXT
先腐蚀
再膨胀 

常用于:

  • 去除小目标;
  • 去除细小突出。

9.5 闭运算

A∙B=(A⊕B)⊖BA\bullet B=(A\oplus B)\ominus B

即:

TEXT
先膨胀
再腐蚀 

常用于:

  • 填小孔;
  • 连接小裂缝。

9.6 实验中要学会根据问题选操作

例如:

TEXT
二值图中有很多白色小噪点 

可以考虑:

  • 开运算;
  • bwareaopen。

如果目标内部有小黑洞:

  • 闭运算;
  • imfill。

这才是真正的“会用”。


十、第七阶段:图像分割

分割的目标:

把图像划分成具有实际意义的区域。

例如:

TEXT
CT 图像
→ 肺区域
→ 可疑结节区域 

10.1 阈值分割

最简单:

g(x,y)={1,f(x,y)>T0,f(x,y)≤Tg(x,y)= \begin{cases} 1,&f(x,y)>T\\ 0,&f(x,y)\le T \end{cases}

关键问题:

阈值 TT 如何确定?


10.2 Otsu 大津法

MATLAB:

MATLAB
T = graythresh(I);
BW = imbinarize(I, T); 

核心思想:

选择一个阈值,使两个类别之间的类间方差最大。

需要理解:

  • 它是一种自动阈值选择方法;
  • 当前景背景灰度差异明显时效果较好;
  • 对复杂光照、多峰分布可能效果有限。

10.3 边缘检测

常见:

MATLAB
edge(I,'sobel')
edge(I,'prewitt')
edge(I,'canny') 

10.4 Canny 边缘检测

需要理解基本步骤:

TEXT
Gaussian 平滑
↓
计算梯度
↓
非极大值抑制
↓
双阈值
↓
边缘连接 

Canny 的优势:

  • 定位较准;
  • 边缘较细;
  • 抗噪性较好。

10.5 区域生长

核心:

从种子点开始,把与其相似的邻域逐渐加入区域。

重点理解:

  • 种子点;
  • 相似性标准;
  • 连通性;
  • 停止条件。

10.6 连通区域分析

MATLAB 常用:

MATLAB
CC = bwconncomp(BW); 

区域属性:

MATLAB
stats = regionprops(BW, ...
    'Area', ...
    'Centroid', ...
    'BoundingBox'); 

可以计算:

  • 面积;
  • 质心;
  • 外接框;
  • 周长;
  • 偏心率;
  • 圆度相关特征。

十一、第八阶段:彩色图像、特征与进一步内容

不同学校教学深度不同,但建议至少了解。


11.1 RGB

I(x,y)=[R(x,y),G(x,y),B(x,y)]I(x,y)= [R(x,y),G(x,y),B(x,y)]

11.2 HSV

包括:

  • Hue;
  • Saturation;
  • Value。

一些颜色分割问题中,HSV 往往比 RGB 更直观。


11.3 图像特征

建议了解:

灰度特征

  • 均值;
  • 方差;
  • 熵。

纹理特征

例如灰度共生矩阵 GLCM:

  • contrast;
  • correlation;
  • energy;
  • homogeneity。

形状特征

  • 面积;
  • 周长;
  • 圆度;
  • 长宽比;
  • 偏心率。

这些内容能够很好地衔接传统计算机视觉和医学图像分析。


十二、MATLAB 应该掌握到什么程度

你不需要成为 MATLAB 专家,但应该做到:

能够把图像处理算法独立实现出来,并且能够解释结果。


12.1 必须掌握的基础操作

MATLAB
clear;
clc;
close all; 

读取图像:

MATLAB
I = imread('image.png'); 

查看:

MATLAB
imshow(I); 

尺寸:

MATLAB
size(I) 

类型:

MATLAB
class(I) 

最大最小:

MATLAB
min(I(:))
max(I(:)) 

12.2 数据类型转换

MATLAB
double(I)
im2double(I)
uint8(I)
mat2gray(I) 

必须知道:

MATLAB
double(I) 

和:

MATLAB
im2double(I) 

不是完全相同概念。

例如 uint8:

MATLAB
double(I) 

会得到:

0∼2550\sim255

而:

MATLAB
im2double(I) 

通常映射到:

0∼10\sim1

12.3 显示

MATLAB
imshow(I)
imshow(I, [])
imshow(I, [0 255]) 

要真正理解三种方式区别。


12.4 直方图

MATLAB
imhist(I) 

12.5 调整亮度和对比度

MATLAB
imadjust
histeq
adapthisteq 

12.6 滤波

MATLAB
imfilter
filter2
fspecial
imgaussfilt
medfilt2 

12.7 边缘

MATLAB
edge
imgradient 

12.8 二值与形态学

MATLAB
imbinarize
graythresh
imerode
imdilate
imopen
imclose
imfill
bwareaopen 

12.9 连通区域

MATLAB
bwconncomp
bwlabel
regionprops 

12.10 傅里叶变换

MATLAB
fft2
fftshift
ifftshift
ifft2
abs
angle 

十三、贯穿课程的 CT / 肺结节实验路线

如果课程实验本身围绕肺结节 CT 展开,非常推荐把所有章节都围绕同一套数据做。

这样你最后得到的不只是“零散实验”,而是一个完整项目。


Stage 1:认识 CT 数据

目标:

  • 读取 CT;
  • 查看尺寸;
  • 查看数据类型;
  • 查看灰度范围;
  • 观察不同窗宽窗位。

需要理解:

医学 CT 原始数据与普通 8 bit 图片不完全一样。

如果是真正 DICOM:

MATLAB
info = dicominfo('xxx.dcm');
I = dicomread(info); 

Stage 2:灰度增强

比较:

TEXT
原图
灰度拉伸
直方图均衡
CLAHE
Gamma 

评价:

  • 肺区域是否更清晰;
  • 结节边界是否增强;
  • 噪声是否同时被增强。

Stage 3:加噪与去噪

人为加入:

MATLAB
imnoise 

比较:

  • 均值;
  • Gaussian;
  • 中值滤波。

要求:

不只是看哪张“最好看”,而是解释为什么。


Stage 4:锐化与边缘

比较:

  • Sobel;
  • Laplacian;
  • Canny。

观察:

结节边缘是否连续、是否出现大量伪边缘。


Stage 5:频域分析

观察:

MATLAB
fft2
fftshift 

尝试:

  • 低通;
  • 高通。

理解:

空间域现象和频率域变化如何对应。


Stage 6:肺区域分割

使用:

  • 阈值;
  • 形态学;
  • 连通域。

Stage 7:候选结节区域

可以进一步根据:

  • 面积;
  • 圆度;
  • 位置;
  • 灰度

筛选候选区域。


Stage 8:综合评价

最终可以得到一个完整流程:

MERMAID
flowchart LR
A[CT图像] --> B[灰度标准化]
B --> C[对比度增强]
C --> D[噪声抑制]
D --> E[肺区域分割]
E --> F[边缘/阈值]
F --> G[形态学优化]
G --> H[连通区域分析]
H --> I[候选结节]
I --> J[定量评价] 

十四、如何做实验以及如何写高质量实验报告

实验报告最忌讳:

TEXT
贴代码
↓
贴图片
↓
结束 

高质量实验报告应该体现:

原理 → 方法 → 参数 → 结果 → 分析。


14.1 推荐报告结构

1. 实验目的

明确这一实验想研究什么。

不要只写:

熟悉 MATLAB。

更好:

掌握不同图像数据类型在算术运算中的数值行为,并分析 uint8 饱和运算对图像灰度信息的影响。


2. 实验原理

写清楚核心公式和概念。


3. 实验环境

例如:

TEXT
MATLAB R20xx
Image Processing Toolbox
Windows 

4. 实验数据

说明:

  • 图像尺寸;
  • 图像类型;
  • 数据范围;
  • 数据来源。

5. 实验步骤

推荐使用:

TEXT
Step 1 ...
Step 2 ...
Step 3 ... 

6. 核心代码

只放关键代码。

不要把所有初始化、路径代码全部堆进去。


7. 实验结果

图片需要:

  • 编号;
  • 标题;
  • 必要说明。

例如:

图 3 不同滤波算法对椒盐噪声的处理结果


8. 结果分析

必须回答:

  1. 图像发生了什么变化?
  2. 为什么会发生?
  3. 参数对结果有什么影响?
  4. 方法有什么优缺点?

9. 实验结论

总结:

  • 哪个方法适合什么情况;
  • 哪个参数最关键;
  • 本实验验证了什么。

十五、如何做题与准备考试

数字图像处理考试一般不是纯背诵。

常见题型可以分成:

TEXT
概念题
计算题
算法原理题
图像分析题
MATLAB代码题
综合设计题 

15.1 概念题

建议使用:

TEXT
定义 + 核心特点 + 一句话应用 

例如:

什么是图像量化?

答:

图像量化是将连续或高精度的灰度幅值映射为有限个离散灰度级的过程,量化位数决定图像可表示的灰度级数量。


15.2 算法比较题

推荐从四个方面比较:

方法原理优点缺点适用场景

例如均值和中值:

方法特点
均值滤波线性滤波,对随机噪声有效,但模糊边缘
中值滤波非线性滤波,对椒盐噪声尤其有效,较好保持边缘

15.3 手算题

重点练:

  • 邻域;
  • 卷积;
  • 中值;
  • Sobel;
  • Laplacian;
  • 直方图;
  • 均衡化;
  • 腐蚀膨胀。

15.4 代码题

不要死背全部函数。

建议建立:

TEXT
任务 → 函数 

映射。

例如:

TEXT
读取      imread
显示      imshow
直方图    imhist
均衡      histeq
滤波      imfilter
中值      medfilt2
FFT       fft2
边缘      edge
阈值      imbinarize
腐蚀      imerode
膨胀      imdilate
连通域    bwconncomp
属性      regionprops 

十六、推荐的学习资源

建议不要同时看太多材料,而是建立:

TEXT
一本主教材
+
一本参考书
+
官方文档
+
实验代码
+
适量课程视频 

16.1 主教材

《数字图像处理》—— Gonzalez & Woods

英文原名:

Digital Image Processing

这是数字图像处理经典教材。

适合作为:

  • 概念理解;
  • 公式来源;
  • 算法原理;
  • 深入学习。

建议重点看:

  • 图像基础;
  • 灰度变换;
  • 空间滤波;
  • 频域滤波;
  • 图像复原;
  • 形态学;
  • 分割。

不建议第一次学习就逐字啃完。

正确方式:

老师讲到哪一章,再把教材对应章节读一遍。


16.2 MATLAB 配套书

可以寻找:

Digital Image Processing Using MATLAB

通常简称 DIPUM。

它最大的价值是:

把 Gonzalez 的理论与 MATLAB 实现结合起来。


16.3 中文教材

如果学校有指定教材,优先:

课堂教材 > 其他教材

因为:

  • 符号习惯;
  • 章节顺序;
  • 考试范围

通常以任课老师为准。

中文资料适合快速入门,Gonzalez 适合深入理解。


16.4 MathWorks 官方文档

非常推荐。

重点查:

Image Processing Toolbox

遇到函数不要只搜索博客,而应该形成习惯:

TEXT
先看官方文档
↓
看 Syntax
↓
看 Examples
↓
看 Input Arguments
↓
看 Output Arguments 

例如学习:

MATLAB
imadjust 

不要只知道能调亮度,还应该查:

  • 输入范围;
  • Gamma 参数;
  • 输出范围。

16.5 MATLAB 官方示例

很多图像处理函数有完整 Demo。

建议搜索:

TEXT
MATLAB image enhancement example
MATLAB image segmentation example
MATLAB image filtering example
MATLAB morphology example 

看官方 Demo 的重点不是复制代码,而是看:

MATLAB 官方怎样组织一个完整图像处理流程。


16.6 Python / OpenCV

课程如果主要用 MATLAB,不要一开始同时学两套工具。

建议:

TEXT
课程阶段:MATLAB
↓
掌握原理
↓
课程后期:OpenCV / Python 

Python 推荐:

  • NumPy;
  • Matplotlib;
  • OpenCV;
  • scikit-image。

这样以后做计算机视觉和深度学习会更顺畅。


16.7 推荐进一步掌握的 NumPy 对应关系

MATLAB:

MATLAB
I = imread(...) 

Python:

PYTHON
import cv2
I = cv2.imread(...) 

MATLAB:

MATLAB
fft2 

NumPy:

PYTHON
np.fft.fft2 

掌握这种迁移后你会发现:

真正重要的是算法,不是软件。


16.8 视频资源怎么选

选择课程视频时优先满足:

  1. 使用 Gonzalez 体系;
  2. 有数学解释;
  3. 有图像例子;
  4. 有 MATLAB 实验;
  5. 不只是念 PPT。

可以在高校公开课平台、B站、MOOC 平台检索:

TEXT
数字图像处理 Gonzalez
数字图像处理 MATLAB
图像处理 傅里叶变换
数字图像处理 形态学
数字图像处理 图像分割 

不要沉迷于“收藏很多课”。

选一个主视频系列即可。


十七、一个完整的 12 周学习计划

假设每周投入:

5∼8小时5\sim8\text{小时}

Week 1:图像基础

学习:

  • 数字图像;
  • 采样;
  • 量化;
  • 分辨率;
  • 位深;
  • 图像类型。

MATLAB:

MATLAB
imread
imshow
size
class
min
max 

验收:

能解释一张图在 MATLAB 里是什么数据。


Week 2:数据类型与像素运算

学习:

  • uint8;
  • uint16;
  • double;
  • 饱和;
  • 类型转换。

实验:

TEXT
+80
-100
乘法
除法
绝对值 

重点观察:

TEXT
uint8 运算
vs
double 运算 

Week 3:灰度变换

学习:

  • 负片;
  • 对数;
  • Gamma;
  • 分段线性;
  • 对比度拉伸。

完成一组 CT 图像增强实验。


Week 4:直方图

学习:

  • 直方图;
  • 累计直方图;
  • 均衡化;
  • CLAHE。

要求:

能通过直方图解释图像为什么偏暗、偏亮或对比度低。


Week 5:空间滤波

学习:

  • 卷积;
  • 均值;
  • Gaussian;
  • 中值。

完成:

不同噪声 + 不同滤波器对比实验。


Week 6:锐化与边缘

学习:

  • 梯度;
  • Sobel;
  • Laplacian;
  • 高提升。

要求:

能从数学角度解释边缘为什么对应高频。


Week 7:傅里叶变换

学习:

  • DFT;
  • FFT;
  • 频谱;
  • fftshift;
  • 幅值 / 相位。

这一周不要追求速度。

这是课程难点。


Week 8:频域滤波

学习:

  • LPF;
  • HPF;
  • Ideal;
  • Butterworth;
  • Gaussian。

要求:

能把频域滤波和空间域效果对应起来。


Week 9:图像复原

学习:

  • 噪声模型;
  • 退化模型;
  • 逆滤波;
  • Wiener;
  • MSE / PSNR / SSIM。

Week 10:形态学

学习:

  • 腐蚀;
  • 膨胀;
  • 开;
  • 闭;
  • 填洞;
  • 连通域。

建议使用大量小型二值图手算。


Week 11:分割

学习:

  • 阈值;
  • Otsu;
  • Sobel;
  • Canny;
  • 区域方法。

尝试 CT 肺区域分割。


Week 12:综合项目

完成:

CT / 肺结节图像处理综合实验。

要求有:

TEXT
原始图像
↓
增强
↓
去噪
↓
分割
↓
形态学
↓
候选目标
↓
结果评价 

最终写成一份完整实验报告。


十八、每章自测清单

学完每章以后不要问:

“我看完了吗?”

而应该问:

“我会不会?”


图像基础

  • 能解释采样和量化
  • 能计算图像存储空间
  • 能区分二值、灰度、索引和 RGB
  • 能解释 uint8
  • 能解释 double
  • 能解释 imshow 范围
  • 会 4 邻域和 8 邻域
  • 能判断连通性

灰度增强

  • 会负片变换
  • 会对数变换
  • 会 Gamma
  • 会对比度拉伸
  • 会读直方图
  • 理解均衡化
  • 知道 CLAHE 的优缺点

空间滤波

  • 理解卷积
  • 会手算 3×3
  • 会均值滤波
  • 会 Gaussian
  • 会中值
  • 会 Sobel
  • 会 Laplacian
  • 能解释平滑和锐化

频率域

  • 知道频率是什么
  • 理解低频和高频
  • 会 fft2
  • 会 fftshift
  • 会画频谱
  • 理解 LPF
  • 理解 HPF
  • 理解卷积定理

复原

  • 理解退化模型
  • 知道常见噪声
  • 理解逆滤波问题
  • 知道 Wiener 思想
  • 会 MSE
  • 会 PSNR
  • 知道 SSIM

形态学

  • 会腐蚀
  • 会膨胀
  • 会开运算
  • 会闭运算
  • 会填孔
  • 会去除小目标
  • 能根据问题选择结构元素

分割

  • 理解阈值
  • 会 Otsu
  • 会 Canny
  • 会连通域
  • 会 regionprops
  • 能设计简单分割流程

十九、容易踩的坑


19.1 只会 MATLAB 函数,不懂原理

例如:

MATLAB
J = medfilt2(I); 

不能算真正掌握。

必须知道:

为什么中值滤波对椒盐噪声有效。


19.2 忽略数据类型

这是最常见错误。

做每一个实验之前都建议运行:

MATLAB
class(I)
min(I(:))
max(I(:)) 

19.3 混淆处理结果和显示结果

例如:

MATLAB
imshow(double(I)) 

显示不正常,并不一定意味着数据错误。

需要区分:

数据本身
显示映射


19.4 只看图片,不看数值

推荐形成习惯:

MATLAB
min
max
mean
std
imhist 

一起观察。


19.5 参数全用默认值

应该主动研究:

TEXT
窗口大小
σ
阈值
结构元素大小
截止频率
滤波阶数 

这会让你真正理解算法。


19.6 图像增强和分割混为一谈

增强:

让图像更适合观察或后续处理。

分割:

确定目标区域。

两者目标不同。


19.7 频域只会背 FFT 代码

真正要理解的是:

TEXT
图像变化快
→ 高频多

图像变化慢
→ 低频多 

二十、从数字图像处理衔接计算机视觉

学完这门课后,非常适合继续学习:

TEXT
数字图像处理
↓
传统计算机视觉
↓
机器学习
↓
深度学习
↓
CNN
↓
图像分类
目标检测
图像分割
医学图像分析 

数字图像处理并不会因为深度学习出现而“过时”。

相反,它能够帮助你理解:

  • 卷积;
  • 边缘;
  • 频率;
  • 图像增强;
  • 数据预处理;
  • 图像噪声;
  • 图像分割;
  • 特征。

例如 CNN 中的卷积,本质上与你现在学习的空间滤波有非常直接的联系。


20.1 如果未来做计算机视觉

建议后续路线:

TEXT
数字图像处理
↓
Python + NumPy + OpenCV
↓
PyTorch
↓
CNN
↓
ResNet
↓
目标检测
↓
语义分割
↓
Transformer / ViT 

20.2 如果未来做医学图像

建议:

TEXT
数字图像处理
↓
DICOM
↓
CT / MRI 基础
↓
医学图像预处理
↓
分割
↓
Radiomics
↓
CNN / U-Net
↓
医学多模态 / 预后分析 

你现在学的:

  • 灰度处理;
  • 去噪;
  • 分割;
  • 形态学;
  • CT 图像;

都会直接用上。


二十一、最终验收标准

学完后,可以用下面四级标准判断自己的水平。


一级:及格水平

你能够:

  • 说出主要概念;
  • 会做基础题;
  • 会调用 MATLAB 函数;
  • 能完成老师指定实验。

二级:课程掌握水平

你能够:

  • 解释算法原理;
  • 手算简单例题;
  • 独立完成实验;
  • 分析参数;
  • 解释图像结果。

建议至少达到这里。


三级:优秀水平

你能够面对一张未知图像:

  1. 查看数据;
  2. 判断问题;
  3. 选择方法;
  4. 调整参数;
  5. 评价结果;
  6. 解释原因。

而不是依赖老师告诉你每一步。


四级:项目水平

给你一个问题:

从肺部 CT 中提取一个目标区域。

你能够独立设计:

TEXT
数据读取
↓
预处理
↓
图像增强
↓
噪声抑制
↓
区域分割
↓
形态学优化
↓
特征提取
↓
定量评价 

并写成:

  • MATLAB 程序;
  • 实验报告;
  • 技术流程图;
  • 结果分析。

达到这一层以后,数字图像处理就已经不再是一门单独课程,而是变成了你解决计算机视觉问题的一套基础工具。


最后:推荐的实际学习方式

如果让我给出一套最有效的学习方法,我建议始终坚持下面这个循环:

MERMAID
flowchart LR
A[预习概念] --> B[听课]
B --> C[手算小例子]
C --> D[MATLAB复现]
D --> E[修改参数]
E --> F[观察结果]
F --> G[解释原因]
G --> H[整理笔记]
H --> I[综合实验]
I --> A 

每学一个新算法,都至少回答六个问题:

① 它解决什么问题?

例如:

中值滤波解决椒盐噪声问题。

② 它的数学原理是什么?

例如:

使用邻域像素中值替换中心像素。

③ 参数是什么?

例如:

窗口大小。

④ 参数变大以后会发生什么?

例如:

去噪更强,但细节损失增加。

⑤ MATLAB 如何实现?

MATLAB
medfilt2 

⑥ 它有什么缺点?

例如:

大窗口会损失小结构。

只要你对主要算法都能回答这六个问题,这门课基本就真正学通了。


建议建立自己的数字图像处理知识库

最后建议建立如下目录:

TEXT
数字图像处理/
│
├── 01_数字图像基础/
├── 02_灰度变换/
├── 03_直方图/
├── 04_空间滤波/
├── 05_频率域/
├── 06_图像复原/
├── 07_形态学/
├── 08_图像分割/
├── 09_实验代码/
├── 10_CT综合实验/
├── 11_错题/
└── 12_期末复习/ 

每章维护三个文件:

TEXT
README.md      → 理论笔记
demo.m         → MATLAB代码
exercise.md    → 习题与错题 

长期下来,你得到的不仅是一份考试复习资料,而是一套以后做计算机视觉、医学图像处理也可以继续使用的个人知识库。


一句话总结

数字图像处理最重要的不是记住多少 MATLAB 函数,而是建立“图像数据 → 数学模型 → 算法处理 → 视觉现象 → 定量评价”的完整思维链。

当你看到一张图像时,开始自然地思考:

TEXT
它是什么类型?
灰度范围是多少?
问题是什么?
应该增强还是去噪?
应该在空间域还是频率域处理?
如何分割?
结果怎么评价? 

到这个阶段,就说明这门课真正学会了。

读者互动

0 次表情反馈 · 0 条评论

登录后可以发表评论、给评论点赞。去登录
还没有评论。