【youcans 的 OpenCV 例程200篇】187.由拉普拉斯金字塔还原图像

OpenCV 例程200篇 总目录-202205更新


【youcans 的 OpenCV 例程200篇】187.由拉普拉斯金字塔还原图像


图像金字塔是一系列来源于同一张原始图像、以金字塔形状排列的分辨率逐步降低的图像集合。从底层图像可以看清更多细节,从顶层图像可以看到更多的轮廓特征。通常,上层图像的宽度和高度是相邻的下层图像的 1/2。


6.2 拉普拉斯金字塔(Laplacian pyramid)

在计算高斯金字塔时,不断进行高斯滤波和下采样,丢失了高频信息。为了描述这些高频信息,将通过原图像减去先缩小后放大的图像的一系列差分图像,定义为拉普拉斯金字塔(Laplacian Pyramid)。

用高斯金字塔的每一层图像减去其上一层图像上采样并高斯卷积之后的预测图像(或称复原图像),得到一系列的差值图像,即为拉普拉斯金字塔的分解图像。

在这里插入图片描述

对每一层图像先下采样再上采样后,计算与该图像的残差:
L(i)=G(i)−PyrUp[G(i+1)]L(i) = G(i) - PyrUp[G(i+1)] L(i)=G(i)PyrUp[G(i+1)]

拉普拉斯金字塔可以配合高斯金字塔使用。拉普拉斯金字塔是高斯金字塔的差分图像,保存了高斯金字塔丢失的高频信息,因此可以精确地还原图片信息。从最低分辨率图像上采样,然后逐次加上每个尺度的残差信息,就可以还原到原始的高分辨率图。


例程:1.87 由拉普拉斯金字塔还原图像

    # 1.87:由拉普拉斯金字塔还原图像img = cv2.imread("../images/imgLena.tif", flags=1)gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)pyrD0 = gray.copy()# 图像向下取样,构造高斯金字塔pyrD1 = cv2.pyrDown(pyrD0)pyrD2 = cv2.pyrDown(pyrD1)pyrD3 = cv2.pyrDown(pyrD2)pyrD4 = cv2.pyrDown(pyrD3)print("pyrD:", pyrD0.shape, pyrD1.shape, pyrD2.shape, pyrD3.shape)# # 图像向上取样# pyrU3 = pyrD3.copy()# pyrU2 = cv2.pyrUp(pyrU3)# pyrU1 = cv2.pyrUp(pyrU2)# pyrU0 = cv2.pyrUp(pyrU1)# print("pyrU:", pyrU0.shape, pyrU1.shape, pyrU2.shape, pyrU3.shape)# # 构造拉普拉斯金字塔,高斯金字塔的每一层图像减去其上一层图像的上采样pyrL0 = pyrD0 - cv2.pyrUp(pyrD1)pyrL1 = pyrD1 - cv2.pyrUp(pyrD2)pyrL2 = pyrD2 - cv2.pyrUp(pyrD3)pyrL3 = pyrD3 - cv2.pyrUp(pyrD4)print("pyrL:", pyrL0.shape, pyrL1.shape, pyrL2.shape, pyrL3.shape)# 向上采样恢复高分辨率图像rebuildG3 = pyrL3 + cv2.pyrUp(pyrD4)rebuildG2 = pyrL2 + cv2.pyrUp(rebuildG3)rebuildG1 = pyrL1 + cv2.pyrUp(rebuildG2)rebuildG0 = pyrL0 + cv2.pyrUp(rebuildG1)print("rebuild:", rebuildG0.shape, rebuildG1.shape, rebuildG2.shape, rebuildG3.shape)print("diff of rebuild:", np.mean(abs(rebuildG0-img)))plt.figure(figsize=(10, 9))plt.subplot(341), plt.axis('off'), plt.title("GaussPyramid "+str(pyrD0.shape))plt.imshow(cv2.cvtColor(pyrD0, cv2.COLOR_BGR2RGB))plt.subplot(342), plt.axis('off'), plt.title(str(pyrD1.shape))plt.imshow(cv2.cvtColor(pyrD1, cv2.COLOR_BGR2RGB))plt.subplot(343), plt.axis('off'), plt.title(str(pyrD2.shape))plt.imshow(cv2.cvtColor(pyrD2, cv2.COLOR_BGR2RGB))plt.subplot(344), plt.axis('off'), plt.title(str(pyrD3.shape))plt.imshow(cv2.cvtColor(pyrD3, cv2.COLOR_BGR2RGB))plt.subplot(345), plt.axis('off'), plt.title("LaplacePyramid "+str(pyrL0.shape))plt.imshow(cv2.cvtColor(pyrL0, cv2.COLOR_BGR2RGB))plt.subplot(346), plt.axis('off'), plt.title(str(pyrL1.shape))plt.imshow(cv2.cvtColor(pyrL1, cv2.COLOR_BGR2RGB))plt.subplot(347), plt.axis('off'), plt.title(str(pyrL2.shape))plt.imshow(cv2.cvtColor(pyrL2, cv2.COLOR_BGR2RGB))plt.subplot(348), plt.axis('off'), plt.title(str(pyrL3.shape))plt.imshow(cv2.cvtColor(pyrL3, cv2.COLOR_BGR2RGB))plt.subplot(349), plt.axis('off'), plt.title("LaplaceRebuild "+str(rebuildG0.shape))plt.imshow(cv2.cvtColor(rebuildG0, cv2.COLOR_BGR2RGB))plt.subplot(3,4,10), plt.axis('off'), plt.title(str(rebuildG1.shape))plt.imshow(cv2.cvtColor(rebuildG1, cv2.COLOR_BGR2RGB))plt.subplot(3,4,11), plt.axis('off'), plt.title(str(rebuildG2.shape))plt.imshow(cv2.cvtColor(rebuildG2, cv2.COLOR_BGR2RGB))plt.subplot(3,4,12), plt.axis('off'), plt.title(str(rebuildG3.shape))plt.imshow(cv2.cvtColor(rebuildG3, cv2.COLOR_BGR2RGB))plt.tight_layout()plt.show()

