二值图像快速细化算法
二值图像的细化是讨论将一个图像中的黑色部分沿着它的中心轴线将其细化为一个像素宽的线条的处理过程,细化的结果能基本保留图形中黑色部分的拓扑结构。图像细化是图像模式识别的关键步骤。快速细化算法的思想是优化了原细化算法中由边界逐层消除黑色像素点的过程,提高细化效率。
细化前 细化后(灰色为去除点)
细化算法
本算法基于逐层剥取理念,快速细化算法改进了反复扫描的过程,顺序、逆序搜索两次,确定每个点的层数,通过层数可判断该点属于边界点还是骨架, 因而优化算法的效率,大量减少程序运算时间。
算法步骤:
假设黑色值为1,白色为0.
第一步,从上到下,从左到右依次扫描每一个点,若当前点(x,y)为黑点时,需判断其右上、上、左上和左四点的情况。(x-1,y+1) (x-1,y) (x-1,y-1) (x,y-1) 这四点可以理解为当前点是被该四点包围,该点层数即四点层数最小值多一层;如果当前点(x,y)为白色,层数值赋为0。
第二步,自下而上,自右而左,与第一步相似的判断每个点的状态,若当前点是黑点,于是判断其左下、下、右下和右四点的情况(图6)。(x+1,y-1) (x+1,y) (x+1,y+1) (x,y+1)四点包围了当前点,同样取这四点层数的最小值加1 作为该点层数值;如果当前点(x,y)为白色,层数值赋为0。
与此同时,既然已经求得每一个点上包围层数值和下包围层数值,每个点的实际层数其实就是两种层数值中最小值(图7)。
M[x][y]=Min(F[x][y],G[x][y])
第三步,从上到下,从左到右依次扫描每一个点,此时需要判断该点8 方向(图7)范围内所有点层数的情况。如果当前点的层数值是周围相邻点中最大,该点即保留;如果当前点的层数值并非最大,该点即可删去。
M[x][y]==Max(M[x+i][y+i]│(-1<=i,j<=1))? 保留:删去
综上步骤,即完成了该图像细化的全部过程,算法只需遍历3 次,就能将一幅图像进行快速细化。
MATLAB代码
%二值化
binary=imread('PIC_NAME');
[high,weight]=size(binary);
F=zeros(high,weight);
G=zeros(high,weight);
M=zeros(high,weight);
out=zeros(high,weight);
for i=2:high-1
for j=2:weight-1
if binary(i,j)==0
F(i,j)=0;
else
mi=[F(i,j-1),F(i-1,j-1),F(i-1,j),F(i-1,j+1)];
F(i,j)=min(mi)+1;
end
end
end
for i=high-1:-1:2
for j=weight-1:-1:2
if binary(i,j)==0
G(i,j)=0;
else
mi=[G(i+1,j-1),G(i+1,j),G(i+1,j+1),G(i,j+1)];
G(i,j)=min(mi)+1;
end
end
end
for i=2:high-1
for j=2:weight-1
mi=[F(i,j),G(i,j)];
M(i,j)=min(mi);
end
end
for i=2:high-1
for j=2:weight-1
ma=[M(i,j-1),M(i-1,j-1),M(i-1,j),M(i-1,j+1),M(i+1,j-1),M(i+1,j),M(i+1,j+1),M(i,j+1)];
if M(i,j)==max(ma)
out(i,j)=M(i,j);
else
out(i,j)=0;
end
end
end
imshow(out);
二值图像快速细化算法相关推荐
- 文字细化算法matlab,[转载](转)二值图像的细化算法和源程序代码(Matlab)
二值图像的细化算法和源程序代码(Matlab) 有关图像细化算法,从方法上有很多,具体请参看各图像处理的经典教材,但有一本书,我记得是大概1980年代科学出版社出版的,是著名的Pavlidis编著,并 ...
- zhang 快速并行细化方法_一种改进的Zhang并行图像细化算法的制作方法
本发明涉及图像处理技术,具体涉及一种改进的Zhang并行图像细化算法. 背景技术: 图像细化是将图像的线条从多像素宽度减少到单位像素宽度,简称骨架化.细化效果的好坏直接影响后期图像处理的效果.对于二值 ...
- 改进的脱机手写体汉字细化算法
摘要:基础数据来源于23名同学手写的100个汉字,共计2300个,然后对这组数据进行二值化,去噪,分割,归一化后所得数据. 作者:刘亚宁,2010年9月10日 在进行细化之前首先以说明为什么要将手写体 ...
- OpenCV学习(14) 细化算法(2)
前面一篇教程中,我们实现了Zhang的快速并行细化算法,从算法原理上,我们可以知道,算法是基于像素8邻域的形状来决定是否删除当前像素.还有很多与此算法相似的细化算法,只是判断的条件不一样.在综述文章, ...
- 改进Zhang Suen细化算法的C#实现
本文主要实现了改进Zhang Suen细化算法的C#实现,相关论文 :"牟少敏,杜海洋,苏平,查绪恒,陈光艺.一种改进的快速并行细化算法[J].微电子学与计算机,2013,(第1期)&quo ...
- OpenCV学习(13) 细化算法(1)(转)
1.转载链接:http://www.cnblogs.com/mikewolf2002/p/3321732.html 程序编码参考经典的细化或者骨架算法文章: T. Y. Zhang and C. Y. ...
- MATLAB二值图连通域快速标记算法
(来点有用的)MATLAB二值图连通域快速标记算法 基本原理 算法实现 0. 变量解释 1.种子点搜索 2 区域生长 完整代码 实验 其他 by HPC_ZY 由于工程需要,用C++实现三维二值图像的 ...
- 图像处理之Zhang Suen细化算法
在二值图像处理特别是OCR识别与匹配中,都要通过对字符进行细化以便获得图像的骨架,通过zhang-suen细化算法获得图像,作为图像的特征之一,常用来作为识别或者模式匹配. 一:算法介绍 Zhang- ...
- Zhang-Suen细化算法提取中轴线(Python)
骨架 表示一个平面区域的结构形状的一种重要方法是将它简化为图形,这种简化可以通过一种细化(也称为骨架化)算法得到该区域的骨架来实现.细化是一种形态学变形,在提取中轴线的图像处理问题中,细化起着核心作用 ...
- java快速查找算法_Java实现的快速查找算法示例
本文实例讲述了Java实现的快速查找算法.分享给大家供大家参考,具体如下: 快速查找算法,可以根据想要找的是第几个大的数,每次循环都能固定下来一个数在数组完整排完序之后的位置,每次循环都能定一个数的位 ...
最新文章
- 脚本文件直接执行python代码
- 基于自动驾驶车辆的激光雷达与摄像头之间的在线标定算法
- linux c 运行报错 killed
- Linux(RHEL7及CentOS7)下glibc版MySQL5.7.20的安装
- python 各种推导式玩法
- 分割法和填补法_“聚合”法与“分割”法
- android 代码设置居右_Android 开发实现EditText 光标居右显示
- Unity Android 使用UnityWebRequest Post 数据后,没有获得服务器返回的数据
- 【资源】About Face4交互设计精髓,英文原版,彩色pdf下载
- matlab2010改语言,[转载]ubuntu下安装matlab2010及语言环境设置和创建桌面启动
- Vs2010中文版MSDN 安装方法
- javascript 按下回车键触发input表单的切换(enter键代替tab键功能)
- 程序员的996简史!我们是怎么一步步陷入996工作制的
- IDEA 中添加@author注释(live templates)
- 苹果选了天猫 天猫成了618
- 足球html游戏,[盘点]球迷不可错过的足球类网页游戏
- 设置监察哨的顺序查找
- HCIP-H12-221单选题库(5)
- 程序员进银行科技岗——简单总结
- 计算机弹奏蔡徐坤,用了多年键盘才发现,CTRL键跟蔡徐坤有关,细思极恐!
热门文章
- 【5 于博士Cadence SPB15.7 快速入门视频】allegro的测量工具的使用
- edp协议 netty_使用esp8266 arduino 通过EDP协议 将数据传递到onenet平台
- LZJ的python学习第一天
- cygwin apt-cyg
- 只有VOB文件也可以制作成DVD——用IfoEdit建立IFO篇(最好的方法)
- Two Birds with One Stone: Series Saliency for Accurate and Interpretable Multivariate Time Series...
- Linux copy命令 omitting directory
- AirDrop不工作?使用这 15 个技巧快速修复它
- 同步模式之保护性暂停
- 记录下如何判断错误:no such file or directory