Python - opencv (二) 图像金字塔

图像金字塔的含义:

图像金字塔是图像中多尺度表达的一种,最主要用于图像的分割,是一种以多分辨率来解释图像的有效但概念简单的结构。图像金字塔最初用于机器视觉和图像压缩,一幅图像的金字塔是一系列以金字塔形状排列的分辨率逐步降低,且来源于同一张原始图的图像集合。其通过梯次向下采样获得,直到达到某个终止条件才停止采样。金字塔的底部是待处理图像的高分辨率表示,而顶部是低分辨率的近似。我们将一层一层的图像比喻成金字塔,层级越高,则图像越小,分辨率越低。

 

 

 

 

一. 高斯金字塔

卷积核:

 

 

 

向下采样(缩小):

1. 将Gi与卷积核相乘

2. 去除所有偶数行和列

向上采样(放大):

1. 将图像每个方向扩大为原来的2倍,新增的行和列以0填充

2. 使用Gauss内核(乘以4)与图像卷积,获得近似值

代码:

up = cv2.pyrUp(img) # 上采样
down = cv2.pyrDown(img) #下采样

 

二. 拉普拉斯金字塔

 

公式:

 

简述为4步:

1.低通滤波

2.下采样缩小

3.上采样放大

4.图像相减

拉普拉斯金字塔是通过源图像减去先缩小后再放大的图像的一系列图像构成的。保留的是残差!为图像还原做准备!

示例将一张图片分别做2层拉普拉斯金字塔,代码:

 1 import cv2
 2 import numpy as np
 3 
 4 def laplacian_l(img):
 5     down = cv2.pyrDown(img)
 6     down_up = cv2.pyrUp(down)
 7     return img - down_up
 8 
 9 if __name__ == '__main__':
10     img = cv2.imread('../pics/1.jpg', cv2.IMREAD_GRAYSCALE)
11 
12     l1 = laplacian_l(img)
13     l2 = laplacian_l(l1)
14 
15     res = np.hstack((img, l1, l2))
16     cv2.imshow('img', res)
17     cv2.waitKey()

看效果:

 

posted @ 2021-07-06 22:35  Asp1rant  阅读(125)  评论(0编辑  收藏  举报