opencv2实现形态学骨架提取

因为opencv2中没有形态学骨架提取算法的实现,于是准备在opencv2上实现一个。

首先介绍下骨架提取算法,冈萨雷斯的书上已经说的很清楚了,我再重复一下。

集合A的骨架可以用腐蚀和开操作来表达, 即骨架可以表示为

其中,

式中,B是一个结构元,而    表示对A的连续k次腐蚀:

K是A被腐蚀为空集前的最后一次迭代步骤。换句话说,

其中AB表示用B结构原腐蚀A,   

表示开运算


实现步骤:opencv2中已经有了腐蚀函数, 开运算函数,而骨架提取可以表示为有限次腐蚀,开运算操作,只需按照公式码上去就行了,过程比较简单。

这里,我借用了opencv2这些操作,另外要注意的是求集合并集时,可以直接使用Mat 重载后的运算 “|”操作 ,集合相减时也可直接使用Mat的“-”操作。


Mat a, b, c;
a = imread("src1.jpg");
b = imread("src2.jpg");
c = a - b;
c = a | b;

 
  

下面是使用3*3正方形模板提取的骨架


opencv2实现形态学骨架提取_第1张图片

当我换成3*3十字模板就变成下面这样了

opencv2实现形态学骨架提取_第2张图片

下面两幅图是“真正”的骨架提取

opencv2实现形态学骨架提取_第3张图片


opencv2实现形态学骨架提取_第4张图片opencv2实现形态学骨架提取_第5张图片

下面是完整的代码下载地址

http://download.csdn.net/detail/dingjiansw101/9544038

你可能感兴趣的:(opencv)