细化算法 (1)
Hilditch 细化算法是经典的二值图像细化算法

Hilditch 细化算法是经典的二值图像细化算法,然而,在网上却很难找到一个详细、正确的介绍和实现。
可以找到一辆个 Hilditch 算法的C实现,但缺乏注释,代码可读性也很差。
在期刊网上找到几篇论文,提及了Hilditch 算法,结果一篇说的罗哩罗嗦根本看不懂,另一篇说的说的易懂,却是错误的!拿来主义是行不通了,于是只好结合着这几个论文和代码,从头写 Hilditch 细化算法。
假设像素p的3×3邻域结构为:Hilditch 细化算法的步骤为:对图像从左向右从上向下迭代每个像素,是为一个迭代周期。
在每个迭代周期中,对于每一个像素p,如果它同时满足6个条件,则标记它。
在当前迭代周期结束时,则把所有标记的像素的值设为背景值。
如果某次迭代周期中不存在标记点(即满足6个条件的像素),则算法结束。
假设背景值为0,前景值为1,则:6个条件为:(I):p 为1,即p不是背景;(2):x1,x3,x5,x7不全部为1(否则把p标记删除,图像空心了);(3):x1-x8 中,至少有2个为1(若只有1个为1,则是线段的端点。
若没有为1的,则为孤立点);(4):p的8连通联结数为1;联结数指在像素p的3*3邻域中,和p连接的图形分量的个数:上图中,左图的4连通联结数是2,8连通联结数是1,而右图的4联通联结数和8联通联结数都是2。
4连通联结数计算公式是:8连通联结数计算公式是:其中,至于公式怎么来的就不管了,直接用就行了。
(5)假设x3已经标记删除,那么当x3为0时,p的8联通联结数为1;(6)假设x5已经标记删除,那么当x5为0时,p的8联通联结数为1。
======在程序中,我使用的是这样的邻域编码:为了方便计算联结数,以0作为前景,1作为背景。
程序如下(完整程序见:/svn/trunk/src/mon/UnmanagedI mage/ImageU8.cs):/// <summary>/// 计算八联结的联结数,计算公式为:/// (p6 - p6*p7*p0) + sigma(pk - pk*p(k+1)*p(k+2)), k = {0,2,4)/// </summary>/// <param name="list"></param>/// <returns></returns>private unsafe Int32 DetectConnectivity(Int32* list){Int32 count = list[6] - list[6] * list[7] * list[0];count += list[0] - list[0] * list[1] * list[2];count += list[2] - list[2] * list[3] * list[4];count += list[4] - list[4] * list[5] * list[6];return count;}private unsafe void FillNeighbors(Byte* p, Int32* list, Int32 width, Byte foreground = 255){// list 存储的是补集,即前景点为0,背景点为1,以方便联结数的计算list[0] = p[1] == foreground ? 0 : 1;list[1] = p[1 - width] == foreground ? 0 : 1;list[2] = p[-width] == foreground ? 0 : 1;list[3] = p[-1 - width] == foreground ? 0 : 1;list[4] = p[-1] == foreground ? 0 : 1;list[5] = p[-1 + width] == foreground ? 0 : 1;list[6] = p[width] == foreground ? 0 : 1;list[7] = p[1 + width] == foreground ? 0 : 1;}/// <summary>/// 使用 hilditch 算法进行细化/// </summary>public unsafe void Thinning(Byte foreground = 255){Byte* start = this.Start;Int32 width = this.Width;Int32 height = this.Height;Int32* list = stackalloc Int32[8];Byte background = (Byte)(255 - foreground);Int32 length = this.Length;using (ImageU8 mask = new ImageU8(this.Width, this.Height)) {mask.Fill(0);Boolean loop = true;while (loop == true){loop = false;for (Int32 r = 1; r < height - 1; r++){for (Int32 c = 1; c < width - 1; c++){Byte* p = start + r * width + c;// 条件1:p 必须是前景点if (*p != foreground) continue;// p3 p2 p1// p4 p p0// p5 p6 p7// list 存储的是补集,即前景点为0,背景点为1,以方便联结数的计算FillNeighbors(p, list, width, foreground);// 条件2:p0,p2,p4,p6 不皆为前景点if (list[0] == 0 && list[2] == 0 && list[4] == 0 && list[6] == 0)continue;// 条件3: p0~p7至少两个是前景点Int32 count = 0;for (int i = 0; i < 8; i++){count += list[i];}if (count > 6) continue;// 条件4:联结数等于1if (DetectConnectivity(list) != 1) continue;// 条件5: 假设p2已标记删除,则令p2为背景,不改变p的联结数 if (mask[r - 1, c] == 1){list[2] = 1;if (DetectConnectivity(list) != 1)continue;list[2] = 0;}// 条件6: 假设p4已标记删除,则令p4为背景,不改变p的联结数 if (mask[r, c - 1] == 1){list[4] = 1;if (DetectConnectivity(list) != 1)continue;}mask[r, c] = 1; // 标记删除loop = true;}}for (int i = 0; i < length; i++){if (mask[i] == 1){this[i] = background;}}}}}。
第6章 腐蚀,膨胀,细化算法

