目录

  • 1 金字塔
  • 2 什么是图像金字塔?
  • 3 图像金字塔有什么用?
  • 4 OpenCV实战图像金字塔

1 金字塔

平时你听到、见到的金字塔是什么样的?

这样?

还是这样?

实际上除了这些,还有图像金字塔

图像金字塔有什么用?为什么要称作图像金字塔?本文带你研究这些问题。

2 什么是图像金字塔?

正如生物视觉系统会处理分层次的尺寸一样,计算机视觉系统实现多分辨率图像处理的基础是图像金字塔

考虑这样一个场景:输入系统一幅图像来检测人脸。由于事先并不知道人脸在这张图片中可能的尺寸,所以需要根据输入生成一个不同大小图像组成的金字塔(应用时常用向量存储),扫描不同层次来检测可能的人脸。

此外,图像金字塔在保持细节的条件下进行图像融合等多尺度编辑操作非常有用。

图像金字塔分为两种:

  • 高斯金字塔
    高斯金字塔是最基本的图像金字塔,用于获得原图像尺度连续的的降采样序列。高斯金字塔共分OOO组(Octave),每组分为SSS层(Layer)。组内各层图像分辨率相同但尺度逐层递增;组间图像按隔点降采样取得。
  • 拉普拉斯金字塔
    拉普拉斯金字塔通过高斯差分得到残差图像序列,用于图像重建、图像融合、特征点检测等。具体做法如图所示:构造高斯金字塔,每组图像内相邻两层相减得到残差图像序列,从而得到拉普拉斯金字塔。所以高斯金字塔每组有s+3s+3s+3层,而拉普拉斯金字塔每组只有s+2s+2s+2层。

3 图像金字塔有什么用?

前面已经提到,图像金字塔的作用主要有:

  • 图像重建
  • 图像多尺度特征检测
  • 图像修复
  • 图像融合

下面给出一个基于图像金字塔的图像融合算法。

  1. 选择待融合图像A与B,以及融合掩码M,并重采样使之具有相同大小;
  2. 分别取得A、B的拉普拉斯金字塔,以及M的高斯金字塔;
  3. 使用M的高斯金字塔作为加权,对A、B的每层特征进行融合,得到融合金字塔;
  4. 融合金字塔仍为拉普拉斯金字塔,对其图像重建得到融合图像。

上面的图可能有点抽象,看看下面的例子。

4 OpenCV实战图像金字塔

主函数非常简单易懂

int main()
{Mat img_1 = imread("1.jpg", 1);Mat img_2 = imread("2.jpg", 1);Mat dstImg;imgFusion(img_1, img_2, dstImg, 0.2);waitKey(0);return 0;
}

试试效果

原图

融合效果图

是不是毫无违和感?其中关键的融合函数imgFusion()具体是如何实现的呢?

void imgFusion(Mat leftImg, Mat rightImg, Mat& dstImg, float threshold)
{vector<Mat> gaussPyrLeft, gaussPyrRight, laplacePyrLeft, laplacePyrRight;        // 声明高斯金字塔数据结构vector<Mat> maskGaussPyr;                                                       // 声明掩码的高斯金字塔vector<Mat> blendLapPyr;                                                     // 声明融合拉普拉斯金字塔Mat imgHighest;                                                                   // 声明图像融合的起点图像Mat mask = Mat::zeros(PYRHEIGHT, PYRWIDTH, CV_32FC1);                            // 构造掩码,大小与金字塔原图像相同mask(Range::all(), Range(mask.cols * threshold, mask.cols)) = 1.0;cvtColor(mask, mask, COLOR_GRAY2BGR);                                          // 将掩码颜色通道拓展,以适配原图像buildGaussPyr(mask, maskGaussPyr, 3);                                         // 建立掩码的高斯金字塔resize(leftImg, leftImg, Size(PYRWIDTH, PYRHEIGHT));resize(rightImg, rightImg, Size(PYRWIDTH, PYRHEIGHT));leftImg.convertTo(leftImg, CV_32F);      //转换成CV_32F, 用于和mask类型匹配,且CV_32F 类型精度高, 有利于计算rightImg.convertTo(rightImg, CV_32F);// 建立高斯金字塔与拉普拉斯金字塔buildGaussPyr(leftImg, gaussPyrLeft, 3);buildGaussPyr(rightImg, gaussPyrRight, 3);buildLaplacePyr(gaussPyrLeft, laplacePyrLeft, 3);buildLaplacePyr(gaussPyrRight, laplacePyrRight, 3);// 确定起点图像imgHighest = gaussPyrLeft.back().mul(maskGaussPyr.back()) +((gaussPyrRight.back()).mul(Scalar(1.0, 1.0, 1.0) - maskGaussPyr.back()));// 融合拉普拉斯金字塔blendLaplacePyr(laplacePyrLeft, laplacePyrRight, maskGaussPyr, blendLapPyr);// 融合图像重建dstImg = imgLaplaceBlend(imgHighest, blendLapPyr);dstImg.convertTo(dstImg, CV_8UC3);imshow("imgProcess::seamOpt_laplace", dstImg);
}

限于篇幅,其中部分函数的实现无法贴完整,本文的完整工程代码请通过下方名片联系我获取


