前言

  图像金字塔是计算机图形学中非常重要的一个概念。

  本文将详细介绍这个概念,以及它的实现与应用。

图像金字塔的定义

  图像金字塔是一组图像的集合,集合中的所有图像都是通过对某一图像连续降采样得到的一组图像序列。

  有两种经典的金字塔:高斯金字塔和拉普拉斯金字塔,前者采用向下采样,后者是向上采样需要的缺失的信息。

  向下采样(生成高斯金字塔)的具体操作为:

    1. 对图像进行高斯卷积

    2. 删除所有的偶数行和偶数列

  向上采样的缺失信息(生成拉普拉斯金字塔)的具体操作为:

    1. 首先将维数扩大两倍

    2. 将扩大位的值置为0

    3. 对新的图像进行高斯卷积

    4. 用新的层次的高斯金字塔减去 3 中形成的图像

采用 OpenCV 实现向下,向上采样

  1. // 此头文件包含图像IO函数的声明
  2. #include "highgui.h"
  3. // 此头文件包含基本的图像处理函数和高级计算机视觉算法
  4. #include "cv.h"
  5. #include <iostream>
  6.  
  7. int main (void) {
  8.  
  9. // 将D盘目录下名为" 1.jpg "的图像加载至内存并获得一个指向该图像内存块的指针img
  10. IplImage * img = cvLoadImage ("D:\\1.jpg");
  11.  
  12. // 创建一个窗口显示平滑处理前的图像
  13. cvNamedWindow ("采样前", CV_WINDOW_AUTOSIZE);
  14.  
  15. // 将图像装载进窗口并显示此窗口
  16. cvShowImage ("采样前", img);
  17.  
  18. // 创建两个新的图像内存块,以存放采样结果。
  19. IplImage * up = cvCreateImage (
  20. cvSize(*img->width, *img->height),
  21. img->depth,
  22. img->nChannels
  23. );
  24. IplImage * down = cvCreateImage (
  25. cvSize(img->width/, img->height/),
  26. img->depth,
  27. img->nChannels
  28. );
  29.  
  30. // 采样
  31. cvPyrUp (img, up, IPL_GAUSSIAN_5x5);
  32. cvPyrDown (img, down, IPL_GAUSSIAN_5x5);
  33.  
  34. // 创建窗口显示采样后的图像
  35. cvNamedWindow ("向上采样", CV_WINDOW_AUTOSIZE);
  36. cvNamedWindow ("向下采样", CV_WINDOW_AUTOSIZE);
  37.  
  38. // 将图像装载进窗口并显示窗口
  39. cvShowImage ("向上采样", up);
  40. cvShowImage ("向下采样", down);
  41.  
  42. // 该函数的参数为 0 时,程序将等待用户触发一个按键操作。
  43. // 若参数为正整数,则程序将暂停该整数个毫秒单位直至用户有任何按键。
  44. cvWaitKey ();
  45.  
  46. // 释放图像内存块
  47. cvReleaseImage (&img);
  48. cvReleaseImage (&up);
  49. cvReleaseImage (&down);
  50.  
  51. // 关闭窗口同时释放窗口内存块
  52. cvDestroyWindow ("采样前");
  53. cvDestroyWindow ("向上采样");
  54. cvDestroyWindow ("向下采样");
  55.  
  56. return ;
  57. }

运行结果

  

小结

  下篇,将讲解图像金字塔的一个经典应用 - 图像分割。

  

