二值图像中的连通成分标记
在上一篇文章《复杂背景下基于肤色的人脸检测和性别识别》中,为了提取二值化后的照片中的不同区域的特征(面积、中心、矩形度、圆形度等等),需要先进行连通成分标记。实验室有课题曰“肺结节计算机辅助诊断系统”,涉及肺结节分割、检测、良恶性识别和三维可视化等。(我是负责当中的3D可视化部分,用CUDA加速ray casting算法。)肺结节检测和良恶性识别需要精准地提取各种区域特征,连通成分标记也大有作为。这在MatLab中有现成的函数,但具体如何实现?不同的算法在时间、空间复杂度上各异。
我们或许可以想出一些比较简单的方法,如贾云得《机器视觉(1999))》中所述。在Robert M. Haralick和Linda G. Shapiro的"Computer and Robot Vision - Volume I (1992)"一书中有较为详细的介绍。至于最近的发展,笔者没有做过多的了解。
--------------------------------------------------------------------------
近日在看实验室师兄做过的东西,其中有关于Connected Component Labeling的比较好的总结:
目前的二值图像标记算法大致可以分为以下三类:
(1)基于像素标记:典型算法有两次扫描法、单向反复扫描法以及双向反复扫描法。此类算法以点为单位作标记并形成等价对,遇到标记冲突时,按预定的扫描方式,对满足连通条件的点传播等价对中最小标号。优点是思路简单,效率较高。
(2)基于线的标记:典型算法有基于游程的标记算法。该算法分两次扫描,第一次以目标段(目标物体同一行中两个边界点像素集合,包括边界点为单位作标记并形成等价对;第二次当遇到标记冲突时,对满足连通条件的目标段传播等价对中最小标号。优点是实时性很好。
(3)基于块的标记:经典算法有基于模块的标记算法。该算法已块为单位作标记,先创建2×2的模块,然后逐行扫描图像,标记满足连通条件的像素。优点是思路简单,准确度高。
参考文献:
[1] Implementation of a labeling algorithm based on contour tracing with feature extraction, 2007
[2] Optimized block-based connected components labeling with decision trees, 2010
--------------------------------------------------------------------------