七七八八
一、 图像基本概念与存储
- 基本概念:图像是客观存在(“图”)与主观感觉(“像”)的结合。数字图像是由像素组成的二维矩阵,每个像素包含位置和灰度两个属性。
- 图像分辨率:灰度分辨率是衡量图像中可分辨最小灰度差异的能力。空间分辨率和灰度分辨率相互独立,共同影响图像的清晰度和细节表现。
- 色彩模型:
- RGB模型:基于红(R)、绿(G)、蓝(B)三原色构成的图像。
- HSI模型:包含色调(H)、饱和度(S)和亮度(I)。亮度与彩色信息不相关,该模型与人类视觉对颜色的感知高度贴合。
- HSV模型:由色调(H)、饱和度(S)和明暗度(V)组成,V表示人眼对物体表面与光源明暗大小的视觉感受。
数字图像是指由被称作像素的小块区域组成的二维矩阵。将物理图像行列划分后,每个小块区域称为像素
像素的两个要素:灰度和位置
灰度是指黑白图像中点的颜色深度,范围一般从0到255,即可用一个字节来表示,白色为255 ,黑色为0,故黑白图片也称灰度图像
黑白图像(二值图像)
是指图像的每个像素只能是黑或者白,没有中间的过渡
灰度图像是指各像素信息由一个量化的灰度级来描述的图像,没有彩色信息。
彩色图像是指每个像素的信息由RGB三原色构成的图像,其中RGB是由不同的灰度级来描述的
图像基本运算分为:几何运算,代数运算,逻辑运算,点运算


图像增强的目的:1提高图像清晰度,改善视觉效果。2从图像中获取更多有用信息。
图像增强分为空间域 和 频率域 两大类
空间域增强算法的基础是灰度映射变换,主要有直接灰度变换,直方图增强,彩色处理等。
频率域增强算法的基础是傅里叶变换和滤波技术,主要有低通滤波,高通滤波,同态滤波等
直方图修正法包括直方图均衡化和直方图规定化两类。
图像的插值运算:最临近插值,双线性插值,双三次插值
图像的缩放处理分为图像的缩小和图像的放大处理
当0<kx ,ky<1,则实现图像的缩小处理。
当kx,ky > 1,则实现图像的放大处理
加法运算


均衡化直方图

画表:
| 1. 原灰度级 (rk) | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 |
|---|---|---|---|---|---|---|---|---|
| 2. 原概率 (p(r_k)) | 0.25 | 0.20 | 0.15 | 0.10 | 0.08 | 0.07 | 0.05 | 0.10 |
| 3. 累加概率 (\Sigma p) | 0.25 | 0.45 | 0.60 | 0.70 | 0.78 | 0.85 | 0.90 | 1.00 |
| 4. 乘 (L-1) 也就是 \times 7 | 1.75 | 3.15 | 4.20 | 4.90 | 5.46 | 5.95 | 6.30 | 7.00 |
| 5. 四舍五入得出新灰度 (s_k) | 2 | 3 | 4 | 5 | 5 | 6 | 6 | 7 |
将新灰度对应下表填入后对应原灰度的概率值 注意:表中3,4和5,6的灰度值重复了就合并概率!!
| 均衡后灰度 (s) | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 |
|---|---|---|---|---|---|---|---|---|
| 新概率 p(s) | 0 | 0 | 0.25 | 0.20 | 0.15 | 0.18 | 0.12 | 0.10 |
画图:

均值滤波