第6章腐蚀,膨胀,细化算法这一章的内容我认为是最有趣的。
还记得前言中那个抽取骨架的例子吗?现在我们就来看看它是如何实现的。
今天所讲的内容属于一门新兴的学科:数学形态学(Mathematical Morphology)。
说起来很有意思,它是法国和德国的科学家在研究岩石结构时建立的一门学科。
形态学的用途主要是获取物体拓扑和结构信息,它通过物体和结构元素相互作用的某些运算,得到物体更本质的形态。
在图象处理中的应用主要是:(1)利用形态学的基本运算,对图象进行观察和处理,从而达到改善图象质量的目的;(2)描述和定义图象的各种几何参数和特征,如面积、周长、连通度、颗粒度、骨架和方向性等。
限于篇幅,我们只介绍二值图象的形态学运算,对于灰度图象的形态学运算,有兴趣的读者可以阅读有关的参考书。
在程序中,为了处理的方便,还是采用256级灰度图,不过只用到了调色板中的0和255两项。
先来定义一些基本符号和关系。
1.元素设有一幅图象X,若点a在X的区域以内,则称a为X的元素,记作a∈X,如图6.1所示。
2.B包含于X设有两幅图象B,X。
对于B中所有的元素ai,都有ai∈X,则称B包含于(included in)X,记作B X,如图6.2所示。
3.B击中X设有两幅图象B,X。
若存在这样一个点,它即是B的元素,又是X的元素,则称B击中(hit)X,记作B↑X,如图6.3所示。
4.B不击中X设有两幅图象B,X。
若不存在任何一个点,它即是B的元素,又是X的元素,即B和X的交集是空,则称B不击中(miss)X,记作B∩X=Ф;其中∩是集合运算相交的符号,Ф表示空集。
如图6.4所示。
图6.1 元素图6.2 包含图6.3 击中图6.4 不击中5.补集设有一幅图象X,所有X区域以外的点构成的集合称为X的补集,记作X c,如图6.5所示。
显然,如果B∩X=Ф,则B在X的补集内,即B X c。
图6.5 补集的示意图6.结构元素设有两幅图象B,X。
基于算术运算的改进细化算法

