1.学习目标:

  • 掌握opencv图像金字塔的原理

学习内容:

1.什么是图像金字塔?

2.图像金字塔有什么用?

3.图像金字塔实现方式


学习产出:

1. 什么是图像金字塔?
图像金字塔(如图 1 所示)是一种以多分辨率来解释图像的结构,通过对原始图像进行多尺度
像素采样的方式,生成 N 个不同分辨率的图像。把具有最高级别分辨率的图像放在底部,以金字
塔形状排列,往上是一系列像素(尺寸)逐渐降低的图像,一直到金字塔的顶部只包含一个像素点
的图像,这就构成了传统意义上的图像金字塔。图像金字塔底部是待处理的高分辨率图像,也就是
原始图像,顶部是低分辨率的近似图像。一般情况下,都是每向上移动一级,图像的宽和高都降低
为原来的 1/2 。金字塔高层图片通过向上采样得到底层图片,底层图片通过向下取样得到高层图
片。

图 1 图像金字塔
2. 图像金字塔有什么用?
(1) 图像金字塔能够帮助提取更多“有用”的特征,在进行图像处理时能够帮助节省计算资源。特
别地,在目标检测的场景中,由于不同摄像头分辨率、设置位置不同,场景光线敏感程度都有
差别,图像中的物体通常很可能是远近不一,大小不一,由于图像金字塔底层关注图像细节,
而高层注重图像轮廓,此时就可以利用金字塔来检测不同尺度下的物体。这种方法要比使用不
同大小的 sliding window 在原图上做检测节省太多的算力,大大实验增强效果,避免了大量
噪声图片的输入造成计算资源的浪费。
(2) 图像金字塔有助于避免模型过拟合。在某些图像处理的算法中,图像金字塔的多分辨率运算可
以避免陷入局部点或者过拟合状态,增强模型鲁棒性。
(3) 图像金字塔可用于图像融合。图像拉普拉斯金字塔将源图像分别分解到不同的空间频带上,而
图像融合过程就是在各空间频率层上分别进行的,这样就可以针对不同分解层的不同频带上的
特征与细节,采用不同的融合算子以达到突出特定频带上特征与细节的目的。即有可能将来自
不同图像的特征与细节融合在一起。
(4) 图像缩放等等。
3. 图像金字塔实现方式 1——resize 函数
resize 函数主要实现的功能是将图片缩放到目标大小。resize 函数的主要特点是,它不会使图
像变得模糊。函数的构成:
resize(InputArray src,
OutputArray dst,
Size dsize,
double fx = 0,
double fy = 0,
int interpolation = INTER_LINEAR)其中 src 代表原图像,dst 代表输出图像,const Size & dstsize 设置输出图像的大小,fx,fy
设定 x 和 y 方向上的缩放比例,interpolation 指定了默认插值方式为双线性插值,双线性插值的
数学原理如下。

例:resize(img, dst, Size(),0.5,0.5);将原图 img 长宽都变为原来的 0.5 倍,得到输出图像 dst
的分辨率变为原来的 1/4,重复以上操作我们就可以得到通过下采样得到的多层金字塔图片。
4. 图像金字塔实现方式 2——高斯金字塔(Gaussianpyramid)
高斯金字塔是指通过高斯模糊滤波和下采样不断地将图像的尺寸缩小,进而在金字塔中包含多
个分辨率的一组图像。高斯金字塔的形式如下图所示:

一般情况下,高斯金字塔的最底层为原图像,每向上一层就会通过高斯模糊滤波+下采样缩小
一次图像的尺寸。通常情况下,图像的长与宽会缩小为原来的一半,由于每次图像的长与宽都缩小
为原来的一半,图像的缩小速度非常快,因此常见的高斯金字塔的层数为 3~6。以图为例,对应分
辨率 512*512 的原图 O 首先做高斯变换得到相同尺寸的滤波图像,然后将滤波图像进行下采样就得到了第一次采样图片 D1,此时图片的分辨率变为 256*256,重复以上的操作就能得到多次采样
后的高斯金字塔。 设 Gn 表示第 n 层高斯金字塔的图像,则 G0 表示高斯金字塔的最底层(即原图像)。为了得 到 G n+1,首先需要对 Gn 进行高斯核卷积,即做高斯低通滤波,然后删除所有的偶数行和偶数列, 从而得到 Gn+1。这个函数使用的高斯核如下:

