表示和描述(1)

表示和描述应该是个递进的关系,表示旨在以更(精确/方便/高效)的方式组织数据,而描述旨在从表示中总结某种模式以便于任务的完成。前者更贴近数据,后者更贴近应用。

表示部分:边界表示

描述部分:边界描述、区域描述、关系描述、主分量描述

边界表示

主要分2个阶段:边界追踪(轮廓提取)、基于特定目标(精确/方便/高效)的边界表示。

边界追踪部分主要介绍Moore算法;边界表示部分主要介绍Freeman链码、边界的多边形近似、标记图、边界线段和骨架。

1)边界追踪

OpenCV对应的函数为findContours,可以指定只提取外轮廓,获得多个轮廓的层次关系,初级的近似方法。

应用边界追踪算法前应确保:图像已二值化;图像边界已用0扩展(假设边界为1)。此外基础的moore算法仅适用外轮廓,对于内轮廓,可用形态学方法将其转为外轮廓再查找。

Moore算法:

step1: 找到图像左上角为1的点b0为边界起始点。b0左边的点为c0(显然值为0),从c0开始按顺时针方向考察b0的8邻域,找到的第一个值1的点为b1(边界的第2个点),令扫描到b1前的点为c1。

step2: 赋值b=b1,c=c1。

step3: 从c开始顺时针扫描b的8邻域,找到第一个值1的点n,其之前的点n'(背景点)。

step4: 赋值b=n,c=n'。

step5: 重复step3和step4,直到b=b0且下一个边界点为b1。

注:上述算法一次只能扫描一个边界,一个办法是将找到的点赋值为0再重复扫描。


2)Freeman链码

链码使用方向(4/8)和单位长度(对图像可以为一个像素)来替代坐标表示边界(图1-1a),考虑到链码长度的限制和噪声对边界表示的影响,可以对单位长度进行适当放大重采样(图1-1b)。

表示和描述(1)_第1张图片

图1-1. 边界链码表示(《数字图像处理》)

链码表示首先要解决的问题是:旋转和起始位置的不变性。

旋转不变性可以用链码的一次差分解决(按图1-1a逆时针方向,链码的后一个方向与前一个方向的转换次数,链码的第一个值用某端的方向与其差分得到);之后对差分链码做循环右移,取号码序列整数值最小的那个(就是前面0最多的)为最终表示以保证起始位置的不变性。

实际中,如果以边界距离最远的两个点为长轴,与之垂直且距离最远的两个点为短轴。将图1-1a的0方向轴旋转到与长轴平行,再计算差分链码可以更好的归一化边界旋转的问题(图1-2)。

表示和描述(1)_第2张图片

图1-2. 链码归一化(《数字图像处理》)


3)边界的多边形近似

边界的多边形近似使得可以用尽可能少的线段来表达边界的基本形状。

此外可能更有用的处理是:边界的外接圆、外接矩形、凸包等(OpenCV有实现),不过这些属于边界描述了。

对于多边形近似,《数字图像处理》介绍了一种最小周长多边形(MPP)的方法,并附有MATLAB的实现。

OpenCV提供的函数approxPolyDP是基于Douglas-Peucker(WIKI)算法实现的。思路比MPP简单很多(图1-3)。

表示和描述(1)_第3张图片

图1-3. DP算法(《数字图像处理》)


4)其他

a. 标记图

试图用一维函数表示边界。

一种简单的方法是以角度的函数形式记录质心到边界的距离(图1-4)。


图1-4. 一种标记图(《数字图像处理》)

图1-4的方法是平移不变的,但对旋转和缩放敏感。为了实现旋转归一化,需要找到选取相同起始点的方法。类似链码里介绍的那样,选取距离长短轴最远的点即可。为了实现缩放归一化,可以对每个值除以方差(简单的最大最小值归一化会因为噪声的影响而带来较大误差)。

b. 边界线段

通过将边界分段以简化描述过程。以进入和离开一个凸缺为依据,对边界分段(图1-5)。


图1-5. 边界分段(《数字图像处理》)

c. 骨架抽取

这是种表示区域的方法。在这里有形态学思路的骨架方法介绍。此外,还有Zhang提出的一种骨架抽取算法(A fast parallel algorithm for thinning digital patterns)。

表示和描述(1)_第4张图片

图1-6. Zhang骨架抽取算法


接下篇 表示和描述(2)

你可能感兴趣的:(表示和描述(1))