我有一组区域(边界框)用于某些图像,例如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, cleared)
label_image = label(borders)
for region in regionprops(label_image, ['Area', 'BoundingBox']):
#now i have bounding boxes in hand
我想要做的是合并重叠的区域或bbox边缘之间的距离小于X
。天真的方法是检查所有区域之间的距离,其具有O(n 2 )复杂度。我可以写一些更聪明的东西,但我觉得这种算法已经存在,我不想重新发明轮子。任何帮助表示赞赏。
答案 0 :(得分:0)
这是你的问题“有n个盒子(不一定是//到x-y轴),你想找到所有重叠的盒子并合并它们(如果它们存在的话)?”
我想不出一个线性算法,但我有一个比O(n ^ 2)更快的概念,也许O(n lg n)描述如下:
我希望这个方法可以工作,它应该比O(n ^ 2)快,但即使它确实有效,它仍然有一些问题在步骤4,其中较大的合并框必须是//到xy轴,这不是必须的。
编辑:对不起我只是再次通过OP,并且理解上面的解决方案并没有解决“距离< x”的合并框,它甚至只解决了重叠框问题。
此外,合并框程序不是1遍作业,它是递归的,例如框A和框B合并成框C,则框C可以重叠/距离< x带框D ......依此类推。
在线性时间内解决这个任务对我来说是不可能的,因为预先计算所有成对方框之间的距离已经很难在O(n)中完成......