【第16節(jié)】圖像金字塔
目標
1、原理
????????一般情況下,我們要處理是一副具有固定分辨率的圖像。但是有些情況下,我們需要對同一圖像的不同分辨率的子圖像進行處理。比如,我們要在一幅圖像中查找某個目標,比如臉,我們不知道目標在圖像中的尺寸大小。這種情況下,我們需要創(chuàng)建一組圖像,這些圖像是具有不同分辨率的原始圖像。我們把這組圖像叫做圖像金字塔(簡單來說就是同一圖像的不同分辨率的子圖集合)。如果我們把最大的圖像放在底部,最小的放在頂部,看起來像一座金字塔,故而得名圖像金字塔。
????????有兩類圖像金字塔:高斯金字塔和拉普拉斯金字塔。
????????高斯金字塔的頂部是通過將底部圖像中的連續(xù)的行和列去除得到的。頂部圖像中的每個像素值等于下一層圖像中5個像素的高斯加權平均值。這樣操作一次一個MxN的圖像就變成了一個M/2xN/2的圖像。所以這幅圖像的面積就變?yōu)樵瓉韴D像面積的四分之一。這被稱為Octave。連續(xù)進行這樣的操作我們就會得到一個分辨率不斷下降的圖像金字塔。我們可以使用函數(shù)CV2.pyrDown()和CV2.pyrUp()構建圖像金字塔。函數(shù)CV2.pyrDown()從一個高分辨率大尺寸的圖像向上構建一個金子塔(尺寸變小,分辨率降低)。
實例演示:?
結果:

????????函數(shù)CV2.pyrUp()從一個低分辨率小尺寸的圖像向下構建一個金字塔(尺寸變大,但分辨率不會增加)
????????你要記住的是是higher_ reso2和higher_ reso 是不同的。因為一旦使用CV2.pyrDown(),圖像的分辨率就會降低,信息就會被丟失。下圖就是從CV2.pyrDown()產(chǎn)生的圖像金字塔的(由下到上)第三層圖像使用函數(shù)CV2.pyrUp()得到的圖像,與原圖像相比分辨率差了很多。
結果:

? ?? 拉普拉斯金字塔主要用于重建圖像,拉普拉斯就是為了在放大圖像的時候,可以預測殘差,何為殘差,即小圖像放大的時候,需要插入一些像素值,在上文直接插入的是 0,拉普拉斯金字塔算法可以根據(jù)周圍像素進行預測,從而實現(xiàn)對圖像最大程度的還原。
????????學習到原理如下:用高斯金字塔的每一層圖像,減去其上一層圖像上采樣并高斯卷積之后的預測圖像,得到一系列的差值圖像即為 LP 分解圖像(其中 LP 即為拉普拉斯金字塔圖像)。
拉普拉斯金字塔可以由高斯金字塔計算的來,公式如下:

或者這樣寫更容易理解:
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?
實例演示:
結果:
