目录

1 图像金字塔简介

2 向下取样——pyrDown()

2.1 基础理论

2.2 代码示例

3 向上取样——pyrUp()

3.1 基础理论

3.2 代码示例

4 Laplacian 金字塔

4.1 基础理论

4.2 代码示例

参考资料


1 图像金字塔简介

以多个分辨率来表示图像的一种有效且概念简单的结构是图像金字塔图像金字塔最初用于机器视觉和图像压缩,一个图像金字是一系列以金字塔形状排列的、分辨率逐步降低的图像集合。

如图下图所示,它包括了四层图像,将这一层一层的图像比喻成金字塔。图像金字塔可以通过梯次向下采样获得,直到达到某个终止条件才停止采样,在向下采样中,层级越高,则图像越小,分辨率越低。

生成图像金字塔主要包括两种方式:向下取样向上取样

如下图所示:

向下取样:将图像从G0转换为G1、G2、G3,图像分辨率不断降低的过程;

向上取样:将图像从G3转换为G2、G1、G0,图像分辨率不断增大的过程。

下面将依次介绍向下取样 和 向上取样


2 向下取样——pyrDown()

2.1 基础理论

在图像向下取样中,一般分两步:

(1)对图像Gi进行高斯卷积核(高斯滤波);

(2)删除所有的偶数行和列。

其中,高斯核卷积运算(高斯滤波)就是对整幅图像进行加权平均的过程,每一个像素点的值,都由其本身和邻域内的其他像素值(权重不同)经过加权平均后得到。常见的 33 和 55 高斯核如下:

关于高斯滤波的详细过程,可以参见博客:图像平滑 (均值滤波、中值滤波和高斯滤波)

如下图所示,向下取样后,原始图像  具有 MN 个像素,进行向下取样之后,所得到的图像 +1 具有 M/2  N/2 个像素,只有原图的四分之一。通过对输入的原始图像不停迭代以上步骤就会得到整个金字塔。

:由于每次向下取样会删除偶数行和列,所以它会不停地丢失图像的信息。

下面是向下取样的图像,可以看到图像不断缩小。

2.2 代码示例

在OpenCV中,向下取样使用的函数为pyrDown(),其函数用法如下所示:

dst = pyrDown(src[, dst[, dstsize[, borderType]]])

其中,参数:

src 表示输入图像;

dst 表示输出图像,和输入图像具有一样的尺寸和类型;

dstsize 表示输出图像的大小,默认值为Size();

borderType 表示像素外推方法,详见cv::bordertypes 。

(1)一次向下采样

代码如下所示:

# -*- coding: utf-8 -*-
import cv2
import numpy as np
import matplotlib.pyplot as plt#读取原始图像
img = cv2.imread('zxp.jpg')#图像向下取样
r = cv2.pyrDown(img)#显示图像
cv2.imshow('original', img)
cv2.imshow('PyrDown', r)cv2.waitKey()
cv2.destroyAllWindows()

运行结果如下图所示:

(2)多次向下采样

代码如下所示:

# -*- coding: utf-8 -*-
import cv2
import numpy as np
import matplotlib.pyplot as plt#读取原始图像
img = cv2.imread('zxp.jpg')#图像向下取样
r1 = cv2.pyrDown(img)
r2 = cv2.pyrDown(r1)
r3 = cv2.pyrDown(r2)#显示图像
cv2.imshow('original', img)
cv2.imshow('PyrDown1', r1)
cv2.imshow('PyrDown2', r2)
cv2.imshow('PyrDown3', r3)cv2.waitKey()
cv2.destroyAllWindows()

运行结果如下图所示:


3 向上取样——pyrUp()

3.1 基础理论

在图像向上取样是由小图像不断放图像的过程。它将图像在每个方向上扩大为原图像的2倍,新增的行和列均用0来填充,并使用与“向下取样”相同的卷积核乘以4,再与放大后的图像进行卷积运算,以获得“新增像素”的新值。

如图下图所示,它在原始像素45、123、89、149之间各新增了一行和一列值为0的像素。

如下图所示,为图像的向上采样和向下采样的例子。

注:向上取样和向下取样无法互逆的。

3.2 代码示例

在OpenCV中,向上取样使用 pyrUp() 函数,其函数用法如下所示:

