opencv学习(二十六)之图像金字塔(高斯金字塔、拉普拉斯金字塔)

开发者福利!热门AI工具限时免费用 购周边即赠Coding Plan Lite,Claude Code、Cursor等20+工具畅享,效率翻倍! 阅读详情

在进行数字图像处理时,我们可能会需要将某种尺寸的图像转换为其他尺寸的图像,这样会存在放大图像核缩小图像两种可能。opencv提供了一个真正意义上的图像所方函数resize(),但在本篇中主要学习以下使用图像金字塔进行图像的所方,图像金字塔是视觉运用较为广泛的一项技术。
一个图像金字塔是一系列图像的集合,所有图像来源于同一张原始图像,通过梯次向下采样获得,直到达到某个终止条件才停止采样。通常有两种类型的图像金字塔
. 高斯金字塔(Gaussian pyramid): 用来向下采样
. 拉普拉斯金字塔(Laplacian pyramid): 用来从金字塔底层图像重建上层未采样图像,可以对图像进行最大程度的还原.
之所以称图像金字塔是因为激昂一层一层的图像比喻成金字塔,层级越高,则图像越小,分辨率越低,有如下两种形式:
这里写图片描述
这里写图片描述

1.高斯金字塔
高斯金字塔是图像处理、计算机视觉、信号处理上所使用的一项技术,高斯金字塔本质上为信号的多尺度表示法,亦即将同一信号或图片进行多次高斯模糊并且向下取样以产生不同尺度下的多组信号或图片进行后续的处理。如下图所示:
这里写图片描述
. 每一层都按从下到上的次序编号,层级(i+1)尺寸G(i+1)小于层级i的图像尺寸G(i)
. 高斯金字塔是用来向下采样,为了由第i层图像向下采样得到i+1层的图像,我们采用如下方法
(1)对图像进行高斯内核卷积,高斯内核为:
这里写图片描述
(2)将所有偶数行和列去除。
得到的图像即为第i+1层的图像,相较于第i层图像,其尺寸是第i层图像的1/2.通过对原图像不断的迭代就会得到整个金字塔,同时由第二步我们也可以看出向下采样会逐渐丢失图像的信息,达到缩小图像的目的。opencv提供了pyrDown函数来实现图像的向下采样,其原型为:

void cv::pyrDown ( 
InputArray src,
OutputArray dst,
const Size & dstsize = Size(),
int borderType = BORDER_DEFAULT 
)

参数说明:
. InputArray src: 输入图像,可以是Mat类型
. OutputArray dst: 输出图像,尺寸由第三个参数指定,类型与输入图像一致
. const Size & dstsize=Size(): 输出图像的尺寸,有默认值Size(),在默认情况下将会由Size((src.cols+1)/2, (src.rows+1)/2)计算得到并且还要满足以下条件

|dstsize.width*2-src.cols|<=2
|dstsize.height*2-src.rows|<=2

. int borderType=BORDER_DEFAULT: 用于推断图像外部像素的某种边界模式,有默认值BORDER_DEFAULT

2.拉普拉斯金字塔
拉普拉斯金字塔是向上采样,重建上层未采样图像,在图像处理中预测残差。得到的图像比原来图像的尺寸大。向上采样如下:
(1)将图像在每个方向上扩大为原来的两倍,新增的行和列以0填充
(2)使用先前同样的内核(乘以4)与放大后的图像卷积,或得”新增像素”的近似值
得到的图像即为放大后的图像,但所与原来的图像相比会比较模糊,因为在向下采样过程中丢失了一些信息。opencv中提供了pyrUp()实现图像的向上采样,函数原型如下:

void cv::pyrUp  (   InputArray      src,
        OutputArray     dst,
        const Size &    dstsize = Size(),
        int     borderType = BORDER_DEFAULT 
    )   

参数解释:
. InputArray src: 输入图像
. OutputArray dst: 输出图像
. const Size & dstsize=Size(): 输出图像尺寸,有默认值Size(),在使用默认值的情况下,输出图像的尺寸由Size((src.cols*2),(src.rows*2))计算得到,但是必须满足以下条件

|dstsize.width - src.cols*2|<=(dstsize.width mod 2)
|dstsize.height - src.rows*2|<=(dstsize.height mod 2)