1. 准备“作案工具”:模板 H_1
书上给了一个 H_1 矩阵,前面乘了一个 \frac{1}{9}。
这个东西叫做掩膜(Mask)、核(Kernel)*或*模板。它的意思就是:我要框住 3 \times 3 一共 9 个格子,把这 9 个数字加起来,然后除以 9(求平均)。
2. 开始滑动计算(书上的例子)
书上以坐标 (1,1) 为例。这里的坐标是从 0 开始算的,所以 (1,1) 指的是第 2 行、第 2 列的那个数字:2。
把我们准备好的 3 \times 3 模板,正中心对准这个 2 盖下去。
此时模板覆盖的 9 个数字是:
- 第一行:1, 2, 1
- 第二行:1, 2, 2
- 第三行:5, 7, 6
计算过程:把这 9 个数全加起来,再除以 9。
\frac{1+2+1+1+2+2+5+7+6}{9} = \frac{27}{9} = 3
算出来等于 3。所以,在结果矩阵 g 中,这个位置原来的 2 就被替换成了 3。
3. 我们自己来练一个:算它旁边的那个数
为了验证你懂了,我们算一下 (1,1) 右边那个格子。也就是原图 f 里第 2 行、第 3 列的那个 2。
把 3 \times 3 模板的中心对准它盖下去,此时覆盖的 9 个数字变成了:
- 第一行:2, 1, 4
- 第二行:2, 2, 3
- 第三行:7, 6, 8
计算过程:
\frac{2+1+4+2+2+3+7+6+8}{9} = \frac{35}{9} \approx 3.88
书上规定了要“四舍五入”,所以 3.88 变成 4。
你去翻图 2 里的结果矩阵 g,第 2 行、第 3 列的数字是不是刚好就是 4!
以此类推,这个模板就像推土机一样,一格一格扫过整张图片,把所有数字都更新一遍。
中值滤波
和均值滤波一样,3×3矩阵依次往下框选。对矩阵框选出的数字进行排序,选出中心值替换
1. 计算坐标 (1,1) 的中值
窗口覆盖的 9 个数字是:
- 第一行:1, 2, 1
- 第二行:1, 2, 2 (粗体为中心像素)
- 第三行:5, 7, 6
第一步:从小到大排序
1, 1, 1, 2, \mathbf{2}, 2, 5, 6, 7
第二步:找正中间(第 5 个数)
数一下,排在第 5 位的是 2。
所以,中值滤波后的结果是 2。(刚好和原值一样)
roberts算子
你前面学的“均值滤波”和“中值滤波”是为了平滑图像(去噪)。而这个 Roberts(罗伯茨)算子,它的目的完全相反,它是用来做锐化图像(边缘检测)的。
你可以这样理解:如果一块区域全是一模一样的颜色(平坦区),那它不重要,计算结果最好是 0;如果一个地方颜色突然发生了剧变(比如从 3 突变成了 7),那这里肯定是一条“边界/轮廓”,我们要把它找出来并且放大!
怎么找突变呢?最简单的数学方法就是求差(减法)。
1. Roberts 算子的核心:交叉相减(求梯度)
Roberts 算子用的也是 2 \times 2 的滑动窗口。但它不是把四个数加起来,而是对角线交叉相减,再把绝对值加起来。
你看书上的公式 (7-5):
g(x,y) = |f(x,y) – f(x+1, y+1)| + |f(x+1, y) – f(x, y+1)|
结合书上给的两个掩膜矩阵 H_1 和 H_2,翻译成人话就是:
- 主对角线相减 (H_1):
左上角像素减去右下角像素,取绝对值。 - 副对角线相减 (H_2):
右上角像素减去左下角像素,取绝对值。 - 求和: 把上面两个绝对值加起来,填入左上角的位置。
2. 跟着书上的例题 7.3 实操一下
原始矩阵 f 是一个 5 \times 5 的图。我们拿几个典型位置算一下,你就完全明白了。
情况 A:跨越边界的地方(有突变)
以点 (0,0) 为例(也就是最左上角的那个 3)。
用 2 \times 2 窗口盖上去,框住的四个数是:
Plaintext
3 3
3 7
- 主对角线相减的绝对值:|3 – 7| = |-4| = 4
- 副对角线相减的绝对值:|3 – 3| = 0
- 最终结果: 4 + 0 =
4。 (你核对一下结果矩阵 g,左上角是不是变成了 4!)
再比如算 (0,1),往右移一格,框住的四个数是:
Plaintext
3 3
7 7
- 主对角线相减的绝对值:|3 – 7| = 4
- 副对角线相减的绝对值:|3 – 7| = 4
- 最终结果: 4 + 4 =
8。(说明这里的颜色变化比上一个地方更剧烈,边缘特征更明显)
情况 B:平坦的地方(无变化)
我们来看矩阵正中间,点 (1,1),也就是那一堆 7 的中间。框住的四个数是:
Plaintext
7 7
7 7
- 主对角线相减的绝对值:|7 – 7| = 0
- 副对角线相减的绝对值:|7 – 7| = 0
- 最终结果: 0 + 0 =
0。(结果矩阵 g 中间那一片全变成了 0。因为这里是一大块纯色,没有边缘。)
3. ⚠️ 坑点注意:边缘怎么办?
你的原始矩阵是 5 \times 5,算出来的结果应该也是 5 \times 5。
但是!当你把 2 \times 2 窗口滑动到最后一行或者最后一列时,窗口就越界了,因为没有“右下角”或“右边”的像素给你减了。
你看例题解答里有一句极其关键的话:
“模板罩不住的像素点直接赋背景值 0”
所以,你看最终结果矩阵 g 的最下面一行和最右边一列,根本不用算,全部直接填 0。
robert等等算子

