数字图像分析

1.视觉过程

视觉过程

2.成像变换

针孔相机模型中介绍的一样。

3.像素间的邻接,连接和连通

在数字图像处理中,像素间的邻接连接连通是描述像素空间关系的核心概念,直接影响图像分割、目标识别和区域分析等任务。以下通过分层结构详细讲解:


一、像素邻接(Adjacency)

邻接定义像素之间的直接邻近关系,是连接和连通的基础。邻接类型由像素间的位置关系决定:

在这里插入图片描述


二、像素连接(Connectivity)

连接描述像素间是否通过邻接路径关联,需同时满足:

  1. 空间邻接(如4或8邻接);
  2. 属性一致(如灰度值、颜色相似性)。
连接类型
  • 4-连接:仅允许4-邻接。
  • 8-连接:允许8-邻接。
  • m-连接(混合连接)
    4-邻接 or (对角邻接且不存在 4-邻接)
    混合连接的应用:消除8-连接可能产生的歧义性(确保路径唯一性,避免绕路歧义)
    在这里插入图片描述

三、像素连通(Connectedness)

连通是区域级概念,指一组像素通过连接关系形成的整体。

1. 通路(Path)
  • 定义:由一系列邻接像素组成的序列,如 P = { p 1 , p 2 , . . . , p n } P = \{p_1, p_2, ..., p_n\} P={p1,p2,...,pn},其中 p i p_i pi p i + 1 p_{i+1} pi+1 邻接。
2. 连通集(Connected Component)
  • 定义:图像中通路的像素集合。
3. 全局与局部连通性
  • 全局连通:整个区域通过路径连接。
  • 局部连通:区域内部可能存在孔洞(需结合背景邻接规则处理)。

四、邻接、连接与连通的关系

概念 定义 依赖条件 应用场景
邻接 像素间的直接邻近关系 仅空间位置(4/8邻域) 边缘检测、邻域操作
连接 通过邻接路径关联 邻接规则 + 属性一致性 区域生长、路径搜索
连通 由连接像素构成的完整区域 所有像素通过路径互连 目标分割、物体计数

五、像素集合的连接和连通

  • 对2个图像子集 S 和 T 来说,如果 S 中的一个或一些像素与 T 中的一个或一些像素连接,则可以说2个图像子集 S 和 T 是连接的。
  • 完全在一个图像子集中的像素组成的通路上的像素集合构成该图像子集中的一个连通组元

六、数学表示与图论视角

  • 图模型:将图像视为图 G = ( V , E ) G=(V,E) G=(V,E)
    • 节点(V):像素。
    • 边(E):邻接关系(如4或8邻接)。
  • 连通分量:图中的连通子图对应图像中的连通区域。

3.像素间的距离

像素间的距离是数字图像处理中用于衡量两个像素在空间位置上差异的数学工具,直接影响图像分析、目标检测、形态学操作等任务。常见的距离度量包括欧氏距离曼哈顿距离棋盘距离,每种距离有其独特的定义、计算方式与应用场景。


一、基本概念

1. 像素坐标
  • 图像中的像素按二维网格排列,位置由坐标 ( i , j ) (i, j) (i,j) 表示(行 i i i,列 j j j)。
2. 距离的定义
  • 对于像素 p 1 = ( x 1 , y 1 ) p_1=(x_1, y_1) p1=(x1,y1) p 2 = ( x 2 , y 2 ) p_2=(x_2, y_2) p2=(x2,y2) p 3 = ( x 3 , y 3 ) p_3=(x_3, y_3) p3=(x3,y3),距离 D ( P ) D(P) D(P) 需满足:
    • 非负性 D ≥ 0 D \geq 0 D0,当且仅当 p 1 = p 2 p_1 = p_2 p1=p2使得 D = 0 D=0 D=0
    • 对称性 D ( p 1 , p 2 ) = D ( p 2 , p 1 ) D(p_1, p_2) = D(p_2, p_1) D(p1,p2)=D(p2,p1)
    • 三角不等式 D ( p 1 , p 3 ) ≤ D ( p 1 , p 2 ) + D ( p 2 , p 3 ) D(p_1, p_3) \leq D(p_1, p_2) + D(p_2, p_3) D(p1,p3)D(p1,p2)+D(p2,p3)

