一、Guassian金字塔

1、对图像的向下取样操作,即缩小图像。

Gaussian金字塔是是通过依次地向下迭代采样(从底部到顶部)获得整个金字塔,如下图,随着依次地采样,图像越来越小。

第(i+1)层 Gi+1,是由第 i 层 Gi  和高斯核进行卷积,然后去除每个偶数行和列,得到的采样图像是前一层的(1/4)。

  • 由其实现过程可知,向下采样是有损的操作,会丢弃了部分信息;

  • 图像的层次越高,对应的图像越小,分辨率也越低。

2、对图像的向上取样,即放大图像

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

  • 使用先前同样的内核(乘以4)与放大后的图像卷积,获得 “新增像素”的近似值

  • 得到的图像即为放大后的图像,但是与原来的图像相比会发觉比较模糊,因为在缩放的过程中已经丢失了一些信息,如果想在缩小和放大整个过程中减少信息的丢失,这些数据形成了拉普拉斯金字塔。

1、pyrDown

opencv的pyrDown函数先对图像进行高斯平滑,然后再进行降采样(将图像尺寸行和列方向缩减一半)。

其函数原型为:

pyrDown(src[, dst[, dstsize[, borderType]]]) -> dst

  • src参数表示输入图像。

  • dst参数表示输出图像,它与src类型、大小相同。

  • dstsize参数表示降采样之后的目标图像的大小。它是有默认值的,如果我们调用函数的时候不指定第三个参数,那么这个值是按照 Size((src.cols+1)/2, (src.rows+1)/2) 计算的。而且不管你自己如何指定这个参数,一定必须保证满足以下关系式:|dstsize.width * 2 - src.cols| ≤ 2;  |dstsize.height * 2 - src.rows| ≤ 2。也就是说降采样的意思其实是把图像的尺寸缩减一半,行和列同时缩减一半。

  • borderType参数表示表示图像边界的处理方式。

# encoding: utf-8import cv2
import matplotlib.pyplot as plt
import numpy as npdef show_img(name="test",img=None):plt.figure()plt.imshow(img)plt.title(name)plt.show()if __name__ == '__main__':path = r"lena.jpg"img = cv2.imread(path)gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)# 1# 向下采样,图片每一次采样,图片缩小 1/4,即横纵都缩小 1/2pyr_down_1 = cv2.pyrDown(img)pyr_down_2 = cv2.pyrDown(pyr_down_1)pyr_down_3 = cv2.pyrDown(pyr_down_2)print("img shape = {}\npyrDown_1 shape = {}\npyrDown_2 shape = {}\npyrDown_3 shape = {} ".format(img.shape, pyr_down_1.shape,pyr_down_2.shape, pyr_down_3.shape))

2、pyUp

opencv的pyrUp函数先对图像进行升采样(将图像尺寸行和列方向增大一倍),然后再进行高斯平滑。

其函数原型为:

pyrUp(src[, dst[, dstsize[, borderType]]]) -> dst

  • src参数表示输入图像。

  • dst参数表示输出图像,它与src类型、大小相同。

  • dstsize参数表示降采样之后的目标图像的大小。在默认的情况下,这个尺寸大小是按照 Size(src.cols*2, (src.rows*2) 来计算的。如果你自己要指定大小,那么一定要满足下面的条件:

  • |dstsize.width - src.cols * 2| ≤ (dstsize.width mod 2);  //如果width是偶数,那么必须dstsize.width是src.cols的2倍

  • |dstsize.height - src.rows * 2| ≤ (dstsize.height mod 2);

  • borderType参数表示表示图像边界的处理方式。

# encoding: utf-8import cv2
import matplotlib.pyplot as plt
import numpy as npdef show_img(name="test",img=None):plt.figure()plt.imshow(img)plt.title(name)plt.show()if __name__ == '__main__':path = r"lena.jpg"img = cv2.imread(path)gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)#向上采样,图片每一次采样,图片放大4倍,即横纵都放大 2 倍pyr_up_1 = cv2.pyrUp(img)pyr_up_2 = cv2.pyrUp(pyr_up_1)pyr_up_3 = cv2.pyrUp(pyr_up_2)show_img(img=pyr_up_3)print("img shape = {}\npyr_up_1 shape = {}\npyr_up_2 shape = {}\npyr_up_3 shape = {} ".format(img.shape, pyr_up_1.shape,pyr_up_2.shape, pyr_up_3.shape))

