使用 SciKit 和 python 检测图像中的对象
Posted
技术标签:
【中文标题】使用 SciKit 和 python 检测图像中的对象【英文标题】:Detecting objects in images using SciKit with python 【发布时间】:2021-11-27 06:41:42 【问题描述】:我有一个图像处理问题,我正在努力找出图像的解决方案。这是图像。基本上它是在 python 中使用 scikit 图像的分割和计数问题。基本上我必须编写一个伪代码,说明我将如何计算我拥有的源图像中的这些“矩形”对象。矩形被不同形状和大小的其他不同对象包围。最近我做了一个类似的初学者问题来计算图像中的硬币数量。这个要容易得多,因为所有对象都具有相同的性质。
你们中的任何人都可以帮助我了解如何计算剪刀,将它们与图像中的所有其他对象分开和隔离。到目前为止,我的思考过程是
-
读入图片
转换为灰度
绘制直方图
从这个阈值开始使用 otsupreferqbley
使用 skimage clear_border 删除所有不需要的对象,这些对象会触及边框
然而,与简单且几乎相同的硬币不同,我不知道如何隔离矩形对象。 skimage 中是否有任何先进的分段技术可用于此。就像我在想blob,但我认为这不会在这里起作用。如果有人可以提供任何见解,请告诉我,我将非常感激
【问题讨论】:
【参考方案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=
关键字参数,您甚至可以计算由您可以想象的任何函数定义的其他属性。
【讨论】:
以上是关于使用 SciKit 和 python 检测图像中的对象的主要内容,如果未能解决你的问题,请参考以下文章