本章我们学习Rosenfeld细化算法,参考资料:http://yunpan.cn/QGRjHbkLBzCrn
在开始学习算法之前,我们先看下连通分量,以及4连通性,8连通性的概念:
假设我们有二值图,背景像素值为0,前景像素值为1。
我们使用下面的八邻域表示法:
对于前景点像素p1, 如果p2=0,则p1 称作北部边界点。如果p6=0,p1称作南部边界点,p4=0,p1称作东部边界点,p8=0,p1称作西部边界点。
p1周围8个像素的值都为0,则p1为孤立点,如果周围8个像素有且只有1个像素值为1,则此时p1称作端点。
另外还要了解的一个概念就是8 simple。
就是我们把p1的值设置为0后,不会改变周围8个像素的8连通性。
而下面的则不会改边8连通性,此时可以称像素p1是8 simple
Rosenfeld细化算法描述如下:
1. 扫描所有像素,如果像素是北部边界点,且是8simple,但不是孤立点和端点,删除该像素。
2. 扫描所有像素,如果像素是南部边界点,且是8simple,但不是孤立点和端点,删除该像素。
3. 扫描所有像素,如果像素是东部边界点,且是8simple,但不是孤立点和端点,删除该像素。
4. 扫描所有像素,如果像素是西部边界点,且是8simple,但不是孤立点和端点,删除该像素。
执行完上面4个步骤后,就完成了一次迭代,我们重复执行上面的迭代过程,直到图像中再也没有可以删除的点后,退出迭代循环。
算法代码如下:
break;
}
}
}
}
程序结果:
程序代码:工程FirstOpenCV11