其中mod时求余函数,即dstsize.width mod 2是dstsize.width除以2的余数。
. int borderType=BORDER_DEFAULT: 用于推断图像外部像素的某种边界模式,有默认值BORDER_DEFAULT,具体可以查看函数BorderTypes获取详细信息(需要注意的是与膨胀腐蚀不同,这里不支持BORDER_CONSTANT模式)
该函数与高斯金字塔有相同的步长,可以用来构建拉普拉斯金字塔。其核如下:
这里写图片描述

示例程序如下:

/*
 *程序首先对加载的图像执行向下采样操作形成高斯金字塔
 *之后再利用向下采样得到的图像进行向上采样形成拉普拉斯金字塔
*/

#include <iostream>
#include <opencv2/core.hpp>
#include <opencv2/highgui.hpp>
#include <opencv2/imgproc.hpp>

using namespace std;
using namespace cv;

int main()
{
    Mat srcImage = imread("pyramid.jpg");

    //判断图像是否加载成功
    if(srcImage.empty())
    {
        cout << "图像加载失败!" << endl;
        return -1;
    }
    else
        cout << "图像加载成功!" << endl << endl;

    namedWindow("原图像", WINDOW_AUTOSIZE);
    imshow("原图像", srcImage);

    //两次向下采样操作分别输出
    Mat pyrDownImage_1, pyrDownImage_2;

    pyrDown(srcImage, pyrDownImage_1);
    namedWindow("向下采样-1", WINDOW_AUTOSIZE);
    imshow("向下采样-1", pyrDownImage_1);

    pyrDown(pyrDownImage_1, pyrDownImage_2);
    namedWindow("向下采样-2", WINDOW_AUTOSIZE);
    imshow("向下采样-2", pyrDownImage_2);

    //利用向下采样的结果进行向上采样操作
    Mat pyrUpImage_1, pyrUpImage_2;

    pyrUp(pyrDownImage_2, pyrUpImage_1);
    namedWindow("向上采样-1", WINDOW_AUTOSIZE);
    imshow("向上采样-1", pyrUpImage_1);

    pyrUp(pyrUpImage_1, pyrUpImage_2);
    namedWindow("向上采样-2", WINDOW_AUTOSIZE);
    imshow("向上采样-2", pyrUpImage_2);

    waitKey(0);

    return 0;
}

程序运行结果
这里写图片描述

数字图像处理5:图像金字塔 图像金字塔 近似金字塔和残差金字塔 图像金字塔图像中多尺度表达的一种,最主要用于图像的分割,是一种以多分辨率来解 释图像的有效但概念简单的结构。图像金字塔最初用于机器视觉和图像压缩,一幅图像金字塔是一系列以金字塔形状排列的分辨率逐步降低,且来源于同一张原始图的图像集合。其通过梯次向下采样获得,直到达到某个终止条件才停止采样。 拉普拉斯金字塔:用来从金字塔低层图像重建上层未采样图像,在数字图像处理中也即是预测残差,可以对图像进行最大程度的还原,配合高斯金字塔一起使用。拉普拉斯金字塔中 的图像可用对 阅读详情

相关推荐

OpenCV】第十一章: 图像金字塔

一、什么是图像金字塔 二、为什么要生成图像金字塔图像金字塔能干啥? 三、理论基础:下采样、上采样、滤波器 四、上下采样API 五、高斯金字塔 六、拉普拉斯金字塔

因为热爱所以坚持 6498

OpenCV进阶操作:图像金字塔

在计算机视觉领域,图像金字塔是一种重要的多尺度表示方法。通过构建图像金字塔,我们可以高效地处理不同分辨率下的图像特征。OpenCV作为最流行的计算机视觉库,提供了便捷的图像金字塔实现方法。本文将深入解析图像金字塔的原理,并通过Python代码演示其实际应用图像金字塔是通过对原始图像进行多尺度**下采样(缩小)和上采样(放大)**得到的图像集合。其名称来源于金字塔状的分层结构,每一层都是对前一层分辨率按比例缩放的结果。这种结构可以帮助我们在不同尺度下分析图像特征,常用于目标检测、图像融合等任务。

m0_65065095的博客 1810

银河麒麟V10离线环境下的Python项目迁移:从Windows依赖到ARM架构适配

本文详细介绍了在银河麒麟V10离线环境下将Python项目从Windows迁移到ARM架构的完整流程。重点讲解了离线安装pip、virtualenv等基础工具的方法,以及如何解决ARM架构兼容性问题,确保项目依赖正确迁移。文章还提供了常见问题解决方案和性能优化建议,帮助开发者顺利完成国产化平台适配工作。

