OpenCV/Python - 按边界框区域查找异常值

OpenCV/Python - Finding Outliers by Area of Bounding Box

我有一个使用 TensorFlow 设置的对象检测算法,有没有办法根据框的大小删除异常值?

例如,我检测到 20 个对象。假设其中 17 个大约为 50x50。但是,有几个边界框是 1x1 和一个边界框是 1000x1000。显然 1x1 和 1000x1000 的框太大了,应该删除。

一种方法是使用 z_score。 z_score 将检查此数字与平均值有多少 std_devs 不同。

示例:

# coding: utf-8

import cv2
import numpy as np


bboxes = [(100,200), (120,210), (114, 195), (2,190), (104, 300), (111, 3), (110, 208), (114,205)]


def z_score(ys):
    mean_y = np.mean(ys)
    stdev_y = np.std(ys)
    z_scores = np.abs([(y - mean_y) / stdev_y for y in ys])
    return z_scores

thresh   = 1
outliers = [(t[0]>thresh or t[1]>thresh) for t in z_score(bboxes)]

这将打印: [假,假,假,真,真,真,假,假]