图像金字塔
图像金字塔是图像多尺度表达的一种,是一种以多分辨率来解释图像的有效但概念简单的结构。一幅图像的金字塔是一系列以金字塔形状排列的分辨率逐步降低,且来源于同一张原始图的图像集合。其通过梯次向下采样获得,直到达到某个终止条件才停止采样。我们将一层一层的图像比喻成金字塔,层级越高,则图像越小,分辨率越低。如下图所示。
常用的图像金字塔有高斯金字塔(Gaussian pyramid)和拉普拉斯金字塔(Laplacian pyramid)。高斯金字塔用来向下采样,而拉普拉斯金字塔用来从金字塔低层图像重建上层未采样图像。
附拉普拉斯金字塔代码:
# 图像金字塔
# 图像金字塔原理
# reduce=高斯模糊+降采样
# expand=扩大+卷积
# 高斯金字塔与拉普拉斯金字塔
# 代码层面知识点:
# PyrDown:降采样
# PyrUP:还原
import cv2
import numpy as np
def pyramid_demo(image):
level=4
temp=image.copy()
pyramid_images=[]
for i in range(level):
dst=cv2.pyrDown(temp)
pyramid_images.append(dst)
cv2.imshow("pyrDown"+str(i),dst)
temp=dst.copy()
return pyramid_images
def lapalian_demo(image):#拉普拉斯金字塔
pyramid_images=pyramid_demo(image)
level=len(pyramid_images)
for i in range(level-1, -1, -1):
if(i-1)<0:
expand = cv2.pyrUp(pyramid_images[i],dstsize=image.shape[:2])
lpls= cv2.subtract(image, expand)
cv2.imshow("lapalian_demo"+str(i),lpls)
else:
expand = cv2.pyrUp(pyramid_images[i], dstsize=pyramid_images[i - 1].shape[:2])
lpls = cv2.subtract(pyramid_images[i - 1], expand)
cv2.imshow("lapalian_demo" + str(i), lpls)
print("-----------------------")
src=cv2.imread("lena.jpg")
cv2.imshow("src_image",src)
lapalian_demo(src)
cv2.waitKey(0)
cv2.destroyAllWindows()