weixin_42639246的博客 391

第11章:图像金字塔

第11章:图像金字塔一、理论基础:1. 向下采样:2. 向上采样:二、pyrDown函数使用:三、pyrUp函数及使用:四、采样可逆性研究五、拉普拉斯金字塔1. 定义:2. 应用: 什么是图像金子塔? ​ 图像金字塔是由一幅图像的多个不同分辨率的子图构成的图像集合。是通过一个图像不断的降低采样率产生的,最小的图像可能仅仅有一个像素点。下图是一个图像金子塔的示例。从图中可以看到,图像金字塔是一系列以金字塔形状排列的、自底向上分辨率逐渐降低的图像集合。 ​ 通常情况下,图像金字塔的底部是待处理的高分辨率图

weixin_57440207的博客 1万+

图像金字塔

一、图像金字塔 图像金字塔是一个图像集合,集合中所有的图像都源于同一个原始图像,而且是通过对原始图像连续采样获得,知道达到某个终止条件才停止降采样。 二、金字塔类型 高斯金字塔拉普拉斯金字塔 高斯金字塔用来向下降采样图像 拉普拉斯金字塔则用来从金字塔底层图像中向上采样重建一个图像 三、应用 1)向下采样再向上采样通常可以过滤掉一些噪点。 2)一个特别的应用就是利用

sunny_girl_11的博客 661

