目录
图像金字塔
图像金字塔是由一幅图像的多个不同分辨率的子图构成的图像集合。是通过一个图像不断的降低采样率产生的,最小的图像可能仅仅有一个像素点。图像金字塔的底部是待处理的高分辨率图像(原始图像),而顶部则为其低分辨率的近似图像。
下采样 是一种减小图像尺寸的方法,它通常涉及到降低图像的分辨率,即减少图像中像素的数量,从而使图像看起来更小。
上采样 是一种增大图像尺寸的方法,它通过插值和滤波技术来恢复图像的分辨率和细节,通常用于图像放大或者与下采样后的图像进行比较。 resize函数 是一种通用的图像尺寸调整方法,它可以按照指定的目标尺寸来缩放图像,不涉及金字塔结构或者特定的滤波操作。

一、上下采样原理
1、向下取样
向金字塔顶部移动时,图像的尺寸和分辨率都不断地降低。通常情况下,每向上移动一级,图像的宽和高都降低为原来的1/2。
做法:
1、高斯滤波
2、删除其偶数行和偶数列
OpenCV函数cv2.pyrDown()

2、向上采样
通常将图像的宽度和高度都变为原来的2倍。这意味着,向上采样的结果图像的大小是原始图像的4倍。因此,要在结果图像中补充大量的像素点。对新生成的像素点进行赋值的行为,称为插值。 做法:
1、插值
2、高斯滤波

通过以上分析可知,向上采样和向下采样是相反的两种操作。但是,由于向下采样会丢失像素值,所以这两种操作并不是可逆的。也就是说,对一幅图像先向上采样、再向下采样,是无法恢复其原始状态的;同样,对一幅图像先向下采样、再向上采样也无法恢复到原始状态
dst = cv2.pyrUp( src[, dstsize[, borderType]]
3、图像金字塔的作用
特征点提取(SIFT、HOG、ORB等)
· 模板匹配
· 光流跟踪
二、案例实现
将图片显示封装到一个函数中
import cv2
import matplotlib.pyplot as plt
import numpy as np
def cv_show(name,value):
cv2.imshow(name,value)
cv2.waitKey(0)
1、高斯下采样
cv2.pyrDown()下采样函数
dst = cv2.pyrDown(src [,dst, dstsize [, borderType] ])
dst:目标图像
src:原始图像
dstsize:目标图像的大小
face=cv2.imread('../data/face.png')
# face=cv2.resize(face,dsize=None,fx=0.5,fy=0.5) #如果图片显示过大,可以使用这个设置图片大小
cv2.imshow('face',face)
cv2.waitKey(0)
#对原图片进行下采样
face_down_1=cv2.pyrDown(face)
cv_show('down_1',face_down_1)
#对第一次下采样的结果再次下采样处理
face_down_2=cv2.pyrDown(face_down_1)
cv_show('down_2',face_down_2)
效果:
依次做下采样,发现图片越来越模糊,是因为下采样会丢失掉数据。

2、高斯金字塔中的上采样
cv.pyUp()上采样函数
dst = cv2.pyrUp(src [,dst, dstsize [, borderType] ])
dst:目标图像
src:原始图像
dstsize:目标图像的大小
#对原图进行上采样处理
face_up_1=cv2.pyrUp(face)
cv_show('face_up_1',face_up_1)
#对上采样处理过的图像再做一次上采样
face_up_2=cv2.pyrUp(face_up_1)
cv_show('face_up_2',face_up_2)

3、对下采样的结果做上采样,图像变模糊,无法复原
face_down_1_up=cv2.pyrUp(face_down_1) #下采样G1
face_down_2_up=cv2.pyrUp(face_down_2) #下采样G2
cv_show('down_1_up',face_down_1_up)
cv_show('down_2_up',face_down_2_up)
效果:

对原图做一次下采样一次上采样,这时图片就恢复到与原图同样的大小,与原图做对照发现通过对下采样的数据上采样得到的结果更加模糊了,是因为下采样会丢失掉数据

4、拉普拉斯金字塔(图片复原)
找出下采样原图丢失的数据,复原丢失数据的图像,使图像更加清晰
为了在向上采样是能够恢复具有较高分辨率的原始图像,就要获取在采样过程中所丢失的信息,这些丢失的信息就构成了拉普拉斯金字塔。 也是拉普拉斯金字塔是有向下采样时丢失的信息构成。
拉普拉斯金字塔的定义
Li = Gi -- pyrUp(pyrdown(Gi)) 式中:
Li:表示拉普拉斯金字塔中的第i层
Gi:表示高斯金字塔中的第i层
Gi+1 表示高斯金字塔中的第 i+1 层。
对原图做一次下采样再对下采样的结果做一次上采样,这时虽然与原图大小相同但是经过采样图像丢失了一部分数据
拉普拉斯金字塔的原理是原图-下采样再上采样,这时就得到了丢失的数据,将丢失的数据加到下采样再上采样上就可以将这个图像复原。

L0=face-face_down_1_up
L1=face_down_1-face_down_2_up
fuyuan=face_down_1_up+L0
cv_show('L0',L0)
cv_show('L1',L1)
cv_show('fuyuan',fuyuan)
效果:下面的图片就是原图做下采样丢失掉的数据点
