Python 在线性时间内合并图像区域(bboxes)
我有一组用于某些图像的区域(边界框),例如python代码:Python 在线性时间内合并图像区域(bboxes),python,algorithm,image-processing,bounding-box,scikits,Python,Algorithm,Image Processing,Bounding Box,Scikits,我有一组用于某些图像的区域(边界框),例如python代码: im = Image.open("single.png") pix = np.array(im) gray = rgb2grey(pix) thresh = threshold_otsu(gray) bw = closing(gray > thresh, square(1)) cleared = bw.copy() clear_border(cleared) borders = np.logical_xor(bw, clear
im = Image.open("single.png")
pix = np.array(im)
gray = rgb2grey(pix)
thresh = threshold_otsu(gray)
bw = closing(gray > thresh, square(1))
cleared = bw.copy()
clear_border(cleared)
borders = np.logical_xor(bw, cleared)
label_image = label(borders)
for region in regionprops(label_image, ['Area', 'BoundingBox']):
#now i have bounding boxes in hand
我想做的是合并重叠区域或bbox边之间的距离小于X
。天真的方法是检查所有区域之间的距离,这具有O(n2)复杂性。我可以写一些更聪明的东西,但我的印象是这种算法已经存在,我不想重新发明轮子。非常感谢您的帮助。这是您的问题“有n个框(不一定是//到x-y轴),您想找到所有重叠框并合并它们(如果存在)
我还不能想出一个线性算法,但我有一个比O(n^2)更快的粗略想法,也许O(n lgn)描述如下:
在线性时间内解决这项任务对我来说是不可能的,因为在O(n)中几乎无法预先计算所有成对框之间的距离。如何测量边界框之间的“距离”?您的意思是“边界框中的每条边的最大距离为X”还是“边之间的总距离为X?”此外,您希望如何将它们合并在一起?有不同的方法可以做到这一点,但有些方法可能会导致“级联”效果,在合并两个框后,新框需要与第三个框合并。@templatetypedef Distance定义为两个不同框的任意两条边之间的最短距离。合并是在要合并的边界框周围创建边界框。如果您只需将所有框按(距离/2)增长,距离问题就会容易得多。这至少减少了“盒子重叠”的问题。