dst = pyrUp(src[, dst[, dstsize[, borderType]]])

其中,参数:

src 表示输入图像;

dst 表示输出图像,和输入图像具有一样的尺寸和类型;

dstsize 表示输出图像的大小,默认值为Size();

borderType 表示像素外推方法,详见cv::bordertypes 。

代码如下所示:

# -*- coding: utf-8 -*-
import cv2
import numpy as np
import matplotlib.pyplot as plt#读取原始图像
img = cv2.imread('zxp_PyrDown2.jpg')#图像向上取样
r = cv2.pyrUp(img)#显示图像
cv2.imshow('original', img)
cv2.imshow('PyrUp', r)
cv2.waitKey()
cv2.destroyAllWindows()

运行结果如下图所示:


4 Laplacian 金字塔

4.1 基础理论

前面提到的均是高斯金字塔(使用高斯核),下面介绍拉普拉斯(Laplacian) 金字塔拉普拉斯(Laplacian) 金字塔是在高斯金字塔的基础上新的金字塔。

如下图所示,拉普拉斯(Laplacian) 金字塔的表达式:

拉普拉斯每一层表示如下图所示:

下图高斯金字塔和拉普拉斯金字塔 交叉使用得到不同的图像。

4.2 代码示例

(1) 拉普拉斯第0层

代码如下所示:

# -*- coding: utf-8 -*-
import cv2
import numpy as np
import matplotlib.pyplot as plt#读取原始图像
img = cv2.imread('lena.tiff')#图像向下取样
r1 = cv2.pyrDown(img)#图像向上取样
r2 = cv2.pyrUp(r1)# 拉普拉斯第0层
LapPyr0 =img-r2#显示图像
cv2.imshow('original', img)
cv2.imshow('LapPyr', LapPyr0)
cv2.waitKey()
cv2.destroyAllWindows()

运行结果如下图所示:

(2) 拉普拉斯第0层和拉普拉斯第1层

代码如下所示:

# -*- coding: utf-8 -*-
import cv2
import numpy as np
import matplotlib.pyplot as plt#读取原始图像
img = cv2.imread('lena.tiff')#图像向下取样
r1 = cv2.pyrDown(img)#图像向上取样
r2 = cv2.pyrUp(r1)# 拉普拉斯第0层
LapPyr0 =img-r2#图像向下取样
r3 = cv2.pyrDown(r1)#图像向上取样
r4 = cv2.pyrUp(r3)# 拉普拉斯第1层
LapPyr1 =r1-r4#显示图像
cv2.imshow('original', img)
cv2.imshow('LapPyr0', LapPyr0)
cv2.imshow('LapPyr1', LapPyr1)
cv2.waitKey()
cv2.destroyAllWindows()

运行结果如下图所示:


参考资料

[1] https://blog.csdn.net/Eastmount/article/details/89341077

[2] Python+OpenCV图像处理

[3] 冈萨雷斯. 数字图像处理(第三版)

