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

时间:2018-08-18 20:35:29

标签: python algorithm opencv object-detection

我有一个使用TensorFlow设置的对象检测算法,有没有一种方法可以消除盒子尺寸方面的异常值?

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

1 个答案:

答案 0 :(得分:0)

您可以执行的一种方法是使用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)]

这将打印: [False,False,False,True,True,True,False,False]