二、常见距离类型

1. 欧氏距离(Euclidean Distance)
  • 定义:两点间的直线距离,对应几何意义上的最短路径。
  • 公式
    D e = ( x 2 − x 1 ) 2 + ( y 2 − y 1 ) 2 D_{\text{e}} = \sqrt{(x_2 - x_1)^2 + (y_2 - y_1)^2} De=(x2x1)2+(y2y1)2
  • 特点
    • 符合人类直觉,但计算涉及平方和开根号,效率较低。
    • 适用于需要精确几何距离的场景(如圆检测、图像配准)。
  • 示例
    • 两点 (2,3) 和 (5,7) 的欧氏距离为:
      ( 5 − 2 ) 2 + ( 7 − 3 ) 2 = 9 + 16 = 5 \sqrt{(5-2)^2 + (7-3)^2} = \sqrt{9 + 16} = 5 (52)2+(73)2 =9+16 =5
2. 曼哈顿距离(Manhattan Distance)
  • 定义:沿网格线行走的路径长度,仅允许水平或垂直移动。
  • 公式
    D 8 = ∣ x 2 − x 1 ∣ + ∣ y 2 − y 1 ∣ D_{\text{8}} = |x_2 - x_1| + |y_2 - y_1| D8=x2x1+y2y1
  • 别名:城市街区距离(City Block Distance)、L1距离。
  • 特点
    • 计算速度快(仅需加减和绝对值)。
    • 适用于离散网格环境(如机器人路径规划、二值图像形态学操作)。
  • 示例
    • 两点 (2,3) 和 (5,7) 的曼哈顿距离为:
      ∣ 5 − 2 ∣ + ∣ 7 − 3 ∣ = 3 + 4 = 7 |5-2| + |7-3| = 3 + 4 = 7 ∣52∣+∣73∣=3+4=7
3. 棋盘距离(Chessboard Distance)
  • 定义:允许沿对角线移动时的最大单轴距离。
  • 公式
    D 4 = max ⁡ ( ∣ x 2 − x 1 ∣ , ∣ y 2 − y 1 ∣ ) D_{\text{4}} = \max\left(|x_2 - x_1|, |y_2 - y_1|\right) D4=max(x2x1,y2y1)
  • 别名:切比雪夫距离(Chebyshev Distance)、L∞距离。
  • 特点
    • 反映“一步可达”的范围,适合八邻域操作。
    • 用于图像膨胀/腐蚀(形态学)、边缘检测。
  • 示例
    • 两点 (2,3)和(5,7) 的棋盘距离为:
      max ⁡ ( ∣ 5 − 2 ∣ , ∣ 7 − 3 ∣ ) = max ⁡ ( 3 , 4 ) = 4 \max(|5-2|, |7-3|) = \max(3, 4) = 4 max(∣52∣,∣73∣)=max(3,4)=4

对比与应用场景

距离类型 公式 计算速度 适用场景
欧氏距离 Δ x 2 + Δ y 2 \sqrt{\Delta x^2 + \Delta y^2} Δx2+Δy2 较慢 几何测量、图像配准、圆检测
曼哈顿距离 ∣ x 2 − x 1 ∣ + ∣ y 2 − y 1 ∣ |x_2 - x_1| + |y_2 - y_1| x2x1+y2y1 路径规划、形态学操作(4-邻域)
棋盘距离 max ⁡ ( ∣ x 2 − x 1 ∣ , ∣ y 2 − y 1 ∣ ) \max\left(|x_2 - x_1|, |y_2 - y_1|\right) max(x2x1,y2y1) 最快 形态学操作(8-邻域)、区域生长算法

三、距离变换

距离变换(Distance Transform) 是数字图像处理中的一种操作,用于计算图像中每个像素到最近目标边缘或背景的最短距离。它广泛应用于图像分割、形态学操作、骨架提取、路径规划等领域。


1.基本概念
  • 输入:通常为二值图像(前景为白色/1,背景为黑色/0)。
  • 输出:与输入同尺寸的灰度图像,每个像素值为其到最近背景像素的距离值
  • 核心思想:为每个前景像素标注其与最近背景的几何距离,形成“距离场”。

