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

Algorithm 查找二值图像中形状数量的有效算法是什么?,algorithm,computer-vision,Algorithm,Computer Vision,对于一个例子,我感兴趣的是一种有效计算图像中存在的单个形状数量的方法。另一个相邻的问题是,如何使图像中的每个形状都适合正方形 伪代码最受欢迎。一个可能的“形状”概念是连接组件。在这种情况下,联合查找算法将为您提供所需的:。如果还需要X和Y范围,可以扩展union find来跟踪它们。我无法回答下半部分,但如果上半部分将“形状”定义为特定颜色的连续像素,我会这样做。为整个图像维护一个数组,指示已“看到”的像素。(用C语言来说,一个bool[,]就行了。) 然后开始迭代每个像素。如果已经看到了,跳过

对于一个例子,我感兴趣的是一种有效计算图像中存在的单个形状数量的方法。另一个相邻的问题是,如何使图像中的每个形状都适合正方形


伪代码最受欢迎。

一个可能的“形状”概念是连接组件。在这种情况下,联合查找算法将为您提供所需的:。如果还需要X和Y范围,可以扩展union find来跟踪它们。

我无法回答下半部分,但如果上半部分将“形状”定义为特定颜色的连续像素,我会这样做。为整个图像维护一个数组,指示已“看到”的像素。(用C语言来说,一个bool[,]就行了。)

然后开始迭代每个像素。如果已经看到了,跳过它

否则,如果它还没有被看到,并且是“非形状”颜色,请标记它已被看到并继续

否则,它还没有被看到,是一个形状。从这里开始,在四个罗盘方向中的每一个方向上爬行。如果您到达一个可见像素,请停止并返回(这样可以防止出现无限循环)。如果像素是非形状颜色,请标记看到的像素并立即停止。否则,像素是形状颜色。将其标记为“已看到”,并将其添加到正在构建的任何“形状定义”数据中

此过程完成后,您将发现一个形状。将其存储在某个位置,然后继续搜索。该形状中的所有像素现在都应该标记为可见,并且不再被算法考虑

一旦定位了形状颜色像素,这种形状发现算法本质上是递归的,对于大型形状,可能会溢出堆栈。可以使用基于堆的堆栈实现来执行整个形状搜索


(如果考虑对角线相邻的像素足以将两个形状连接成一个,只需搜索所有八个相邻像素,而不只是四个水平和垂直相邻的像素。)< /P> < P>对图像数据进行填充,您将得到具有所有像素和扩展的形状( 如果图像中有一个形状,则blobing会将两者视为单独的形状

如果您需要代码给我发邮件,将很乐意与大家分享