積分圖(二) - Block - Match(統計)濾波器

原文地址(英文)算法

積分圖 是 [Crow(1984 年)] 提出的用於提升多尺度透視投影中紋理的渲染速度的一種技術. 積分圖最流行的應用是 快速歸一化互相關 (fast normalized cross-correlation), Viola-Jones 目標檢測框架, SURF 變換( Speeded Up Robust Feature).app

本章介紹的是積分圖在基本的塊統計濾波器中的應用.框架

均值

隨機變量 \(X=\{x_1,\dots,x_n\}\) 的離散分佈的均值 \(\mu(X)\) 定義爲:oop

\[ \begin{equation} \begin{aligned} \mu=\sum_{i=1}^np_ix_i \end{aligned} \end{equation} \]spa

若是 X 是一個矩形塊中的像素值, 而且每一個像素值的機率相同 \(p_i=\frac{1}{n}\), 那麼:.net

\[ \begin{equation} \begin{aligned}\mu=\frac{1}{n}\sum_{i=1}^nx_i \end{aligned} \end{equation} \]code

這個求和能夠經過 \(I(\vec{x})\) 的積分圖求解. 對於一個二維圖像, 在單個 loop 中, 積分圖計算會平均使用 1 次乘積和 3 次求和, 每一個像素數據訪問須要 5 次求和. 使用積分圖, 任意矩形塊的像素值的均值均可以在常數時間內計算, 即計算時須要 1 次乘積和 3 次求和, 數據訪問須要 2 次乘積和 6 次求和.orm

方差

隨機變量 \(X=\{x_1,\dots,x_n\}\) 的離散分佈的方差 \(\text{Var}(X)\) 定義爲:ci

\[ \begin{equation} \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} \]element

若是 X 是一個矩形塊中的像素值, 而且每一個像素值的機率相同 \(p_i=\frac{1}{n}\), 那麼:

\[ \begin{equation} \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{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{equation} \begin{aligned} \rho_{XY} = \frac{\sigma_{XY}}{\sigma_{X}\sigma_{Y}} \end{aligned} \end{equation} \]

其中, 對 X 進行 n~elements 的有限採樣, 那麼每個樣本的相關係數 \(r_{XY}\) 爲:

\[ \begin{equation} \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{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{equation} \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{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{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{equation} \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{equation} \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

相關文章
相關標籤/搜索