运行结果:
pyrD: (512, 512, 3) (256, 256, 3) (128, 128, 3) (64, 64, 3)
pyrL: (512, 512, 3) (256, 256, 3) (128, 128, 3) (64, 64, 3)
rebuild: (512, 512, 3) (256, 256, 3) (128, 128, 3) (64, 64, 3)
diff of rebuild: 0.0


在这里插入图片描述



(本节完)


版权声明:

OpenCV 例程200篇 总目录-202205更新
youcans@xupt 原创作品,转载必须标注原文链接:(https://blog.csdn.net/youcans/article/details/124866116)

Copyright 2022 youcans, XUPT
Crated:2022-5-18


欢迎关注 『youcans 的 OpenCV 例程 200 篇』 系列,持续更新中
欢迎关注 『youcans 的 OpenCV学习课』 系列,持续更新中

【youcans 的 OpenCV 例程200篇】185.图像金字塔之高斯金字塔
【youcans 的 OpenCV 例程200篇】186.图像金字塔之拉普拉斯金字塔
【youcans 的 OpenCV 例程200篇】187.由拉普拉斯金字塔还原图像
【youcans 的 OpenCV 例程200篇】188.基于拉普拉斯金字塔的图像融合
【youcans 的 OpenCV 例程200篇】189.基于掩模的拉普拉斯金字塔图像融合
【youcans 的 OpenCV 例程200篇】190.基于图像分割的图像融合
【youcans 的 OpenCV 例程200篇】191.基于图像分割的金字塔图像融合
【youcans 的 OpenCV 例程200篇】192.Gabor 滤波器组的形状
【youcans 的 OpenCV 例程200篇】193.基于Gabor 滤波器的特征提取
更多内容,请见:
【OpenCV 例程200篇 总目录-202206更新】

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

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

相关文章

整型和浮点型之间的转化

在Java中,我们如何将整型转化为浮点型,或者我们如何将浮点型转化成整型的呢? 结果演示 代码演示 package com.ten;public class Zidongzh {public static void main(String[] args) {double a 127.0;float b(float)a;float c(float)b;int…

【youcans 的 OpenCV 例程200篇】188.基于拉普拉斯金字塔的图像融合

OpenCV 例程200篇 总目录-202205更新 【youcans 的 OpenCV 例程200篇】188.基于拉普拉斯金字塔的图像融合 图像金字塔是一系列来源于同一张原始图像、以金字塔形状排列的分辨率逐步降低的图像集合。从底层图像可以看清更多细节,从顶层图像可以看到更多的轮廓特征。通…

【youcans 的 OpenCV 例程200篇】189.基于掩模的拉普拉斯金字塔图像融合

OpenCV 例程200篇 总目录-202205更新 【youcans 的 OpenCV 例程200篇】189.基于掩模的拉普拉斯金字塔图像融合 图像金字塔是一系列来源于同一张原始图像、以金字塔形状排列的分辨率逐步降低的图像集合。从底层图像可以看清更多细节,从顶层图像可以看到更多的轮廓特征…

中奖程序

使用Java做了一个中奖程序,程序中已经设置中奖的号码,根据文本提示会让你输入四个数字,当你输入你的四个数字之后程序会给出你是否中奖的结果显示。 结果演示 代码演示 package com.ten; import java.util.Scanner; public class ZhongJi…

【youcans 的 OpenCV 例程200篇】190.基于图像分割的图像融合

OpenCV 例程200篇 总目录-202205更新 【youcans 的 OpenCV 例程200篇】190.基于图像分割的图像融合 两张图像直接进行加法运算后图像的颜色会改变,通过加权加法实现图像混合后图像的透明度会改变,都不能实现图像的叠加。 实现图像的叠加,需要…

【youcans 的 OpenCV 例程200篇】191.基于图像分割的金字塔图像融合

OpenCV 例程200篇 总目录-202205更新 【youcans 的 OpenCV 例程200篇】191.基于图像分割的金字塔图像融合 拉普拉斯金字塔将源图像分解到不同的频带,越高频的图像信息越到上层。在相同显示尺寸下比较不同分辨率的拉普拉斯图像,可以发现不同尺度下关注的细…

【youcans 的 OpenCV 例程200篇】192.Gabor 滤波器组的形状

OpenCV 例程200篇 总目录-202205更新 【youcans 的 OpenCV 例程200篇】192.Gabor 滤波器组的形状 6.5 Gabor 滤波器 Gabor 变换是一种加窗短时傅里叶变换,以高斯函数作为短时傅里叶变换的窗函数,因此可以在频域不同尺度、不同方向上提取特征。 Gabor 函…

【youcans 的 OpenCV 例程200篇】193.基于Gabor 滤波器的特征提取

OpenCV 例程200篇 总目录-202205更新 【youcans 的 OpenCV 例程200篇】193.基于Gabor 滤波器的特征提取 6.5 Gabor 滤波器 Gabor 变换是一种加窗短时傅里叶变换,以高斯函数作为短时傅里叶变换的窗函数,因此可以在频域不同尺度、不同方向上提取特征。 G…

MyEclipse生成常用方法

我们使用Eclipse工具开发的时候,有很多的代码我们是不用写的,我们可以直接生成我们想要的方法,那么怎么生成我们经常使用的方法呢??? 首先打开我们的MyEclipse工具 到代码编辑页面,在已经定义好…

【youcans 的 OpenCV 例程200篇】194.寻找图像轮廓(cv.findContours)

OpenCV 例程200篇 总目录-202205更新 【youcans 的 OpenCV 例程200篇】194.寻找图像轮廓(cv.findContours) 1. 轮廓 轮廓是一系列相连的像素点组成的曲线,代表了物体的基本外形。轮廓常用于形状分析和物体的检测和识别。 边缘检测根据灰度的…

java线程池执行器_Java线程池ThreadPoolExecutor的使用

Java线程池ThreadPoolExecutor的使用ThreadPoolExecutor就是我们用来实现线程的一个执行器,它实现了Excutor和ExecutorService接口。Excutor接口只定义了一个方法就是execute用来执行任务。ExecutorService继承于Excutor并添加了一些其他的执行任务的方法和管理线程…

密码强度显示

使用HTML,CSS及JS实现注册功能中密码强度的显示&#xff0c;根据输入的密码判断并显示用户输入密码的强度等级是高还是低等。 效果演示 代码演示 html内容 <div class"container"><div class"userName-wrapper"><label for"userN…

【youcans 的 OpenCV 例程200篇】195.绘制图像轮廓(cv.drawContours)

OpenCV 例程200篇 总目录-202205更新 【youcans 的 OpenCV 例程200篇】195.绘制图像轮廓&#xff08;cv.drawContours&#xff09; 1. 轮廓 轮廓是一系列相连的像素点组成的曲线&#xff0c;代表了物体的基本外形。轮廓常用于形状分析和物体的检测和识别。 边缘检测根据灰度的…

【youcans 的 OpenCV 例程200篇】197.轮廓的基本特征

OpenCV 例程200篇 总目录-202205更新 文章目录【youcans 的 OpenCV 例程200篇】197.轮廓的基本特征2. 轮廓的特征描述2.2 轮廓的面积、周长、质心和近似多边形2.2.1 轮廓的面积2.2.2 轮廓的周长2.2.3 轮廓的质心2.2.4 轮廓的近似2.2.5 轮廓的凸包&#xff08;凸壳&#xff09;例…

Idea 项目导入

我们在刚开始使用新的开发工具IDEA的时候会遇到我们想要导入一个外部项目却不知从何下手&#xff0c;下面我就教给大家如何使用IDEA导入一个外部的项目。 Idea 导入 外部项目 1.点击 file — new 2.打开路径地址&#xff0c;选择需要导入的项目 3.选择创建—next 4.默认—…

【youcans 的 OpenCV 例程200篇】198.基于不变矩的形状相似性检测

OpenCV 例程200篇 总目录-202206更新 【youcans 的 OpenCV 例程200篇】198.基于不变矩的形状相似性检测 3. 基于不变矩检测的图像识别 形状匹配也称为形状相似度检测&#xff0c;用于比较两个形状或两个轮廓。 函数 cv2.matchShapes() 基于 Hu 不变矩检测两个形状之间的相似度…

spring boot 如何修改默认端口号和context path

创建了SpringBoot项目之后进行运行&#xff0c;当我们需要使用游览器进行访问的时候要输入端口号&#xff0c;那麽我们如何来修改这个端口号呢&#xff1f;&#xff1f;&#xff1f; 1.在src/main/resources目录下新建文件application.properties&#xff0c;并进行配置,来重写…

【youcans 的 OpenCV 例程200篇】199.轮廓的外接边界框

OpenCV 例程200篇 总目录-202206更新 【youcans 的 OpenCV 例程200篇】199.轮廓的外接边界框 文章目录【youcans 的 OpenCV 例程200篇】199.轮廓的外接边界框2. 轮廓的特征描述2.3 轮廓的外接边界框2.3.1 轮廓的垂直矩形边界框2.3.2 轮廓的最小矩形边界框2.3.3 轮廓的最小外接圆…

单级联动

想要实现联动的效果首先我们要知道什么是单机联动&#xff0c;所谓的单级联动就是点击输入框的时候&#xff0c;下面会出现多个单级联动的列表供你选择自己所要选择的数据。 我们使用html写主题内容&#xff0c;使用CSS添加样式&#xff0c;使用Jquery实现联动等相关的事件和效…

【youcans 的 OpenCV 例程200篇】200.轮廓的基本属性

OpenCV 例程200篇 总目录-202206更新 文章目录【youcans 的 OpenCV 例程200篇】200.轮廓的基本属性2.4 轮廓的基本属性2.4.1 轮廓的宽高比&#xff08;Aspect Ratio&#xff09;2.4.2 轮廓的面积比&#xff08;Extent&#xff09;2.4.3 轮廓的坚实度&#xff08;Solidity&#…