import cv2
#定义高斯金字塔函数
def gaussian_pyramid(image):
level=3#高斯金字塔层数
temp=image.copy()
gaussian_images=[]
for i in range(level):
dst=cv2.pyrDown(temp)#图像进行向下采样
gaussian_images.append(dst)
temp=dst.copy()
return gaussian_images
#定义拉普拉斯金字塔函数
def laplacian_pyramid(image):
gaussian_images=gaussian_pyramid(image)#高斯金字塔
level=len(gaussian_images)
for i in range(level-1,-1,-1):
if (i-1)<0:
expand=cv2.pyrUp(gaussian_images[i],dstsize=image.shape[:2])
laplacian=cv2.subtract(image,expand)#图像差值
cv2.imshow("laplacian_down_"+str(i),laplacian)
else:
expand=cv2.pyrUp(gaussian_images[i],dstsize=gaussian_images[i-1].shape[:2])#图像进行向上采样
laplacian=cv2.subtract(gaussian_images[i-1],expand)#图像差值
cv2.imshow("laplacian_down_"+str(i),laplacian)
img=cv2.imread('C:/Users/xpp/Desktop/Lena.png')
cv2.namedWindow('input_image',cv2.WINDOW_AUTOSIZE)
cv2.imshow('input_image',img)
laplacian_pyramid(img)
cv2.waitKey(0)
cv2.destroyAllWindows()
算法:拉普拉斯金字塔是对原图像进行低通滤波和降采样得到一个粗尺度的近似图像,即分解得到的低通近似图像,把这个近似图像经过插值,滤波,再计算它和原图像的插值,就得到分解的带通分量,下一级分解是在得到的低通近似图像上进行,迭代完成多尺度分解。