图像处理(五):八邻域边缘跟踪与区域生长算法

您所在的位置:网站首页 四连接和八连接检测的边界 图像处理(五):八邻域边缘跟踪与区域生长算法

图像处理(五):八邻域边缘跟踪与区域生长算法

2024-07-17 14:54| 来源: 网络整理| 查看: 265

通常在进行边缘检测之后,需要通过边缘跟踪来将离散的边缘串接起来,常使用的方法为:边缘跟踪和区域生长两种方法。边缘跟踪又分为八邻域和四邻域两种,具体原理可以参考残影、的博客。

实现步骤:

1、灰度化并进行Canny边缘检测

2、按照预先设定的跟踪方向(顺时针)进行边缘跟踪

3、每次跟踪的终止条件为:8邻域都不存在轮廓

这里需要理解的点:

代码中为什么更新当前方向时,需要curr_d -= 2,原因如下:

一次八领域搜索是以当前点pt1为中心,顺时针(或逆时针)遍历八个邻近像素以后,定位到下一个像素点pt2,下一次遍历时,就以pt2为中心,再次遍历八个邻近像素,第二次遍历过程与第一次遍历过程存在重叠部分,这里 -2的目的就是为了避免与第一次遍历重复,减少无用功,至于为什么是2,你画个图自己推一推就知道了。

这里将残影博客中的图拿过来贴一下,帮助大家理解:

这里pt1为红色的3,第一次遍历时,找到7,因此,pt2为黑色的7。第一次遍历找到黑色点7意味着黑色的0-6位置不存在边缘像素,而黑色的0、6位置及pt1位置与红色的2、3、4位置是重叠的,这些位置不需要再次去遍历,而当前方向为红色7,将7-2=5,从5开始遍历,就可以避免再次遍历到红色2,3,4位置。

代码如下:

 

#include #include #include using namespace cv; using namespace std; // 8 neighbors const Point directions[8] = { { 0, 1 }, {1,1}, { 1, 0 }, { 1, -1 }, { 0, -1 }, { -1, -1 }, { -1, 0 },{ -1, 1 } }; int main() { // 生成随机数 RNG rng(time(0)); Mat src = imread("1.jpg"); Mat gray; cvtColor(src, gray, CV_BGR2GRAY); Mat Edge; // Canny边缘检测 Canny(gray, Edge, 50, 100); vector edge_t; vector edges; // 边缘跟踪 int i, j, counts = 0, curr_d = 0; for (i = 1; i < Edge.rows - 1; i++) for (j = 1; j < Edge.cols - 1; j++) { // 起始点及当前点 //Point s_pt = Point(i, j); Point b_pt = Point(i, j); Point c_pt = Point(i, j); // 如果当前点为前景点 if (255 == Edge.at(c_pt.x, c_pt.y)) { edge_t.clear(); bool tra_flag = false; // 存入 edge_t.push_back(c_pt); Edge.at(c_pt.x, c_pt.y) = 0; // 用过的点直接给设置为0 // 进行跟踪 while (!tra_flag) { // 循环八次 for (counts = 0; counts < 8; counts++) { // 防止索引出界 if (curr_d >= 8) { curr_d -= 8; } if (curr_d < 0) { curr_d += 8; } // 当前点坐标 // 跟踪的过程,应该是个连续的过程,需要不停的更新搜索的root点 c_pt = Point(b_pt.x + directions[curr_d].x, b_pt.y + directions[curr_d].y); // 边界判断 if ((c_pt.x > 0) && (c_pt.x < Edge.cols - 1) && (c_pt.y > 0) && (c_pt.y < Edge.rows - 1)) { // 如果存在边缘 if (255 == Edge.at(c_pt.x, c_pt.y)) { curr_d -= 2; // 更新当前方向 edge_t.push_back(c_pt); Edge.at(c_pt.x, c_pt.y) = 0; // 更新b_pt:跟踪的root点 b_pt.x = c_pt.x; b_pt.y = c_pt.y; //cout


【本文地址】


今日新闻


推荐新闻


    CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3