图形金字塔

- 图像金字塔主要是为了缩小图像,便于之后的图像处理(特征提取:对每一层都进行特征提取后再汇总)
一、高斯金字塔:(上下和展示图像相反)
1. 向下采样方法(Downsize): 161⎣⎡1464141624164624362464162416414641⎦⎤
- 将Gi与高斯内核卷积
- 将所有偶数行和列去除
2. 向上采样方法(Amplify):[10563096]−−−−−>⎣⎡10056000003009600000⎦⎤
- 先将图像在每个方向扩大为原来的两倍,新增的行和列以0填充
- 使用先前同样的内核 (乘4) 与放大后的图像卷积,获得近似值
import cv2
import matplotlib
import matplotlib.pyplot as plt
import numpy as np
%matplotlib inline
def cv_show(name, img):
cv2.imshow(name,img)
cv2.waitKey(0)
cv2.destroyAllWindows()
def plt_show(images, titles):
for i in range(len(images)):
plt.subplot( i + 351),
plt.imshow(cv2.cvtColor(images[i],cv2.COLOR_BGR2RGB), 'gray'),
plt.title(titles[i])
img = cv2.imread('Park.jpg')
cv_show('Park', img)
up = cv2.pyrUp(img)
cv_show('Up', up)
down = cv2.pyrDown(img)
cv_show('Down', down)
plt_show([img, up, down], ['Origin', 'Up', 'Down'])

- 对比图:
下面的对比图作了resize处理,实际上Up更大,Down更小

up_down = cv2.pyrUp(down)
img.shape
(225, 162, 3)
up_down.shape
(226, 162, 3)
up_down = cv2.resize(up_down, (162, 225))
res = np.hstack([img, up_down])
cv_show('Compare' , res)
plt_show([img, up_down], ['Origin', 'Up_Down'])


3. 小整一手:对视频进行Canny边缘检测
vdo = cv2.VideoCapture('dfh.mp4')
if vdo.isOpened():
open, frame = vdo.read()
else:
open = False
while open:
ret, frame = vdo.read()
if frame is None:
break
if ret == True:
gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
border = cv2.Canny(gray, 25, 50)
res = np.hstack([gray, border])
cv2.imshow('Compare', res)
if cv2.waitKey(10) & 0xFF == 27:
break
vdo.release()
cv2.destroyAllWindows()
二、拉普拉斯金字塔
Li=Gi−PyrUp(PyrDown(Gi))

img = cv2.imread('Park.jpg')
cv_show('Park', img)
down = cv2.pyrDown(img)
down_Up = cv2.pyrUp(down)
down_Up = cv2.resize(down_Up,(162, 225))
la = img - down_Up
res = np.hstack([img, la])
cv_show('Result', res)
plt_show([img, la],['Origin','Laplacian'])

