我已经使用unutbu和Joe Kington在这个问题中提供的方法将图像分成了对象(切片):在python中使用矩形边界框围绕单色图像中的斑点,并且有一个列表包含这些对象,其格式如下:
the_blobs = [(slice(dy.start, dy.stop, None), slice(dx.start, dx.stop, None))]
dy.start表示y轴起始像素值,dy.stop表示y轴终止像素值,dx也是同理。
在列表中,有一些对象会重叠,比如一个小正方形在一个大圆内。当出现这种情况时,我想要从列表中删除“被包含”的对象(因为圆已经包含了它),例如:
当前列表
the_blobs = [(slice(100L, 1000L, None), slice(100L, 1000L, None)),
(slice(150L, 220L, None), slice(150L, 220L, None)),
(slice(1001L, 2000L, None), slice(1500L, 1700L, None)),
(slice(2001L, 2200L, None), slice(1800L, 1890L, None))]
理想清单(去掉对象)
the_blobs = [(slice(100L, 1000L, None), slice(100L, 1000L, None)),
(slice(1001L, 2000L, None), slice(1500L, 1700L, None)),
(slice(2001L, 2200L, None), slice(1800L, 1890L, None))]
我应该指出,在上述问题的一部分中,有人建议使用以下代码:
data_slices = ndimage.find_objects(coded_paws)
for s in data_slices:
filled[s] = True
coded_paws, num_paws = ndimage.label(filled)
data_slices = ndimage.find_objects(coded_paws)
然而,这个方法在某些时候似乎并不起作用,而且它实际上是超出了原始问题的范围,所以我正在将其重新开放作为一个单独、具体的问题。
有没有任何想法,可以让我达成这个目标?
这里有一个实际的图像示例,使用上述代码无法运行。
处理后返回:
理想情况下,我想要从片段列表中删除最后一张图片。