高斯滤波其实是一种线性平滑滤波,适用于消除高斯噪声,广泛应用于图像处理的减噪过程。
简单来说就是整个图像某个像素点的值与周围像素点的值挂钩,原图像某一像素点的值其实是其本
身和周围像素点值的加权平均过程。之所以要先进行高斯滤波,是为了在下采样删除偶数行和列的
时候能尽量减少信息的丢失。 高斯金字塔实现的函数:pyrDown,函数构成:
pyrDown(InputArray src,
OutputArray dst,
const Size & dstsize = Size(),
int borderType =BORDER_DEFAULT)
参数解析:
InputArray src:源图像,Mat 类的对象
OutputArray dst:输出图像
const Size & dstsize:输出图像的大小
borderType:边界处理方式,处理的方法参照官网的说明为:“gfedcb | abcdefgh| gfedcba”。之所以会有边界处理方式,是因为在进行高斯滤波图像做卷积时,处于边界的像 素点在被选定为中心点时不能直接卷积,需要在原图边界添加像素点作为补充。 另一方面,我们可以通过上采样的方法实现高斯金字塔,上采样的过程包括:(1)将图像 在每个方向放大为原来的两倍,新增的行和列用 0 填充;(2)使用向下采样时所使用的的高 斯滤波器对补零后的图像进行滤波处理,以获取向上采样的结果图像;(3)如上步骤,下采 样后图片扩大为原图的 4 倍,重复上诉步骤得到高斯金字塔。实现函数为:pyrUp 函数,函数 构成为:pyrUp( InputArray src, OutputArray dst,const Size& dstsize = Size(), int borderType = BORDER_DEFAULT ),参数的释义参照 pyrDown 函数。但值得注意的是在 进行步骤(2)时所用的高斯核为下采样金字塔所用高斯核的 1/4,因为 RGB 图像像素值的范 围是[0, 255],由于其中添 0 后图像中四分之三的像素点的值都是为零,如果直接使用高斯滤 波器对其进行卷积计算,会导致像素值的范围变为[0, 255*1/4]。所以,要将所使用的高斯滤 波器系数乘以 4,以保证得到像素值的范围仍旧在[0, 255]内。
5. 图像金字塔实现方式 3——拉普拉斯金字塔(Laplacianpyramid)
拉普拉斯金字塔: 用来从金字塔低层图像重建上层未采样图像,在数字图像处理中也即是预测
残差,可以对图像进行最大程度的还原,配合高斯金字塔一起使用。首先对高斯金字塔原始图像
Gi 进行向下取样,然后向上采用,最后与原始图像相减,就得到了拉普拉斯金字塔图像。
要从高斯金字塔第 i 层生成第 i+1 层(即 G_i+1),首先要用高斯核对 G_1 进行卷积,然后删除
所有偶数行和偶数列,新得到图像面积会变为源图像的四分之一。按上述过程对输入图像 G_0 执
行操作就可产生出整个高斯金字塔。图像金字塔中的向上和向下采样分别通过 OpenCV 函数pyrUp 和 pyrDown 实现。因为用 pyrDown 做下采样操作的时候会有像素信息损失,做高斯模
糊时会滤掉高频像素点。拉普拉斯图像可以帮助提取出图像的高分辨率的像素点和下采样丢掉的点。
假设我们已经有一个高斯图像金字塔,对于其中的第 i 层图像(高斯金字塔最下面为第 0 层),
首先通过下采样得到一尺寸缩小一半的图像,即高斯金字塔中的第 i+1 层或者不在高斯金字塔中,
之后对这张图像再进行上采样,将图像尺寸恢复到第 i 层图像的大小,最后求取高斯金字塔第 i 层
图像与经过上采样后得到的图像的差值图像,这个差值图像就是拉普拉斯金字塔的第 i 层图像,整
个过程的流程如图所示。计算公式 :Li = Gi -PyrUp( PyrDown(Gi) )。
上图中第一列图片为高斯下采样得到的高斯金字塔图片;第二列图片为高斯金字塔第 Gi 层图
片与高斯金字塔第 Gi+1 层图片上采样之后两者作差得到的拉普拉斯金字塔 Li;第三列图片为通过
拉普拉斯金字塔恢复出来的图片。
参考文章:
OpenCV官方文档_w3cschool
opencv学习笔记(十一):图像金字塔 - 知乎

