两个通过连接组件,组件数量问题

问题描述 投票:0回答:1

双通连通分量算法是在一个图像中检测单独的分量,并且在每次检测之后我将每个component保存为不同的图像。为了在单独的图像上显示每个component,我使用多个if条件,但是每当组件中的每个组件都有很多形状时,这些if conditions都在增加,到目前为止我已经使用了7个条件但是它正在增加。任何想法如何使用循环或如何处理它。

 for (x, y) in labels:
            component = uf.find(labels[(x, y)])
            labels[(x, y)] = component
            ############################################################
            if labels[(x, y)]==0:
                Zero[y][x]=int(255)
                count=count+1
                if count<=43:
                    continue
                elif count>43:
                    Zeroth = Image.fromarray(Zero)
                    Zeroth.save(os.path.join(dirs, 'Zero.png'), 'png')
            #############################################################
            if labels[(x, y)]==1:
                One[y][x]=int(255)
                count1=count1+1
                if count1<=43:
                    continue
                elif count1>43:
                    First = Image.fromarray(One)
                    First.save(os.path.join(dirs, 'First.png'),'png')
python-3.x numpy for-loop if-statement connected-components
1个回答
0
投票

我不确定我是否完全理解您的代码,但我认为可能有一个简单的解决方案,你的问题有太多的变量和if语句。您应该将它们放在列表中并索引这些列表以获取要更新和保存的值,而不是使用单独的变量和代码来保存每个图像。

以下是您查找代码的方式:

# at some point above, create an "images" list instead of separate Zero, One, etc variables
# also create a "counts" list instead of count, count1, etc

    for (x, y) in labels:
        component = uf.find(labels[(x, y)])
        labels[(x, y)] = component

        # optionally, add code here to create a new image if needed

        images[component][y][x] = 255   # update image
        counts[component] += 1          # update count

        if counts[component] > 43:      # if count is high enough, save out image
            img = images[component] = Image.fromarray(Zero)
            img.save(os.path.join(dirs, 'image{:02d}.png'.format(component), 'png')

请注意,您需要以编程方式生成图像文件名,因此我选择Zero.pngOne.png而不是image00.pngimage01.png等。如果你想保留相同的名称系统,你可以创建一个从数字到英文名称的映射,但我怀疑使用数字将更方便你以后使用。

如果你不知道你需要多少图像和计数,你可以在循环中添加一些额外的逻辑,根据需要创建一个新的逻辑,将它们附加到imagescounts列表。我在上面的代码中给出了一个评论,显示了你想要那个逻辑的地方。

© www.soinside.com 2019 - 2024. All rights reserved.