本节是skimage扩展库简介的下篇,将介绍Skimage中与分割(segmentation)和特征提取(feature)相关的两个模块,这两个模块也是Skimage库的重要组成部分,涵盖了这两个领域中的多个经典方法。本篇约5500字。
目录
2.3 算法类模块
2.3.8 segmentation模块
在Skimage库中,有两个模块与图像分割有关,分别是segmentation模块和graph模块。其中 segmentation模块集成了一些与图像分割相关的基础函数,以及几种经典的分割算法。而graph模块则是围绕着一类经典的基于图割(GraphCut)分割算法所构建一个单独的模块。
两个模块的功能类似,共计35个函数,在此直接用列表给出说明。各种算法的原理介绍以及实例,将放在后续章节里面加以介绍。
序号 | 函数名称 | 功能介绍 |
---|---|---|
1 | watershe | 经典的分水岭分割算法 |
2 | slic | 基于超像素的彩色图像分割算法 |
3 | quickshift | 使用快速漂移聚类方法分割彩色图像 |
4 | active_contour | 活动轮廓模型算法 |
5 | checkerboard_level_set | 创建一个棋盘形水平集 |
6 | clear_border | 清除与标签图像边界相连的对象 |
7 | disk_level_set | 创建一个碟形水平集 |
8 | expand_labels | 扩展标签图中的标签 |
9 | felzenszwalb | 计算Felsenszwalb有效图 |
10 | find_boundaries | 返回布尔数组,其中区域之间的边界为标记为True |
11 | flood | 洪水填充算法所用的模板,与12配套使用 |
12 | flood_fill | 洪水填充算法 |
13 | chan_vese | Chan-Vese分割算法 |
14 | inverse_gaussian_gradient | 计算梯度幅度值的倒数 |
15 | join_segmentations | 返回两个输入片段的连接 |
16 | mark_boundaries | 返回高亮标记区域间边界图 |
17 | morphological_chan_vese | 形态学无边缘形态活动轮廓算法(MorphACWE) |
18 | morphological_geodesic_active_contour | 形态学测地线活动轮廓(MorphGAC) |
19 | random_walker | 著名的随机游走分割算法 |
20 | relabel_sequential | 重新标记任意标签 |
序号 | 函数名称 | 功能介绍 |
---|---|---|
1 | central_pixel | 找到具有最高接近中心性值的像素点 |
2 | cut_normalized | 在区域邻接图中执行规范化图割处理 |
3 | cut_threshold | 图割算法中的区域合并 |
4 | merge_hierarchical | 进行RAG的分层合并 |
5 | pixel_graph | 创建图像中像素的邻接图 |
6 | rag_boundary | 基于区域边界计算RAG |
7 | rag_mean_color | 使用颜色均值,计算区域邻接图(RAG) |
8 | shortest_path | 搜索n维序列最短路径 |
9 | route_through_array | 使用MCP和MCP_Geometric类的实例 |
10 | MCP | 最小代价路径(MCP)类 |
11 | MCP_Connect | 使用距离加权最小代价函数连接源点 |
12 | MCP_Flexible | 搜索MCP |
13 | MCP_Geometric | 搜索距离加权MCP |
14 | RAG | 计算图像的区域邻接图(RAG) |
15 | show_rag | 显示图像的RAG |
补充一点说明,相对于其他模块,Skimage所提供的segmentaion模块所提供的功能略显单薄,许多经典的图像分割算法分布在了其他模块(如filters模块中包含了多个基于阈值和基于边缘点方法)。
2.3.9 feature模块
我们将feature模块放在最后介绍,一方面特征提取是建立在前面各种更基础的图像处理技术基础上的,另一方面是Skimage所提供的feature模块功能非常强大,值得详细介绍。
特征提取(feature extraciton)一直以来都是计算机视觉研究的重点领域,有研究者认为,整个计算机视觉学科的大厦就是在特征工程这个基石上搭建起来的。各种具有功能或特定用途的视觉特征量的设计和提取过程,是计算机视觉工作者集体智慧的结晶。
(1)总览
Skimage的feature模块所包含的功能函数并不是很多,0.24版一共有41个。但几乎每一个函数都在CV领域赫赫有名,比如HoG、LBP、GLMC、SIFT、SURF等等。这些特征量的定义、计算及功能特性等技术细节,都将在后续的章节中加一介绍。
根据惯例,先将该模块全部41个函数进行归类,分类依据是这些函数所涉及的特征量的特性。比如,canny是用于提取边缘特征点,LBP是一种二值描述符,而GLMC则是一种纹理特征描述符,等等。如果读者对于视觉特征的分类和特性还不甚是了解,建议阅读参考文献【1】。文献【1】有对应的英文第四版刚出版,如果想深入了解视觉特征的专业知识,建议阅读最新版本。
(2)Blob特征
它的英文全称是Binary large object,可以是指图像中满足特定条件的一个最大连通区域,它有一个DIP圈里常用中文名字,叫“斑点”。与之相关的有三个函数,分别是:使用差分高斯计算blob(blob_dog)、使用海塞行列式计算blob(blob_doh)、使用拉普拉斯-高斯算子计算blob(blob_log),三者都用来计算灰度图像的Bolb特征。
(3)Corner特征
Corner特征即角点特征,与各位熟知的边缘特征相比,角点特征具有更好的方向性以及尺度不变特定,因此是一种在计算机视觉领域广泛使用的底层特征。角点提取是CV领域的一个经典问题,经过几十年的发展,涌现出了诸多优秀的算法,Skimage的feature模块基本上涵盖了典型的角点方法。比如:Moravec算法(corner_moravec)、Harris算法(corner_harris)、Shi-Tomasi算法(corner_shi_tomasi)、Kitchen&Rosenfeld算法(corner_kitchen_rosenfeld)、Foerstner算法(corner_foerstner)、FSAT算法(corner_fast)等,以及一些配套的函数,比如计算角点的方向(corner_orientations)、角点的亚像素位置(corner_subpix)、角点响应图像的峰值点(corner_peaks)等。
(4)Harr类特征
Harr特征是一类很特别的视觉特征,相对于其他特征,它原理简单、计算量不大,但描述能力一点都不弱,另外它可以根据待描述的不同对象,有针对性的选取特定类型的描述符,构成一个特征集。Harr特征的一个典型应用是人脸检测,在早期人脸检测领域最常用的特征之一。
feature模块中有三个函数与Harr特征有关,分别是计算某个ROI的类Harr特征(haar_like_feature)、计算类Harr特征的坐标值(haar_like_feature_coord),以及配套的l类Harr特征的绘制(draw_haar_like_feature)。
(5)Hessian矩阵
Hessian矩阵是一个纯粹的数学名称,它是一个二阶偏导数矩阵。对于图像而言,像素点灰度值的二阶偏导数对应着图像的细节信息,但Hessian矩阵通常并不能直接用于描述图像特征,而是提取特征点时需要的一个步骤,如后面介绍的SIFT特征在计算时就用到了Hessian矩阵。
feature模块中有三个函数与Harr特征有关,计算Hessian矩阵(hessian_matrix)、计算图像的近似Hessian行列式(hessian_matrix_det)、以及计算Hessian矩阵的奇异值(hessian_matrix_eigvals),另外在使用Harr特征时,经常用到一种级联分类器(Cascade)。
(6)其他特征
除了上述有多个函数组成的某类特征集合之外,还有个别特征是只通过当个函数来实现的。虽然只用一个函数来实现,但并不代表该算法不重要,相反,部分算法非常有名,在此一一列出。
- SIFT特征(SIFT):英文全称是Scale-Invariant Feature Transform,译为尺度不变特征变换,是一种功能十分强大的特征描述符,应用广泛,但计算量稍大,运行该函数可能比较费时间。
- Canny算法(canny):在此我们没有将其称为一种描述符,因为它本质上是一种边缘特征提取算法。该方法从提出以来,一直是边缘检测领域的landmark,其内涵丰富,方法非常代表性,被后来其他方法广泛借鉴。
- HoG特征(hog):它的全称是:Histogram of oriented gradient,中文翻译为“梯度方向直方图”,与SIFT特征类似,它也是非常经典的视觉特征。虽然它的表达能力较SIFT略差,但好在它的计算复杂度要低很多,因此在,在各个领域应用广泛。
- LBP特征(local_binary_pattern):LBP的全称是Local Binary Patterns,译为“局部二值模式”。这种特征简单有效,常用语轻量级的对象识别。 除基本功能外,Skimage的feature模块还提供了一种更复杂的LBP算法,称为多块LBP算法(multiblock_lbp)及其配套的绘图函数(draw_multiblock_lbp)。
- ORB特征/BRIEF特征(ORB、BRIEF):BRIEF的全称是Binary Robust Independent Elementary Features,它也是一种二值描述符,但比前面的LBP更复杂,功能也更强大。在BRIEF基础之上,又人们又提出了ORB特征,其全称是Oriented FAST and Rotated BRIEF。这两类特征可以看作是功能最强的二值描述符的典型代表。
- 灰度共生矩阵特征(graycomatrix和graycoprops):它是一种描述图像局部纹理特征(Texture)的描述符,英文缩写是GLMC。相对于其他特征,GLMC的辈分很大,早在1970's左右就被提出。但由于计算量较大,且描述能力有限,因此很长一段时间内没有引起人们的重视。但并不影响它作为一种经典的视觉特征在CV领域占有一席之地。feature模块中使用graycomatrix计算GLMC,使用graycoprops函数使用GLMC计算各种纹理描述符。
- 多尺度特征(multiscale_basic_features和peak_local_max):多尺度特征在视觉特征领域占有重要的地位,人类视觉系统具有近似的多尺度特性。计算机视觉领域中的一些功能强大的视觉特征,很多都具备多尺度的属性,比如SIFT等。基于金字塔模型构建的多尺度空间是提取多尺度特征最常用的空间之一,相关内容将在后续章节中单独介绍。
(7)特征匹配操作
提取出特征点后,通常还需要在特征空间内度量各特征点之间的距离(即相似性),feature模块提供了几个配套的函数完成特征点的匹配,其中包括暴力匹配技术(match_descriptors)、基于规范化相关性的模板匹配(match_template)、绘制匹配的特征(plot_matches)等。
除了上述重点介绍的各个算法模块之外,0.24版的Skimage还提供了一个future模块,里面是一些算法(主要是分割算法)试用版。官方文档里面提到,该模块中的函数不一定在未来的版本中仍然使用,或者未来的版本可能会修改这些函数的名称,特此说明。
2.4 小结
至此,Skimage扩展库中大多数模块都已介绍完毕。这些模块功能丰富、组织结构紧密,函数编写规范,功能强大。另外由于其本身是SciPy子类,又采用了NumPy的数据结构。因此在这两个Python巨头的照应下,Skimage库在诸多类似功能的扩展库中占有比较明显的优势地位。
再次将Skimage中几个重要模块在下面罗列出来,供大家了解.
- 图像(几何)变换类:transform类,完成常见的几何变化和变换域变换;
- 基于点操作的图像空域增强:exposure类;
- 空域滤波类:filter类,完成具有各种功能的空域滤波处理,如平滑、锐化、边缘检测,等等
- 图像复原类:restoration类,主要集中在去噪和反卷积两个方面。
- 形态学处理类:morphology类,功能非常丰富,涵盖了大多数二值/灰度形态学处理算法
- 图像分割类:segment类,功能非常强大,实现了多种经典的分割方法。
- 特征提取类:feature类,功能非常强大,实现了多种经典的特征提取方法。
将在后续的章节中更全面深入地介绍上述各个模块。
参考文献:
【1】计算机视觉特征提取与图像处理,Mark Nixon,中文第三版,电子工业出版社,2014
(本节初稿完成时间:2024-01-30;本节修订完成时间:2024-07-23)
(未完待续,欢迎对DIP+python算法开发感兴趣的初学者,尤其是相关专业本科和低年级研究生关注,本专栏完将持续更新,敬请关注)