区域分析包括计算由连接组件标记算法产生的每个区域的全局属性。基于区域的形状和参与该区域的像素的灰度值,我们可以对每个区域进行各种属性的测量,例如图形的面积、质心、周长等。
特征是用一些标量性质表示的图像描述。通常,特征应该独立于图像的位置、旋转和比例。
链式编码(Chain Codes)又称为弗里曼链码(Freeman Chain Codes)或边界链码。该多边形的边界可表示为:由某一原点开始并按某些基本方向确定的单位矢量链。
目录
一、区域分析
(1)概述
区域分析包括计算由连接组件标记算法产生的每个区域的全局属性。基于区域的形状和参与该区域的像素的灰度值,可以对每个区域进行各种属性测量,例如图形的面积、质心、周长等。
在MATLAB中可以使用函数 regionprops(),来提取二值图像的面积、质心、周长和其他属性。
(2)计算过程
我们使用参数R表示区域中的像素集。简单的全局属性包括:该区域的区域面积A,和中心点(𝑥∗,𝑦∗)。
① 面积
面积是区域中的实际像素数,它是一个标量。
例如:
② 质心
质心是图像区域的中心,它是一个矢量。第一个元素是水平坐标,第二个元素是垂直坐标。
注意:虽然像素坐标为整数,但是质心坐标通常不会是整数。
③ 周长
周长是区域边界周围的距离,这是一个标量。通过计算区域边界周围的每对相邻像素之间的距离来给出周长。要计算周长P,周界中的像素必须按顺序排列。
并且序列中的每对连续像素是包括第一和最后像素的相邻像素。之后,周长可由下式得出:
其中N4代表4连接方法,N8代表8连接方法。
二、特征提取概述
(1)概述
特征是用一些标量性质表示的图像描述,例如面积、周长、图像矩等。获取特征的来源一般有:
- 形状的外部性质
- 形状的内部性质
- 形状的结构性质
- 图像的表面性质
- 图像的变换性质
通常,特征应该独立于图像的位置、旋转和比例。可总结为两种特性:
- 不变性:在应用一系列变换之后,特征的值应保持不变。
- 协变性:对实体应用该集合的任何转换,都会在描述符中产生相同的结果。
例如,一个区域的面积对于仿射变换(即平移、反射或旋转)是不变的。但是,区域的面积对于缩放则是协变的。
假设在一个饮料生产工厂中,我们使用二值图像对产品进行质量控制。在这种固定几何形状中,一个区域的面积与瓶子中的液体量成正比。
任务1:检查瓶子是否装满。分析液体图像共有十个区域,因此我们可以将面积视为局部特征,因为它适用于图像的各个区域。
任务2:计算每天的液体总量。现在整个图像的面积是局部特征,而一天结束时的总面积是全局特征。
(2)特征的相关性及分类
强相关性的特征在被移除时,将导致分类准确性的损失。而弱相关性的特征有时可能有助于分类的准确性。
特征选择方面的挑战:
- 查找所有可能的特征子集很耗时间。
- 有时类内和类间的变化可能会很小。
- 一些特征可能因平移、缩放和旋转而发生变化。
对于特征的分类,可以分为局部特征和全局特征。
局部特征描述图像上的某一个区域,常见特征有:
- 凹/凸部件数量
- 端点
- 分支
- 接头
全局特征则用来描述整个图像,常见特征有:
- 连通性
- 投影轮廓
- 孔数
- 不变矩
三、边界预处理及弗里曼链式编码
许多特征提取算法要求区域边界上的点按照顺时针或逆时针方向进行排列。边界跟随或跟踪算法的输出则是一个有序的点序列。
假设输入是二进制图像,其中对象和背景点被标记为1和0。图像填充有0的边界,以消除对象与图像边界合并的可能性。这里首先要介绍一下链编码的概念,我们使用链编码通过指定长度和方向的直线的连接序列来表示边界。
链式编码(Chain Codes)又称为弗里曼链码(Freeman Chain Codes)或边界链码。该多边形的边界可表示为:由某一原点开始并按某些基本方向确定的单位矢量链。
基本方向可定义为:东=0,东南=1,南=2,西南=3,西=4,西北=5,北=6,东北=7等八个基本方向。链式编码对多边形的表示具有很强的数据压缩能力,且具有一定的运算功能,如面积和周长计算等,探测边界急弯和凹进部分等都比较容易,比较适于存储图形数据。缺点是对叠置运算如组合、相交等则很难实施,对局部修改将改变整体结构,效率较低,而且由于链码以每个区域为单位存储边界,相邻区域的边界则被重复存储而产生冗余。
假设我们处理的曲线是闭合的简单曲线,使用弗里曼链编码进行表示,过程需要基于4-连通性或8-连通性。连通性相关的内容,可以参考之前的文章。
如下图为圆形笔划的8位灰度图像,我们需要获取该570×570像素噪声图像的弗里曼链编码。
① 首先使用空间滤波器进行平滑以去除噪声,并使用Otsu方法进行阈值处理。阈值处理方法等内容,可以参考之前的文章。
处理之后,我们得到二值图像。
② 之后我们提取区域的外部边界,也就是进行图像细化和骨架提取。该步骤相关的内容可以参考之前的文章。
得到细化之后的图像。
③ 重新采样图像以减少不显著的可变性,并将采样点与直线连接。结果如下所示。
④ 规定起点以及顺时针的计算方向,采用8-连通性方法,获得弗里曼链编码。
0 0 0 0 0 6 0 6 6 6 6 6 6 6 4 4 4 4 4 4 2 2 2 2 2 2 0 2 0 2 0 2
注意:结果并不是唯一的。如果起点的定义或者计算方向定义不同,最终得到的弗里曼链编码就会不同。
那么该如何统一结果呢?我们使用形状数来统一结果。
弗里曼链编码边界的形状数被定义为最小大小的第一个差值。形状数的阶数n被定义为其表示中的位数。n对于闭合边界是偶数,它的值限制了可能的不同形状的数量。
例如,在如下的结果中,所得到的第一个最小差值为0,形状数字就规定为从0开始表示。
我们再来看另外一个例子。在下图中,假设n=18被指定为边界,为了得到这个阶数的形状数,我们需要完成以下几个步骤:
① 找到基本矩形。
② 找到最接近的18阶矩形,它是一个3×6的矩形,需要对基本矩形进行细分。
③ 将链编码方向与生成的网格对齐。
④ 获得链编码,并使用其第一个差值来计算形状数。
得到的最终结果如下所示。