由第一個圖可知,圖像金字塔這無非就是對圖像進行放大和縮小罷了
1,高斯金字塔
向下采樣方法(縮小),越采樣越小,即從金字塔底部向上采樣
cv2.pyrDown(img)
向上采樣方法(放大),越采樣越大,即從金字塔頂部向下采樣
cv2.pyrUp(img)
import cv2
import numpy as npdef show_photo(name,picture):cv2.imshow(name,picture)cv2.waitKey(0)cv2.destroyAllWindows()#原圖
img = cv2.imread('E:\Jupyter_workspace\study\data/test2.png')
show_photo('img',img)
print(img.shape)#結果為:(260, 200, 3)#放大
up = cv2.pyrUp(img)
show_photo('up',up)
print(up.shape)#結果為:(520, 400, 3)#縮小
down = cv2.pyrDown(img)
show_photo('down',down)
print(down.shape)#結果為:(130, 100, 3)#先放大再縮小
up = cv2.pyrUp(img)
up_down = cv2.pyrDown(up)
show_photo('up_down',up_down)
print(up_down.shape))#結果為:(260, 200, 3)#先縮小再放大
down = cv2.pyrDown(img)
down_up = cv2.pyrUp(down)
show_photo('down_up',down_up)
print(down_up.shape)#結果為:(260, 200, 3)#將原圖、先放大再縮小、先縮小再放大進行比較
res = np.hstack((img,up_down,down_up))#vstack縱向比較
show_photo('img up_down down_up',res)
效果如下:
原圖、先放大再縮小、先縮小再放大進行比較
雖然先放大再縮小或者先縮小再放大都和原圖大小一樣,但是實則清晰度已經變了,已經丟了很多數據了
2,拉普拉斯金字塔
Gi為原圖像數據,即img
PyrUp(PyrDown(Gi))對原圖像先up再down
然后用原圖像Gi減去PyrUp(PyrDown(Gi))
首先,G0為原圖先進行低通濾波和縮小尺寸操作得到G1,G1再進行放大尺寸得到E1,然后,G0-E1得到LP1,即與上述公式效果一致
cv2.pyrDown(img)
縮小
cv2.pyrUp(img)
放大
import cv2
import numpy as npdef show_photo(name,picture):cv2.imshow(name,picture)cv2.waitKey(0)cv2.destroyAllWindows()img = cv2.imread('E:\Jupyter_workspace\study\data/test2.png')
down = cv2.pyrDown(img)
down_up = cv2.pyrUp(down)#先縮小再放大
lpls = img-down_up
show_photo('lpls',lpls)