积分图(二) - Block - Match(统计)滤波器
积分图 是 [Crow(1984 年)] 提出的用于提高多尺度透视投影中纹理的渲染速度的一种技术. 积分图最流行的应用是 快速归一化互相关 (fast normalized cross-correlation), Viola-Jones 目标检测框架, SURF 变换( Speeded Up Robust Feature).
本章介绍的是积分图在基本的块统计滤波器中的应用.
均值
随机变量 \(X=\{x_1,\dots,x_n\}\) 的离散分布的均值 \(\mu(X)\) 定义为:
\begin{aligned}
\mu=\sum_{i=1}^np_ix_i
\end{aligned}
\end{equation}
\]
如果 X 是一个矩形块中的像素值, 并且每个像素值的概率相同 \(p_i=\frac{1}{n}\), 那么:
\begin{aligned}\mu=\frac{1}{n}\sum_{i=1}^nx_i
\end{aligned}
\end{equation}
\]
这个求和可以通过 \(I(\vec{x})\) 的积分图求解. 对于一个二维图像, 在单个 loop 中, 积分图计算会平均使用 1 次乘积和 3 次求和, 每个像素数据访问需要 5 次求和. 使用积分图, 任意矩形块的像素值的均值都可以在常数时间内计算, 即计算时需要 1 次乘积和 3 次求和, 数据访问需要 2 次乘积和 6 次求和.
方差
随机变量 \(X=\{x_1,\dots,x_n\}\) 的离散分布的方差 \(\text{Var}(X)\) 定义为:
\begin{aligned}
\text{Var}(X) = \sum_{i=1}^np_i(x_i-\mu)^2 \quad\text{with}\quad \mu=\sum_{i=1}^np_ix_i
\end{aligned}
\end{equation}
\]
如果 X 是一个矩形块中的像素值, 并且每个像素值的概率相同 \(p_i=\frac{1}{n}\), 那么:
\begin{aligned}
\text{Var}(X) = \frac{1}{n}\sum_{i=1}^n(x_i-\mu)^2 \quad\text{and}\quad \mu=\frac{1}{n}\sum_{i=1}^nx_i
\end{aligned}
\end{equation}
\]
展开公式可得:
\begin{aligned}
\text{Var}(x) &= \frac{1}{n}\sum_{i=1}^n\left(x_i^2-2x_i\mu+\mu^2\right) \\
&= \frac{1}{n}\sum_{i=1}^nx_i^2 - \frac{1}{n}\sum_{i=1}^n2x_i\mu + \mu^2 \\
&= \frac{1}{n}\sum_{i=1}^nx_i^2 - \frac{1}{n}\sum_{i=1}^n2x_i\mu + \frac{1}{n^2}\left(\sum_{i=1}^nx_i\right)^2\\
&= \frac{1}{n}\sum_{i=1}^nx_i^2 - \frac{2\mu}{n}\sum_{i=1}^nx_i + \frac{1}{n^2}\left(\sum_{i=1}^nx_i\right)^2\\
&= \frac{1}{n}\sum_{i=1}^nx_i^2 - \frac{2}{n^2}\left(\sum_{i=1}^nx_i\right)^2 + \frac{1}{n^2}\left(\sum_{i=1}^nx_i\right)^2\\
&= \frac{1}{n}\sum_{i=1}^nx_i^2 - \frac{1}{n^2}\left(\sum_{i=1}^nx_i\right)^2\\
&= \frac{1}{n}\sum_{i=1}^nx_i^2 - \left(\frac{1}{n}\sum_{i=1}^nx_i\right)^2\\
&= \frac{1}{n}\left(\sum_{i=1}^nx_i^2 - \frac{1}{n}\left(\sum_{i=1}^nx_i\right)^2\right)\\
\end{aligned}
\end{equation}
\]
每一个求和都可以使用两个积分图: \(I(\vec{x})\) 和 \(I(\vec{x})^2\). 对于一个二维图像, 在单个 loop 中, 积分图计算会平均使用 1 次乘积和 6 次求和, 每个像素数据访问需要 5 次求和. 使用积分图, 任意矩形块的像素值的方差都可以在常数时间内计算, 即计算时需要 3 次乘积和 9 次求和, 数据访问需要 2 次乘积和 6 次求和.
使用积分图进行块匹配(Block Matching)
考虑这样一种场景: 两张部分重叠的图像区域 X 和 Y 可能在图像亮度和对比度上有所不同, 使用简单的估计器 (simple estimator), 比如 Mean Square Error (MSE) 并不能测量两个图像区域的相似度, 因为 MSE 对于线性变换不是固定不变的.
此时, 我们需要一种线性相关的测量方法. 皮尔森乘积矩相关系数 (PMCC, Pearson Product-Moment Correlation Coefficient) \(\rho_{X,Y}\) 就是一种线性相关的测量方法:
\begin{aligned}
\rho_{XY} = \frac{\sigma_{XY}}{\sigma_{X}\sigma_{Y}}
\end{aligned}
\end{equation}
\]
其中, 对 X 进行 n~elements 的有限采样, 那么每一个样本的相关系数 \(r_{XY}\) 为:
\begin{aligned}
r_{XY} = \frac{\sum_{i=1}^n(x_i-\mu_X)(y_i-\mu_Y)}{\sqrt{\sum_{i=1}^n(x_i-\mu_X)^2}\sqrt{\sum_{i=1}^n(y_i-\mu_Y)^2}}\quad\text{其中,}\quad\mu_X = \frac{1}{n}\sum_{i=1}^nx_i
\end{aligned}
\end{equation}
\]
可以将公式的分子变形为:
\begin{aligned}
\sum_{i=1}^n(x_i-\mu_X)(y_i-\mu_Y) &= \sum_{i=1}^nx_iy_i-\sum_{i=1}^nx_i\mu_Y-\sum_{i=1}^ny_i\mu_X+\sum_{i=1}^n\mu_X\mu_Y \\
&= \sum_{i=1}^nx_iy_i-\mu_Y\sum_{i=1}^nx_i-\mu_X\sum_{i=1}^ny_i+n\mu_X\mu_Y\\
&= \sum_{i=1}^nx_iy_i-\frac{1}{n}\sum_{i=1}^ny_i\sum_{i=1}^nx_i
\end{aligned}
\end{equation}
\]
对于整个分式乘以 \(\frac{n}{n}\):
\begin{aligned}
r_{XY} &= \frac{\sum_{i=1}^nx_iy_i-\frac{1}{n}\sum_{i=1}^ny_i\sum_{i=1}^nx_i}{\sqrt{\sum_{i=1}^n(x_i-\mu_X)^2}\sqrt{\sum_{i=1}^n(y_i-\mu_Y)^2}} \\
&= \frac{n\sum_{i=1}^nx_iy_i-\sum_{i=1}^ny_i\sum_{i=1}^nx_i}{n\sqrt{\sum_{i=1}^n(x_i-\mu_X)^2}\sqrt{\sum_{i=1}^n(y_i-\mu_Y)^2}} \\
&= \frac{n\sum_{i=1}^nx_iy_i-\sum_{i=1}^ny_i\sum_{i=1}^nx_i}{\sqrt{n\sum_{i=1}^n(x_i-\mu_X)^2}\sqrt{n\sum_{i=1}^n(y_i-\mu_Y)^2}}
\end{aligned}
\end{equation}
\]
根据上面的推导, 可得:
\begin{aligned}
n\sum_{i=1}^n(x_i-\mu_X)^2 &= n\sum_{i=1}^n(x_i^2-2x_i\mu_X+\mu_X^2) \\
&= n\sum_{i=1}^nx_i^2 - 2n\mu_X\sum_{i=1}^nx_i + \left(\sum_{i=1}^nx_i\right)^2\\
&= n\sum_{i=1}^nx_i^2 - 2\left(\sum_{i=1}^nx_i\right)^2 + \left(\sum_{i=1}^nx_i\right)^2\\
&= n\sum_{i=1}^nx_i^2 - \left(\sum_{i=1}^nx_i\right)^2
\end{aligned}
\end{equation}
\]
因此:
\begin{aligned}
r_{XY} = \frac{n\sum_{i=1}^nx_iy_i - \sum_{i=1}^nx_i\sum_{i=1}^ny_i}{\sqrt{n\sum_{i=1}^nx_i^2 - \left(\sum_{i=1}^nx_i\right)^2}\sqrt{n\sum_{i=1}^ny_i^2 - \left(\sum_{i=1}^ny_i\right)^2}}
\end{aligned}
\end{equation}
\]
由公式可以看出, 我们计算图像上固定偏移处的每个 block 的 \(r_{XY}\) 时, 都只需要计算 5 个 summed-area tables, 即 \(x_iy_i, x_i, y_i, x_i^2, y_i^2\), 因此算法复杂度是常数.
在一些求极值的问题中, 我们可以估计出 \(r_{XY}^2\) 和 \(r_{XY}\) 的符号(即分子的符号)即可. 这样就可以避免计算开根号来提高效率.
\begin{aligned}
r_{XY}^2 = \frac{a^2}{\left(n\sum_{i=1}^nx_i^2 - \left(\sum_{i=1}^nx_i\right)^2\right)\left(n\sum_{i=1}^ny_i^2 - \left(\sum_{i=1}^ny_i\right)^2\right)}
\end{aligned}
\end{equation}
\]
with
\begin{aligned}
a = n\sum_{i=1}^nx_iy_i - \sum_{i=1}^nx_i\sum_{i=1}^ny_i\quad\text{and}\quad{}sgn(r_{XY}) = sgn(a)
\end{aligned}
\end{equation}
\]
参考资料
[1]: Integral Image Filter
[2]: Crow, Franklin C. (1984). "Summed-area tables for texture mapping". Proceedings of the 11th annual conference on Computer graphics and interactive techniques: 207–212, ACM. doi:10.1145/800031.808600.
[3]: Lewis, J. P. (1995). "Fast template matching". Vision Interface 95: 120–123, Canadian Image Processing and Pattern Recognition Society.
[4]: Viola, Paul & Jones, Michael J. (2004), "Robust Real-Time Face Detection", International Journal of Computer Vision 57 (2): 137–154
[5]: Bay, Herbert; Ess, Andreas & Tuytelaars, Tinne et al. (2008), "SURF: Speeded Up Robust Features", Computer Vision and Image Understanding (CVIU) 110 (3): 346–359
积分图(二) - Block - Match(统计)滤波器的更多相关文章
- 浅析人脸检测之Haar分类器方法:Haar特征、积分图、 AdaBoost 、级联
浅析人脸检测之Haar分类器方法 一.Haar分类器的前世今生 人脸检测属于计算机视觉的范畴,早期人们的主要研究方向是人脸识别,即根据人脸来识别人物的身份,后来在复杂背景下的人脸检测需求越来越大,人脸 ...
- 【AdaBoost算法】积分图代码实现
一.积分图介绍 定义:图像左上方的像素点值的和: 在Adaboost算法中可用于加速计算Haar或MB-LBP特征值,如下图: 二.代码实现 #include <opencv/highgui.h ...
- 第十二章——SQLServer统计信息(4)——在过滤索引上的统计信息
原文:第十二章--SQLServer统计信息(4)--在过滤索引上的统计信息 前言: 从2008开始,引入了一个增强非聚集索引的新功能--过滤索引(filter index),可以使用带有where条 ...
- 积分图实现均值滤波的CUDA代码
没想到我2010年买的笔记本显卡GT330M 竟然还能跑CUDA,果断小试了一把,环境为CUDA6.5+VS2012,写了一个积分图实现均值滤波.类似于OpenCV的blur()函数. 使用lena. ...
- 目标检测之积分图---integral image 积分图2
前面在图像处理一栏中涉及到boxfilter 的时候,简单介绍过积分图,就是每个像素点是左边和上边的累加和,这样的话可以方便均值和方差,以及直方图统计的相关运算,这里再次结合网络资源重新单独对积分图做 ...
- 第十二章——SQLServer统计信息(3)——发现过期统计信息并处理
原文:第十二章--SQLServer统计信息(3)--发现过期统计信息并处理 前言: 统计信息是关于谓词中的数据分布的主要信息源,如果不知道具体的数据分布,优化器不能获得预估的数据集,从而不能统计需要 ...
- 第十二章——SQLServer统计信息(1)——创建和更新统计信息
原文:第十二章--SQLServer统计信息(1)--创建和更新统计信息 简介: 查询的统计信息: 目前为止,已经介绍了选择索引.维护索引.如果有合适的索引并实时更新统计信息,那么优化器会选择有用的索 ...
- 第十二章——SQLServer统计信息(2)——非索引键上统计信息的影响
原文:第十二章--SQLServer统计信息(2)--非索引键上统计信息的影响 前言: 索引对性能方面总是扮演着一个重要的角色,实际上,查询优化器首先检查谓词上的统计信息,然后才决定用什么索引.一般情 ...
- Matlab 快速多通道积分图计算函数
所谓快速多通道积分图计算,其实就是 cumsum2D. 我写了一个比较快的版本(比 VLFeat 的快),用 mex 编译一下就能用了. 代码 #include <string.h> #i ...
随机推荐
- mysql加强(6)~子查询简单介绍、子查询分类
一.子查询简单介绍 1.什么是子查询? 一个查询之中嵌套了其他的若干查询. 在使用select 语句查询时,有时候where的查询条件中的限制条件不是一个确定的值,而是一个来自于另一个查询的结果. 子 ...
- 利用JavaWeb实现课程信息添加
整体架构 :HTML+JAVABEAN+SERVLET 一.首先先简单介绍一下所需要的组件 原文地址 https://www.cnblogs.com/zll20153246/p/ ...
- SpringBoot使用异步线程池实现生产环境批量数据推送
前言 SpringBoot使用异步线程池: 1.编写线程池配置类,自定义一个线程池: 2.定义一个异步服务: 3.使用@Async注解指向定义的线程池: 这里以我工作中使用过的一个案例来做描述,我所在 ...
- Nacos服务注册与发现的2种实现方法!
Spring Cloud Alibaba 技术体系中的 Nacos,提供了两个重要的功能:注册中心(服务注册与发现)功能和配置中心功能. 其中注册中心解决了微服务调用中,服务提供者和服务调用者的解耦, ...
- element-ui 使用 Select 组件给 value 属性绑定对象类型
qq_36437172 2020-06-28 22:38:49 778 收藏 分类专栏: element-ui 文章标签: element-ui Select 组件 value 属性 绑定 对象类 ...
- NSArray 遍历
1.NSArray的下标遍历 NSArray *arr = @[p1, p2, p3, p4, p5]; for (int i = 0; i < arr.count; ++i) { Person ...
- ORA-22922:nonexistent LOB value问题及listagg()函数
1 现象及错误信息 在执行一次查询的过程,Oracle出现ORA-22922:nonexistent LOB value 的错误:根据提示,是在查询时没有找到lob对象: 2 问题分析 查看SQL,发 ...
- 一个label 混搭不同颜色,不同字体的文字.. by 徐
效果如图箭头所示,只需要一个label就可以做到不同颜色或不同字体的效果 1 UILabel *label = [[UILabel alloc]initWithFrame:CGRectMake(10, ...
- 任意文件上传漏洞syr
任意文件上传漏洞 先来几个一句话木马看看 <%execute(request("value"))%> #asp木马 <?php eval($_POST[" ...
- 节点流和处理流(BufferedReader和BufferedWriter,BufferedInputStream和BufferedOutputStream,ObjectlnputStream和objectOutputStream)
一.基本介绍: 1.节点流可以从一个特定的数据源读写数据,如FileReader. FileWriter 如图:字节流是直接对数据源(文件,数组之类存放数据的地方)进行操作 2.处理流(也叫包装流)是 ...