【转载】OpenCV-Python系列之图像金字塔(二十六

在上一个教程中,我们谈到了关于图像Canny边缘检测算子,同时也是OpenCV中应用最为广泛的边缘检测算法。 现在我们来谈谈图像金字塔,它的本质是对图像进行放缩变换。一般情况下,我们要处理是一副具有固定分辨率的图像。但是有些情况下,我们需要对同一图像的不同分辨率的子图像进行处理。比如,我们要在一幅图像中查找某个目标,比如脸,我们不知道目标在图像中的尺寸大小。这种情况下,我们需要创建一组图像,这些图像是具有不同分辨率的原始图像。我们把这组图像叫做图像金字塔(简单来说就是同一图像的不同分辨率的子图集合)。如果我

weixin_44237705的博客 379

OpenCV图像处理

图像处理

lzh的博客 2316

OpenCV函数简记_第四章数字图像的形态学处理和图像金字塔。(腐蚀、膨胀、开,闭运算、形态学梯度、顶帽和黑帽以及图像金字塔

本文描述了数字图像的形态学处理和图像金字塔两个部分。 1. 形态学处理包括:腐蚀、膨胀、开运算、闭运算、形态学梯度、顶帽和黑帽。 2. 图像金字塔包括:上采样和下采样算法。

目前涉及领域:目标检测,语义分割以及数字图像处理 561

OpenCV总结之一_图像处理基本操作

目录: *第一节——基础——加载imread、修改、显示imshow、保存imwrite *第二节——矩阵的掩模操作filter2D+++代码的运行时间getTickCount *第三节——Mat对象create、clone、copyTo、cvtColor、cout *第四节——图像操作——访问图像像素点进行反差操作bitwise_not *第五节——图像混合——两张大小相等类型相同的图像进行线性...

weixin_44017727的博客 993

长沙红胖子Qt·西安(长沙创微智科)博文大全:开发技术集合(包含Qt实用技术、树莓派、三维、OpenCV、OpenGL、ffmpeg、OSG、单片机、软硬结合等等)持续更新中...

长沙红胖子 Qt・西安,本人拥有省级科研团队从业背景,研发团队产出所有项目、产品方案和研发无分包、无外包、无AI代笔,长期深耕双一流体系高精尖技术配套研发。博客主动剥离复杂底层工况机理,专注沉淀高端、特种行业领域Qt工程化落地实战经验。所有内容均为个人梳理总结的通用性工程方法论,只输出可公开的普适技术思路。

长沙红胖子 Qt・西安|省级科研团队从业背景,深耕双一流体系高精尖技术配套研发|剥离高精尖机理,沉淀高端特种行业领域 Qt 工程化落地经验|博文仅分享通用技术总结,输出公开普适工程思路。 163万+

图像金字塔作用

图像金字塔图像多尺度表达的一种,主要应用与图像分割,是一种以多分辨率来解释图像的有效但概念简单的结构。图像金字塔实际上是一张图片在不同尺度下的集合,即原图的上采样和下采样集合。金字塔的底部是高分辨率图像,而顶部是低分辨率图像。我们将一层一层的图像比喻成金字塔,层级越高,则图像越小,分辨率越低。

qq_41915623的博客 678

图像金字塔,原理、实现及应用

图像金字塔是对图像的一种多尺度表达,将各个尺度的图像按照分辨率从小到大,依次从上到下排列,就会形成类似金字塔的结构,因此称为图像金字塔。常见的图像金字塔有两类,一种是高斯金字塔(Gaussian Pyramid),另一种的拉普拉斯金字塔(Laplacian Pyramid)。

吹吹自然风 8989

图像金字塔高斯拉普拉斯

目录 一、图像金字塔作用 1、图像缩放 2、图像分割 二、采样 1、下采样pyrDown() 2、上采样pyrUp() 三、高斯金字塔 1、高斯金字塔过程 2、构建图像高斯金字塔 四、拉普拉斯金字塔 1、拉普拉斯金字塔的数学定义 2、构建图像拉普拉斯金字塔 五、图像复原 1、原图像的复原公式 一、图像金字塔作用 1、图像缩放 用于机器视觉和图像压缩...

CHWB2580的博客 3376

计算机视觉——图像金字塔理解与代码示例

有时为了在图像中检测一个物体(例如人脸、汽车或其他类似的物体),需要调整图像的大小或对图像进行子采样,并进行进一步的分析。然后对第二组的第一层图像进行σ的高斯平滑处理,得到第二组的第二层,类似于步骤2。在同一组内,它们的尺寸相同,但在不同组之间,第二组的图像尺寸是第一组图像尺寸的一半。在同一组内,不同层图像的尺寸相同,后一层图像的平滑系数是前一层图像平滑系数的k倍。

知来者逆的博客 3423

机器学习opencv--图像金字塔

opencv--图像金字塔

纸上得来终觉浅 4630

OpenCV中的图像金字塔(高斯金字塔拉普拉斯金字塔)

士大夫

Zzz 6332

图像金字塔高斯金字塔拉普拉斯金字塔是怎么回事?附利用拉普拉斯金字塔高斯金字塔重构原图的Python-OpenCV代码

图像金字塔高斯金字塔拉普拉斯金字塔是怎么回事?附利用拉普拉斯金字塔高斯金字塔重构原图的Python-OpenCV代码

昊虹AI笔记 1万+

数字图像处理——图像金字塔

图像金字塔图像处理中多尺度分析的重要工具,它通过不同分辨率下的图像表示,为我们提供了分析图像特征的多个视角。图像金字塔的本质是一系列以金字塔形状排列的分辨率逐步降低的图像集合,其中最底层是原始图像的最高分辨率版本,随着层级上升,分辨率逐渐降低。上采样的步骤包括:先将图像在每个方向放大为原来的两倍,新增的行和列用0填充,然后使用与降采样相同的高斯核进行卷积操作,获得新增像素的近似值。例如,在人脸检测中,由于图像中的人脸可能具有不同的大小,使用图像金字塔可以在多个尺度上检测人脸,确保不会因为尺度变化而漏检。

qq1851417332的博客 1427

OpenCV(8):快速了解图像金字塔的概念以及代码实践

当我们使用相同的算法分析不同尺度的同一张图像时,可能会出现分析结果不尽相同的情况。因此,在进行图像处理和分析时,通常需要考虑不同尺度下的图像所展现的不同特征。此时需要用到图像金字塔图像进行缩放。

m0_50317149的博客 1126

OpenCV学习笔记】之图像金字塔(Image Pyramid)

一、尺度调整       顾名思义,即对源图像的尺寸进行放大或者缩小变换。在opencv里面可以用resize函数,将源图像精准地转化为指定尺寸的目标图像。要缩小图像,一般推荐使用CV_INETR_AREA(区域插值)来插值;若要放大图像,推荐使用CV_INTER_LINEAR(线性插值)。这个函数可以用来做简单的图像尺度变换。而下面要说的图像金字塔的用处很大,在特征检测中都是基础理论和技术; ...

zhu_hongji的博客 5万+
上一篇: opencv学习(二十五)之开运算、闭运算、形态梯度、顶帽、黑帽
下一篇: opencv学习(二十七)之图像缩放函数resize
梧桐栖鸦
梧桐栖鸦 领域专家: 人工智能技术领域 领域专家: 人工智能技术领域
博客等级 码龄14年 2268粉丝 98原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值