1. 程式人生 > >2018.09.07

2018.09.07

一般情況下,我們要處理是一副具有固定解析度的影象。但是有些情況下, 我們需要對同一影象的不同解析度的子影象進行處理

比如要在一幅影象中查詢某個目標,比如臉,而且不知道目標在影象中的尺寸大小。這種情況下,需要建立一組影象,這些影象是具有不同解析度的原始影象。這組影象叫做影象金字塔(簡單來說就是同一影象的不同解析度的子圖集合)。如果把最大的影象放在底部,最小的放在頂部,看起來像一座金字 塔,故而得名影象金字塔。

常見兩類影象金字塔

  • 高斯金字塔 ( Gaussianpyramid): 用來向下取樣,主要的影象金字塔
  • 拉普拉斯金字塔 (Laplacianpyramid): 用來從金字塔低層影象重建上層未取樣影象,在數字影象處理中也即是預測殘差,可以對影象進行最大程度的還原,配合高斯金字塔一起使用。

    兩者的簡要區別:高斯金字塔用來向下降取樣影象,而拉普拉斯金字塔則用來從金字塔底層影象中向上取樣重建一個影象。

    要從金字塔第i層生成第i+1層(我們表示第i+1層為G_i+1),我們先要用高斯核對G_1進行卷積,然後刪除所有偶數行和偶數列。當然的是,新得到影象面積會變為源影象的四分之一。按上述過程對輸入影象G_0執行操作就可產生出整個金字塔。

    當影象向金字塔的上層移動時,尺寸和解析度就降低。OpenCV中,從金字塔中上一級影象生成下一級影象的可以用PryDown。而通過PryUp將現有的影象在每個維度都放大兩遍。

    影象金字塔中的向上和向下取樣分別通過OpenCV函式 pyrUp 和 pyrDown 實現。

    概括起來就是:

    • 對影象向上取樣:pyrUp函式
    • 對影象向下取樣:pyrDown函式

    這裡的向下與向上取樣,是對影象的尺寸而言的(和金字塔的方向相反),向上就是影象尺寸加倍,向下就是影象尺寸減半。而如果我們按上圖中演示的金字塔方向來理解,金字塔向上影象其實在縮小,這樣剛好是反過來了。

    但需要注意的是,PryUp和PryDown不是互逆的,即PryUp不是降取樣的逆操作。這種情況下,影象首先在每個維度上擴大為原來的兩倍,新增的行(偶數行)以0填充。然後給指定的濾波器進行卷積(實際上是一個在每個維度都擴大為原來兩倍的過濾器)去估計“丟失”畫素的近似值。

    PryDown( )是一個會丟失資訊的函式。為了恢復原來更高的解析度的影象,我們要獲得由降取樣操作丟失的資訊,這些資料就和拉普拉斯金字塔有關係了。

 高斯金字塔

高斯金字塔是通過高斯平滑和亞取樣獲得一些列下采樣影象,也就是說第K層高斯金字塔通過平滑、亞取樣就可以獲得K+1層高斯影象,高斯金字塔包含了一系列低通濾波器,其截至頻率從上一層到下一層是以因子2逐漸增加,所以高斯金字塔可以跨越很大的頻率範圍。金字塔的影象如下:

另外,每一層都按從下到上的次序編號, 層級 G_i+1 (表示為 G_i+1尺寸小於第i層G_i)。

 對影象的向下取樣

為了獲取層級為 G_i+1 的金字塔影象,我們採用如下方法:

<1> 對影象G_i進行高斯核心卷積

<2> 將所有偶數行和列去除

得到的影象即為G_i+1的影象,顯而易見,結果影象只有原圖的四分之一。通過對輸入影象G_i(原始影象)不停迭代以上步驟就會得到整個金字塔。同時我們也可以看到,向下取樣會逐漸丟失影象的資訊。

以上就是對影象的向下取樣操作,即縮小影象。

2.1.2 對影象的向上取樣

如果想放大影象,則需要通過向上取樣操作得到,具體做法如下:

<1> 將影象在每個方向擴大為原來的兩倍,新增的行和列以0填充

<2> 使用先前同樣的核心(乘以4)與放大後的影象卷積,獲得 “新增畫素”的近似值

得到的影象即為放大後的影象,但是與原來的影象相比會發覺比較模糊,因為在縮放的過程中已經丟失了一些資訊,如果想在縮小和放大整個過程中減少資訊的丟失,這些資料形成了拉普拉斯金字塔。

 

 拉普拉斯金字塔(應用於影象融合)

 

是高斯金字塔的修正版,為了還原到原圖。通過計算殘差圖來達到還原。下式是拉普拉斯金字塔第i層的數學定義:

 

   Opencv可用:L(i)=G(i) - PyrUp(G(i+1));將降取樣之後的影象再進行上取樣操作,然後與之前還沒降取樣的原圖進行做差得到殘差圖!為還原影象做資訊的準備!

我們下文將要介紹的pryUp,就是在進行上面這個式子的運算。

也就是說,拉普拉斯金字塔是通過源影象減去先縮小後再放大的影象的一系列影象構成的。保留的是殘差!為影象還原做準備!

整個拉普拉斯金字塔運算過程可以通過下圖來概括:

所以,我們可以將拉普拉斯金字塔理解為高斯金字塔的逆形式。

另外再提一點,關於影象金字塔非常重要的一個應用就是實現影象分割。影象分割的話,先要建立一個影象金字塔,然後在G_i和G_i+1的畫素直接依照對應的關係,建立起”父與子“關係。而快速初始分割可以先在金字塔高層的低解析度影象上完成,然後逐層對分割加以優化。

注意:上取樣和下采樣是非線性處理,不可逆,有損的處理!

問題:到底影象的多解析度和影象的多尺度有什麼區別呢