高斯金字塔和拉普拉斯金字塔【1】在图像相关领域应用广泛,尤其是图像融合和图像分割方面。本文从理论和opencv实现两个方面对两种金字塔进行了介绍,并给出了二者的视觉效果。

1、高斯金字塔

在计算机视觉与图像处理相关任务中,经常需要使用同一张图的不同尺寸的子图,我们可以使用高斯金字塔来获取这些子图。高斯金字塔是通过对一张图逐级下采样获得的,如下图所示:

上图中最下层是原始的图像,越靠上的层图像尺寸越小,这一组图像就被称为高斯金字塔(在某些资料中,下采样之前需要首先进行高斯滤波,本文为了简化过程省略了这一步骤)。假设G0表示原始图像,Gi表示第i次下采样得到的图像,那么高斯金字塔的计算过程可以表示如下:

其中Down表示下采样函数,下采样可以通过抛去图像中的偶数行和偶数列来实现,这样图像长宽各减少二分之一,面积减少四分之一。opencv提供了pyrDown()函数用于下采样,代码如下:

def gaussian(ori_image, down_times=5):

# 1:添加第一个图像为原始图像

temp_gau = ori_image.copy()

gaussian_pyramid = [temp_gau]

for i in range(down_times):

# 2:连续存储5次下采样,这样高斯金字塔就有6层

temp_gau = cv2.pyrDown(temp_gau)

gaussian_pyramid.append(temp_gau)

return gaussian_pyramid

进行5次下采样可以获得下面得6级高斯金字塔(第1级为原始高分辨率图像):

可以看出,随着下采样的进行,图像的分辨率不断降低,视觉效果也越来越模糊。

2、拉普拉斯金字塔

拉普拉斯金字塔可以认为是残差金字塔,用来存储下采样后图片与原始图片的差异。我们知道,如果高斯金字塔中任意一张图Gi(比如G0为最初的高分辨率图像)先进行下采样得到图Down(Gi),再进行上采样得到图Up(Down(Gi)),得到的Up(Down(Gi))与Gi是存在差异的,因为下采样过程丢失的信息不能通过上采样来完全恢复,也就是说下采样是不可逆的。下面展示了一张图先进行下采样,再进行上采样的过程:

可以看出,原始图片下采样后得到的小尺寸图片虽然保留了视觉效果,但是将该小尺寸图像再次上采样也不能完整的恢复出原始图像。为了能够从下采样图像Down(Gi)中还原原始图像Gi,我们需要记录再次上采样得到Up(Down(Gi))与原始图片Gi之间的差异,这就是拉普拉斯金字塔的核心思想,下面最右边的图展示了这种差异(为了效果明显我进行了伽马矫正):

拉普拉斯金字塔就是记录高斯金字塔每一级下采样后再上采样与下采样前的差异,目的是为了能够完整的恢复出每一层级的下采样前图像。下面的公式就是前面的差异记录过程:

对于前文得到的高斯金字塔,现在可以构建对应的拉普拉斯金字塔如下(第1级为高斯金字塔中最小尺寸的图,也就是高斯金字塔最后1级;为了下图看起来更明显我进行了伽马矫正):

opencv提供了pyrUp()函数用于上下采样过程,对应代码如下:

def laplacian(gaussian_pyramid, up_times=5):

laplacian_pyramid = [gaussian_pyramid[-1]]

for i in range(up_times, 0, -1):

# i的取值为5,4,3,2,1,0也就是拉普拉斯金字塔有6层

temp_pyrUp = cv2.pyrUp(gaussian_pyramid[i])

temp_lap = cv2.subtract(gaussian_pyramid[i-1], temp_pyrUp)

laplacian_pyramid.append(temp_lap)

return laplacian_pyramid

3、总结

高斯金字塔和拉普拉斯金字塔作为获取不同分辨率图像的方法,原理并不复杂,但是自己并没有找到中文论文专门介绍,仅仅找到了拉普拉斯金字塔论文【1】,大部分其它论文都是直接对其进行应用的。所以,如果本文的介绍有误,请帮我指出此错误。

参考文献:

【1】Burt P, Adelson E. The Laplacian pyramid as a compact image code[J]. IEEE Transactions on communications, 1983, 31(4): 532-540.

