在一些国内的论文中看到尖角检测方法,感觉有点类似以前学过的“种子填充”或者“扫描线”。
算法描述
按照从上到下,从左到右的顺序扫描整个二值图像。遇到像素为白色时不做任何标记,继续扫描下一像素;遇到黑色像素,则判断周围像素是否被标记的情况来决定本像素的标记情况。可分为4种情况:
- 若该像素的上方和左方除了0和255外没有其它的标记,则将该像素设置一个新的标记;
- 若该像素上方有除了0和255外其它的标记而左方没有,则设置为和上方像素相同的标记;
- 若该像素左方有除了0和255外其它的标记而上方没有,则设置为和左方像素相同的标记;
- 若该像素的上方和左方除了0和255外都有其它的标记,如果上方和左方的标记相同,则将该像素
设置为和该标记相同的标记;如果上方和左方的标记不相同,将该像素设置为和上方像素相同的标记,然后将左方重新标记。重新标记是将该像素的左方与之连续且和它左边的像素标号一样的像素点都重新标记为和当前像素一样的标记,当遇到亮点即像素值为255或图像边界或与需要重新标记的标号不一致时重新标记结束。处理结束后扫描下一像素,扫描完一行进入下一行,遇到黑色的像素点处理方法和以上相同。所有处理结束后再对整个图像扫描一遍,统计尖角的数目,计算每个尖角所在联通区域的面积(即该区域内的像素点数)以及它们的高度。
论文中的一个示意图: