【问题标题】:How to generate a bounding box that overlaps with existing bounding box by at least a given ratio?如何生成与现有边界框重叠至少给定比例的边界框?
【发布时间】:2016-07-31 09:56:18
【问题描述】:

给定一个边界框bbox1,我想随机生成一个新的边界框bbox2,它至少与bbox1重叠0.5。

重叠率定义为bbox1bbox2的交集面积除以两者的并集面积。

我能想到的最幼稚的方法是随机生成边界框,直到找到满足条件的边界框。但显然,它会浪费一些时间来生成和评估不满意的候选人。

如果边界框由左上角和宽度和高度bbox1 = (x1, y1, w1, h1)编码,下面的伪代码显示了我如何生成新的边界框。

do
    x2 = random(x1 - w1, x1 + w1/2)
    y2 = random(y1 - h1, y1 + h1/2)
    w2 = random(0, 2 * w1)
    h2 = random(0, 2 * w1 * h1 / w2)
    bbox2 = (x2, y2, w2, h2)
while bboxOverlapRatio(bbox1, bbox2) < 0.5

有更好的解决方案吗?例如,我可以进一步缩小随机范围吗?

【问题讨论】:

  • 这样的边界框有无数个,那么你心目中的概率分布是什么?制服显然不是一种选择
  • 为什么统一不是一种选择?是的,有无限个这样的边界框,但范围可以缩小。
  • 哦,好吧,我误解了这个问题。没关系
  • 两个边界框的大小和形状是否相同?如果没有,你能发布生成盒子直到一个合适的天真的代码吗?
  • @MOehm 它可以有不同的大小和形状。我已经发布了我限制新边界框范围的方式。

标签: algorithm image-processing


【解决方案1】:

进一步缩小随机范围的一种方法是只生成新的边界框bbox2,中心在bbox1内。

如果bbox2 的中心在bbox1 之外,则不可能有至少 0.5 的重叠(请注意,这本身就是一个单独的、有趣的数学问题)。

这个额外的约束可以表示为x1 &lt; x2 + w2/2 &lt; x1 + w1(与垂直轴的关系类似),并且可以用来缩小w2h2的范围:

do
    x2 = random(x1 - w1, x1 + w1/2)
    y2 = random(y1 - h1, y1 + h1/2)
    w2 = random(max(0, 2 * (x1 - x2)), min(2 * w1, 2 * (x1 + w1 - x2)))
    h2 = random(max(0, 2 * (y1 - y2)), min(2 * w1 * h1 / w2, 2 * (y1 + h1 - y2)))
    bbox2 = (x2, y2, w2, h2)
while bboxOverlapRatio(bbox1, bbox2) < 0.5

【讨论】:

    【解决方案2】:

    让我们以相同大小的盒子为例:

    有四种情况:

    one where you start from the left at x1-w1/2, y1
    one from the top x1, y1-h1/2
    on from upper left to move in diagonal x1-c, y1-c
    one from the lower left same diagonal up x1-c, y1+h1+c
    

    其中 c 是您可以找到的数字,它在对角线位置至少有 1/2 重叠(对于正方形 (wc)*(wc)>=w^2/2,您求解此二次方程并找到 c) .

    搜索空间仅限于以下区域:

    所以你这样做:

    choice=random from 1 to 4
    if choice==1: xnew=x1-w1/2+random from 0 to 2*w1; ynew=y1
    if choice==2: xnew=x1; ynew=y1-h1/2+random from 0 to 2*h1
    if choice==3: xnew=x1-c+random from 0 to w1+2*c; ynew=y1-c+random from 0 to h1+2*c
    if choice==4: xnew=x1-c+random from 0 to w1+2*c; ynew=y1+h1+c+random from 0 to -(h1+2*c)
    

    这不是一个完全随机的选择,因为您没有预先设置搜索空间,然后在其中选择某个点,但实际上它随机覆盖了整个空间。

    这涵盖了四个主要路线;但留下角落案例/空间未被发现。您实际上有一个圆形搜索空间:如果您将起点向上移动,则还必须将其向右移动以保证 1/2 重叠。这是一个半径为 w1 的圆(如果 w1=h1),以初始矩形的中心为中心。如果你从圆圈上的任何一点开始,你保证有 1/2 的覆盖率。您可以在圆圈内的任意位置选择您的点。

    如果矩形不是正方形而是一般的矩形,你有一个椭圆作为搜索空间。

    --

    然后让我们来看看不同大小的场景:

    在您的循环中,您随机选择尺寸并执行上述搜索。 您从哪里开始计算以及您将走多远会发生变化,但可以完成。

    [更正:起点不能在整个圆上,而是在左侧圆的某些部分-右侧对称]

    【讨论】:

      猜你喜欢
      • 2013-08-30
      • 2021-04-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-07-06
      • 2015-03-01
      • 2022-01-22
      相关资源
      最近更新 更多