图像金字塔及其在 OpenCV 中的应用范例(上)的更多相关文章

  1. 图像金字塔及其在 OpenCV 中的应用范例(下)

    前言 本文将主要讲解如何使用 OpenCV 实现图像分割,这也是图像金字塔在 OpenCV 中的一个重要应用. 关于图像分割 在计算机视觉领域,图像分割(Segmentation)指的是将数字图像细分 ...

  2. opencv中的meanshift图像切割

    Meanshift(均值漂移)是一种在一组数据的密度分布中寻找局部极值的稳定的方法.Meanshift不仅能够用于图像滤波,视频跟踪,还能够用于图像切割. 通过给出一组多维数据点,其维数是(x,y,r ...

  3. 【转】图像金字塔PyrDown,PyrUP

    原文链接:http://blog.csdn.net/davebobo/article/details/51885043 [图像金字塔] 图像金字塔这个词,我们经常在很多地方可以看到.它是图像多尺度表达 ...

  4. OpenCV图像金字塔:高斯金字塔、拉普拉斯金字塔与图片尺寸缩放

    这篇已经写得很好,真心给作者点个赞.题目都是直接转过来的,直接去看吧. Reference Link : http://blog.csdn.net/poem_qianmo/article/detail ...

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

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

  6. OpenCV探索之路(五):图片缩放和图像金字塔

    对图像进行缩放的最简单方法当然是调用resize函数啦! resize函数可以将源图像精确地转化为指定尺寸的目标图像. 要缩小图像,一般推荐使用CV_INETR_AREA来插值:若要放大图像,推荐使用 ...

  7. [OpenCV-Python] OpenCV 中图像特征提取与描述 部分 V (一)

    部分 V图像特征提取与描述 OpenCV-Python 中文教程(搬运)目录 29 理解图像特征 目标本节我会试着帮你理解什么是图像特征,为什么图像特征很重要,为什么角点很重要等.29.1 解释 我相 ...

  8. [OpenCV-Python] OpenCV 中图像特征提取与描述 部分 V (二)

    部分 V图像特征提取与描述 OpenCV-Python 中文教程(搬运)目录 34 角点检测的 FAST 算法 目标 • 理解 FAST 算法的基础 • 使用 OpenCV 中的 FAST 算法相关函 ...

  9. Python+OpenCV图像处理(十一)—— 图像金字塔

    简介:图像金字塔是图像中多尺度表达的一种,最主要用于图像的分割,是一种以多分辨率来解释图像的有效但概念简单的结构.简单来说,图像金字塔就是用来进行图像缩放的. 进行图像缩放可以用图像金字塔,也可以使用 ...

随机推荐

  1. SSL证书请求文件(CSR)生成指南 - Tomcat

    SSL证书请求文件(CSR)生成指南 - Tomcat http://www.zhenssl.com/support/CSRgen/tomcat_CSR.htm   重要注意事项 An Importa ...

  2. ant非法字符:\65279 错误

    ant非法字符:\65279 错误前段时间用ant把项目打包,遇到一个问题:编译java文件的时候,有些java文件报非法字符 \65279错误,在网上找和很多方法,也试了很多方法,换JDK,网上说的 ...

  3. priority_queue C++

    三种优先队列定义方法:T_T 内部原理以后补..... priority_queue<int> qi;//普通的优先级队列,按从大到小排序 struct Node { friend boo ...

  4. ace-下载-安装

    安装ACE 1.获取安装包 到ACE的官方网站http://www.cs.wustl.edu/~schmidt/ACE.html或者http://riverace.com/index.htm下载最新版 ...

  5. NSDate的运算

    NSDate存储的是世界标准时(UTC),输出时需要根据时区转换为本地时间 Dates NSDate类提供了创建date,比较date以及计算两个date之间间隔的功能.Date对象是不可改变的. 如 ...

  6. superobject中 JavaToDelphiDateTime的使用

    procedure TForm1.FormCreate(Sender: TObject); var n: TDateTime; i64: Int64; s: Integer; begin Memo1. ...

  7. Linux - gcc和g++的区别

    一般linux系统都自带了gcc编译器的,你可以用你的安装光盘去安装,如果你是觉得自带的gcc版本太低了,可以去gcc的官方网站可以下载到,编译需要很长的时间,如果你只编译C或者C++可以只下载gcc ...

  8. shell指令expr和test指令

    通过expr指令可以进行+.-.*.\.%等运算,但是有一点值得注意,使用乘法时,要在*前加上一个\符号. 通过test指令可以进行逻辑测试,进行测试的情况有四种: 1.整数测试 a.判断两个整数是否 ...

  9. C# MP3文件属性读取

    using (TempFile tempFile = new TempFile()) { using (FileStream fs = new FileStream(tempFile.FileName ...

  10. win10系统输入法用户体验

    因为现在的输入法好多的广告弹窗所以我一直用系统原生的输入法,自从去年升级win10以后一直在用自带的输入法, 1.用户界面设计 win10系统自带的输入法用户界面设计非常扁平化,没有哪些所谓的皮肤啥的 ...