计算机视觉教程2-5:图像金字塔送她一朵玫瑰(附代码)相关推荐

  1. 计算机视觉OpenCV(五):图像金字塔与轮廓检测

    目录 图像金字塔 1. 高斯金字塔(Gaussian Pyramid) 2. 拉普拉斯金字塔(Laplacian Pyramid) 图像轮廓 1. 查找检测物体的轮廓 2. 绘制轮廓 3. 轮廓特征 ...

  2. python手动实现图像像素的kmeans聚类(附代码)

    1.简介 这篇文章主要是介绍了python使用kmeans算法来对图像中的像素进行聚类.整个kmeans算法为手动实现,不调用sklearn库.一共使用了两种方法,其中方法a.py使用了三通道像素值r ...

  3. 数据增强之图像旋转及坐标对应(附代码)

    海康威视研究院ImageNet2016竞赛经验分享 深度学习之图像的数据增强 data augmentation 数据增强方法总结 图片的数据增强(Data Augmentation)方法 openc ...

  4. 图像去模糊代码 python_用Keras搭建GAN:图像去模糊中的应用(附代码)

    雷锋网 (公众号:雷锋网) 按:本文为 雷锋字幕组 编译的技术博客,原标题GAN with Keras: Application to Image Deblurring,作者为Raphaël Meud ...

  5. MATLAB图像处理——图像中余弦噪声去除(附代码)

    图像中规则余弦噪声去除 问题描述 傅里叶变化 带阻滤波器 滤波 结果 改进 代码 问题描述 有以下增加噪声后的图像: 从图上可以明显看出在x方向上叠加了一正弦规律变化的噪声,要对其进行去噪处理,比较简 ...

  6. 不看就亏系列!这里有完整的 Hadoop 集群搭建教程,和最易懂的 Hadoop 概念!| 附代码...

    作者 | chen_01_c 责编 | Carol 来源 | CSDN 博客 封图 | CSDN付费下载于视觉中国 hadoop介绍 Hadoop 是 Lucene 创始人 Doug Cutting, ...

  7. 目标检测——图像金字塔

    目录 一.图像金字塔的作用及实现 二.代码来实现图像金字塔 三.图像金字塔结合滑动窗口 3.1 代码实现 四.实验总结 介绍图像金字塔. 使用图像金字塔结合滑动窗口的方法 标记出图像中不同尺寸的物体. ...

  8. 图像处理/计算机视觉/ python环境下如何用滤波器(/逆滤波/均值滤波/低通滤波/高通滤波)处理图片【附代码】

    计算机视觉滤波器实操 基础知识 一. 计算机视觉技术中常见的几种滤波器 二.滤波器相关知识 应用一:算术均值.几何均值.谐波逆谐波 一.问题分析 二.结果图 三.代码附录 应用二:维纳滤波,逆滤波 一 ...

  9. 图像处理/计算机视觉/python环境下/如何用四种不同滤波器处理噪声【附代码、亲测有效】

    计算机视觉实操之图像处理 一.问题描述 二.效果图 三.代码附录 四.相关链接 一.问题描述 向图片中分别加入椒盐噪声.高斯噪声,使用四种不同的滤波器观察图片的处理效果(算术均值滤波.几何均值滤波 . ...

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

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

最新文章

  1. stata安装_Stata自带的代码编辑器太丑了,那为何不使用Jupyter Notebook?
  2. Redis五种数据结构详解
  3. BZOJ-2298|区间dp|线段树
  4. zoj 1366 Cash Machine
  5. iPhone入门教程 (视频)
  6. Go内存分配跟踪调优
  7. 花匠(NOIP2013)(神奇纯模拟)
  8. #781 – 多个变换执行的顺序问题(Transform Order Matters)
  9. 计算机打不开guest用户,win10系统打不开guest账户的解决方法
  10. java web实现第三方在线支付
  11. 基于FPGA驱动TLC5615模块
  12. 男主龙失忆java_男主失忆的小说推荐:我忘了全世界,却记得对你的爱,一生不变...
  13. 数据分析报告,就该这么写
  14. MediBang Paint Pro 漫画及插画工作软件
  15. python之利用Pygal+2010年世界人口=绘制世界地图
  16. STM32H743必要外围电路分析
  17. Multisim应用举例2.8
  18. RedHat6.2服务器配置方案大全--第一章:DNS
  19. iKcamp出品|微信小程序|小试牛刀(视频)+发布流程|基于最新版1.0开发者工具初中级教程分享
  20. 神经网络教学设计方案,神经网络教学视频

热门文章

  1. 基于51单片机的pid算法温度控制系统protues仿真
  2. 软件架构师的沟通修炼
  3. 安装音量控制程序 WINDOWS
  4. java经纬度格式转换_经纬度格式转换工具
  5. Ubuntu系统安装搜狗(sougou for linux)输入法详细教程
  6. 汇编语言教程 -- 寄存器
  7. Flash桌球游戏开发
  8. LaTex 论文排版(1): Win10 下 LaTex所需软件安装 (Tex live 2018 + Tex studio)
  9. PDF转换CAD有什么方法
  10. JavaScript 进阶技能,中高级前端必备