[CV] 快速计算灰度图 bounding box 内部的方差

本文介绍了如何快速计算灰度图像中bounding box内部的像素均值和方差,通过利用Haar特征降低时间复杂度。首先回顾Haar特征用于计算区域像素之和,然后提出通过构建积分图来高效计算方差,以此优化大量bounding box的情况。
摘要由CSDN通过智能技术生成

[CV] 快速计算灰度图 bounding box 内部的方差

简介

给定一张灰度图和一系列 bounding boxes,每个bounding box(bbox) 通过 [left, top, right, down] 编码,计算每个 bbox 内部像素的均值和方差。

直观的思路是对每个bbox计算均值然后计算方差,每一个的时间复杂度为 O ( k ⋅ w ⋅ h ) O(k\cdot w\cdot h) O(kwh) 其中 k k k 是一个常量。当 bbox 很多的时候,时间复杂度过高。 计算方差肯定绕不过均值,先思考如何快速计算均值。

Haar 特征

本科的时候学过 VJ-Detector,具体原理已经忘掉了,但记得有一个haar可以快速计算区域内像素质和。思路类似二维前缀和。

-------------------y
|
|    A-------B
|    |       |
|    |       |
|.   C-------D
|
x

如图,我们定义:

h a a r ( x , y ) = ∑ i = 0 x ∑ j = 0 y I ( i , j ) haar(x, y) = \sum_{i = 0}^{x}\sum_{j = 0}^{y}I(i, j) haar(x,y)=i=0xj=0yI(i,j)

那么图中A, B, C, D构成的面积可以表达为

sum_ = haar[Dx][Dy] - haar[Bx - 1][By] - haar[Cx][Cy - 1] - haar[Ax - 1][Ay - 1]

同时像素的个数可以被表达为

area = (D_x - A_x + 1) * (D_y - D_y + 1)

这样构造好了haar以后,能够很快的计算出均值,代码如下,没有经过测试,但是原理是没有问题的:

def mean_(img, bboxes):
    # bboxes 为bbox 构成的列表,bbox通过[left top right down] 编码
    if len(img) == 0:
        return None
    row, col = len(img), len(img[0])
    haar = [img[i][:] for i in range(row)]
    # 构造积分图
    for i in range(row):
        for j in range(col):
            if i == 0:
                haar[i][j] += haar[i
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值