2.算法种类
  1. 暴力法(Brute-Force)
  • 步骤
    1. 遍历每个前景像素。
    2. 计算该像素到所有背景像素的距离,取最小值。
  • 缺点:时间复杂度高(O(N²)),仅适用于小图像。
  1. 倒角法(Chamfer Distance)
  • 核心思想:通过局部邻域传播逐步优化距离值。
  • 步骤
    1. 初始化:背景像素距离为0,前景为无穷大。
    2. 前向扫描:从上到下、从左到右,用邻近像素更新当前距离。
    3. 后向扫描:从下到上、从右到左,进一步优化距离值。
  • 权重模板:常见3×3模板(如3-4权重)近似欧氏距离。
  • 复杂度:线性时间(O(N)),效率高。
  1. 快速行进算法(Fast Marching Method)
  • 适用场景:高精度欧氏距离变换。
  • 原理:模拟波前传播,优先处理距离较近的像素(类似Dijkstra算法)。
  • 步骤
    1. 初始化背景像素为0,加入优先队列。
    2. 按距离值从小到大处理队列,更新邻居像素的距离。
  • 优点:精确支持欧氏距离,可处理复杂形状。

3.示例与可视化

以下是**倒角法(Chamfer Distance)**的步骤图解,通过一个简单的二值图像示例演示其计算过程。假设使用经典的 3-4 权重模板(即水平/垂直邻域权重为3,对角线邻域权重为4),逐步优化距离值。


输入图像(5×5,0为背景,1为前景):

行/列 | 1   2   3   4   5
-----|-------------------
1    | 0   0   0   0   0
2    | 0   1   1   1   0
3    | 0   1   1   1   0
4    | 0   1   1   1   0
5    | 0   0   0   0   0

步骤1:前向扫描(从上到下,从左到右)
规则:每个像素检查左、左上、上、右上四个邻域(若存在),计算候选距离并取最小值。


第2行处理(行索引2)

  • 列2(坐标(2,2),原值∞):
    • 左邻(2,1):0(背景) → 0 + 3 = 3
    • 上邻(1,2):0(背景) → 0 + 3 = 3
    • 候选值:3 → 更新为3
  • 列3(坐标(2,3),原值∞):
    • 左邻(2,2):3 → 3 + 3 = 6
    • 上邻(1,3):0 → 0 + 3 = 3
    • 候选值:3 → 更新为3
  • 列4(坐标(2,4),原值∞):
    • 左邻(2,3):3 → 3 + 3 = 6
    • 上邻(1,4):0 → 0 + 3 = 3
    • 候选值:3 → 更新为3

更新后第2行

0   0   0   0   0
0   3   3   3   0
0  ∞   ∞   ∞   0
0  ∞   ∞   ∞   0
0   0   0   0   0

第3行处理(行索引3)

  • 列2(坐标(3,2),原值∞):
    • 左邻(3,1):0 → 0 + 3 = 3
    • 上邻(2,2):3 → 3 + 3 = 6
    • 候选值:3 → 更新为3
  • 列3(坐标(3,3),原值∞):
    • 左邻(3,2):3 → 3 + 3 = 6
    • 上邻(2,3):3 → 3 + 3 = 6
    • 左上邻(2,2):3 → 3 + 4 = 7
    • 候选值:6 → 更新为6
  • 列4(坐标(3,4),原值∞):
    • 左邻(3,3):6 → 6 + 3 = 9
    • 上邻(2,4):3 → 3 + 3 = 6
    • 右上邻(2,5):0 → 0 + 4 = 4(关键修正点)
    • 候选值:4 → 更新为4

更新后第3行

0   0   0   0   0
0   3   3   3   0
0   3   6   4   0
0  ∞   ∞   ∞   0
0   0   0   0   0

第4行处理(行索引4)

  • 列2(坐标(4,2),原值∞):
    • 左邻(4,1):0 → 0 + 3 = 3
    • 上邻(3,2):3 → 3 + 3 = 6
    • 候选值:3 → 更新为3
  • 列3(坐标(4,3),原值∞):
    • 左邻(4,2):3 → 3 + 3 = 6
    • 上邻(3,3):6 → 6 + 3 = 9
    • 候选值:6 → 更新为6
  • 列4(坐标(4,4),原值∞):
    • 左邻(4,3):6 → 6 + 3 = 9
    • 上邻(3,4):4 → 4 + 3 = 7
    • 候选值:7 → 更新为7

