边缘跟踪算法

该算法来源于论文《二值图像中目标物体轮廓的边界跟踪算法》,在实际使用中速度很快,效果很好。

该算法基于常见的“虫随”法进行改进,具有以下优点:

  • 既能有效跟踪外边界又能克服内边界的存在对算法的影响。
  • 对于不封闭的线段能实现很好的跟踪

算法思路:

边界跟踪从二值图像的左上角点还是逐点扫描,当遇到目标点是开始顺序跟踪。
封闭轮廓
直至跟踪的后续点回到起始点。
对于非封闭轮廓
其后续点再没有新的后续点为止,跟踪到一侧的终结后需从起始点还是朝相反的方向跟踪到另一终结点。

当存在多个分离的轮廓时,逐个跟踪,为避免陷入死循环,前面的区域处理好后应采用背景色对它进行填充。

本文程序仅实现对于封闭轮廓的跟踪。

查找邻域

设当前点P(x,y)在上一边界点C的8邻域内的位置编码为n,则从当前点(x,y)的8领域内的编码为n的位置,顺时针方向移动2个像素的位置就是下一边界点的起始位置。
边缘跟踪算法_第1张图片
使用数组来实现方向移动:

static const CvPoint icvCodeDeltas[8] =
{ {1, 0},{ 1, -1},{ 0, -1},{-1, -1},{ -1, 0 },{-1, 1},{0, 1},{1, 1}};

搜索:

int searchNeighbor(IplImage * src, i

你可能感兴趣的:(Image,Processing)