数字图像处理(21): 图像金字塔(高斯金字塔 与 拉普拉斯金字塔)相关推荐

  1. 数字图像处理:图像金字塔

    转载请标明出处:数字图像处理:图像金字塔_数字图像处理opencv_新浪博客 (一)概念 以多个分辨率来表示图像的一种有效且概念简单的结构是图像金字塔.图像金字塔最初用于机器视觉和图像压缩,一个图像金 ...

  2. 【数字图像处理】图像直方图均衡化、空域滤波(均值滤波、中值滤波)、图像锐化(Laplace算子)、图像傅里叶变换实验

    图像直方图均衡化.空域滤波.图像锐化.图像傅里叶变换 一.图像直方图均衡化 二.图像空域滤波 1.均值滤波(滤波次数n→3) 2.中值滤波(滤波次数n→3) 3.图像锐化(Laplace算子) 三.图 ...

  3. 图像融合(三)-- 拉普拉斯金字塔

    原文:http://www.cnblogs.com/silence-hust/p/4193208.html 2.拉普拉斯金字塔融合 图像金字塔方法的原理是:将参加融合的的每幅图像分解为多尺度的金字 ...

  4. 数字图像处理之图像基础

    最近在学数字图像处理,图像基础包括以下部分: 导入库 import numpy as np import matplotlib.pyplot as plt import cv2 as cv 图片展示函 ...

  5. 数字图像处理:图像的频域

    数字图像处理:图像的频域 一.图像高频信号和低频信号的理解 1.1 图像中的低频信号和高频信号也叫做低频分量和高频分量. 1)空间频率指的是图像中灰度值相对它的邻居点变化方式.如果一副图像中灰度从一边 ...

  6. 数字图像处理 - Ch2 图像取样与量化

    数字图像处理 Ch2 图像取样与量化 图像取样与量化 概念 数字图像表示 线性索引与坐标索引 空间分辨率 & 灰度分辨率 图像内插 1. 最近邻内插 2. 双线性内插 3. 双三次内插 其他方 ...

  7. 数字图像处理--基本图像操作

    数字图像处理–基本图像操作 1 主要内容 (1)搭建能运行图像算法程序的平台: (2)独立完成matlab矩阵基本操作,如矩阵信息的提取包括获取矩阵大小.矩阵维数.矩阵元素个数.向量长度和矩阵乘法等操 ...

  8. 数字图像处理:图像的灰度变换(Matlab实现)

    数字图像处理:图像的灰度变换(Matlab实现) (1)线性变换: 通过建立灰度映射来调整源图像的灰度. k>1增强图像的对比度:k=1调节图像亮度,通过改变d值达到调节亮度目的:0 i = i ...

  9. 数字图像处理(18): 图像灰度变换——线性灰度变换 和 非线性灰度变换(对数变换 与 伽马变换)

    目录 1 灰度变换简介 2 线性灰度变换­-图像反转 3 非线性灰度变换 3.1 对数变换 3.2 伽马变换 参考资料 1 灰度变换简介 灰度变换是图像增强的一种重要手段,用于改善图像显示效果,属于空 ...

  10. 数字图像处理之图像锐化算法

    图像锐化 图像锐化,主要用于增强图像的边缘,及灰度跳变部分.因为图像中边缘及急剧变化部分与图像的高频分量有关,所以当利用高通滤波器衰减图像信号中的低频分量时就会相对的强调其高频分量,从而加强图像中的边 ...

最新文章

  1. 『ACM-算法-二分法』在单调递增序列a中查找小于等于x的数中最大的一个(即x或x的前驱)
  2. img 固定在父容器底部_容器苗容器怎么选?六种容器特点详解!
  3. 考试系统试题实现(单选项)
  4. AngularJs的基础——$http请求数据
  5. jQuery实现留言板
  6. 基于Scala版本的TMDB大数据电影分析项目
  7. 使用计算机时应先按,自考试题及答案《计算机应用基础》
  8. C程序设计第五版谭浩强课后答案 第八章习题答案
  9. 嵌入式系统开发笔记25:win10防火墙打开特定端口
  10. 计算机网络 --- 计算机和因特网2
  11. python求反余弦_余弦相似度计算公式:python代码找出相似文章
  12. 学人工智能有前途吗?人工智能前景-AI就业方向
  13. 备份Linux到ntfs硬盘,Linux(SLES)挂载NTFS移动硬盘实践
  14. 无法在设置线程模式后对其加以更改
  15. 学生上课睡觉班主任怎么处理_学生上课睡觉老师该怎么办:高级教师教你一招...
  16. H3C交换机配置堆叠
  17. 地狱模式的居转户记录 02
  18. 当深圳变成一座数字花园
  19. 如何正确的从UI图中取色
  20. selenium安装和初探

热门文章

  1. 资料汇总更新|FPGA软件安装包、书籍、源码、技术文档…(2021.01.04更新)
  2. 力软新版APP上线,采用js语言,基于Vue.js和uni-app框架
  3. 中南大学-大学生心理健康教育-MOOC/雨课堂-图片版答案(期末测试)
  4. 算法设计与分析基础——假币问题(三分法)
  5. dsoframer.ocx java_DSOFramer.ocx 控件使用
  6. 色 彩 RGB 值 对 照 表
  7. 多目标最优化模型及算法应用(NSGA-II)
  8. caffee安装 Windows10+vs2015+python3.7+CPU
  9. 轻松修复iOS系统的工具:iToolab FixGo mac中文版
  10. java 邮件接收端程序_java邮件收发功能实现代码