像素间的关系(邻接、连通、区域、边界、距离定义)

2024-09-07 07:52

本文主要是介绍像素间的关系(邻接、连通、区域、边界、距离定义),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

文章目录

      • 像素的相邻像素
        • 4邻域
        • D邻域
        • 8邻域
      • 邻接、连通、区域和边界
        • 邻接类型
        • 连通
        • 区域
        • 边界
      • 距离测度
        • 欧氏距离
        • 城市街区距离(city-block distance)
        • 棋盘距离(chessboard distance)
      • 参考

像素的相邻像素

4邻域

坐标 ( x , y ) (x,y) (x,y)处的像素 p p p有2个水平的相邻像素和2个垂直的相邻像素,它们的坐标是:
( x + 1 , y ) , ( x − 1 , y ) , ( x , y + 1 ) , ( x , y − 1 ) (x+1,y),(x-1,y),(x,y+1),(x,y-1) (x+1,y),(x1,y),(x,y+1),(x,y1)

这组像素称为 p p p4邻域,用 N 4 ( p ) N_4(p) N4(p)表示。

D邻域

p p p的4个对角相邻像素的坐标是:
( x + 1 , y + 1 ) , ( x + 1 , y − 1 ) , ( x − 1 , y + 1 ) , ( x − 1 , y − 1 ) (x+1,y+1),(x+1,y-1),(x-1,y+1),(x-1,y-1) (x+1,y+1),(x+1,y1),(x1,y+1),(x1,y1)
这组像素称为 p p pD邻域,用 N D ( p ) N_D(p) ND(p)表示。

8邻域

4邻域和D邻域合称为 p p p的8邻域,即 N 8 ( p ) = N 4 ( p ) + N D ( p ) N_8(p)=N_4(p)+N_D(p) N8(p)=N4(p)+ND(p)。点 p p p的相邻像素的图像位置集合称为 p p p的邻域,如果一个邻域包含 p p p,那么称该邻域为闭邻域,否则成为开邻域。

邻接、连通、区域和边界

V V V是用于定义邻接的灰度值集合。在二值图像中,指值为1的像素的邻接时, V = { 1 } V=\{1\} V={1}。在灰度图像中,这一概念相同,但集合 V V V通常包含更多的元素。例如,如果正在处理其值域为0到255的像素的邻接,那么集合 V V V可能是这256个值的任何一个子集。注意 V V V中的值可以不止一个,通常是一组相邻或相似的像素值集合。考虑三种类型的邻接:

邻接类型
  1. 4邻接: q q q在集合 N 4 ( p ) N_4(p) N4(p)中时,值在 V V V中的两个像素 p p p q q q是4邻接的。
  2. 8邻接: q q q在集合 N 8 ( p ) N_8(p) N8(p)中时,值在 V V V中的两个像素 p p p q q q是8邻接的。
  3. m m m邻接(也称混合邻接):满足以下两个条件之一
    1. q q q N 4 ( p ) N_4(p) N4(p)中。
    2. q q q N D ( p ) N_D(p) ND(p)中,但 N 4 ( p ) ∩ N 4 ( q ) N_4(p)\cap N_4(q) N4(p)N4(q)没有值在 V V V中的像素,那么值在V中的两个像素 p p p q q q m m m邻接的。

混合邻接用于消除8邻接的二义性。考虑下图的像素排列,并令 V = { 1 } V=\{1\} V={1}

image-20240906110439360

左图采用8邻接时,中间的1和右上角的1之间存在两条通路。二者之间是8邻接的,但并不是m邻接的(因为二者的 N 4 N_4 N4有交集正上方的1),因此如果采用m邻接方式,则如右图所示,中间的1和右上角的1之间仅存在一条通路。

从坐标为 ( x 0 , y 0 ) (x_0,y_0) (x0,y0)的像素 p p p到坐标 ( x n , y n ) (x_n,y_n) (xn,yn)的像素 q q q的数字通路(或曲线)是不同的像素序列,这些像素的坐标为:
( x 0 , y 0 ) , ( x 1 , y 1 ) , . . . , ( x n , y n ) (x_0,y_0),(x_1,y_1),...,(x_n,y_n) (x0,y0),(x1,y1),...,(xn,yn)
式中,点 ( x i , y i ) (x_i,y_i) (xi,yi)和点 ( x i − 1 , y i − 1 ) (x_{i-1},y_{i-1}) (xi1,yi1) 1 ≤ i ≤ n 1\le i \le n 1in时是邻接的。此时, n n n是通路的长度 ( x 0 , y 0 ) = ( x n , y n ) (x_0,y_0)=(x_n,y_n) (x0,y0)=(xn,yn)时,即起点和终点相同时,通路是闭合通路。

具体举例可以看参考链接。

在这里再提到一些最短通路的计算技巧:

  1. 8邻接中最短通路优先考虑斜线。
  2. m m m邻接中是在最短8通路的基础上,优先考虑斜线但需要考虑是否满足 m m m邻接的第二个条件。
  3. 4邻接中两个像素点是否存在通路可以通过看起点和终点是否有满足4邻接的像素点快速判断 。
连通

