边界跟踪算法的程序说明和程序代码
2010-12-28 10:55
232 查看
4.算法描述: 设在数字化网格平面的形状是封闭的,且只有一个连通的区域,这个连通的区域在二维数组中用1来标记,其余的数组元素用0来标记。算法中的坐标与程序中的二维数组的下标对应。 Step 1. 对数组进行逐行查找,找到由数字1表示的封闭图形的最上端一行的最左边一个点(其数组行下标应该是最小的),用P0表示。P0是边界跟踪的起始点。定义变量dir 表示上述“关于方向码的概念”中的8个方向,所以dir的取值范围是 0,1 … 7 ,注意,后面的计算过程,有dir对8的模(求余)运算。 对dir 赋初值 dir=7; Step 2. 按逆时针方向顺序依次判断当前点(一开始为P0点)的8个3x3邻居是否为1,开始的邻居号为: (1)(dir+7) mod 8 如果 当前的dir为偶数; (2)(dir+6) mod 8 如果 当前的dir为奇数; 按上述的逆时针方向找到的第一个不为0的点为找到的新的边界,记为Pn,并更新dir值 (以当前找到为1的点为最后更新的dir方向)。 Step 3. 如果当前的边界点Pn的坐标等于找到的第2个边界点P1的坐标,而且它前一个边界点Pn-1的坐标又与起始点P0坐标相同,则算法结束。否则,重复Step 2. Step 4. 封闭形状的边界跟踪结果则为上述步骤记录的P0,P1,P2 ….Pn的坐标,或者是上述过程中保存的dir 值。 5.关于算法描述的部分举例。 以前面的图形为例,现在对于该算法的前面若干步骤的执行情况做一描述,以便更好理解算法的执行过程。 Step 1: (n=0) 找到的Pn=P0=(1,2); dir=7; Step 2: (n=n+1=1) 按逆时针方向顺序找到P0点的8个3x3邻居中第一个为1的点,此时P0的八个近邻情形为(X表示当前P): 0 0 0 0 X 1 0 1 1 开始判断的方向为(dir+6) mod 8 =(7(奇数)+6) mod 8=5 ,也就是开始以逆时针依次判断的起始方向为西南方向! 此时,为0,接着要判断南,i.e. dir=dir+1=6, 好,这是1。 现在要做的事情有两个:一是记录邻居“南”,(6近邻)的坐标,Pn=P1=(2,2) 二是记录方向码 6 ; (这两个记录过程,一般用两个数组来实现,以便最后输出结果) 此时,注意,dir已经更新为 6 ! Step 3 , 不符合结束条件,继续转Step 2 Step 2: (n=n+1=2)按逆时针方向顺序找到P1(2,2)点的8个3x3邻居中第一个为1的点,此时P1(2,2)的八个近邻情形为(X表示当前P): 0 1 1 0 X 1 1 1 1 开始判断的方向为(dir+6) mod 8 =(6(偶数)+6) mod 8=4 ,也就是开始以逆时针依次判断的起始方向为西方向! 此时,为0,接着要判断西南,i.e. dir=dir+1=5, 好,这是1。 现在要做的事情有两个:一是记录邻居“西南”,(5近邻)的坐标,P2=(3,1) 二是记录方向码 5 ; (两个数组记录,以便最后输出结果) Step 3 , 不符合结束条件,继续转Step 2 Step 2: (n=n+1=3) 按逆时针方向顺序找到P2(3,1)点的8个3x3邻居中第一个为1的点,此时P1(2,2)的八个近邻情形为(X表示当前P): 0 0 1 0 X 1 0 0 1 开始判断的方向为(dir+6) mod 8 =(5(奇数)+6) mod 8=3 ,也就是开始以逆时针依次判断的起始方向为西北方向! 此时,为0,接着要判断西,西南,南,也为0,再继续判断东南i.e. dir=7, 好,这是1。 一是记录邻居“东南”,(7近邻)的坐标,P3=(4,2) 二是记录方向码 7 ; (两个数组记录,以便最后输出结果) 。。。。。。。。。。。。 |
相关文章推荐
- 常用的一些小程序集合的算法描述和部分代码(输出BMP,截取yuv,边界标记)
- 图像处理基本算法 链码 边界跟踪
- matlab练习程序(二值图像内外边界跟踪)
- PHP中奖概率的抽奖算法程序代码_PHP教程
- 时空上下文视觉跟踪(STC)算法的解读与代码复现
- Camshift算法原理及程序代码
- 时空上下文视觉跟踪(STC)算法的解读与代码复现
- IE的debug工具对程序进行debug跟踪JS代码
- 消灭星星的数组高效率算法(c++代码,控制台程序)
- 尺度不变特征变换(SIFT算法)Matlab程序代码测试例子的说明(Lowe的代码)
- 限制程序中某类操作的执行次数的算法设计及C代码实现
- 使用JAVA发送HTTP请求(Http Request),返回HTTP响应(Http Response)内容,代码程序例子及原理说明
- 程序算法代码片段
- 基于MeanShift的视频目标跟踪算法及代码实现
- 编程精粹--编写高质量C语言代码(6):对程序进行逐条跟踪
- 有限元算法-4:有限元代码(由Shell63,Solid45,Fluid30组合在一起形成的耦合程序)
- 嵌入式小波零树(EZW)算法的过程详解和Matlab代码(2)编码过程(081227-补充quantifier程序)
- CMT跟踪算法代码分析笔记
- 时空上下文视觉跟踪(STC)算法的解读与代码复现
- 图像处理基础知识系列之一:边界跟踪之内边界跟踪算法解释