1. 程式人生 > 其它 >Python - opencv (二) 影象金字塔

Python - opencv (二) 影象金字塔

影象金字塔的含義:

影象金字塔是影象中多尺度表達的一種,最主要用於影象的分割,是一種以多解析度來解釋影象的有效但概念簡單的結構。影象金字塔最初用於機器視覺和影象壓縮,一幅影象的金字塔是一系列以金字塔形狀排列的解析度逐步降低,且來源於同一張原始圖的影象集合。其通過梯次向下取樣獲得,直到達到某個終止條件才停止取樣。金字塔的底部是待處理影象的高解析度表示,而頂部是低解析度的近似。我們將一層一層的影象比喻成金字塔,層級越高,則影象越小,解析度越低。

一. 高斯金字塔

卷積核:

向下取樣(縮小):

1. 將Gi與卷積核相乘

2. 去除所有偶數行和列

向上取樣(放大):

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

2. 使用Gauss核心(乘以4)與影象卷積,獲得近似值

程式碼:

up = cv2.pyrUp(img) # 上取樣
down = cv2.pyrDown(img) #下采樣

二. 拉普拉斯金字塔

公式:

簡述為4步:

1.低通濾波

2.下采樣縮小

3.上取樣放大

4.影象相減

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

示例將一張圖片分別做2層拉普拉斯金字塔,程式碼:

 1 import cv2
 2 import numpy as np
 3 
 4 def laplacian_l(img):
 5     down = cv2.pyrDown(img)
6 down_up = cv2.pyrUp(down) 7 return img - down_up 8 9 if __name__ == '__main__': 10 img = cv2.imread('../pics/1.jpg', cv2.IMREAD_GRAYSCALE) 11 12 l1 = laplacian_l(img) 13 l2 = laplacian_l(l1) 14 15 res = np.hstack((img, l1, l2)) 16 cv2.imshow('img', res) 17 cv2.waitKey()

看效果: