繁体   English   中英

numpy图像用相等的值替换区域

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM