亚像素边缘的直线及圆弧的基元分割
2016-09-29 17:17
2091 查看
从20世纪70年代起就有不少专家提出了一些有效的亚像素边缘定位的方法,如插值法、灰度矩法和一些组合的算法等。本文在前辈的基础上描述一种图像亚像素边缘检测方法,用Sobel算子和多边形逼近的方法实现亚像素级边缘定位。
亚像素的边缘提取
欢迎关注微信公众号:“智能算法”。
在进行直线以及圆弧基元的分割的前提,是要将亚像素的边缘提取出来,这一部分内容,我们可以先提取像素级的边缘,在利用拟合曲面来提取亚像素的边缘。
利用sobel算子,我们可以很容易的提取出图像的边缘,这里利用了非最大值抑制,双滞滤波器,达到边缘的准确提取,并且保留梯度图像,后续步骤需要用到。如下图所示:
截取图中一小部分,其中的一些边缘在8领域内是可约的,什么是可约呢,就是去掉其中一点曲线仍然是连续的,如果曲线可约,将不方便后续的处理。这里就利用形态学细化,方便后续亚像素的提取,细化后的结果如下图所示。
利用梯度图像中边缘点的梯度方向,而亚像素级的最大值无非就是在梯度方向所在的直线上,利用曲面拟合,以及拟合后曲面和直线的交线,在求出交线的极值,就可以得到该点的亚像素表示。如下图所示,为提取后的亚像素点。
ramer的多边形逼近
首先,在轮廓的起点和终点之间建立一条线段,然后计算所有轮廓控制点到线段的距离,并从中选出距离最大的控制点。如果此距离比指定的阈值大,那么在对应最大距离控制点处将当前线段再次细分成两段。在新得到的线段上重复进行上述处理。如下图所示:
轮廓段的融合
根据相邻轮廓段的三个分割点不可能处在同一直线上这一前提拟合一个近似圆,然后计算该圆与对应轮廓段之间的最大偏差。如果偏差比两个轮廓段与对应逼近线段的最大距离还要小,那么这两条轮廓段就标记为合并处理对象。否则继续对下对轮廓段进行同样的处理,经过多次迭代直到没有合并处理的对象为止。
下图是对基元分割后的结果,白线部分是直线基元,黑色线段是圆弧基元。
亚像素的边缘提取
欢迎关注微信公众号:“智能算法”。
在进行直线以及圆弧基元的分割的前提,是要将亚像素的边缘提取出来,这一部分内容,我们可以先提取像素级的边缘,在利用拟合曲面来提取亚像素的边缘。
利用sobel算子,我们可以很容易的提取出图像的边缘,这里利用了非最大值抑制,双滞滤波器,达到边缘的准确提取,并且保留梯度图像,后续步骤需要用到。如下图所示:
截取图中一小部分,其中的一些边缘在8领域内是可约的,什么是可约呢,就是去掉其中一点曲线仍然是连续的,如果曲线可约,将不方便后续的处理。这里就利用形态学细化,方便后续亚像素的提取,细化后的结果如下图所示。
利用梯度图像中边缘点的梯度方向,而亚像素级的最大值无非就是在梯度方向所在的直线上,利用曲面拟合,以及拟合后曲面和直线的交线,在求出交线的极值,就可以得到该点的亚像素表示。如下图所示,为提取后的亚像素点。
ramer的多边形逼近
首先,在轮廓的起点和终点之间建立一条线段,然后计算所有轮廓控制点到线段的距离,并从中选出距离最大的控制点。如果此距离比指定的阈值大,那么在对应最大距离控制点处将当前线段再次细分成两段。在新得到的线段上重复进行上述处理。如下图所示:
轮廓段的融合
根据相邻轮廓段的三个分割点不可能处在同一直线上这一前提拟合一个近似圆,然后计算该圆与对应轮廓段之间的最大偏差。如果偏差比两个轮廓段与对应逼近线段的最大距离还要小,那么这两条轮廓段就标记为合并处理对象。否则继续对下对轮廓段进行同样的处理,经过多次迭代直到没有合并处理的对象为止。
下图是对基元分割后的结果,白线部分是直线基元,黑色线段是圆弧基元。
相关文章推荐
- Matlab自己实现Sobel边缘提取和ROA边缘提取
- 相位一致性——利用频域检测边缘
- XDoG:一种快速简洁的图像边缘提取器
- 《A Sub-Pixel Edge Detector: an Implementation of the Canny/Devernay Algorithm》
- 亚像素边缘提取方法总结
- Java实现Canny算子边缘提取
- halcon图像边缘提取(边缘检测)
- python+opencv边缘提取与各函数参数解析
- linux相关开关机指令
- 算法复杂度笔记
- 满二叉树
- php 使用htmlspecialchars() 和strip_tags函数过滤HTML标签的区别
- JFinal中使用QuartzPlugin报ClassCastException解决方法
- jquery datatable 中文字符
- 发一个套接字协议中的tcp案例,希望大家以后可以参考!……
- <display:table>和<c:forEach>的自增排序号
- Jetty 的工作原理以及与 Tomcat 的比较
- Dagger 2
- golang中踩的坑
- 定时任务时间切换调用