因为噪声的存在, 检测出来的edge points有很多都是不相邻的. 所以边缘检测算法通常都有最后的连接步骤: 将属于同一edge的不相邻点连接起来(TODO, 是用一条路径将它们连通, 把路径中的点也作为边缘点吗?)
Local Processing
最naive的做法就是检查每个已检测出边缘点的一个邻域, 将它与邻域内的相似点连接起来. 相似性的判断一般是用梯度强度与方向的差值表示: 当两个差值都小于各自指定的threshold时, 判定为相似.
但这种做法的算法复杂度很高: 正比于边缘点数量, 正比于邻域面积. 有简化算法, 但局限性很大. (见DIP 10.2.7. Local Processing)
Regional Processing
前提是有一个RoI(Region of Interest). 得到RoI上的边缘点集后, 用一个多边形(闭合, CLOSE)或折线(开口, OPEN)近似的表达出edge. 这种算法的应用面较窄, 但算法本身感觉很精妙.
关键点:
- 输入的点集是有序排列的, 顺时针或逆时针.
- CLOSED与OPEN的判断: 相邻点的距离都很相似(variance小于threshold)为CLOSE, 否则为OPEN.
- A, B点可以取第一和最后一个点
- 先计算出连接A B的直线, 然后计算其他点到这条直线的距离. 找到最大距离点, 若它的距离大于指定的threshold \(T\), 则将它作为新的顶点.
Global Processing and Hough Transformation
Hough Transformation的核心思想:
- 将输入空间中的点转化为参数空间中的直线. 任意两不平行的直线都有交点.
- 将参数空间划分一个个的cell, 统计落在每个cell内的交点的个数.
- 找到个数局部最大的cell, 它包含的点都在由这个cell决定的曲线上. (这些点是来自于整张图片, 所以是global的.)
算法精妙, 但应用有限, 至少现在对我没多大用处. 点到即止.