python金字塔_高斯金字塔与拉普拉斯金字塔的原理与python构建相关推荐

  1. 原理 拉普拉斯金字塔_图像融合:拉普拉斯金字塔融合算法

    继图像拼接的课程设计之后,对这方面依旧十分感兴趣.很巧合的是,数图老师表示刚好手上有这么一个项目,要用到这方面的知识,可以让我去作为毕业设计.虽然距离毕业还远,不过如果能选到一个感兴趣并且有一定深度的 ...

  2. matlab中表示拉普拉斯分布_深度优化局部拉普拉斯金字塔滤波器。

    微信公众号:OpenCV学堂关注获取更多计算机视觉与深度学习知识 觉得文章有用,请戳底部[好看]支持 算法概述 基于局部拉普拉斯金字塔的Edge-aware滤波器是在2011年由Adobe 公司的研究 ...

  3. 如何在mac终端运行python程序_如何在mac上的终端上运行python?

    First, the lesson said to simply type, python, into terminal to start coding in python (I don't know ...

  4. 转行学python后悔_月薪13k的我为什么要转行学Python?

    在职业规划包括人生方向上,选择很重要. 一句很经典的话做总结"方向不对,努力白费". 选择自己感兴趣的工作,全力以赴投入其中,"唯有爱的深,才能做的好" 当你付 ...

  5. java执行python脚本_使用Runtime.getRuntime().exec()在java中调用python脚本

    举例有一个Python脚本叫test.py,现在想要在Java里调用这个脚本.假定这个test.py里面使用了拓展的包,使得pythoninterpreter之类内嵌的编译器无法使用,那么只能采用ja ...

  6. excel python插件_再见 VBA!神器工具统一 Excel 和 Python

    大家好,我是东哥. 经常给大家推荐好用的数据分析工具,也收到了铁子们的各种好评.这次也不例外,我要再推荐一个,而且是个爆款神器. Excel和Jupyter Notebok都是我每天必用的工具,而且两 ...

  7. 刷脸签到python代码_背景提升|“刷脸”时代,如何运用Python实现人脸识别?

    打开手机,不用输入任何密码,通过"刷脸"就可以轻松打开界面; 走进一家餐厅,即便没有手机和钱包,点餐后就能通过"刷脸"完成支付; 去银行取款,不带银行卡.身份证 ...

  8. 刷脸签到python代码_背景提升 | “刷脸”时代,如何运用Python实现人脸识别?

    打开手机,不用输入任何密码,通过"刷脸"就可以轻松打开界面; 走进一家餐厅,即便没有手机和钱包,点餐后就能通过"刷脸"完成支付; 去银行取款,不带银行卡.身份证 ...

  9. python速度_只需一行代码,让你的Python运算速度更加流畅!

    python一直被病垢运行速度太慢,但是实际上python的执行效率并不慢,慢的是python用的解释器Cpython运行效率太差. "一行代码让python的运行速度提高100倍" ...

最新文章

  1. Nat. Ecol. Evol.:不想当化学家的物理学家不是好的生物学家
  2. discuz模板解析注释
  3. 微信小程序客服消息使用指南
  4. python 实现卷积操作
  5. /bin/sh^M:损坏的解释器: No such file or directory
  6. hadoop启动报错:localhost: ssh: Could not resolve hostname localhost
  7. Fiddler抓包使用教程-QuickExec
  8. sparkstreaming直接从kafka消费数据
  9. qq掉线咒语:aidusort.as
  10. 武汉计算机985211大学有哪些,武汉985211大学有哪些 武汉985211大学有什么
  11. 【网络流】 HDU 4309 Seikimatsu Occult Tonneru 状压枚举边
  12. jmeter.bat双击闪退问题
  13. jQuery 学习笔记之十六 评分
  14. plsql怎么导出几十w的数据到csv_Greenplum数据库使用总结(干货满满)初级使用
  15. idefo功能模型图_如何画架构图?
  16. 回忆录——一份曾经面试“网易AI产品经理”的作品
  17. RPA 百年简史 机器人流程自动化知多少
  18. 看看人家那系统设计做的,那叫一个优雅
  19. 【秒杀】一、系统设计要点,从卖病鹅说起
  20. 数据科学家大减价:一小时只收30美元

热门文章

  1. axios 中文文档、使用说明
  2. linux下安装 ping 命令
  3. CentOS7的yum安装mysql
  4. Class is not a root resource. It, or one of its interfaces must be annotated with @Path:
  5. java自定义注解学习笔记
  6. jdbc写入和读取过程
  7. 【uoj#37/bzoj3812】[清华集训2014]主旋律 状压dp+容斥原理
  8. 数据结构与算法 Python语言描述 笔记
  9. 面向对象基础知识整理
  10. PKM(个人知识管理)类软件收集(偶尔更新列表)