更新后第4行

0   0   0   0   0
0   3   3   3   0
0   3   6   4   0
0   3   6   7   0
0   0   0   0   0

步骤2:后向扫描(从下到上,从右到左)
规则:每个像素检查右、下、右下、左下四个邻域(若存在),进一步优化距离值。


第4行处理(行索引4)

  • 列4(坐标(4,4),当前值7):
    • 右邻(4,5):0 → 0 + 3 = 3 → 7 vs 3 → 不更新
    • 下邻(5,4):0 → 0 + 3 = 3 → 7 vs 3 → 不更新
  • 列3(坐标(4,3),当前值6):
    • 右邻(4,4):7 → 7 + 3 = 10 → 6 vs 10 → 不更新
    • 下邻(5,3):0 → 0 + 3 = 3 → 6 vs 3 → 更新为3
  • 列2(坐标(4,2),当前值3):
    • 右邻(4,3):3 → 3 + 3 = 6 → 3 vs 6 → 不更新

更新后第4行

0   0   0   0   0
0   3   3   3   0
0   3   6   4   0
0   3   3   7   0
0   0   0   0   0

第3行处理(行索引3)

  • 列4(坐标(3,4),当前值4):
    • 右邻(3,5):0 → 0 + 3 = 3 → 4 vs 3 → 更新为3
    • 下邻(4,4):7 → 7 + 3 = 10 → 3 vs 10 → 保持3
  • 列3(坐标(3,3),当前值6):
    • 右邻(3,4):3 → 3 + 3 = 6 → 6 vs 6 → 不更新
    • 下邻(4,3):3 → 3 + 3 = 6 → 6 vs 6 → 不更新
  • 列2(坐标(3,2),当前值3):
    • 右邻(3,3):6 → 6 + 3 = 9 → 3 vs 9 → 不更新

更新后第3行

0   0   0   0   0
0   3   3   3   0
0   3   6   3   0
0   3   3   7   0
0   0   0   0   0

第2行处理(行索引2)

  • 列4(坐标(2,4),当前值3):
    • 右邻(2,5):0 → 0 + 3 = 3 → 3 vs 3 → 不更新
    • 下邻(3,4):3 → 3 + 3 = 6 → 3 vs 6 → 不更新
  • 列3(坐标(2,3),当前值3):
    • 右邻(2,4):3 → 3 + 3 = 6 → 3 vs 6 → 不更新
    • 下邻(3,3):6 → 6 + 3 = 9 → 3 vs 9 → 不更新
  • 列2(坐标(2,2),当前值3):
    • 右邻(2,3):3 → 3 + 3 = 6 → 3 vs 6 → 不更新

最终的距离变换结果

0   0   0   0   0
0   3   3   3   0
0   3   6   3   0
0   3   3   7   0
0   0   0   0   0

4.倒角法核心优势
  • 线性时间复杂度:两次扫描即可完成,效率极高。
  • 灵活适应不同距离:通过调整权重模板近似欧氏、曼哈顿等距离。
  • 适用场景:实时图像处理(如机器人导航、工业检测)。

5.代码实现(Python示例)
import numpy as np
from scipy.ndimage import distance_transform_edt

# 输入二值图像(0表示背景,1表示前景)
binary_image = np.array([
    [0, 0, 0, 0, 0],
    [0, 1, 1, 1, 0],
    [0, 1, 1, 1, 0],
    [0, 1, 1, 1, 0],
    [0, 0, 0, 0, 0]
])

# 计算欧氏距离变换
distance_map = distance_transform_edt(binary_image)

print("欧氏距离变换结果:")
print(distance_map)

输出

欧氏距离变换结果:
[[0.   0.   0.   0.   0.  ]
 [0.   1.   1.   1.   0.  ]
 [0.   1.   1.414 1.   0.  ]
 [0.   1.   1.   1.   0.  ]
 [0.   0.   0.   0.   0.  ]]

6.算法选择建议
算法 距离类型 精度 速度 适用场景
倒角法 近似欧氏/曼哈顿 实时处理、低计算资源环境
快速行进算法 精确欧氏 较慢 医学图像、高精度需求
暴力法 任意距离 极慢 小图像或理论验证

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