高斯金字塔與拉普拉斯金字塔的原理與python構建
轉載自:https://zhuanlan.zhihu.com/p/94014493
高斯金字塔和拉普拉斯金字塔【1】在影像相關領域應用廣泛,尤其是影像融合和影像分割方面。本文從理論和opencv實現兩個方面對兩種金字塔進行了介紹,並給出了二者的視覺效果。
1、高斯金字塔
在計算機視覺與影像處理相關任務中,經常需要使用同一張圖的不同尺寸的子圖,我們可以使用高斯金字塔來獲取這些子圖。高斯金字塔是通過對一張圖逐級下采樣獲得的,如下圖所示:
上圖中最下層是原始的影像,越靠上的層影像尺寸越小,這一組影像就被稱為高斯金字塔(在某些資料中,下采樣之前需要首先進行高斯濾波,本文為了簡化過程省略了這一步驟)。假設G0表示原始影像,Gi表示第i次下采樣得到的影像,那麼高斯金字塔的計算過程可以表示如下:
其中Down表示下采樣函式,下采樣可以通過拋去影像中的偶數行和偶數列來實現,這樣影像長寬各減少二分之一,面積減少四分之一。opencv提供了pyrDown()函式用於下采樣,程式碼如下:
def gaussian(ori_image, down_times=5):
# 1:新增第一個影像為原始影像
temp_gau = ori_image.copy()
gaussian_pyramid = [temp_gau]
for i in range(down_times):
# 2:連續儲存5次下采樣,這樣高斯金字塔就有6層
temp_gau = cv2.pyrDown(temp_gau)
gaussian_pyramid.append(temp_gau)
return gaussian_pyramid
進行5次下采樣可以獲得下面得6級高斯金字塔(第1級為原始高解析度影像):
可以看出,隨著下采樣的進行,影像的解析度不斷降低,視覺效果也越來越模糊。
2、拉普拉斯金字塔
拉普拉斯金字塔可以認為是殘差金字塔,用來儲存下采樣後圖片與原始圖片的差異。我們知道,如果高斯金字塔中任意一張圖Gi(比如G0為最初的高解析度影像)先進行下采樣得到圖Down(Gi),再進行上取樣得到圖Up(Down(Gi)),得到的Up(Down(Gi))與Gi是存在差異的,因為下采樣過程丟失的資訊不能通過上取樣來完全恢復,也就是說下采樣是不可逆的。下面展示了一張圖先進行下采樣,再進行上取樣的過程:
可以看出,原始圖片下采樣後得到的小尺寸圖片雖然保留了視覺效果,但是將該小尺寸影像再次上取樣也不能完整的恢復出原始影像。為了能夠從下采樣影像Down(Gi)中還原原始影像Gi,我們需要記錄再次上取樣得到Up(Down(Gi))與原始圖片Gi之間的差異,這就是拉普拉斯金字塔的核心思想,下面最右邊的圖展示了這種差異(為了效果明顯我進行了伽馬矯正):
拉普拉斯金字塔就是記錄高斯金字塔每一級下采樣後再上取樣與下采樣前的差異,目的是為了能夠完整的恢復出每一層級的下采樣前影像。下面的公式就是前面的差異記錄過程:
對於前文得到的高斯金字塔,現在可以構建對應的拉普拉斯金字塔如下(第1級為高斯金字塔中最小尺寸的圖,也就是高斯金字塔最後1級;為了下圖看起來更明顯我進行了伽馬矯正):
opencv提供了pyrUp()函式用於上下采樣過程,對應程式碼如下:
def laplacian(gaussian_pyramid, up_times=5):
laplacian_pyramid = [gaussian_pyramid[-1]]
for i in range(up_times, 0, -1):
# i的取值為5,4,3,2,1,0也就是拉普拉斯金字塔有6層
temp_pyrUp = cv2.pyrUp(gaussian_pyramid[i])
temp_lap = cv2.subtract(gaussian_pyramid[i-1], temp_pyrUp)
laplacian_pyramid.append(temp_lap)
return laplacian_pyramid
3、總結
高斯金字塔和拉普拉斯金字塔作為獲取不同解析度影像的方法,原理並不複雜,但是自己並沒有找到中文論文專門介紹,僅僅找到了拉普拉斯金字塔論文【1】,大部分其它論文都是直接對其進行應用的。所以,如果本文的介紹有誤,請幫我指出此錯誤。
相關文章
- 4.3.3 OpenCV 實現 高斯金字塔和拉普拉斯金字塔OpenCV
- OpenCV計算機視覺學習(7)——影像金字塔(高斯金字塔,拉普拉斯金字塔)OpenCV計算機視覺
- 方法論系列:用四個金字塔來說明金字塔原理
- 產品讀書《金字塔原理》
- UX設計金字塔與使用者需求UX
- 人臉檢測中,如何構建輸入影像金字塔
- OpenCV7影像金字塔與輪廓檢測OpenCV
- AI能力金字塔AI
- 測試金字塔
- Python 影像處理 OpenCV (14):影像金字塔PythonOpenCV
- 列印可自定義的字母金字塔(python實現)Python
- TCZX0101 金字塔
- 1796 數字金字塔
- 小波去噪演算法的簡易實現及其擴充套件(小波銳化、高斯拉普拉斯金字塔去噪及銳化)之一。演算法套件
- 小波去噪演算法的簡易實現及其擴充套件(小波銳化、高斯拉普拉斯金字塔去噪及銳化)之二。演算法套件
- 長文圖解:詳解金字塔原理如何應用於架構設計圖解架構
- 向量金字塔技術研究
- 思考工具之Minto金字塔 | Untools
- 【譯】JavaScript的GETTER-SETTER金字塔模型JavaScript模型
- 打造“資料金字塔”,小米大資料平臺建設之路大資料
- PHP輸出金字塔及空心菱形PHP
- 類類分享-使用者金字塔
- 關於“學習金字塔理論”的所思所想
- 你在測試金字塔的哪一層?(上)
- 如何建立JavaScript圖表工具-金字塔圖JavaScript
- 測試金字塔,你在哪一層?
- 3. OpenCV-Python——影像梯度演算法、邊緣檢測、影像金字塔與輪廓檢測、直方圖與傅立葉變換OpenCVPython梯度演算法直方圖
- 求金字塔數字非負的情況總數
- java 數字金字塔,含詳細解說Java
- Makefile 專案構建最佳化原理與應用
- 金字塔測試原理:寫好單元測試的8個小技巧,一文總結
- C語言入門:正,反兩座金字塔C語言
- 常見特徵金字塔網路FPN及變體特徵
- 基於實時計算(Flink)與高斯模型構建實時異常檢測系統模型
- 敏捷團隊的最佳測試實踐:自動化金字塔敏捷
- Gradle 與 AGP 構建 API: 配置您的構建檔案GradleAPI
- SSD結構與工作原理
- 目標檢測模型——SPP (空間金字塔池化)模型