基于算术运算的改进细化算法基于算术运算的改进细化算法改进细化算法是一种高效而稳健的迭代算法,在很多科学和工程领域广泛应用。
该算法主要是通过反复迭代求解较为复杂的非线性方程,来逐步优化目标函数,从而得到更好的解。
然而,细化算法在进行迭代计算时往往需要进行大量的运算,因此使用高效的算术运算方法可以有效地提高算法的计算效率和精度。
本文将介绍基于算术运算的改进细化算法,在实际应用中如何应用和优化。
一、改进细化算法概述改进细化算法的主要思想是通过迭代优化过程,不断逼近非线性方程的最优解。
在迭代过程中,算法会使用一些高效的数值优化技术,如牛顿迭代、Broyden-Fletcher-Goldfarb-Shanno(BFGS)算法等,以逐步优化目标函数的值。
通过不断细化,可以得到越来越精确的解。
改进细化算法与一般细化算法相比,具有更高的计算效率和精度。
它可以更快地收敛到最优解,同时保证迭代过程不会陷入局部最优解。
此外,改进细化算法还可以克服函数奇异性和不连续性等问题,使得该算法具有广泛的适用范围。
二、算术运算优化方法细化算法的计算过程中需要大量的算术运算,因此使用高效的算术运算方法可以显著提高算法的计算效率和精度。
下面介绍几种常用的算术运算优化方法。
1.矩阵优化在使用BFGS算法进行迭代优化时,需要不断求解矩阵的逆。
然而,矩阵的逆通常是一项非常耗时的计算,因此使用一些特殊的矩阵优化技巧可以显著提高算法的计算效率。
例如,可以使用逆迹技术或稳定低秩分解等技术来快速求解矩阵的逆。
这些技术可以大大减少计算时间,并且保证计算结果的准确性。
2.向量化运算使用向量化运算可以显著提高计算效率。
向量化运算将多个数值计算操作合并为一个单一的矩阵或向量运算。
这样可以使得计算过程更加并行化,提高运算效率。
例如,可以使用SIMD指令集或数据并行技术等向量化运算技术。
这些技术可以同时处理多个数值数据,大大提高了算法的计算效率。
3.误差控制技术在进行算术运算时,误差是不可避免的。
细化算法研究

论文中文摘要毕业设计说明书(论文)外文摘要1 绪论图像的细化是数字图像预处理中的重要的一个核心环节。
图像细化在图像分析和图像识别中如汉子识别、笔迹鉴别。
指纹分析中有着广泛的应用。
图像的细化主要有以下几个基本要求:(1)骨架图像必须保持原图像的曲线连通性。
(2)细化结果尽量是原图像的中心线。
(3)骨架保持原来图形的拓扑结构。
(4)保留曲线的端点。
(5)细化处理速度快。
(6)交叉部分中心线不畸变。
虽然现在人们对细化有着广泛的研究,细化算法的方法有很多。
然而大多数算法如Hilditch算法和Rosenfield算法存在着细化后图形畸变,断点过多,在复杂的情况下关键信息的缺失等问题。
基于上诉考虑,传统的细化算法已经无法满足如今的数字图像处理要求。
因此,需要提出新的一种算法,来解决相关问题。
1.1 相关定义1.1.1串行与并行从处理的过程来看,主要可以分为串行和并行两类,前者对图像中当前象素的处理依据其邻域内象素的即时化结果,即对某一元素进行检测,如果该点是可删除点,则立即删除,且不同的细化阶段采用不同的处理方法;后者对当前的象素处理依据该象素及其邻域内各象素的前一轮迭代处理的结果,至始至终采用相同的细化准则。
即全部检测完汉子图像边缘上的点后再删除可删除点。
1.1.2骨架对图像细化的过程实际上是求一图像骨架的过程。
骨架是二维二值目标的重要拓扑描述,它是指图像中央的骨架部分,是描述图像几何及拓扑性质的重要特征之一。
骨架形状描述的方法是Blum最先提出来的,他使用的是中轴的概念。
如果用一个形象的比喻来说明骨架的含义,那就是设想在t=0的时刻,讲目标的边界各处同时点燃,火焰以匀速向目标内部蔓延,当火焰的前沿相交时火焰熄灭,那么火焰熄灭点的集合就构成了中轴,也就是图像的骨架。
例如一个长方形的骨架是它的长方向上的中轴线,正方形的骨架是它的中心点,圆的骨架是它的圆心,直线的骨架是它自身,孤立点的骨架也是自身。
细化的目的就是在将图像的骨架提取出来的同时保持图像细小部分的连通性,特别是在文字识别,地质识别,工业零件识别或图像理解中,先对被处理的图像进行细化有助于突出形状特点和减少冗余信息量。
几种细化算法的比较研究