S S S表示图像中像素的一个子集。如果完全由 S S S中所有像素组成的两个像素 p p p q q q之间存在一个通路,那么称 p p p g g g S S S中是连通的。对于S中的任何像素 p p p,在 S S S中连通到该像素的像素集称为 S S S的连通分量。若S仅有一个连通分量,则集合S称为连通集。(表现为S中任意两个像素之间都是连通的

区域

R R R表示图像中像素的一个子集。若 R R R是一个连通集,则称 R R R为图像的一个区域。两个区域 R i R_i Ri R j R_j Rj联合形成一个连通集时,称 R i R_i Ri R j R_j Rj为邻接区域。不邻接的区域称为不相交区域。谈到区域时,我们通常考虑的是4邻接和8邻接。如仅在使用8邻接时,下图的两个1值区域才是邻接的。

image-20240906111953996

假设一幅图像含有 K K K个不相交的区域 R R R k = 1 , 2 , ⋯ , K k=1,2,\cdots,K k=1,2,,K,并且它们都不与图像边界相接。令 R u R_u Ru表示所有 K K K个区域的并集,并且令 ( R u ) c (R_u)^c (Ru)c表示其补集(集合A的补集是不在A中的点的集合)。我们称 R u R_u Ru中的所有点为图像的前景,而称 ( R u ) c (R_u)^c (Ru)c中的所有点为图像的背景

边界

区域 R R R的边界(也称边框或轮廓)是 R R R中与 R R R的补集中的像素相邻的一组像素。换句话说,一个区域的边界是该区域中至少有一个背景邻点的像素集。这里,我们必须再次指定用于定义邻接的连通。例如,如果在区域及其背景之间使用4连通,那么下图中加圈的点就不是1值区域边界的成员。因为这个点和背景之间唯一可能的连接是对角线。为处理这种情况,一个区域及其背景中的点之间的邻接通常用8连通来定义。

image-20240906112537236

前面的定义有时称为区域的内边界,以便与其外边界区分,外边界是背景中的对应边界。在开发跟踪边界的算法时,这一区别很重要。这种算法为了保证结果形成一个闭合通路,通常是沿外边界表达的。

距离测度

对于坐标分别为 ( x , y ) , ( u , v ) (x,y),(u,v) (x,y),(u,v) ( w , z ) (w,z) (w,z)的像素 p p p, q q q s s s,如果同时满足以下三个条件:

  1. D ( p , q ) ≥ 0 D(p,q) \ge 0 D(p,q)0 [ D ( p , q ) = 0 D(p,q) =0 D(p,q)=0,当且仅当 p = q p=q p=q]
  2. D ( p , q ) = D ( q , p ) D(p,q)=D(q,p) D(p,q)=D(q,p)
  3. D ( p , s ) ≤ D ( p , q ) + D ( q , s ) D(p,s) \le D(p,q)+D(q,s) D(p,s)D(p,q)+D(q,s)

D D D是一个距离函数或距离测度。

欧氏距离

p p p q q q之间的欧几里得(欧氏)距离定义为:
D e ( p , q ) = [ ( x − u ) 2 + ( y v ) 2 ] 1 2 D_e(p,q)=[(x-u)^2+(y_v)^2]^{\frac 1 2} De(p,q)=[(xu)2+(yv)2]21
对于这个距离测度,到点 ( x , y ) (x,y) (x,y)的距离小于等于 r r r的像素,是中心在 ( x , y ) (x,y) (x,y)、半径为 r r r的圆盘。

城市街区距离(city-block distance)

p p p q q q之间的 D 4 D_4 D4距离(称为城市街区距离)定义为:
D 4 ( p , q ) = ∣ x − u ∣ + ∣ y − v ∣ D_4(p,q)=|x-u|+|y-v| D4(p,q)=xu+yv
此时,到 ( x , y ) (x, y) (x,y)的距离 D 4 D_4 D4小于等于 d d d的像素形成一个中心为 ( x , y ) (x,y) (x,y)的菱形。例如,到 ( x , y ) (x,y) (x,y)(中心点)的距离 D D D小于等于2的像素形成如下恒定距离的轮廓:

image-20240906162938216

其中 D 4 = 1 D_4=1 D4=1的像素是 ( x , y ) (x,y) (x,y)4邻域

棋盘距离(chessboard distance)

p p p q q q之间的 D 8 D_8 D8距离(称为棋盘距离)定义为:
D 8 ( p , q ) = m a x ( ∣ x − u ∣ , ∣ y − v ∣ ) D_8(p,q)=max(|x-u|,|y-v|) D8(p,q)=max(xu,yv)
此时,到 ( x , y ) (x,y) (x,y)的距离 D 8 D_8 D8小于等于 d d d的像素形成一个中心为 ( x , y ) (x,y) (x,y)的正方形。例如,到中心点 ( x , y ) (x,y) (x,y)的距离 D D D小于等于2的像素形成如下恒定距离的轮廓:

image-20240906163413804

其中 D 8 = 1 D_8=1 D8=1的像素是位于点 ( x , y ) (x,y) (x,y)处的像素的8邻域

参考

数字图像处理(第四版)-冈萨雷斯

图像处理:像素间的一些基本关系(领域、领接性、通路、连通分量、距离)_m邻接-CSDN博客

这篇关于像素间的关系(邻接、连通、区域、边界、距离定义)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1144499

相关文章

POJ1269 判断2条直线的位置关系

题目大意:给两个点能够确定一条直线,题目给出两条直线(由4个点确定),要求判断出这两条直线的关系:平行,同线,相交。如果相交还要求出交点坐标。 解题思路: 先判断两条直线p1p2, q1q2是否共线, 如果不是,再判断 直线 是否平行, 如果还不是, 则两直线相交。  判断共线:  p1p2q1 共线 且 p1p2q2 共线 ,共线用叉乘为 0  来判断,  判断 平行:  p1p

pip-tools:打造可重复、可控的 Python 开发环境,解决依赖关系,让代码更稳定

在 Python 开发中,管理依赖关系是一项繁琐且容易出错的任务。手动更新依赖版本、处理冲突、确保一致性等等,都可能让开发者感到头疼。而 pip-tools 为开发者提供了一套稳定可靠的解决方案。 什么是 pip-tools? pip-tools 是一组命令行工具,旨在简化 Python 依赖关系的管理,确保项目环境的稳定性和可重复性。它主要包含两个核心工具:pip-compile 和 pip

Spring 源码解读:自定义实现Bean定义的注册与解析

引言 在Spring框架中,Bean的注册与解析是整个依赖注入流程的核心步骤。通过Bean定义,Spring容器知道如何创建、配置和管理每个Bean实例。本篇文章将通过实现一个简化版的Bean定义注册与解析机制,帮助你理解Spring框架背后的设计逻辑。我们还将对比Spring中的BeanDefinition和BeanDefinitionRegistry,以全面掌握Bean注册和解析的核心原理。

浙大数据结构:树的定义与操作

四种遍历 #include<iostream>#include<queue>using namespace std;typedef struct treenode *BinTree;typedef BinTree position;typedef int ElementType;struct treenode{ElementType data;BinTree left;BinTre

类和对象的定义和调用演示(C++)

我习惯把类的定义放在头文件中 Student.h #define _CRT_SECURE_NO_WARNINGS#include <string>using namespace std;class student{public:char m_name[25];int m_age;int m_score;char* get_name(){return m_name;}int set_name

c++ 定义二位数组

在 C++ 中,定义二维数组有几种常见的方式。以下是几个示例: 1. 静态二维数组 定义: int array[3][4]; 这里,array 是一个 3 行 4 列的整数二维数组。 初始化: int array[3][4] = {{1, 2, 3, 4},{5, 6, 7, 8},{9, 10, 11, 12}}; 2. 动态二维数组 使用指针和动态内存分配: 定义:

读软件设计的要素04概念的关系

1. 概念的关系 1.1. 概念是独立的,彼此间无须相互依赖 1.1.1. 一个概念是应该独立地被理解、设计和实现的 1.1.2. 独立性是概念的简单性和可重用性的关键 1.2. 软件存在依赖性 1.2.1. 不是说一个概念需要依赖另一个概念才能正确运行 1.2.2. 只有当一个概念存在时,包含另一个概念才有意义 1.3. 概念依赖关系图简要概括了软件的概念和概念存在的理

数据依赖基础入门:函数依赖与数据库设计的关系

在数据库设计中,数据依赖 是一个重要的概念,它直接影响到数据库的结构和性能。函数依赖 作为数据依赖的一种,是规范化理论的基础,对数据库设计起着至关重要的作用。如果你是一名数据库设计的初学者,这篇文章将帮助你理解函数依赖及其在数据库设计中的应用。 什么是数据依赖? 数据依赖 是指同一关系中属性间的相互依赖和制约关系,它是数据库设计中语义的体现。在现实世界中,数据之间往往存在某种依赖关系,而这

YOLOv8/v10+DeepSORT多目标车辆跟踪(车辆检测/跟踪/车辆计数/测速/禁停区域/绘制进出线/绘制禁停区域/车道车辆统计)

01:YOLOv8 + DeepSort 车辆跟踪 该项目利用YOLOv8作为目标检测模型,DeepSort用于多目标跟踪。YOLOv8负责从视频帧中检测出车辆的位置,而DeepSort则负责关联这些检测结果,从而实现车辆的持续跟踪。这种组合使得系统能够在视频流中准确地识别并跟随特定车辆。 02:YOLOv8 + DeepSort 车辆跟踪 + 任意绘制进出线 在此基础上增加了用户

线性代数|机器学习-P35距离矩阵和普鲁克问题

文章目录 1. 距离矩阵2. 正交普鲁克问题3. 实例说明 1. 距离矩阵 假设有三个点 x 1 , x 2 , x 3 x_1,x_2,x_3 x1​,x2​,x3​,三个点距离如下: ∣ ∣ x 1 − x 2 ∣ ∣ 2 = 1 , ∣ ∣ x 2 − x 3 ∣ ∣ 2 = 1 , ∣ ∣ x 1 − x 3 ∣ ∣ 2 = 6 \begin{equation} ||x