gpt4 book ai didi

Python:快速从多个(>400)二值图像中获取边缘

转载 作者:太空宇宙 更新时间:2023-11-03 16:34:01 24 4
gpt4 key购买 nike

我基本上有多个二值图像,每个图像都包含一个连接的组件。这些连通分量是从图像中检索的,这意味着如果将所有连通分量绘制到单个图像文件中,则不会有空白区域,也不会存在重叠的连通分量。我正在寻找一种从连接的组件中提取边缘像素的快速方法。连接的分量当前保存在单个图像中,其中位置 (x,y) 处的数字 i 对应于第 i 个连接的分量。由于有很多连接的组件,最大数量在 400-2000 范围内,我正在寻找一种快速方法来获取每个组件的边缘像素。这是一张图片来说明我对算法的期望: Example

我知道有一些边缘检测算法,但它们处理灰度图像,对于大量图像中的大图像中的小对象没有任何好处。有什么建议吗?

最佳答案

更具体地说,这可以使用形态学运算和最小/最大过滤器来解决。速度应该是可以接受的,因为无论组件的数量如何,整个图像只需要处理两次。

以下代码的最大部分仅用于生成示例图像。获取边界的相关行如下所示:

# imports
import numpy as np
import scipy as sp
import scipy.ndimage

# size of test image
L=50
# number of components
I=20
# auxiliary array
array=np.zeros((I,L,L))

# for each component
for i in range(I):

# draw random coordinates
x,y=sp.random.randint(0,L,size=2)

# set coordinate in auxiliary array to index of i-th component
array[i,x,y]=i

# create 'box' around coordinate
array[i]=sp.ndimage.maximum_filter(array[i],size=20)

# create actual test image from auxiliary array
image=np.nanmax(array,axis=0)

# RELEVANT LINES: check if pixel belongs to border
imax=(sp.ndimage.maximum_filter(image,size=3)!=image)
imin=(sp.ndimage.minimum_filter(image,size=3)!=image)
icomb=np.logical_or(imax,imin)

# keep only pixels of original image at borders
edges=np.where(icomb,image,np.nan)

关于Python:快速从多个(>400)二值图像中获取边缘,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37365928/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com