[英]numpy image replace areas with equal values
所以我有一个np.array类型的灰色(2D)图像,里面有很多零和对象。 每个对象都由具有相同值(例如1.23e15)的像素定义。
我现在想标记图像,即我想将某个值的所有像素(例如,上述值1.23e15的200个像素)重新缩放为一个整数。 除了零背景外,我还希望将每个区域设置为range(1,nbr_of_regions_in_img + 1)中的值之一。
在没有明显的循环解决方案的情况下,如何有效地进行此操作(我有成千上万张图像)?
Scipy具有用于图像处理和分析的广泛库 。 您正在寻找的功能可能是scipy.ndimage.label
import scipy.ndimage
import numpy as np
pix = np.array([[0,0,1,1,0,0],
[0,0,1,1,1,0],
[1,1,0,0,1,0],
[0,1,0,0,0,0]])
mask_obj, n_obj = scipy.ndimage.label(pix)
输出为您提供带标签的蒙版,每个识别的对象都有不同的编号,并且识别的对象数量也不同。
>>>print(n_obj)
>>>2
>>>print(mask_obj)
>>>[[0 0 1 1 0 0]
[0 0 1 1 1 0]
[2 2 0 0 1 0]
[0 2 0 0 0 0]]
您还可以使用structure
参数定义应该算作相邻单元格的内容:
s = np.asarray([[1,1,1],
[1,1,1],
[1,1,1]])
mask_obj, n_obj = scipy.ndimage.label(pix, structure = s)
>>>print(n_obj)
>>>1
>>>print(mask_obj)
>>>[[0 0 1 1 0 0]
[0 0 1 1 1 0]
[1 1 0 0 1 0]
[0 1 0 0 0 0]]
如果不同的物体彼此接触,即不会被零值分开,则会出现困难。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.