《数字图像处理》学习总结及感悟:第二章数字图像基础(4)像素间的关系

《数字图像处理》学习总结及感悟:第二章数字图像基础(4)像素间的关系_第1张图片

☞ ░ 前往老猿Python博文目录 https://blog.csdn.net/LaoYuanPython ░

一、引言

本系列文章记录老猿自学冈萨雷斯《数字图像处理》的感悟和总结,不过估计更新会比较慢,白天要工作,都是晚上抽空学习,学习完一章再回头总结,想学的朋友可以自己下载英文原版(目前到第四版)和中文译本(目前应该到第三版)的电子版观看,如果想对照观看建议英文原版也找第三版。

这本《数字图像处理》不愧为数字图像处理的经典教程,知识范围广、内容详尽、案例贴近实践,至少很合老猿的口味。但中译本存在两个问题:

  1. 有些翻译得不够精准或流利,对于这样的内容如果在老猿总结知识中出现,会以斜体字标记,有些关键术语老猿会附上英文原词;
  2. 中译本的图像案例很多都比原版差很多,甚至差到影响对讲述内容的理解,因此就算不看原版文字,图像案例最好还是对照原版的。

二、知识概要:像素间的关系(Some Basic Relationships between Pixels)

2.1、邻域(neighbors)

图像中的像素p与其周边像素的关系常用的有如下几种:

  • 4邻域(4-neighbors):对于图像中的每个像素p,其垂直方向和水平方向与其相邻的4个像素称为p的4邻域,记为N4(p)。
  • 4对角邻域(four diagonal neighbors):像素p的4个对角相邻的像素称为4对角邻域,记为ND (p)
  • 8邻域(8-neighbors):像素p的4邻域像素和4对角邻域像素合在一起称为p的8邻域像素,记为记为N8(p)。

对于图像边缘的像素,存在其邻域像素不在图像内的情况。

2.2、 邻接性(Adjacency)

假设V是定义邻接性的某些灰度值的集合(这个定义有些拗口,老猿这么理解:如果某个像素的灰度值在这个集合中,就表示该像素可以和周边像素具备邻接的基本条件,不是这个集合的灰度值的像素肯定不会和其他像素有邻接关系):

  • 4邻接和8邻接:两个像素p和q,如果q出现在p的4邻域或8邻域,且p和q的灰度值都在集合V中,则p和q是邻接的,根据是4邻域或8邻域称p和q为4邻接(4-adjacency)或8邻接(8-adjacency)
  • m-邻接(mixed adjacency,混合邻接):p和q的灰度值都在集合V中,q与p为4邻接或q在p的4对角邻域中且N4(p)∩N4(q)的集合中没有像素值在V中,则称p和q为m邻接。

m邻接是对8邻接的改进,是为了消除8邻接的二义性。令V={1},如下图:
在这里插入图片描述
可能年纪大了反应不过来,这个图乍一看很容易理解,但仔细一想又存在疑问,老猿是思考了一阵子才明白。根据自己的理解解释如下:
分别用a12、a13、a22、a33表示上面4个为1的元素,在8邻接情况下,a13同时是a12和a22的8邻接,但在混合邻接情况下,a13是a12的混合邻接,但不是a22的混合连接,因为a13和a22各自的4邻接存在交集元素a12,不满足混合邻接定义。

2.3、通路(Path)

从像素p(坐标为(x,y))到像素q(坐标为(s,t))的通路(digital path)(或曲线(curve))是除p和q可能重复外不存在其他重复的像素组成的序列(distinct pixels,中文版翻译为“特定的像素序列”,英文版没有除起点和终点外的说明,这是老猿琢磨半天的翻译,不知是否正确),其坐标序列为:

(x0, y0), (x1, y1), … , (xn, yn)

满足:

  1. (x0, y0)对应p的坐标, (xn, yn)对应q的坐标
  2. 序列中的任意两个相邻像素(xi,yi)和(xi+1,yi+1)是邻接的。

以上关于通路的定义的通路长度为n,如果p和q重合即对应同一个像素,则称该通路为闭合通路(closed path)。

上面定义中两个像素的邻接可以是4邻接、8邻接和混合邻接,则对应的通路分别称为4通路、8通路、m通路(4-, 8-, or m-paths)。