opencv图像金字塔的介绍相关推荐

  1. Python,OpenCV图像金字塔cv2.pyrUp(), cv2.pyrDown()

    Python,OpenCV图像金字塔cv2.pyrUp, cv2.pyrDown 1. 效果图 2. 原理 2.1 什么是图像金字塔 2.2 金字塔分类 2.3 应用 3. 源码 参考 这篇博客将介绍 ...

  2. OpenCV图像金字塔:高斯金字塔、拉普拉斯金字塔总结

    我们经常会将某种尺寸的图像转换为其他尺寸的图像,如果放大或者缩小图片的尺寸,笼统来说的话,可以使用OpenCV为我们提供的如下两种方式: <1> resize函数.这是最直接的方式, &l ...

  3. 【OpenCV新手教程之十三】OpenCV图像金字塔:高斯金字塔、拉普拉斯金字塔与图片尺寸缩放...

    本系列文章由@浅墨_毛星云 出品,转载请注明出处. 文章链接: http://blog.csdn.net/poem_qianmo/article/details/26157633 作者:毛星云(浅墨) ...

  4. 【OpenCV入门教程之十三】OpenCV图像金字塔:高斯金字塔、拉普拉斯金字塔与图片尺寸缩放

    本系列文章由@浅墨_毛星云 出品,转载请注明出处. 文章链接: http://blog.csdn.net/poem_qianmo/article/details/26157633 作者:毛星云(浅墨) ...

  5. opencv 图像金字塔及图像重建、融合

    一.图像金字塔 关于图像金字塔的介绍,这里推荐一篇毛星云写的博客 OpenCV图像金字塔:高斯金字塔.拉普拉斯金字塔与图片尺寸缩放,是基于<OpenCV3编程入门>中图像金字塔部分编写,基 ...

  6. OpenCV图像金字塔pyrDown和pyrUp的实例(附完整代码)

    OpenCV图像金字塔pyrDown和pyrUp的实例 OpenCV图像金字塔pyrDown和pyrUp的实例 OpenCV图像金字塔pyrDown和pyrUp的实例 #include "i ...

  7. openCV——图像金字塔

    图像金字塔 理论基础 通常情况下,图像金字塔的底部是待处理的高分辨率图像(原始图像),而顶部则为其低 分辨率的近似图像.向金字塔的顶部移动时,图像的尺寸和分辨率都不断地降低.通常情况下, 每向上移动一 ...

  8. OpenCV 图像金字塔buildPyramid、pyrDown、pyrUp

    返回OpenCV算子速查表 升采样 pyrDown,降采样 pyrUp,图像金字塔buildPyramid 1. 函数定义 1.1 降采样 pyrDown 1.2 升采样 pyrUp 1.3 buil ...

  9. FCN全卷积网络—upsampling(上采样)——OpenCV图像金字塔

    一.上采样理论 1.1 bilinear 1.2 Deconvolution(反卷积) 1.3 unpooling 二.OpenCV金字塔:高斯金字塔.拉普拉斯金字塔与图片缩放 一.上采样理论 FCN ...

最新文章

  1. 解决 rake aborted!
  2. linux增量编译不成功,Linux学习笔记-增量编译(Makefile进一步使用)
  3. 2021中超1 1006 xor sum
  4. GRUB 启动 WIN PE 镜像(ISO)
  5. Qt5—嵌入停靠窗口QDockWidget
  6. BaseRecyclerViewAdapterHelper结合autolayout使用
  7. Linux 自带的LED 灯驱动实验
  8. clover java,clover-clover软件 v3.4.3 官方版
  9. mysql主从复制(原理以及配置)
  10. 树莓派 opencv 调用摄像头
  11. 【密码学 | CTF】培根密码
  12. Linux虚拟机如何扩展内存盘
  13. Mysql大文本类型
  14. Shell判断路径是否存在
  15. 应用ArcGIS和COORD软件进行坐标七参数转换的方法
  16. [高通SDM450][Android9.0]外接键盘闪屏以及默认使用虚拟键盘
  17. Redis基本数据类型String——数据结构解析
  18. 数字电路_2. 各类触发器
  19. 美使馆9年pm2.5数据分析:雾霾到底是不是加重了?
  20. dbd/oracle,linux centos环境下,perl使用DBD::Oracle遇到报错Can't locate DBDOracle.pm in @INC 的解决办法...

热门文章

  1. 自动化构建工具Maven
  2. 什么是编程能力 | 计算机专业学生如何提高编程能力 | 如何自学编程
  3. 【电力电子技术】三相桥式全控整流电路
  4. php数字两位小数_PHP 数字价格格式化,保留两位小数
  5. 《MySQL》MySQL教程
  6. 了解浏览器cookie以及浏览器缓存
  7. 智慧社区智慧物业APP决方案
  8. ML binning
  9. oracle常用sql语句
  10. 20年计算机考研爆炸学校,这些都是20考研报考人数「爆炸」的院校