【问题标题】:Detecting objects in images using SciKit with python使用 SciKit 和 python 检测图像中的对象
【发布时间】:2021-11-27 06:41:42
【问题描述】:

我有一个图像处理问题,我正在努力找出图像的解决方案。这是图像。基本上它是在 python 中使用 scikit 图像的分割和计数问题。基本上我必须编写一个伪代码,说明我将如何计算我拥有的源图像中的这些“矩形”对象。矩形被不同形状和大小的其他不同对象包围。最近我做了一个类似的初学者问题来计算图像中的硬币数量。这个要容易得多,因为所有对象都具有相同的性质。

你们中的任何人都可以帮助我了解如何计算剪刀,将它们与图像中的所有其他对象分开和隔离。到目前为止,我的思考过程是

  1. 读入图片
  2. 转换为灰度
  3. 绘制直方图
  4. 从这个阈值开始使用 otsupreferqbley
  5. 使用 skimage clear_border 删除所有不需要的对象,这些对象会触及边框

然而,与简单且几乎相同的硬币不同,我不知道如何隔离矩形对象。 skimage 中是否有任何先进的分段技术可用于此。就像我在想blob,但我认为这不会在这里起作用。如果有人可以提供任何见解,请告诉我,我将非常感激

【问题讨论】:

    标签: python image-processing image-segmentation scikit-image image-thresholding


    【解决方案1】:

    这取决于您需要解决方案的通用性。在您展示的图像中,剪刀是唯一具有 两个孔 的物体。我们可以使用skimage.measure.regionprops 属性euler_number,在文档中描述为:

    非零像素集合的欧拉特性。计算为连接组件数减去孔数(input.ndim 连通性)。在 3D 中,连接组件数加上孔数减去隧道数。

    因此,对于剪刀,这将是 1-2 = -1,而对于实心物体,它是 1,对于有 1 个孔的物体,它是 1-1 = 0。所以你可以说:

    from skimage import measure
    
    objects = measure.label(borders_cleared)
    props_list = measure.regionprops(objects)
    num_scissors = 0
    for props in props_list:  # one RegionProps object per region
        if props.euler_number == -1:
            num_scissors += 1
    

    当分割本身很容易时,如您展示的图像中所示,那么我的策略将始终是在regionprops 中找到一个属性或属性组合,以便区分我感兴趣的对象和其他对象。这可能是尺寸、伸长率、圆度……使用 extra_properties= 关键字参数,您甚至可以计算由您可以想象的任何函数定义的其他属性。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-04-18
      • 2021-07-28
      • 2014-12-13
      • 2012-06-05
      • 2019-07-13
      相关资源
      最近更新 更多