影像金字塔
是同一影像不同解析度的子圖集合,通過對原圖的不斷向下采樣而產生,由高解析度的影像產生低解析度的近似影像,
1. 高斯金字塔:不可逆采樣
向下采樣
import cv2
o=cv2.imread("lena.bmp",cv2.IMREAD_GRAYSCALE)
r1=cv2.pyrDown(o) # 對原圖第一次向下采樣
r2=cv2.pyrDown(r1) # 對第一次采樣的影像再次向下采樣
r3=cv2.pyrDown(r2) # 對第二次采樣的影像再次向下采樣
print("o.shape=",o.shape)
print("r1.shape=",r1.shape) # 列印采樣后的影像解析度
print("r2.shape=",r2.shape)
print("r3.shape=",r3.shape)
cv2.imshow("original",o)
cv2.imshow("r1",r1)
cv2.imshow("r2",r2)
cv2.imshow("r3",r3)
cv2.waitKey()
cv2.destroyAllWindows()


向上采樣
import cv2
o=cv2.imread("lenas.bmp")
r1=cv2.pyrUp(o) # 向上采樣
r2=cv2.pyrUp(r1)
r3=cv2.pyrUp(r2)
print("o.shape=",o.shape)
print("r1.shape=",r1.shape)
print("r2.shape=",r2.shape)
print("r3.shape=",r3.shape)
cv2.imshow("original",o)
cv2.imshow("r1",r1)
cv2.imshow("r2",r2)
cv2.imshow("r3",r3)
cv2.waitKey()
cv2.destroyAllWindows()


為什么說高斯金字塔采樣是不可逆的?
這里使用原始影像減去先向下采樣后向上采樣的影像,看看結果,理論上來說,兩張影像相減結果為0(就是一片漆黑),就說明這兩張影像是一張圖,
import cv2
o=cv2.imread("lena.bmp")
down=cv2.pyrDown(o) # 先向下采樣
up=cv2.pyrUp(down) # 再向上采樣
diff=up-o #構造diff影像,查看up與o的差異
cv2.imshow("original",o)
cv2.imshow("up",up)
cv2.imshow("difference",diff)
cv2.waitKey()
cv2.destroyAllWindows()

上面相減后的結果并非是0,也就證實了通過高斯金字塔向下采樣并不是向上采樣的逆運算,因為通過高斯濾波后,進行了拋棄偶數行列操作,不了避免的丟失了像素資訊,
2. 拉普拉斯金字塔:可逆行采樣
為了解決上述丟失像素細節的問題,這里使用另外一種采樣方式----拉普拉斯金字塔,
定義形式:Li = Gi - pyrUp(Gi + 1)
簡單理解就是: 先對當前一層的高斯金字塔影像,向下采樣,然后向上采樣,最后使用當前影像減去兩次采樣后的影像
- Li:表示拉普拉斯金字塔中的第i層,
- Gi:表示高斯金字塔中的第i層,
import cv2
import numpy as np
import matplotlib.pyplot as plt
O=cv2.imread("lena.bmp")
# 高斯金字塔并向下采樣
G0=O
Gd=cv2.pyrDown(G0)
# 高斯金字塔并向上采樣
Gu=cv2.pyrUp(Gd)
# 得到拉普拉斯金字塔
L0=G0-Gu
# 通過拉普拉斯影像復原
RG0=L0+Gu
print("G0.shape=",G0.shape)
print("RG0.shape=",RG0.shape)
result=RG0-G0 #將RG0和G0做減法
#計算result的絕對值,避免求和時負負為正(PS:3+(-3)=0)
result=abs(result)
#計算result所有元素的和
print("原始影像G0與恢復影像RG0差值的絕對值和:",np.sum(result))
# 使用pyplot顯示影像
plt.figure(figsize=(10,10),dpi=100)
plt.subplot(1,3,1)
plt.title('G0')
plt.imshow(G0),plt.axis('off')
plt.subplot(1,3,2)
plt.title('L0')
plt.imshow(L0),plt.axis('off')
plt.subplot(1,3,3)
plt.title('RG0')
plt.imshow(RG0),plt.axis('off')
運行結果:

拜了個拜,,,
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/303128.html
標籤:其他
