【问题标题】:How do I find the region borders in an image using python?如何使用 python 在图像中找到区域边界?
【发布时间】:2015-11-21 18:00:10
【问题描述】:

所以我有两个 numpy 数组——第一个是 3D RGB 图像。第二个是表示图像中区域的二维网格(我的图像通常有大约 7 到 20 个区域),其中每个区域由一个整数表示。

2D 网格看起来像这样:

[
[0,0,0,1],

[0,0,1,1],

[2,2,2,2]
]

现在我想做的是找到一个算法,它可以准确地告诉我区域边界在哪里,所以我希望算法返回边界在区域 0 和 1、1 和 2、2 和 1 之间的索引,等等

所以在这种情况下我会得到:

0 到 1 之间的边界:[0,2] [1,1]

0 到 2 之间的边界:[1,0] [1,1]

1 和 2 之间的边界:[1,2] [1,3]

【问题讨论】:

标签: python image numpy boundary


【解决方案1】:

谈论可用于以编程方式检测区域之间边界的算法 您可以使用任何边缘检测器内核并将它们应用于您的 2d 网格,以检测水平或垂直的差异,如果结果为零,则两个像素属于同一区域,如果答案为非零,那么您刚刚在这里找到了边界. 边缘检测器之一是sobel sobel 内核看起来像 [-1 0 1] [-1 0 1] [-1 0 1]

[-1 -1 -1 ] [ 0 0 0 ] [ 1 1 1 ]

这里是一个在python的opencv中应用sobel的例子

https://li8bot.wordpress.com/2014/08/07/opencvpythonpart3-image-gradients/

【讨论】:

    【解决方案2】:

    以下算法是为与列表中的列表一起使用而编写的,但我确信它可以很容易地调整为与 numpy.我还没有用过numpy,所以我不能给你确切的答案。

    def main():
        grid = [[0, 0, 0, 1],
                [0, 0, 1, 1],
                [2, 2, 2, 2]]
    
        borders = []
    
    
        '''
        It has the following format.
        ['Borders beetwen 0 and 1', [[0, 2], [0, 3]]]
        [0, 2] is coordinate of 0 and [0, 3] is coordinate of 1.
        '''
        for x in range(0, len(grid)-1):
    
            for y in range(0, len(grid[x])-1):
    
                if grid[x][y] != grid[x][y+1]:
                    header = ['Borders beetwen %s and %s' %(str(grid[x][y]), str(grid[x][y+1]))]
                    coords = [[x, y], [x, y+1]]
                    header.append(coords)
                    borders.append(header)
    
                else:
                    pass
    
            if grid[x][y] != grid[x+1][y]:
                header = ['Borders beetwen %s and %s' %(str(grid[x][y]), str(grid[x+1][y]))]
                coords = [[x, y], [x+1, y]]
                header.append(coords)
                borders.append(header)
    
            else:
                pass
    
        for element in borders:
            print(element)
    
    
    if __name__ == '__main__':
        main()
    

    【讨论】:

      猜你喜欢
      • 2021-10-09
      • 1970-01-01
      • 1970-01-01
      • 2019-01-31
      • 1970-01-01
      • 2020-09-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多