3、取样的可逆性测试

# encoding: utf-8"""
@author: sunxianpeng
@file: pyramid.py
@time: 2019/11/20 16:57
"""import cv2
import matplotlib.pyplot as plt
import numpy as npdef show_img(name="test",img=None):plt.figure()plt.imshow(img)plt.title(name)plt.show()if __name__ == '__main__':path = r"lena.jpg"img = cv2.imread(path)gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)# 1# 向下采样,图片每一次采样,图片缩小 1/4,即横纵都缩小 1/2#向上采样,图片每一次采样,图片放大4倍,即横纵都放大 2 倍# 第一次 先向上取样,再向下采样pyr_down_1 = cv2.pyrDown(img)pyr_up_1 = cv2.pyrUp(pyr_down_1)# 第二次 先向上取样,再向下采样pyr_down_2 = cv2.pyrDown(pyr_up_1)pyr_up_2 = cv2.pyrUp(pyr_down_2)# 第三次 先向上取样,再向下采样pyr_down_3 = cv2.pyrDown(pyr_up_2)pyr_up_3 = cv2.pyrUp(pyr_down_3)# 查看两幅图的像素差异diff =  pyr_up_3 - imgshow_img(img=diff)show_img(img=pyr_up_3)# print("img shape = {}\npyrDown_1 shape = {}\npyrDown_2 shape = {}\npyrDown_3 shape = {} "#       .format(img.shape, pyr_down_1.shape,pyr_down_2.shape, pyr_down_3.shape))print("img shape = {}\npyr_up_1 shape = {}\npyr_up_2 shape = {}\npyr_up_3 shape = {} ".format(img.shape, pyr_up_1.shape,pyr_up_2.shape, pyr_up_3.shape))

二、拉普拉斯金字塔

使用拉普拉斯金字塔时,图像大小必须是2^n x 2*m

# encoding: utf-8
import cv2
import matplotlib.pyplot as plt
import numpy as npdef show_img(name="test",img=None):plt.figure()plt.imshow(img)plt.title(name)plt.show()if __name__ == '__main__':path = r"lena.jpg"img = cv2.imread(path)gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)# 求 第一层 拉普拉斯金字塔pyr_down_1 = cv2.pyrDown(img)pyr_up_1 = cv2.pyrUp(pyr_down_1)lap_pyr_1 = img - pyr_up_1#求 第二层 拉普拉斯金字塔pyr_down_2 = cv2.pyrDown(pyr_down_1)pyr_up_2 = cv2.pyrUp(pyr_down_2)lap_pyr_2 = pyr_down_1 - pyr_up_2print("original img shape = {}\nlaplacian pyr_1 shape = {}\nlaplacian pyr_2 shape = {}".format(img.shape,lap_pyr_1.shape,lap_pyr_2.shape))

八、图像金字塔(高斯金字塔、拉普拉斯金字塔)相关推荐

  1. 高斯金字塔和拉普拉斯金字塔实现图像融合

    相关笔记 高斯金字塔: repeat{ 1.对图像进行高斯滤波(平滑化): 2.抛除偶数行和列,依次缩小图片尺寸. // 每进行一轮循环,得到一层金字塔,每层金字塔图像大小都是上一层的一半. // 该 ...

  2. 原理 拉普拉斯金字塔_图像金字塔(高斯金字塔、拉普拉斯金字塔)

    1.图像金字塔 图像金字塔是图像中多尺度表达的一种,最主要用于图像的分割,是一种以多分辨率来解释图像的有效但概念简单的结构. 图像金字塔最初用于机器视觉和图像压缩,一幅图像的金字塔是一系列以金字塔形状 ...

  3. 高斯拉普拉斯 java_基于能量匹配的高斯金字塔与拉普拉斯金字塔图像融合

    利用拉普拉斯对高频信息的保留,重建出原始图像 操作过程如下 对于两张图像 可以看到两张同样的图片一个脸部模糊一个除了脸其他地方模糊,现在我们需要通过局部能量匹配的融合方法对图像进行增强,即基于能量特征 ...

  4. 图像金字塔、高斯金字塔、拉普拉斯金字塔是怎么回事?附利用拉普拉斯金字塔和高斯金字塔重构原图的Python-OpenCV代码

    图像金字塔是通过多个分辨率表示图像的一种有效且简单的结构. 一个图像金字塔是一系列以金字塔形状排列的分辨率逐步降低的图像.图像金字塔的底部是待处理图像的高分辨率表示,而顶部是低分辨率表示. 图像金字塔 ...

  5. OpenCV中的图像金字塔(高斯金字塔、拉普拉斯金字塔)

    最近在看关于数字图像的知识点,目前在图像金字塔部分,实在是懒得用手作笔记了,就以其中比较出名的"高斯金字塔"和"拉普拉斯金字塔"为例,基于OpenCV的源代码作 ...

  6. 图像金字塔(高斯与拉普拉斯)

    目录 一.图像金字塔的作用 1.图像缩放 2.图像分割 二.采样 1.下采样pyrDown() 2.上采样pyrUp() 三.高斯金字塔 1.高斯金字塔过程 2.构建图像的高斯金字塔 四.拉普拉斯金字 ...

  7. OpenCV图像处理学习十三,图像金字塔——高斯金字塔和拉普拉斯金字塔

    一.图像金字塔概念 我们在图像处理中常常会调整图像大小,最常见的就是放大(zoom in)和缩小(zoom out),尽管几何变换也可以实现图像放大和缩小,但是这里我们介绍图像金字塔 . 一个图像金字 ...

  8. 【图像融合】基于matlab GUI高斯金字塔+拉普拉斯金字塔彩色图像融合【含Matlab源码 1506期】

    一.区域分割图像融合简介 图像的分解 对源图像进行融合时,首先对图像进行分解,利用拉普拉斯金字塔分解,先对图像进行高斯金字塔分解,然后再进行拉普拉斯金字塔分解. 1 高斯金字塔分解 记源图像为G0,G ...

  9. 15. 图像金字塔-高斯金字塔、拉普拉斯金字塔、DOG金字塔

    1.  什么是图像金字塔 图像金字塔是图像处理和计算机视觉中常用到的概念,常常用于多尺度处理领域(multiscale processing),尤其早年的图像匹配.识别.图像分割等算法中都用到了图像金 ...

  10. 【图像融合】拉普拉斯金字塔融合

    拉普拉斯金字塔   在高斯金字塔的运算过程中,图像经过卷积和下采样操作会丢失部分高频细节信息.为描述这些高频信息,人们定义了拉普拉斯金字塔(Laplacian Pyramid, LP).用高斯金字塔的 ...

最新文章

  1. 10万视频,所有面部图像均获授权,Facebook创建大规模Deepfake数据集
  2. C#静态变量和非静态变量的区别
  3. mysql删除不存在行数据报错_MySQL学习笔记11复制错误处理(二)删除不存在的行的问题...
  4. Batch Normalization原文详细解读
  5. 奥巴马经济顾问:哪怕丢了“饭碗”,也必须加大投资AI!
  6. 计算机函数select,请问关于select函数的操作程序?
  7. 方法调用中的别名问题
  8. Jmeter启动报错解决方案
  9. vb.net 组合快捷键如何设置_你不知道的PPT快捷键
  10. 数据分析学习笔记——Pandas库思维导图
  11. OpenQA.Selenium.Chrome Action滑动操作
  12. 蓝桥杯-明码 bitset初识
  13. python大数据和java大数据的区别-Java、Python和大数据,哪个发展前景最好?
  14. Towards End-to-End Prosody Transfer for Expressive Speech Synthesis with Tacotron
  15. 【附源码】计算机毕业设计java在线答题系统设计与实现
  16. GP6创建tablespace 和GP4的差别
  17. [视觉概述] 机器视觉应用方向、项目流程及学习思路总结
  18. ROS:AUSU Xtion Pro Live OPENNI2
  19. java early eof_idea克隆项目,git clone出现early EOF问题的解决方案
  20. python循环打印A-Z

热门文章

  1. 人物简介——奥古斯塔·德摩根
  2. 高薪利器:四大热门云计算认证推荐
  3. 怎样用计算机做ppt,电脑怎么做ppt(教你几个小技巧做出高大上的ppt)
  4. python中文占几个字节_中文在python中占几个字节
  5. 如何使用 VNC 远程访问树莓派
  6. 七升七降调号_巧识五线谱08:如何记住七个“降号调”的调号与调的对应关系?...
  7. 树莓派4B安装WPS解决字体缺失问题
  8. 正交设计 python算法_正交设计 - SegmentFault 思否
  9. MFC中资源视图中对话框大小和实际像素尺寸显示问题
  10. linux xunsou_Xunsearch安装和使用