!譬。
塑:璺且、几种细化算法的比较研究刘卫光李娟(中原工学院,河南郑州450007).脯要】该文综合分析了各种常用细化算法存在的问题,简单介绍并评价了,:种主要的改进方法,从而为相关技术人员在根据具体需要选择合适的细化算法时提供了方便,最后,对细化算法的研究方向给出了一些辰望。
陕键甸图像处理;细化;算法;结构元素细化(t hi nni ng)是采用各种手段逐层消去图形的外边界像素点,直至图形的像素宽度减少到一个像素,但同时保存能够表征图形的特征,然后使用像素跟踪的方法结合各个图形的判别函数将图形转换为矢量格式。
细化有四个原则:1)细化要取原图像的中心线,即细化过程应是对称的;2)细化不能改变原图像的连通性;3)细化时要保持原图像的基本特征,要尊重原图像:4)具有很好的稳定’I‰细化过程也就是对图像逐层剥落的过程,随着细化的进行,图像有规律地缩小。
传统细化算法有很多,有串行算法和并行算法。
常用的有H i,di t ch细化、D e ut c h细化和Pavl i di s细化和基于形态学的细化算法等。
'几种经典的细化算法1.1H i l di t ch算法H i l di t c h细化算法为是串行处理方法的一种,最终得到的是8条近邻连接线条。
其主要原理是每次扫描并删除图像上满足一定的条件的轮廓像素,直到图像上不存在可删除的轮廓像素为止。
文献【1脂出该方法适用于二值图像,即像素为1的区域为目标区域像素为0的区域为背景区域的图像。
在此算法中,目标像素P若同时满足以下条件即为可删除像素:1)P0+P2+P4+P6。
<3,2)N c=l:3)Pk(O≤k≤7)中至少有一个目标像素为1;4)P2=l或N c2=l;N c2为假定P2=0时P的联结数:5)P4=1或N c4=1。
N c4为假定P4=0时P的联结数。
联结数就是八邻域中互相分离的联结成分的个数。
12D eut c h细化算法文朗1l介绍D eut c h细化算法采用的处理方式为并行处理方式其算法吐是采用两层子循环。
一种改进的脱机手写文字细化算法