上面邻接定义时说明二义性的图中,其左图连接的虚线是右上角到右下角的8通路,可见图中8通路有2条,而右图是m通路,只有一条。

2.4、连通性( Connectivity)

假设s是某图像的一个像素子集:

  • 如果s中的两个像素p和q之间存在一条由s的全部像素组成的一条通路(path),则可以说s中的两个像素p和q是连通(connected)的
  • 根据使用的邻接的类型,连通可以分为4-连通(4-connectivity)、8连通和m连通
  • 对于s中的任意像素p,s中连通到p的所有像素构成的集合称为s的连通分量(connected component)
  • 如果s中只有一个连通分量,则集合s称为连通集(connected set)

2.5、区域( Regions )

假设R是某图像的一个像素子集, 如果R是连通集,则称R为图像的一个区域(region)。需要注意,区域的概念是与邻接类型相关的,可能某个区域是8邻接的区域,但不是4邻接的区域。区域定义中的邻接只基于4邻接或8邻接,不能考虑m邻接,老猿认为是在图像中,一个m邻接的连通集如果不同时是8邻接的连通集,则在图像中的区域可能会给人的感觉有断点,因为m邻接可以是两个对角的像素邻接。

对于两个区域Ri和Rj,他们联合形成一个连通集,则称两个区域邻接(adjacent)。不邻接(not adjacent)的区域称为不连通(disjoint)区域。

2.6、边界( Boundaries)

假设一幅图像中含有k个不邻接的区域R1,R2,…,RK(为了不考虑边界的特殊处理假设这K个区域都不接触图像的边界),令RU为这K个区域的并集,令RUc为RU的补集(complement,即为图像中不在RU中的像素集合),则称RU中所有的点为图像的前景(foreground),RUc中的所有点图像的背景(background)。

区域R的边界(boundary,也称为边缘(border)或轮廓(contour))是这样一些点的集合,这些点与R的补集中的某些点邻近(adjacent),即区域的边界是该区域中至少有一个背景点邻近的像素集合(这里的邻近老猿理解为是整个图像的灰度值作为集合的8-邻接)。该边界称为区域的内边界(inner border),与此对应有外边界(outer border),区域的外边界也即区域补集(背景)的内边界。外边界形成了一个绕该区域的闭合通路(closed path)。

如果区域R就是图像本身,则定义这种情况下的边界为图像的第一行、第一列以及最后一行和最后一列的像素集合。

三、知识概要:距离度量(Distance Measures)

3.1、定义

对于像素p (x, y)、q (s, t)、z(v, w)和函数D,如果满足:

  1. D(p,q)≥0【D(p,q)=0当且仅当p=q】
  2. D(p,q)=D(q,p)
  3. D(p,z)≤D(p,q)+D(q,z)

则成函数D为距离函数或距离度量(distance function or metric)。

3.2、欧几里德距离

欧几里德距离是一种距离度量,p (x, y)、q (s, t)之间的欧几里德距离(Euclidean distance,简称欧氏距离)定义为:
在这里插入图片描述
该式完全满足距离度量的定义。

对于欧式距离来说,距离点(x,y)的距离小于等于r的像素是以(x,y)为圆心r为半径的圆平面。

3.3、D4距离

p (x, y)、q (s, t)之间的D4距离(D4 distance,又称为城市街区距离,city-block distance)定义如下:
D4(p,q) = |x-s|+|y-t|

该式完全满足距离度量的定义,因此也是一种距离度量。

距离点(x,y)D4距离小于等于r的像素形成一个中心在点(x,y)的菱形。如D4距离等于1的像素构成中心点的4邻域,D4距离小于等于2的像素组成类似如下轮廓:

       2
  	2  1  2
 2  1  0  1  2
  	2  1  2
  	   2  	

3.4、D8距离

p (x, y)、q (s, t)之间的D8距离(D8 distance,又称为棋盘距离,chessboard distance)定义如下:
D8(p,q) = max(|x-s|,|y-t|)

该式同样完全满足距离度量的定义,因此也是一种距离度量。

