本系列文章记录老猿自学冈萨雷斯《数字图像处理》的感悟和总结,不过估计更新会比较慢,白天要工作,都是晚上抽空学习,学习完一章再回头总结,想学的朋友可以自己下载英文原版(目前到第四版)和中文译本(目前应该到第三版)的电子版观看,如果想对照观看建议英文原版也找第三版。
这本《数字图像处理》不愧为数字图像处理的经典教程,知识范围广、内容详尽、案例贴近实践,至少很合老猿的口味。但中译本存在两个问题:
图像中的像素p与其周边像素的关系常用的有如下几种:
对于图像边缘的像素,存在其邻域像素不在图像内的情况。
假设V是定义邻接性的某些灰度值的集合(这个定义有些拗口,老猿这么理解:如果某个像素的灰度值在这个集合中,就表示该像素可以和周边像素具备邻接的基本条件,不是这个集合的灰度值的像素肯定不会和其他像素有邻接关系):
m邻接是对8邻接的改进,是为了消除8邻接的二义性。令V={1},如下图:
可能年纪大了反应不过来,这个图乍一看很容易理解,但仔细一想又存在疑问,老猿是思考了一阵子才明白。根据自己的理解解释如下:
分别用a12、a13、a22、a33表示上面4个为1的元素,在8邻接情况下,a13同时是a12和a22的8邻接,但在混合邻接情况下,a13是a12的混合邻接,但不是a22的混合连接,因为a13和a22各自的4邻接存在交集元素a12,不满足混合邻接定义。
从像素p(坐标为(x,y))到像素q(坐标为(s,t))的通路(digital path)(或曲线(curve))是除p和q可能重复外不存在其他重复的像素组成的序列(distinct pixels,中文版翻译为“特定的像素序列”,英文版没有除起点和终点外的说明,这是老猿琢磨半天的翻译,不知是否正确),其坐标序列为:
(x0, y0), (x1, y1), … , (xn, yn)
满足:
以上关于通路的定义的通路长度为n,如果p和q重合即对应同一个像素,则称该通路为闭合通路(closed path)。
上面定义中两个像素的邻接可以是4邻接、8邻接和混合邻接,则对应的通路分别称为4通路、8通路、m通路(4-, 8-, or m-paths)。
上面邻接定义时说明二义性的图中,其左图连接的虚线是右上角到右下角的8通路,可见图中8通路有2条,而右图是m通路,只有一条。
假设s是某图像的一个像素子集:
假设R是某图像的一个像素子集, 如果R是连通集,则称R为图像的一个区域(region)。需要注意,区域的概念是与邻接类型相关的,可能某个区域是8邻接的区域,但不是4邻接的区域。区域定义中的邻接只基于4邻接或8邻接,不能考虑m邻接,老猿认为是在图像中,一个m邻接的连通集如果不同时是8邻接的连通集,则在图像中的区域可能会给人的感觉有断点,因为m邻接可以是两个对角的像素邻接。
对于两个区域Ri和Rj,他们联合形成一个连通集,则称两个区域邻接(adjacent)。不邻接(not adjacent)的区域称为不连通(disjoint)区域。
假设一幅图像中含有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就是图像本身,则定义这种情况下的边界为图像的第一行、第一列以及最后一行和最后一列的像素集合。
对于像素p (x, y)、q (s, t)、z(v, w)和函数D,如果满足:
则成函数D为距离函数或距离度量(distance function or metric)。
欧几里德距离是一种距离度量,p (x, y)、q (s, t)之间的欧几里德距离(Euclidean distance,简称欧氏距离)定义为:
该式完全满足距离度量的定义。
对于欧式距离来说,距离点(x,y)的距离小于等于r的像素是以(x,y)为圆心r为半径的圆平面。
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
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。
如果阅读本文于您有所获,敬请点赞、评论、收藏,谢谢大家的支持!
前两个专栏都适合有一定Python基础但无相关知识的小白读者学习,第三个专栏请大家结合《https://blog.csdn.net/laoyuanpython/category_9979286.html OpenCV-Python图形图像处理 》的学习使用。
对于缺乏Python基础的同仁,可以通过老猿的免费专栏《https://blog.csdn.net/laoyuanpython/category_9831699.html 专栏:Python基础教程目录)从零开始学习Python。
如果有兴趣也愿意支持老猿的读者,欢迎购买付费专栏。