没问题,为了让你能彻底看懂,我们把所有步骤展开,进行完整的计算。
在处理这类题目时,由于没有给出边缘填充(如补零)的指示,最标准的做法是只计算算子能完整覆盖的内部像素(忽略边缘无法计算的部分)。
原图像矩阵为:
f=\begin{bmatrix}9&13&23&16\\11&15&22&19\\12&15&18&18\\10&8&12&14\end{bmatrix}
1. Roberts 算子锐化计算
Roberts 算子使用的是 2\times 2 的模板。因此,在 4\times 4 的矩阵中,它可以在左上角的 3\times 3 范围内滑动计算。我们将计算出 9 个锐化后的像素值。
公式:
梯度 G(x,y)=|f(x,y)-f(x+1,y+1)|+|f(x,y+1)-f(x+1,y)|
锐化结果 g(x,y)=f(x,y)+G(x,y)
逐个像素计算:
- 第1行:
- 计算 (1,1) 位置值为 9: 取矩阵 \begin{bmatrix}9&13\\11&15\end{bmatrix}G=|9-15|+|13-11|=6+2=8g=9+8=17
- 计算 (1,2) 位置值为 13: 取矩阵 \begin{bmatrix}13&23\\15&22\end{bmatrix}G=|13-22|+|23-15|=9+8=17g=13+17=30
- 计算 (1,3) 位置值为 23: 取矩阵 \begin{bmatrix}23&16\\22&19\end{bmatrix}G=|23-19|+|16-22|=4+6=10g=23+10=33
- 第2行:
- 计算 (2,1) 位置值为 11: 取矩阵 \begin{bmatrix}11&15\\12&15\end{bmatrix}G=|11-15|+|15-12|=4+3=7g=11+7=18
- 计算 (2,2) 位置值为 15: 取矩阵 \begin{bmatrix}15&22\\15&18\end{bmatrix}G=|15-18|+|22-15|=3+7=10g=15+10=25
- 计算 (2,3) 位置值为 22: 取矩阵 \begin{bmatrix}22&19\\18&18\end{bmatrix}G=|22-18|+|19-18|=4+1=5g=22+5=27
- 第3行:
- 计算 (3,1) 位置值为 12: 取矩阵 \begin{bmatrix}12&15\\10&8\end{bmatrix}G=|12-8|+|15-10|=4+5=9g=12+9=21
- 计算 (3,2) 位置值为 15: 取矩阵 \begin{bmatrix}15&18\\8&12\end{bmatrix}G=|15-12|+|18-8|=3+10=13g=15+13=28
- 计算 (3,3) 位置值为 18: 取矩阵 \begin{bmatrix}18&18\\12&14\end{bmatrix}G=|18-14|+|18-12|=4+6=10g=18+10=28
Roberts 算子最终得到的 3\times 3 结果矩阵:
g_{Roberts}=\begin{bmatrix}17&30&33\\18&25&27\\21&28&28\end{bmatrix}
2. Sobel 算子锐化计算
Sobel 算子使用的是 3\times 3 的模板。因此,在不补零的情况下,它只能计算原矩阵中心被完全包裹的 4 个像素,也就是 (2,2), (2,3), (3,2), (3,3) 处的值。
公式:
梯度 G=|G_x|+|G_y|
锐化结果 g=f+G
G_x 是将左右两列相减(第一列乘以-1,第三列乘以1,中间行权重加倍)。
G_y 是将上下两行相减(第一行乘以-1,第三行乘以1,中间列权重加倍)。
逐个像素计算:
- 计算 (2,2) 位置,中心值为 15: 取 3\times 3 邻域 \begin{bmatrix}9&13&23\\11&15&22\\12&15&18\end{bmatrix}G_x=(-9+23)+2\times(-11+22)+(-12+18)=14+22+6=42G_y=(-9-2\times13-23)+(12+2\times15+18)=-58+60=2G=|42|+|2|=44g=15+44=59
- 计算 (2,3) 位置,中心值为 22: 取 3\times 3 邻域 \begin{bmatrix}13&23&16\\15&22&19\\15&18&18\end{bmatrix}G_x=(-13+16)+2\times(-15+19)+(-15+18)=3+8+3=14G_y=(-13-2\times23-16)+(15+2\times18+18)=-75+69=-6G=|14|+|-6|=20g=22+20=42
- 计算 (3,2) 位置,中心值为 15: 取 3\times 3 邻域 \begin{bmatrix}11&15&22\\12&15&18\\10&8&12\end{bmatrix}G_x=(-11+22)+2\times(-12+18)+(-10+12)=11+12+2=25G_y=(-11-2\times15-22)+(10+2\times8+12)=-63+38=-25G=|25|+|-25|=50g=15+50=65
- 计算 (3,3) 位置,中心值为 18: 取 3\times 3 邻域 \begin{bmatrix}15&22&19\\15&18&18\\8&12&14\end{bmatrix}G_x=(-15+19)+2\times(-15+18)+(-8+14)=4+6+6=16G_y=(-15-2\times22-19)+(8+2\times12+14)=-78+46=-32G=|16|+|-32|=48g=18+48=66
Sobel 算子最终得到的 2\times 2 结果矩阵:
g_{Sobel}=\begin{bmatrix}59&42\\65&66\end{bmatrix}
3. Laplacian 算子锐化计算
Laplacian 也是 3\times 3 的模板,所以同样只计算中心的 4 个像素。这里采用最标准的十字型模板,即上、下、左、右相邻像素相加,减去 4 倍的中心像素。
公式:
二阶导数 \nabla^2 f = (上+下+左+右) – 4\times 中心
锐化结果 g = f – \nabla^2 f
逐个像素计算:
- 计算 (2,2) 位置,中心值为 15: 上=13, 左=11, 右=22, 下=15\nabla^2 f=(13+11+22+15)-4\times15=61-60=1g=15-1=14
- 计算 (2,3) 位置,中心值为 22: 上=23, 左=15, 右=19, 下=18\nabla^2 f=(23+15+19+18)-4\times22=75-88=-13g=22-(-13)=35
- 计算 (3,2) 位置,中心值为 15: 上=15, 左=12, 右=18, 下=8\nabla^2 f=(15+12+18+8)-4\times15=53-60=-7g=15-(-7)=22
- 计算 (3,3) 位置,中心值为 18: 上=22, 左=15, 右=18, 下=12\nabla^2 f=(22+15+18+12)-4\times18=67-72=-5g=18-(-5)=23
Laplacian 算子最终得到的 2\times 2 结果矩阵:
g_{Laplacian}=\begin{bmatrix}14&35\\22&23\end{bmatrix}
这是一道非常经典的数学形态学(Mathematical Morphology)题目,主要考察膨胀(Dilation)和腐蚀(Erosion)的具体矩阵运算方法。
为了让你能够清晰地掌握这道题的算法,我将通过结构元素的坐标映射,为你一步步拆解计算过程。
膨胀腐蚀运算
首先,从图片中我们可以提取出原图像矩阵 X 和结构元素 B:
X=\begin{bmatrix}0&0&1&1\\0&1&1&0\\1&1&1&0\\0&1&1&0\end{bmatrix}
B=\begin{bmatrix}0&1\\1&\langle1\rangle\end{bmatrix}
理解结构元素 B:
题目中特别标注了“加 \langle\rangle 的为结构元素参考点”。参考点(原点)位于 B 的右下角。
以参考点坐标为 (x, y),结构元素 B 中值为 1 的有效位置包括:
- 参考点自身:(x, y)
- 参考点的正上方:(x-1, y)
- 参考点的正左侧:(x, y-1)
2. 腐蚀运算(Erosion)计算过程
运算规则(“严苛的与逻辑”):
将结构元素 B 的参考点逐个对齐原图 X 中的每一个像素。只有当 B 中所有为 1 的位置,在原图 X 中对应位置也全部为 1 时,该中心点运算后的结果才为 1,否则为 0。(注意:若超出边界按 0 处理)。
转化为通俗的判定条件:
对于输出图像中的任意坐标 (x,y),只有当原图满足 当前点为 1 且 其正上方点为 1 且 其正左侧点为 1 时,输出才为 1。
逐个判定原图 X 中值为 1 的像素点:
- (1,3) 值为 1:其上方越界为 0,结果为 0。
- (1,4) 值为 1:其上方越界为 0,结果为 0。
- (2,2) 值为 1:上方 (1,2) 为 0,左侧 (2,1) 为 0,结果为 0。
- (2,3) 值为 1:上方 (1,3) 为 1,左侧 (2,2) 为 1。全为 1,结果为 1。
- (3,1) 值为 1:左侧越界为 0,结果为 0。
- (3,2) 值为 1:上方 (2,2) 为 1,左侧 (3,1) 为 1。全为 1,结果为 1。
- (3,3) 值为 1:上方 (2,3) 为 1,左侧 (3,2) 为 1。全为 1,结果为 1。
- (4,2) 值为 1:左侧 (4,1) 为 0,结果为 0。
- (4,3) 值为 1:上方 (3,3) 为 1,左侧 (4,2) 为 1。全为 1,结果为 1。
经过腐蚀运算后,得到最终腐蚀结果矩阵:
X\ominus B=\begin{bmatrix}0&0&0&0\\0&0&1&0\\0&1&1&0\\0&0&1&0\end{bmatrix}
3. 膨胀运算(Dilation)计算过程
运算规则(“宽容的或逻辑”):
在图像扫描法中,计算膨胀时我们需要将结构元素 B 旋转 180^\circ(即沿原点进行对称翻转),得到 \hat{B}。
原来 B 包含(自身、上、左),翻转后的 \hat{B} 包含(自身、下、右)。
将翻转后的参考点对齐原图中的每一个像素,只要覆盖范围内有任何一个点在原图中为 1,该中心点运算后的结果就为 1。
转化为通俗的判定条件:
对于输出图像中的任意坐标 (x,y),只要原图中 当前点为 1 或 其正下方点为 1 或 其正右侧点为 1,输出即为 1。
逐行扫描原图 X 进行判定:
- 第 1 行:
- (1,1):自身为 0,下方为 0,右侧为 0,结果为 0。
- (1,2):自身为 0,右侧 (1,3) 为 1,结果为 1。
- (1,3):自身为 1,结果为 1。
- (1,4):自身为 1,结果为 1。
- 第 2 行:
- (2,1):自身为 0,下方 (3,1) 为 1,结果为 1。
- (2,2):自身为 1,结果为 1。
- (2,3):自身为 1,结果为 1。
- (2,4):自身为 0,下方为 0,右侧越界,结果为 0。
- 第 3 行:
- (3,1):自身为 1,结果为 1。
- (3,2):自身为 1,结果为 1。
- (3,3):自身为 1,结果为 1。
- (3,4):自身为 0,下方为 0,右侧越界,结果为 0。
- 第 4 行:
- (4,1):自身为 0,右侧 (4,2) 为 1,结果为 1。
- (4,2):自身为 1,结果为 1。
- (4,3):自身为 1,结果为 1。
- (4,4):自身为 0,下方越界,右侧越界,结果为 0。
经过膨胀运算后,得到最终膨胀结果矩阵:
X\oplus B=\begin{bmatrix}0&1&1&1\\1&1&1&0\\1&1&1&0\\1&1&1&0\end{bmatrix}

