Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/361.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/image-processing/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何从列表中查找和删除图像的重叠切片?_Python_Image Processing_Numpy_Scipy - Fatal编程技术网

Python 如何从列表中查找和删除图像的重叠切片?

Python 如何从列表中查找和删除图像的重叠切片?,python,image-processing,numpy,scipy,Python,Image Processing,Numpy,Scipy,我使用unutbu和Joe Kington在这个问题上提出的方法将一幅图像分成了多个对象(切片),并列出了这些对象的列表,其形式如下: the_blobs = [(slice(dy.start, dy.stop, None), slice(dx.start, dx.stop, None))] dy.start给出起始的y像素值,dy.stop给出最终的y像素值,对于dx也是如此 列表中有一些重叠的对象,即一个小对象(正方形)位于较大对象(如圆)内。当这种情况发生时,我想从列表中删除“封闭”对象

我使用unutbu和Joe Kington在这个问题上提出的方法将一幅图像分成了多个对象(切片),并列出了这些对象的列表,其形式如下:

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))] 
理想列表(删除对象)

我应该注意到,作为上述问题的一部分,有人建议使用以下代码:

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)  
然而,这似乎并不是100%都有效,而且这确实是一个稍微超出了原始问题范围的贡献,所以我将这部分作为一个单独的、具体的问题重新开始

有什么办法可以做到这一点吗

编辑:这里有一个实际的图像示例,与上面的代码不兼容

处理此报表


理想情况下,我想从切片列表中删除最后一张图像

显然,您可以使用O(n^2)检查每个blob与所有其他blob的方法,并通过检查blob2.dx.start>blob2.dx.start和blob1.dy.start>blob2.dy.start和blob1.dx.stop(如果此条件为真,则可以从列表中删除blob1)。如果你的水滴总数很低,除非我遗漏了什么,否则这应该是有效的

如果您正在寻找一个优化的解决方案,那么了解有多少斑点以及这种情况有多普遍会很有帮助

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)