图像金字塔


概念

将图像组合成金字塔的形状(底下大,上面小)

使用场景:特征提取

方法分为

  • 高斯金字塔
  • 拉普拉斯金字塔

一、高斯金字塔

1、向下采样法(缩小)

越采样越少,down sample,|是一个缩小操作;

  • (G_i) 与高斯内核卷积
  • 将所有偶数行和列去除

$ frac{1}{16} * left[ egin{matrix} 1 & 4 & 6 & 4 & 1 4 & 16 & 24 & 16 & 4 6 & 24 & 36 & 24 & 6 4 & 16 & 24 & 16 & 4 1 & 4 & 6 & 4 & 1 end{matrix} ight] $


2、向上采样法(放大)

  1. 将图像在每个方向上 扩大为原来的两倍;新增的行列以 0 填充;
  2. 使用先前同样的内核(乘以4)与放大后的图像卷积获得近似值

$ left[ egin{matrix} 10 & 30 56 & 96 end{matrix} ight] ightarrow left[ egin{matrix} 10 & 0 & 30 & 0 0 & 0 & 0 & 0 56 & 0 & 96 & 0 0 & 0 & 0 & 0 end{matrix} ight] $


3、实现

import cv2
import numpy as np
import matplotlib.pyplot as plt
lena = cv2.imread('lena.jpg')
lena.shape # (263, 263, 3)
 
# 上采样
up = cv2.pyrUp(lena)
up.shape # (526, 526, 3)
 
# 下采样
down = cv2.pyrDown(lena)
down.shape # (132, 132, 3)

plt.imshow(up)

output_8_1.png


plt.imshow(down)

output_9_1.png

# 上采样后下采样,和原图大小一样,但有损失
up = cv2.pyrUp(lena)
up_down = cv2.pyrDown(up)
up_down.shape  # (263, 263, 3)
 
plt.imshow(np.hstack((lena, up_down)))


二、拉普拉斯金字塔

$ L_i = G_i - PyrUp(PyrDown(G_i)) $

down = cv2.pyrDown(lena)
down_up = cv2.pyrUp(down, dstsize=(263,263))
l1 = lena - down_up
plt.imshow(l1)

原文地址:https://www.cnblogs.com/fldev/p/14371328.html