图像金字塔
- 简介
金字塔的底层是比较大,越往上越小,图像金字塔就是把图像组合成金字塔的形状。
图像金字塔可以做图像特征提取,做特征提取时有时可能不光对原始输入做特征提取,可能还会对好几层图像金字塔做特征提取。可能每一层特征提取的结果是不一样的,再把特征提取的结果总结在一起。
常用的两种图像金字塔形式:
高斯金字塔
拉普拉斯金字塔
-
高斯金字塔
-
代码案例
import cv2 #opencv的缩写为cv2
import matplotlib.pyplot as plt # matplotlib库用于绘图展示
import numpy as np # numpy数值计算工具包
# 魔法指令,直接展示图,Jupyter notebook特有
%matplotlib inline
def cv_show(img,name):
cv2.imshow(name,img)
cv2.waitKey()
cv2.destroyAllWindows()
img = cv2.imread('01_Picture/09_AM.png')
cv_show(img,'img')
print(img.shape)
# 执行结果:(442, 340, 3)
img = cv2.imread('01_Picture/09_AM.png')
up = cv2.pyrUp(img)
cv_show(up,'up')
print(up.shape)
# 执行结果:(884, 680, 3)
img = cv2.imread('01_Picture/09_AM.png')
down = cv2.pyrDown(img)
cv_show(down,'down')
print(down.shape)
# 执行结果:(221, 170, 3)
up = cv2.pyrUp(up) # 上采样之后再上采样
cv_show(up,'up')
print(up.shape)
# 执行结果:(1768, 1360, 3)
img = cv2.imread('01_Picture/09_AM.png')
up = cv2.pyrUp(img)
up_down = cv2.pyrDown(up) # 先上采样再下采样
cv_show(np.hstack((img,up_down)),'up_down')
- 执行结果
点击查看详情
-
原图
-
放大
-
缩小
-
再次放大
-
先放大再缩小,原图与结果图对比
- 拉普拉斯金字塔
拉普拉斯金字塔的每一层图像尺寸不变。
拉普拉斯金字塔的每一层操作都是上一层处理后作为输入,该输入减去该输入缩小放大后的图像,获得该层的输出
- 代码案例
img = cv2.imread('01_Picture/09_AM.png')
domn = cv2.pyrDown(img)
down_up = cv2.pyrUp(down)
L_1 = img - down_up
cv_show(L_1,'L_1')
print(L_1.shape)
# 执行结果:(442, 340, 3)
- 执行结果