【问题标题】:Determine if numpy subarrays overlap?确定numpy子数组是否重叠?
【发布时间】:2019-12-02 11:08:42
【问题描述】:

我正在做图像分析,并将所有图像作为 numpy 数组。我想确定两个子数组/边界框是否重叠。

我有所有框的 xmin、xmax、ymin 和 ymax 值。如何确定框 1 的部分(或整个框)是否与框 2 重叠。

【问题讨论】:

  • 嗨,欢迎来到 Stack Overflow。我已经在下面回答了您问题的主要部分-两个框重叠的条件是什么。但是,要完全回答您的问题,我们需要一个代码示例(因此我们可以看到您所说的“似乎没有按预期工作”的意思)。有关更多信息,请参阅stackoverflow.com/help/how-to-ask。此外,没有图像示例,问题就足够清楚了,并且不是特定于图像处理的。

标签: python arrays numpy image-processing


【解决方案1】:

不重叠的条件是

def no_overlap(box1,box2,count_edge=False):
    return any(no_overlap_1d(*z1,*z2,count_edge)
        for z1,z2 in zip(box1,box2))

def no_overlap_1d(min1,max1,min2,max2,count_edge=False):
    if count_edge:
        return min1>max2 or min2>max1
    else:
        return min1>=max2 or min2>=max1

box1 和 box2 是 min,max 对的列表。

例子:

no_overlap([[1,5],[1,4]],[[3,4],[2,3]])
# False
no_overlap([[1,5],[1,4]],[[3,4],[4,5]])
# True
no_overlap([[1,5],[1,4]],[[3,4],[4,5]],True)
# False

【讨论】:

    【解决方案2】:

    就像我在上面的评论中所说,如果没有您尝试过的方法和无效的方法的示例,我们无法完全回答您的问题。

    但是,您问题的主要部分是 两个要重叠的二维框 - 分别是:

    box_1_in_box_2 = ((x_max_2> x_min_1 >= x_min_2) or (x_max_2>= x_max_1 >x_min_2)) and ((y_max_2> y_min_1 >= y_min_2) or (y_max_2>= y_max_1 > y_min_2))
    
    box_2_in_box_1 = ((x_max_1> x_min_2 >= x_min_1) or (x_max_1>= x_max_2 >x_min_1)) and ((y_max_1> y_min_2 >= y_min_1) or (y_max_1>= y_max_2 > y_min_1))
    
    overlap = box_1_in_box_2 or box_2_in_box_1
    

    【讨论】:

    • 抱歉没有正确询问我下次会添加代码。我的问题主要是出于逻辑原因。你的回答就是我所需要的。非常感谢。
    • 这似乎在两个盒子相等的简单情况下失败了@BBQuercus,Itamar Mushkin
    • @PaulPanzer 你是对的!我将对其进行编辑以正确包含边缘。
    • 我讨厌烦人,但如果 box2 完全在 box1 内,它仍然会失败。
    • 不不,你又是对的。我已经编写了 1 面测试,现在编辑为 2 面测试。
    猜你喜欢
    • 2011-04-02
    • 2011-06-10
    • 1970-01-01
    • 2011-01-29
    • 2019-07-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多