OpenCV與Python之圖像金字塔

目錄

1. 高斯圖像金字塔

1.1. 圖像向下取樣

1.2. 圖像向上採樣

2. 拉普拉斯圖像金字塔

2.1. 圖像向下採樣

2.2. 圖像向上採樣


1. 高斯圖像金字塔

1.1. 圖像向下取樣

原理:先對圖像做高斯平滑,然後刪除圖像的偶數行和偶數列,即將圖像在x和y方向均減少一半,最後的圖像爲原來圖像的四分之一

命令:dst = cv2.pyrDown(img)

down1 = cv2.pyrDown(img)
down2 = cv2.pyrDown(down1)

結果:

 

1.2. 圖像向上採樣

原理:將圖像的行和列,間隔的插入零,最後做一個高斯模糊

命令:dst = cv2.pyrUp(img)

up1 = cv2.pyrUp(down2)
up2 = cv2.pyrUp(up1)

結果:

 

可以發現,經過圖像的下采樣和上採樣後,圖像的大小恢復了原來的大小,但圖像損失了信息這是不可挽回的,所以圖像比原始圖像要模糊

 

2. 拉普拉斯圖像金字塔

 拉普拉斯金字塔過程:

向下採樣過程:用高斯金字塔的第i層減去i+1層做上採樣的圖像,得到拉普拉斯第i層的圖像

向上採樣過程:用高斯金字塔的i+1層做上採樣加上拉普拉斯的第i層,得到第i層的原始圖像

2.1. 圖像向下採樣

原理:L_i = G_i - pyrUp(pyrDown(G_i))

解釋:拉普拉斯第i層的圖像是將上一層圖像先做高斯下采樣得到G_i,然後對G_i做一次高斯下采樣和高斯上採樣,最後兩者相減便得到了拉普拉斯第i層圖像

G0 = img
G1 = cv2.pyrDown(img)
U0 = cv2.pyrUp(G1)
L0 = G0 - U0
cv2.imshow('L0', L0)

G2 = cv2.pyrDown(G1)
U1 = cv2.pyrUp(G2)
L1 = G1 - U1
cv2.imshow('L1', L1)

G3 = cv2.pyrDown(G2)
U2 = cv2.pyrUp(G3)
L2 = G2 - U2
cv2.imshow('L2', L2)

結果:

 

 

2.2. 圖像向上採樣

原理:O_i = G_i + L_i \ G_i = cv2.pyrUp(G_{i+1})

解釋:第i層的恢復結果是拉普拉斯第i層的圖像加上高斯第i+1層做上採樣的圖像

G2 = cv2.pyrUp(G3)
O2 = G2 + L2
cv2.imshow('O2', O2)

G1 = cv2.pyrUp(G2)
O1 = G1 + L1
cv2.imshow('O1', O1)

G0 = cv2.pyrUp(G1)
O0 = G0 + L0
cv2.imshow('O0', O0)

結果:

 

 

與單純的高斯金字塔相比,拉普拉斯金字塔保留了圖像的高頻信息

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章