距离点(x,y)D8距离小于等于r的像素形成一个中心在点(x,y)边长为2r+1的正方形。点(x,y)的D8距离为1的像素是点点(x,y)的8邻域。

四、小结和感悟

本文介绍了图像中像素的邻域关系,通过邻域关系中基于限定灰度值的集合定义了邻接关系,通过邻接可以构建像素间的通路,基于通路构建了像素间的连通关系和连通集,并进一步定义了图像的区域和边界。

如果一个函数满足图像像素间距离度量的定义,则该函数就是一个距离函数或距离度量,常见的距离有欧式距离、D4距离、D8距离。

通过这些内容的介绍,可以使得大家了解像素间的邻域、邻接、连通关系以及区域和边界的定义,明白像素间不同距离度量的距离计算方法。

本文介绍的内容是像素间的关系,通过这些定义了解邻域、邻接、连通以及区域和边界的概念,没有学习之前,老猿对这些知识可能有些模糊的感受,但真正的定义一点也不知道,对于理解图像处理来说,这些概念很重要。

另外《数字图像处理》中文版的翻译有些地方还是做得不好,这么多的内容,如果不熟悉图像处理并字斟句酌的审阅,这些情况很难发现,可以理解。相关翻译的问题在正文中已经用斜体字标注,有些地方已经单独进行了说明,希望对大家有所帮助。

更多图像处理请参考专栏《OpenCV-Python图形图像处理》及《图像处理基础知识》的介绍。

对于缺乏Python基础的同仁,可以通过老猿的免费专栏《 专栏:Python基础教程目录》从零开始学习Python。

写博不易,敬请支持:

如果阅读本文于您有所获,敬请点赞、评论、收藏,谢谢大家的支持!

关于老猿的付费专栏

  1. 付费专栏《https://blog.csdn.net/laoyuanpython/category_9607725.html 使用PyQt开发图形界面Python应用》专门介绍基于Python的PyQt图形界面开发基础教程,对应文章目录为《 https://blog.csdn.net/LaoYuanPython/article/details/107580932 使用PyQt开发图形界面Python应用专栏目录》;
  2. 付费专栏《https://blog.csdn.net/laoyuanpython/category_10232926.html moviepy音视频开发专栏 )详细介绍moviepy音视频剪辑合成处理的类相关方法及使用相关方法进行相关剪辑合成场景的处理,对应文章目录为《https://blog.csdn.net/LaoYuanPython/article/details/107574583 moviepy音视频开发专栏文章目录》;
  3. 付费专栏《https://blog.csdn.net/laoyuanpython/category_10581071.html OpenCV-Python初学者疑难问题集》为《https://blog.csdn.net/laoyuanpython/category_9979286.html OpenCV-Python图形图像处理 》的伴生专栏,是笔者对OpenCV-Python图形图像处理学习中遇到的一些问题个人感悟的整合,相关资料基本上都是老猿反复研究的成果,有助于OpenCV-Python初学者比较深入地理解OpenCV,对应文章目录为《https://blog.csdn.net/LaoYuanPython/article/details/109713407 OpenCV-Python初学者疑难问题集专栏目录 》
  4. 付费专栏《https://blog.csdn.net/laoyuanpython/category_10762553.html Python爬虫入门 》站在一个互联网前端开发小白的角度介绍爬虫开发应知应会内容,包括爬虫入门的基础知识,以及爬取CSDN文章信息、博主信息、给文章点赞、评论等实战内容。

前两个专栏都适合有一定Python基础但无相关知识的小白读者学习,第三个专栏请大家结合《https://blog.csdn.net/laoyuanpython/category_9979286.html OpenCV-Python图形图像处理 》的学习使用。

对于缺乏Python基础的同仁,可以通过老猿的免费专栏《https://blog.csdn.net/laoyuanpython/category_9831699.html 专栏:Python基础教程目录)从零开始学习Python。

如果有兴趣也愿意支持老猿的读者,欢迎购买付费专栏。

老猿Python,跟老猿学Python!

☞ ░ 前往老猿Python博文目录 https://blog.csdn.net/LaoYuanPython ░

你可能感兴趣的:(老猿Python,图像处理基础知识,原力计划文章,数字图像处理,图形图像处理,像素,邻域,程序人生)