Li un 和 G nu n在 文献 [ ] e H ag exnWa 3 中提 出 了
一
种有效 的并行文 字 细化 算 法 , 该算 法采 用 了 7个
保 留模板 和 5 删除模板 , 0个 分别如 下 :
( ) 留曲线 的端点 ; 5保
20 08年 8月 1 1日收 到 国家 十五 科 技 攻关 项 目 (04 A 1B) 20B S0
⑥ 20 S i ehE gg 08 c .T c. nn.
一
种改 进 的脱 机 手写文 字细 化算 法
刘 瑛 王 绪 本
( 都 理 工 大学 信 息 工 程学 院 , 都 60 5 ; 都 理工 大 学研 究 生 院 109) 成 成 10 9 成 ,60 5
摘
要
在分析 已有细化算法 的基础上, 针对两个像素宽 的文字笔划 , 设计像素保 留算 法, 有效解决 了文字笔划 断裂及 丢失 细化 模 板 断裂 丢失
一
情 况有关 ; 在 并行 方 式 中 , 而 当前 迭 代 仅 仅 由前 一
次 的迭代 情 况 决 定 。串 行 细化 算 法 的处 理 结 果 依
赖 于对像素 处理 的先后 顺 序 , 而像 素点 的消除 或 因 保 留不可预 测 ; 而并 行 细化 算 法对 图像 进 行 细化 时 利用 相 同的条件 同时检 测 所有 像 素点 , 结果 具有 其 各 向同性 , 此 从 算 法 原 理 上 并 行 方 法 优 于 串行 因
方法 。
个 好 的细化 算法应该 达到如 下要求 :
() 1 骨架 图像必 须保持原 图像 的连通性 ; () 2 骨架 图像应尽 可能是原 图像 的中心线 ;
() 3 细化 结果 要 尽 可 能 细 , 争取 得 到一 个 像 素 宽 的线条 图像 ; () 4 应使用 尽可能少 的迭代 次数 ;
二值图像的细化算法
首先 , 对二 值 图像 进 行 设 定 。这 里 假 定 二值 图像 以 白 色 为 底 , 化黑 色 部 分 , 给 出 的 黑 色 部 分 的 图像 为 连 通 细 且
以下 是 对 链 表 的遍 历 ( 中 的 边 界 点 、 通 点 的 判 断 , 其 连 都 留 到下 面 的算 法 中具 体 的介 绍 ) 在 一 轮 轮 的遍 历 中 , , 逐
我设 定 了一 些 不 同 的颜 色 值 , 作 不 同 情 况 的 判 断 。 而 一 以 轮需 作 两 次 的遍 历 。第 一 次 遍 历 判 断 是 否 为 边 界点 , 考 需
摘 要 : 二值 图像是只有黑 白两种颜 色的 图像 , 二值 图像 的细化是 讨论将一 个图像 中的 黑色部分沿着 它的 中心轴 线
将 其 细化 为一 个像 素 宽 的线 条 的处 理 过 程 , 细化 的 结 果 能基 本 保 留 图形 中 黑 色部 分 的拓 扑 结 构 。介 绍 了一 个 二 值 图 像 的 细化 算 法 , 想 是从 原 图像 的 边 界 逐 层 消 除 黑 色像 素 点 , 同 时 保 持 黑 色 部 分 的 连 通 性 , 到 最 后 得 到 细 化 结 思 但 直
0 引 言
在 计 算 机 领 域 , 像 处 理 的 问题 越来 越 成 为 重 要 的一 图
图像 区域 会 失 去 连 通性 , 体 判 断要 考 虑 该 点 的 8个 方 向 具 的像 素 的颜 色 值 。因 为 在 后 面 的 判 断 中有 两 个 黑 点 去 掉 后 , 色 图 像 区 域 是 否 会 失 去 连 通 性 的 , 们 在 此 定 义 使 黑 我
第 1R 第7 o 期 2 1年 7 01 月
图像细化(骨架化)算法分析
图像细化(⾻架化)算法分析图像细化(⾻架化)算法分析图像的细化是模式识别中很重要的⼀个技术,指的是将原本"臃肿"的像素简化为单像素相连接的⼆值图像(即类似⾻架的概念),细化的好坏直接影响到后⾯识别匹配的效率。
摘⾃某⽂章的话,细化就是经过⼀层层的剥离,从原来的图中去掉⼀些点,但仍要保持原来的形状,直到得到图像的⾻架。
⾻架,可以理解为图象的中轴,例如⼀个长⽅形的⾻架是它的长⽅向上的中轴线;正⽅形的⾻架是它的中⼼点;圆的⾻架是它的圆⼼,直线的⾻架是它⾃⾝,孤⽴点的⾻架也是⾃⾝。
下⾯先介绍经典的Zhang并⾏快速细化算法:设p1点的⼋邻域为:【 p9 p2 p3p8 p1 p4p7 p6 p5 】(其中p1为⽩点,如果以下四个条件同时满⾜,则删除p1,即令p1=0)其中迭代分为两个⼦过程:过程1 细化删除条件为:(1)、2 < =N(p1) <= 6, N(x)为x的8邻域中⿊点的数⽬(2)、A(p1)=1, A(x)指的是将p2-p8之间按序前后分别为0、1的对数(背景⾊:0)(3)、p2*p4*p6=0(4)、p4*p6*p8=0如果同时满⾜以上四个条件则该点可以删除(赋值为0)。
过程2 细化删除条件为:(1)、2 < =N(p1) <= 6, N(x)为x的8邻域中⿊点的数⽬(2)、A(p1)=1, A(x)指的是将p2-p8之间按序前后分别为0、1的对数(背景⾊:0)(3)、p2*p4*p8=0(4)、p2*p6*p8=0如果同时满⾜以上四个条件则该点可以删除。
代码如下:A.m1 function n=A(temp,i,j)2 %0->1的数⽬3 shuzu=[temp(i,j),temp(i-1,j),temp(i-1,j+1),temp(i,j+1),temp(i+1,j+1),temp(i+1,j),temp(i+1,j-1),temp(i,j-1),temp(i-1,j-1)];4 n=0;5for i=2:86if shuzu(i)==0&&shuzu(i+1)==17 n=n+1;8 end9 end主函数代码:1 test=input('Please input a digits image:','s'); %输⼊图像2 x=imread(test);3if ~isbw(x)4'请确保输⼊图像为⼆值化图像!';5else6 [height,width]=size(x);7 mark=1;8 % temp=zeros(height+2,width+2);9 % temp(2:height+1,2:width+1)=x(:,:);10 temp=x;11 imshow(temp);12while mark==113 mark=0;1415for i=2:height-116for j=2:width-117 condition=0;18 %判断P(r,c)是否为可细化像素19if temp(i,j)==120 n=0;21for ii=-1:122for jj=-1:123 n=n+temp(i+ii,j+jj);24 end25 end26if (n>=3 && n<=7)27 condition=condition+1;28 end29if A(temp,i,j)==130 condition=condition+1;31 end32if temp(i-1,j)*temp(i,j+1)*temp(i+1,j)==033 condition=condition+1;34 end35if temp(i,j+1)*temp(i+1,j)*temp(i,j-1)==036 condition=condition+1;37 end38if condition==439 mark=1;40 temp(i,j)=0;41 end42 end43 end44 end45 figure;imshow(temp);464748for i=2:height-149for j=2:width-150 condition=0;51 %判断P(r,c)是否为可细化像素52if temp(i,j)==153 n=0;54for ii=-1:155for jj=-1:156 n=n+temp(i+ii,j+jj);57 end58 end59if (n>=3 && n<=7)60 condition=condition+1;61 end62if A(temp,i,j)==163 condition=condition+1;64 end65if temp(i-1,j)*temp(i,j+1)*temp(i,j-1)==066 condition=condition+1;67 end68if temp(i,j-1)*temp(i+1,j)*temp(i,j-1)==069 condition=condition+1;70 end71if condition==472 mark=1;73 temp(i,j)=0;74 end75 end76 end77 end78 figure;imshow(temp);79 end80 end结果:。
一种空间三维图像的细化算法
2 基于双 目立体 视 觉的物 体 建模原 理
双 目立体视觉 技术 : 运用 二维成 像技 术 , 是 通过 相关 算 法, 运用二 维照片中 的特征坐标 , 成三 维坐标 的过程 , 合 需要 在不 同方 向采集二 维 图像 , 采集 的摄 像机机 位放 置 图 , 如下
图 1所 示 。
一
1 以物体特征 中相关 的三个特征点 为基 础 , ) 这三个点能
够两两相交 , 组成三角形 2 每个点 的坐标垂直 映射 , ) 不能在三角形 的外部 。 3 对一个点进行操作 的时候 , ) 它的变化会 只影 响到与之
条直线上 。采 集特 征时 , 在拍 摄 的时候 , 要保 证摄 像设 备 内部 的直线轴 与拍 摄 物 的空 间 坐标 系 的 ‰ 轴是 同一条 直
形状结构 原型的三维模型 J 。
1 引言
基于双 目立体视觉 技术 建立三维物体模 型 , 在当今 的物
体三维仿真 中是一个及 其热门的课题 。特别是 2 0世纪 9 O
但是 , 通过双 目立体视觉构建 的模 型有一个 传统 的难 点 问题 没有解决 , 就是建立 的三维模 型的清 晰度的 问题 。由于 用该方法建立 的模 型所需要的三维数据 点 , 都是 通过二 维图
完整 的数据点 三维坐标 了 J 。下面 以新增 一个 细化数 据点 为例 , 介绍整个细化算法 的一个流程 。 32 空间插入 数据点的选择 . 细化算法 的第 一步是 对 已经存 在的三 维模 型进行 三角
剖分 : 建立三角剖分需要准从一下规则 :
在 图 1中 , 、:表示 摄像 机 的实 际位 置。两个 摄像 机 00 之间存在着一定距 离 , 通过两个摄像 头对需要 转换 的物 体进
hilditch 细化算法 python
Hilditch细化算法是一种用于二值图像细化(或骨架化)的算法。
以下是一个简单的Python实现:
def hilditch(image):
# 获取图像的宽度和高度
width, height = image.shape
# 创建一个与原图大小相同的掩模,所有值初始化为1
mask = image.copy()
# 遍历原图像
for y in range(height):
for x in range(width):
# 如果当前像素是1,则进行细化操作
if image[x][y] == 1:
# 判断上下左右四个方向是否为0
if (x > 0 and image[x-1][y] == 0) or (x < width-1 and image[x+1][y] == 0):
mask[x][y] = 0
if (y > 0 and image[x][y-1] == 0) or (y < height-1 and image[x][y+1] == 0):
mask[x][y] = 0
# 返回细化后的图像
return mask
这个函数接受一个二值图像作为输入,并返回一个细化后的图像。
在函数中,我们首先创建一个与原图大小相同的掩模,并将所有值初始化为1。
然后,我们遍历原图像中的每个像素,如果当前像素是1,则检查其上下左右四个方向是否为0。
如果是,则将当前像素的值设置为0,表示该像素应该被细化掉。
最后,我们返回细化后的图像。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
汇报人:马文书
目录
标题一 细化算法的定义 标题二 常用细化算法的分类 标题三 细化算法的挑选
细化算法的定义
细化:又称骨架化,即在不影响原图像拓扑连接关系的条件下,尽可能 用最少的迭代次数,快速准确地将宽度大于一个像素的图形线条转变为 一个像素宽线条的处理过程,也就是抽取像素的骨架 成为好的细化算法的要求: (1)细化图像的连通性必须与原图像保持一致; (2)细化图像中的线条宽度应为1pixel; (3)细化图像中的线条应尽可能是中心线; (4)细化后图像应尽可能保持原图的细节特征; (5)细化算法的速度尽可能快。
P4
P3
P2
P5
P
P1
P6
P7
P8
④p3=1或X(p)3=1; ⑤p5=1或X(p)5=1。 其中:∑4(p)表示p的4个邻域内黑像素的个数,∑8(p)表示p的8邻域内黑 像素的个数, X(p)为连接数,X(p)3为假定P3=0时p的连接数,X(p)5=1为假定 p5=0时的连接数
HILDITCH的细化算法
(1)定义:它是一种经典的,充分 利用连接数的基本串行算法。 (2)步骤: 用图1所示的一个模板,沿着扫描方 向移动,逐点考察各像素的邻域状况, 在保持条纹连接性不变的情况下,逐 层删除条纹上轮廓像素,直到条纹为 一个像素的线条。 在此算法中,当被检测的目标像素满 足下列所有条件,才可删除像素: ①∑4(p)≤3,即p点的4-邻域至 少有一个值为0; ②X(p)=1;边缘点 ③∑8(p)≥1;非端点
(3)p2×p4×p6=0; (4)p4×p6×p8=0; 其中N(p1)是p1的非零临点的个数,S(p1)是以p2,p3,....p9为序时这 些点的至从0到1变化的次数,当所有边界点都检验完毕后,会把所有标 记的点除去。 其次需要满足条件 (1)2≤N(p1)≤6; (2)S(p1)=1; (3)p2×p4×p8=0; (4)p2×p6×p8=0; 同样当对所有边界点都检查完毕后,将所有标记的点除去。
常用细化算法的分类
常用细化算法的分类 (1)OPTA细化算法 (2)Hilditch的细化算法 (3)SPTA细化算法 (4)zhang细化算法
OPTA细化算法
(1)定义:它是一种典型的基于模板的图像细化 算法 (2)核心:通过应用消除和保留两套模板,来达 到对图像细化的目的 (3)算法过程: ①对图像中的当前像素点,将其与图1所示的消除 模板进行匹配,若满足消除模板中的某一个,则 转到步骤②,否则转至步骤③; ②将其与图2的保留模板进行匹配。若满足保留模 板中的某一个,则保留该点,转至步骤①;否则 删除该点,转至步骤①; ③保留该点,转至步骤①; ④不断重复步骤①,②,③,直至对一张图中所 有点扫描完毕,转至步骤⑤;
n6
n7
SPTA细化算法优缺点
SPTA细化算法 优点:它代表了笔划的中轴线且保持了连续性 缺点:它需要分四次扫描进行,速度较慢,而且SPTA也难于克服45度 交叉畸变的问题
ZHANG快速并行细化法 (1)zhang细化算法的原理 原理--设已知目标点为1,背景点标记为0。定义边界点本身标记为1而 其8-连通邻域中至少有一个标记为0的点。 (2Байду номын сангаасzhang细化算法的具体步骤 (一)考虑以边界点为中心的8-邻域,记中心为点p1,其邻域的8个点顺 时针绕中心点分别标记为p2,p3,.......p9,具体如图 首先需要边界点满足: (1)2≤N(p1)≤6; (2)S(p1)=1;
0 x x 1 x 图1 OPTA消除模板 0 1 1 0 1 1 1 x
0
0
x
图2 OPTA 保留模板 x x 0 x x 1 x x 1 x x 0 x x x x 0 1 1 0 x x x x
OPTA细化算法
OPTA细化算法的优缺点: 优点:能保持原图的拓扑性 缺点:细化后的图像扭曲较大,不仅毛刺较多,不够光滑,而且在三角 点处有时不能完全细化
SPTA细化算法步骤
对右边界的点,就是符合图3(a)模板的p点,即 n4· p· n0=1的p点,若式(a)为0,则为安全点。 布尔表达式中相应像素为黑且未被标记的点的布 尔量为1,否则为0. 同理,对左、上、下边界点的表达式分别如上面 的式(2)、(3)、(4)。
n3
n2
n1
n4
p
n0
n5
⑤判断在上一次扫描过程中,有无点被删除(即图像 有没有被进一步细化),若有,则转入步骤①,进行 下一次扫描;否则细化结束。 0 1 x x 1 x 0 1 1 0 1 1 0 1 x 0 0 x 0 0 0 0 x 1 1 1 x 1 x x 1 x 1 1 1 x 0 0 x 1 x x 1 x 1 1 1 1 1 0 0 0 0 x 0 0
以上两步被称为迭子代,当没有点再 满足条件时,剩下的点组成了区域的 骨架
(3)zhang细化算法优缺点 优点:具有速度快和保持细化后曲线的连通性
p9
p2
p3
p8
p1
p4
缺点:不能保证细化后曲线为单像素,给找细分 叉带来困难
p7
p6
p5
细化算法的挑选
通过对四种常用的算法比较,得出在干涉图像处理过程中选择zhang细化算 法, 采用逻辑算术运算进行删除判断,使其迭子代数大大减小而且执行速度快。
Hilditch细化算法的优缺点 优点:细化算法效果好
缺点:运算量大,有一些分支、处理速度慢,在实际应用中难以满足实时处理 的要求。
SPTA细化算法
SPTA细化算法一般需要经过数轮相同的检查过程,每一轮都由2次扫描组 成,每次扫描检查图像的每个像素。扫描过程可以是逐行的,也可以是 逐列的。第一次扫描检查所有的左、右边缘点,如果是非安全点则被标 记;第二次扫描检查所有的上、下边缘点,如果是非安全点则被标记。 当结束一轮扫描后,没有一点被标记,则删除所有被标记的点,算法结 束,否则进入下一轮扫描。 算法: S0=n4(n5+n6+n2+n3)(n0+n1')(n4+n3') S4=n0(n1+n2+n6+n7)(n2+n3')(n6+n5') S2=n6(n7+n0+n4+n5)(n0+n1')(n4+n3') S6=n2(n3+n4+n0+n1)(n4+n5')(n0+n7')其中’‘'’=‘ ▔’