什么是查找二进制图像中的形状数量的有效算法?

3 algorithm computer-vision

对于二进制图像,我感兴趣的是一种有效计算图像中存在的单个形状数量的方法.另外作为一个相邻的问题,如何将图像中存在的每个形状都放在一个正方形中?

伪代码是最受欢迎的.

cdh*_*wie 6

我不能回答下半场,但如果前半部分将"形状"定义为某种颜色的连续像素,这就是我的工作.维护整个图像的数组,指示哪些像素已被"看到".(一个bool [,]会用C#-speak来解决这个问题.)

然后开始迭代每个像素.如果已经看过,请跳过它.

否则,如果它还没有被看到并且它是"非形状"颜色,则标记它并继续前进.

否则,它还没有被看到并且是一种形状.从这里开始,四个指南针中的每个方向都有蜘蛛.如果到达看到的像素,请停止并返回(这可以防止发生无限循环).如果像素是非形状颜色,请标记看到的像素并立即停止.否则,像素是形状颜色.标记它并将其添加到您正在构建的任何"形状定义"数据中.

完成此过程后,您发现了一个形状.将它存放在某处,然后继续搜索.现在应该标记该形状中的所有像素,并且算法将不再考虑这些像素.

一旦定位了形状颜色像素,这种用于形状发现的算法本身就是递归的,并且对于大的形状可能会溢出堆栈.使用基于堆的堆栈实现来执行整个形状搜索可能是适当的.

(如果您认为对角相邻的像素足以将两个形状链接成一个,只需搜索所有八个相邻像素,而不是仅搜索四个水平和垂直相邻的像素.)