一. 击中击不中变换
击中击不中变换是形状检测的一个基本工具,先看定义
文章图片
一般来说,设给定原图像X中包含A在内的多个不同物体,假设定位目标A,为此设置一个形状模板A,此时取一个比A稍大的B,且A不与B的边缘相交,令B1=A,B2=B-A;
如下图所示:
文章图片
算法步骤
一、开三个内存缓冲区,用来保存原图像数据,结构元素H对原图像的腐蚀结果,结构元素M对原图像补集的腐蚀结果
二、保存原图像数据,用结构元素H对原图像腐蚀,并保存腐蚀后的结果
三、恢复原图像,并对其求补
【个人笔记|数字图像处理(七)形态学处理之击中击不中变换、骨架提取】四、用结构元素M对原图像的补进行腐蚀操作,并保存腐蚀后的结果
五、求两个腐蚀结果的交集,即击中与击不中的结果
二. 骨架提取 骨架提取可以通过选定合适的结构元素B,对X进行连续腐蚀和开运算来求得。
文章图片
算法步骤:
一、获得原图像的首地址及图像的宽和高,并设置循环标志1
二、用结构元素腐蚀原图像,并保存腐蚀结果
三、设置循环标志为0,如果腐蚀结果中有一个点为255,即原图像尚未被完全腐蚀成空集,则将循环标志设为1.
四、用结构元素对腐蚀后的图像进行开运算(消除小的白色区域),并求取腐蚀运算与开运算的差(得到消除的白色区域)
五、用【四】中求得的结果与之前求得的骨架进行并集运算,以获得本次循环求得的骨架
六、把本次循环中保存的腐蚀结果赋值给原图像
七、重复步骤【2】-【6】,直到将原图像腐蚀成空集为止。
最终求得的骨架就是结果。
这两部分的代码都没有调通,就不上代码了,欢迎指正。
推荐阅读
- cocos2dx::ui::Text 显示问题
- 个人笔记-从零开始iOS开发_C语言基础1
- java时间复杂度计算
- 双重检查锁为什么要使用volatile字段
- java中lombok里的Builder注解
- 个人笔记|ReentrantLock 可重入锁
- javascript获取select值,树形随着select值的变化而变化
- DHCP 动态分配IP地址和指定分配IP
- Java基础知识---个人笔记,不全