本章我们学习Rosenfeld细化算法,参考资料:http://yunpan.cn/QGRjHbkLBzCrn

在开始学习算法之前,我们先看下连通分量,以及4连通性,8连通性的概念:

http://www.imageprocessingplace.com/downloads_V3/root_downloads/tutorials/contour_tracing_Abeer_George_Ghuneim/connectivity.html

假设我们有二值图,背景像素值为0,前景像素值为1。

我们使用下面的八邻域表示法:

OpenCV学习(16) 细化算法(4)

     对于前景点像素p1, 如果p2=0,则p1 称作北部边界点。如果p6=0,p1称作南部边界点,p4=0,p1称作东部边界点,p8=0,p1称作西部边界点。

OpenCV学习(16) 细化算法(4)

p1周围8个像素的值都为0,则p1为孤立点,如果周围8个像素有且只有1个像素值为1,则此时p1称作端点。

另外还要了解的一个概念就是8 simple。

就是我们把p1的值设置为0后,不会改变周围8个像素的8连通性。

下面的三个图中,如果p1=0后,则会改变8连通性OpenCV学习(16) 细化算法(4)

而下面的则不会改边8连通性,此时可以称像素p1是8 simple

OpenCV学习(16) 细化算法(4)

Rosenfeld细化算法描述如下:

1. 扫描所有像素,如果像素是北部边界点,且是8simple,但不是孤立点和端点,删除该像素。

2. 扫描所有像素,如果像素是南部边界点,且是8simple,但不是孤立点和端点,删除该像素。

3. 扫描所有像素,如果像素是东部边界点,且是8simple,但不是孤立点和端点,删除该像素。

4. 扫描所有像素,如果像素是西部边界点,且是8simple,但不是孤立点和端点,删除该像素。

执行完上面4个步骤后,就完成了一次迭代,我们重复执行上面的迭代过程,直到图像中再也没有可以删除的点后,退出迭代循环。

算法代码如下:

break;
}

}

程序结果:

OpenCV学习(16) 细化算法(4)

OpenCV学习(16) 细化算法(4)OpenCV学习(16) 细化算法(4)

程序代码:工程FirstOpenCV11

相关文章:

  • 2021-11-07
  • 2021-06-28
  • 2021-11-19
  • 2022-12-23
  • 2021-08-30
  • 2021-11-12
猜你喜欢
  • 2021-06-03
  • 2021-05-23
  • 2021-12-19
  • 2021-12-03
  • 2021-05-25
  • 2022-01-14
  • 2021-11-18
相关资源
相似解决方案