Skeleton骨架总结

 

一个图像的"骨架"是指图像中央的骨骼部分,是描述图像几何拓扑性质的重要特征之一。
在求一幅图像X的骨骼过程中应满足两个条件:第一,X应该有规律的缩小;第二,在X缩小的过程中,应当使X的连通性质保持不变的

骨架算子介绍
1、skeletion(Region:Skeleton::)
功能:计算区域的骨骼
参数: Region(输入参数):输入区域
Skeleton(输出参数):结果区域
2、junctions_skeleton(Region:EndPoints,Junctions::)
功能:查找骨骼的关结点和端点
参数: Region(输入参数):输入区域 
EndPoints(输出参数):输出端点
Junctions(输出参数):输出关结点
3、split_skeleton_lines(SkeletonRegion::MaxDistance:BeginRow, BeginCol, EndRow, EndCol)
功能:把骨骼分割为多条宽度为一个像素,无分支的直线。如果一条直线段A上的点到另外一条与A端点相连的直线段B的最大距离大于MaxDistance,那么把这个线段A分割为一个独立的直线区域,该直线区域的近似直线段起点保存在元组BeginRow, BeginCol, EndRow和EndCol。
注意:输入区域必须没有分支的直线区域(即骨骼的单支区域)
参数: SkeletonRegion(输入参数):输入直线(宽度为一个像素,无分支的区域)
MaxDistance(输入参数):直线区域上的点到另外一条与其端点相连的直线区域的最大距离
BeginRow(输出参数):输出直线起点行坐标
BeginCol(输出参数):输出直线起点列坐标
EndRow(输出参数):输出直线终点行坐标
EndCol(输出参数):输出直线终点列坐标
4、split_skeleton_region(SkeletonRegion:RegionLines:MaxDistance:)
功能:把骨骼分割为多条宽度为一个像素,无分支的直线。如果一条直线段A上的点到另外一条与A端点相连的直线段B的最大距离大于MaxDistance,那么把这个线段A分割为一个独立的直线区域,并把这个区域作为输出区域。作用于split_skeleton_lines相同,区别在于没有输出近似直线的起始点坐标。
参数: SkeletonRegion(输入参数):输入直线(宽度为一个像素,无分支的区域)
RegionLines(输出参数):分割后的区域
MaxDistance(输入参数):直线区域上的点到另外一条与其端点相连的直线区域的最大距离 

5、gen_contours_skeleton_xld(Skeleton:Contours:Length, Mode:)
功能:把骨骼区域转换成XLD轮廓
参数: Skeleton(输入参数):输入骨骼区域
Contours(输出参数):输出结果轮廓
Length(输入参数):一个轮廓的最小点数
Mode(输入参数):轮廓滤波模式

Skeleton骨架总结_第1张图片

 

Halcon中用骨架提取算子skeleton计算区域的斜率

  如何计算区域的斜率呢? 
  如果是正规的Region,orientation_region能够基于elliptic_axis计算出区域的方位。但是如果是不正规的Region,请注意,该算子计算的方位很可能和你以为的方位有很大的偏差。 
  此时,更为一般的方法是: 
  (1)skeleton算子能拟合出该区域的骨架。 
  (2)取骨架中最长的线段作为该区域的中轴线。 
  (3)利用line_orientation就能计算出斜率。

 

骨架提取

骨架提取可以通过选定合适的结构元素B,对X进行连续腐蚀和开运算来求得。

Skeleton骨架总结_第2张图片

算法步骤:

一、获得原图像的首地址及图像的宽和高,并设置循环标志1

二、用结构元素腐蚀原图像,并保存腐蚀结果

三、设置循环标志为0,如果腐蚀结果中有一个点为255,即原图像尚未被完全腐蚀成空集,则将循环标志设为1.

四、用结构元素对腐蚀后的图像进行开运算(消除小的白色区域),并求取腐蚀运算与开运算的差(得到消除的白色区域)

五、用【四】中求得的结果与之前求得的骨架进行并集运算,以获得本次循环求得的骨架

六、把本次循环中保存的腐蚀结果赋值给原图像

七、重复步骤【2】-【6】,直到将原图像腐蚀成空集为止。

最终求得的骨架就是结果。
 

你可能感兴趣的:(机器视觉基础,机器视觉)