11111
本文最后更新于 75 天前,其中的信息可能已经有所发展或是发生改变。

七七八八

一、 图像基本概念与存储

  • 基本概念:图像是客观存在(“图”)与主观感觉(“像”)的结合。数字图像是由像素组成的二维矩阵,每个像素包含位置和灰度两个属性。
  • 图像分辨率:灰度分辨率是衡量图像中可分辨最小灰度差异的能力。空间分辨率和灰度分辨率相互独立,共同影响图像的清晰度和细节表现。
  • 色彩模型
    • RGB模型:基于红(R)、绿(G)、蓝(B)三原色构成的图像。
    • HSI模型:包含色调(H)、饱和度(S)和亮度(I)。亮度与彩色信息不相关,该模型与人类视觉对颜色的感知高度贴合。
    • HSV模型:由色调(H)、饱和度(S)和明暗度(V)组成,V表示人眼对物体表面与光源明暗大小的视觉感受。

数字图像是指由被称作像素的小块区域组成的二维矩阵。将物理图像行列划分后,每个小块区域称为像素

像素的两个要素:灰度和位置

灰度是指黑白图像中点的颜色深度,范围一般从0到255,即可用一个字节来表示,白色为255 ,黑色为0,故黑白图片也称灰度图像

黑白图像(二值图像)

    是指图像的每个像素只能是黑或者白,没有中间的过渡

灰度图像是指各像素信息由一个量化的灰度级来描述的图像,没有彩色信息。

彩色图像是指每个像素的信息由RGB三原色构成的图像,其中RGB是由不同的灰度级来描述的

图像基本运算分为:几何运算,代数运算,逻辑运算,点运算

image-20260702212715700
image-20260702212731081

图像增强的目的:1提高图像清晰度,改善视觉效果。2从图像中获取更多有用信息。

图像增强分为空间域频率域 两大类

空间域增强算法的基础是灰度映射变换,主要有直接灰度变换直方图增强,彩色处理等。

频率域增强算法的基础是傅里叶变换和滤波技术,主要有低通滤波,高通滤波,同态滤波

直方图修正法包括直方图均衡化和直方图规定化两类。

图像的插值运算:最临近插值,双线性插值,双三次插值

图像的缩放处理分为图像的缩小和图像的放大处理

当0<kx ,ky<1,则实现图像的缩小处理。

当kx,ky > 1,则实现图像的放大处理

加法运算

98db69343ebe7740574eae475300d40
665bdd8a88c6c79835742c77f47d2ed

均衡化直方图

image-20260630202711034

画表:

1. 原灰度级 (rk)01234567
2. 原概率 (p(r_k))0.250.200.150.100.080.070.050.10
3. 累加概率 (\Sigma p)0.250.450.600.700.780.850.901.00
4. 乘 (L-1) 也就是 \times 71.753.154.204.905.465.956.307.00
5. 四舍五入得出新灰度 (s_k)23455667

将新灰度对应下表填入后对应原灰度的概率值 注意:表中3,4和5,6的灰度值重复了就合并概率!!

均衡后灰度 (s)01234567
新概率 p(s)000.250.200.150.180.120.10

画图:

image-20260630202952570

均值滤波

1dbb0543-f080-40e0-b393-4526df473a1d
ff0e8a26-e567-4190-bd7f-b21064d67f57

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,翻译成人话就是:

  1. 主对角线相减 (H_1): 左上角像素 减去 右下角像素,取绝对值。
  2. 副对角线相减 (H_2): 右上角像素 减去 左下角像素,取绝对值。
  3. 求和: 把上面两个绝对值加起来,填入左上角的位置。

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等等算子

50bd8a3328cc3358dedc1a6a35a6172

没问题,为了让你能彻底看懂,我们把所有步骤展开,进行完整的计算。

在处理这类题目时,由于没有给出边缘填充(如补零)的指示,最标准的做法是只计算算子能完整覆盖的内部像素(忽略边缘无法计算的部分)。

原图像矩阵为:

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}

暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