高斯金字塔
高斯金字塔其实原理很简单,就是通过高斯模糊(高斯滤波)后进行上采样和下采样,其中Down表示下采样函数,下采样可以通过抛去图像中的偶数行和偶数列来实现,这样图像长宽各减少二分之一,面积减少四分之一。opencv提供了pyrDown()函数用于下采样,效果如下:
import cv2
img = cv2.imread('7.jpg')
for i in range(3):
cv2.imshow(f'img{i}',img)
img = cv2.pyrDown(img)
# img = cv2.pyrUp(img)
cv2.waitKey(0)
上采样与下采样相反,通过高斯模糊后高和宽放大到原来的一杯
import cv2
img = cv2.imread('7.jpg')
for i in range(3):
cv2.imshow(f'img{i}',img)
# img = cv2.pyrDown(img)
img = cv2.pyrUp(img)
cv2.waitKey(0)
综上可以看出,高斯金字塔无论是上采样还是下采样每次采样后图像都要进行一次高斯模糊,所以图像会越来越模糊。
拉普拉斯金字塔
拉普拉斯金字塔是由高斯金字塔而来,公式如下,经过高斯金字塔上或下采样后图片滤掉了一下高频信号,用原图片与采样后的图片相减就可以得到高频信号:
import cv2
img = cv2.imread('7.jpg')
img_down = cv2.pyrDown(img)
img_up = cv2.pyrUp(img_down)
img_new = cv2.subtract(img,img_up)
img_new = cv2.convertScaleAbs(img_new,alpha=5,beta=0)
cv2.imshow('img_lap',img_new)
cv2.waitKey(0)