python金字塔_高斯金字塔与拉普拉斯金字塔的原理与python构建

高斯金字塔和拉普拉斯金字塔【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.

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/457787.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

mongodb在32位机的连接

Windows 32bit版本安装Mongodb时,会发生的下面问题 2016-05-09T00:09:45.1240800 I STORAGE [initandlisten] exception in initAndListen: 28663 Cannot start server. The default storage engine wiredTiger is not available with this build of mongod. Pleas…

oracle sql 语句 start with ...... connect by prior .......

这个查询条件可以理解为递归查询 select up_unit_code from pmctl_nuit START WITH unit_code 1188899Q CONNECT BY PRIOR up_unit_code unit_code 语句理解: 首先根据条件 START WITH unit_code 查询到 up_unit_code 显示 然后 CONNECT BY P…

cnetos7安装zabbix3.0.3安装手册

亲测可用呀。学习好几天 最好用的文档详见附件http://down.51cto.com/data/2251232转载于:https://blog.51cto.com/11802086/1863554

python文件夹目录_Python 操作文件、文件夹、目录大全

#-*- coding: utf-8 -*-importosimportshutil#一. 路径操作:判断、获取和删除#1. 得到当前工作目录,即当前Python脚本工作的目录路径: os.getcwd()#print: currentpath: f:\LearnPythoncurrentpath os.getcwd()print "currentpath:",currentpa…

LightOJ 1370 Bi-shoe and Phi-shoe(欧拉函数)

题意:题目给出一个欧拉函数值F(X),让我们求>这个函数值的最小数N,使得F(N) > F(X); 分析:这个题目有两种做法。第一种,暴力打出欧拉函数表,然后将它调整…

15-CSS基础-浮动流

浮动 网页的布局方式 什么是网页的布局方式? 网页的布局方式其实就是指浏览器是如何对网页中的元素进行排版的 标准流(文档流/普通流)排版方式 其实浏览器默认的排版方式就是标准流的排版方式在CSS中将元素分为三类, 分别是块级元素/行内元素/行内块级元素在标准流中有两种排版…

oracle sql 排序

当有多个排序列时 并且每列都是降序排序 需要在每个列名后 写desc

迁移DirectX11到VS2015 Win10

书本中的例子迁移:Introduction to 3D Game Programming with Direct3D 11.0 颜色:DirectXColors.h and the DirectX::Colors namespace. 效果:Effect framework编译后只需两个文件,d3dx11effect.h及生成的lib文件。 纹理&#xf…

python监控网页更新_python监控网页更新

{"moduleinfo":{"card_count":[{"count_phone":1,"count":1}],"search_count":[{"count_phone":4,"count":4}]},"card":[{"des":"阿里技术人对外发布原创技术内容的最大平台&…

git-- 使用

git 使用时两个人冲突: Resolve conflicts

ansible 配置文件

配置文件 两个核心文件:ansible.cfg和hosts文件,默认都存放在/etc/ansible目录下。 ansible.cfg:主要设置一些ansible初始化的信息,比如日志存放路径、模块、插件等配置信息 hosts:机器清单,进行分组管理 1.ansible.cf…

高内聚低耦合通俗理解_抱歉,请不要把“业务逻辑层”理解为“业务中台”

在IAS2019中台架构峰会上,我曾与一位年轻帅气的技术小伙来了一番有趣的对话。因为和朋友有约,所以我在现场互动结束之后,就急匆匆地跟其他嘉宾打了声招呼,抱着笔记本冲出了会场。但没想到刚到电梯口,却被一位帅小伙迎面…

ofstream的使用方法--超级精细。C++文件写入、读出函数(转)

ofstream的使用方法ofstream是从内存到硬盘,ifstream是从硬盘到内存,其实所谓的流缓冲就是内存空间; 在C中,有一个stream这个类,所有的I/O都以这个“流”类为基础的,包括我们要认识的文件I/O,stream这个类…

org-mode入门教程

org-mode 入门教程By Z.H. Fu切问录 www.fuzihao.orgorg-mode 入门教程 org-mode是Emacs提供的一个强大的编辑模式,可以用于做会议笔记以及制作各种待办事项(GDT)。其语法类似于Markdown但是提供了比Markdown更多的操作,再加上Ema…

ansible 配置文件优先级

优先级如下: 1.首先找执行ansible命令的当前目录中,是否有 ansible.cfg文件 ./ansible.cfg 2.如果找不到,再 找 当前用户的家目录下是否有 .ansible.cfg ~/.ansible.cfg 3.如果还找不到,就找 /etc/ansible/ansible.cfg /etc/ansible/ansible.…

如何对web.config进行加密和解密

http://blog.csdn.net/jf_jifei/article/details/6527390 在WEB网站开发过程中,如果我们将数据库连接字符串封装到.DLL文件中,将会给数据库和程序的迁移带来麻烦,因为万一服务器地址或者数据库发生变更,那么我们就不得不修改源程序…

java 爬虫_Java原生代码实现爬虫(爬取小说)

Java也能做爬虫。现在提到爬虫人第一个想到的就是python,其实使用Java编写爬虫也是很好的选择,Java成熟的爬虫框架很多,下面给大家展示一个使用Java基础语言编写的爬取小说的案例:实现功能:爬取目标网站全本小说代码编…

JS window对象 Location对象 location用于获取或设置窗体的URL,并且可以用于解析URL。 语法: location.[属性|方法]...

Location对象 location用于获取或设置窗体的URL&#xff0c;并且可以用于解析URL。 语法: location.[属性|方法] location对象属性图示: location 对象属性&#xff1a; location 对象方法: 任务 在右边编辑器script标签内&#xff0c;获取当前显示文档的URL,并输出。 <!DOC…

ansible inventory 主机清单配置

文章目录 环境介绍 ansible ssh配置 操作测试/etc/hosts 配置Inventory文件 主机与组主机变量、组变量把一个组变成另一个组的子成员变量太多了&#xff0c;不好管理怎么办&#xff1f;来&#xff0c;分文件定义主机变量和组变量 操作环境介绍 为了练习方便&#xff0c;本次使…

python(26)查看文件的大小

有时候&#xff0c;在写文件的时候需要判断文件的大小&#xff0c;或者删除空的文件 import os from os.path import join, getsizedef getdirsize(dir):size 0Lfor root, dirs, files in os.walk(dir):print filesfor name in files:print nameprint join(root,name) #输出文…