《Opencv》图像金字塔与采样

ops/2025/1/15 15:33:51/

目录

一、简介

二、图像金字塔简介

三、上采样与下采样的原理

1. 下采样(Downsampling)

2. 上采样(Upsampling)

四、代码实现

五、结果展示

​编辑 ​编辑

六、代码解析

1. 图像读取

2. 下采样

3. 上采样

4. 结果显示

七、核心知识点

1. 下采样的作用

2. 上采样的作用

3. 插值算法

八、应用场景

九、总结


一、简介

在图像处理中,图像金字塔是一种多尺度表示方法,通过对图像进行上采样和下采样,可以生成一系列不同分辨率的图像。这种技术广泛应用于图像缩放、图像融合、目标检测等领域。本文将介绍上采样和下采样的基本原理,并通过一个实际的代码示例,展示如何使用OpenCV实现图像的上下采样。


二、图像金字塔简介

图像金字塔是一种以多分辨率表示图像的结构,通常包括两个方向的操作:

  1. 下采样(Downsampling):将图像的分辨率降低,生成更小的图像。

  2. 上采样(Upsampling):将图像的分辨率提高,生成更大的图像。

图像金字塔可以分为两种类型:

  • 高斯金字塔(Gaussian Pyramid):通过对图像进行高斯平滑和下采样生成。

  • 拉普拉斯金字塔(Laplacian Pyramid):通过对高斯金字塔的每一层进行上采样和差分生成。

在本文中,我们主要关注高斯金字塔中的上采样和下采样操作。


三、上采样与下采样的原理

1. 下采样(Downsampling)

下采样是通过降低图像的分辨率来生成更小的图像。OpenCV中的 cv2.pyrDown 函数实现了这一操作。其具体步骤如下:

  1. 高斯平滑:对图像进行高斯模糊,以减少高频信息。

  2. 降采样:将图像的宽度和高度分别减半,删除偶数行和偶数列。

下采样后的图像尺寸为原图像的1/4(宽度和高度各减半)。

2. 上采样(Upsampling)

上采样是通过提高图像的分辨率来生成更大的图像。OpenCV中的 cv2.pyrUp 函数实现了这一操作。其具体步骤如下:

  1. 插值:将图像的宽度和高度分别加倍,新增的像素值通过插值算法(如双线性插值)计算。

  2. 高斯平滑:对插值后的图像进行高斯模糊,以平滑新增的像素。

上采样后的图像尺寸为原图像的4倍(宽度和高度各加倍)。


 

四、代码实现

以下是使用OpenCV实现图像上下采样的完整代码:

import cv2# 读取灰度图像
img = cv2.imread('./images/img_2.png', 0)# 显示原始图像
cv2.imshow('img', img)
cv2.waitKey(0)# 第一次下采样
img_down_1 = cv2.pyrDown(img)
cv2.imshow('img_down_1', img_down_1)
cv2.waitKey(0)# 第二次下采样
img_down_2 = cv2.pyrDown(img_down_1)
cv2.imshow('img_down_2', img_down_2)
cv2.waitKey(0)# 第一次上采样
img_up_1 = cv2.pyrUp(img)
cv2.imshow('img_up_1', img_up_1)
cv2.waitKey(0)# 第二次上采样
img_up_2 = cv2.pyrUp(img_up_1)
cv2.imshow('img_up_2', img_up_2)
cv2.waitKey(0)# 关闭所有窗口
cv2.destroyAllWindows()

五、结果展示

 


六、代码解析

1. 图像读取

  • 使用 cv2.imread 读取灰度图像,0 表示以灰度模式加载图像。

2. 下采样

  • 使用 cv2.pyrDown 对图像进行下采样,生成分辨率更低的图像。

  • 第一次下采样后,图像的尺寸减半;第二次下采样后,图像的尺寸再次减半。

3. 上采样

  • 使用 cv2.pyrUp 对图像进行上采样,生成分辨率更高的图像。

  • 第一次上采样后,图像的尺寸加倍;第二次上采样后,图像的尺寸再次加倍。

4. 结果显示

  • 使用 cv2.imshow 显示原始图像、下采样图像和上采样图像,并通过 cv2.waitKey 等待用户按下任意键继续。


七、核心知识点

1. 下采样的作用

  • 降低计算复杂度:通过减少图像的像素数量,可以加快后续图像处理算法的速度。

  • 多尺度分析:在目标检测和图像识别中,下采样可以生成不同尺度的图像,用于检测不同大小的目标。

2. 上采样的作用

  • 图像放大:将低分辨率图像放大到高分辨率,用于图像超分辨率重建。

  • 图像融合:在拉普拉斯金字塔中,上采样用于将低分辨率图像与高分辨率图像融合。

3. 插值算法

  • 上采样过程中,新增的像素值通过插值算法计算。常用的插值算法包括:

    • 最近邻插值:简单快速,但效果较差。

    • 双线性插值:计算相邻像素的加权平均值,效果较好。

    • 双三次插值:计算更多相邻像素的加权平均值,效果更好但计算量较大。


八、应用场景

上采样和下采样在图像处理中有广泛的应用,例如:

  1. 图像缩放:将图像缩放到目标分辨率。

  2. 图像金字塔:生成多尺度图像,用于目标检测和图像融合。

  3. 超分辨率重建:通过上采样和深度学习技术,将低分辨率图像重建为高分辨率图像。


九、总结

本文介绍了上采样和下采样的基本原理,并通过一个实际的代码示例展示了如何使用OpenCV实现图像的上下采样。下采样通过降低图像分辨率减少计算量,而上采样通过插值算法提高图像分辨率。这两种操作在图像处理中有着广泛的应用,是图像金字塔和多尺度分析的基础。


http://www.ppmy.cn/ops/150322.html

相关文章

多身份定制化视频创作的新突破! Ingredients:可将多个特定身份照片整合进视频创作实现个性化视频生成。

在当今这个数字内容爆炸的时代,视频创作已成为连接人与人、传递信息与情感的重要桥梁。然而,如何高效、高质量地实现多身份定制化视频创作,一直是视频制作领域的一大挑战。近日,北京昆仑研究院的研究团队提出了一种名为“Ingredie…

从源码角度分析SpringMVC执行流程

文章目录 一、SpringMVC基本概述二、SpringMVC的执行流程三、SpringMVC源码的执行流程四、前端控制器根据请求获取处理器原理五、如何根据处理器获取处理器适配器六、SpringMVC拦截器执行源码解读七、处理器适配器执行方法原理 一、SpringMVC基本概述 SpringMVC是基于Servlet进…

手动实现一个循环顺序队列

#include <iostream>using namespace std;class Queue { private:int data[1024]; // 存储元素的数组int frontIndex; // 头指针int rearIndex; // 尾指针int size; // 当前队列中的元素个数public:// 构造函数Queue():frontInde…

使用 C# 制作图像的特写窗口

许多网站都会显示一个特写窗口&#xff0c;其中显示放大的图像部分&#xff0c;以便您可以看到更多细节。您在主图像上移动鼠标&#xff0c;它会在单独的图片中显示特写。此示例执行的操作类似。&#xff08;示例使用的一些数学运算非常棘手&#xff0c;因此您可能需要仔细查看…

vue运用uniapp框架开发企业微信小程序中常用的一些基础方法

嗨&#xff0c;我是小路。今天主要和大家分享的主题是“vue运用uniapp框架开发企业微信小程序中常用的一些基础方法”。 作为一名程序员&#xff0c;很多代码都是忘了再用&#xff0c;用了再忘。 今天梳理下日常开发中常用到的一些基础的方法&#xff0c;以方便后期开…

LSA更新、撤销

LSA的新旧判断&#xff1a; 1.seq&#xff0c;值越大越优先 2.chksum&#xff0c;值越大越优先 3.age&#xff0c;本地的LSA age和收到的LSA age作比较 如果差值<900s&#xff0c;认为age一致&#xff0c;保留本地的&#xff1a;我本地有一条LSA是100 你给的是400 差值小于…

基础入门-抓包技术HTTPS协议APP小程序PC应用Web证书信任转发联动

知识点&#xff1a; 1、抓包技术-Web应用-http/s-Burp&Yakit 2、抓包技术-APP应用-http/s-Burp&Yakit 3、抓包技术-PC端应用-http/s-Burp&Yakit 4、抓包技术-WX小程序-http/s-Burp&Yakit 5、抓包技术-软件联动-http/s-Proxifier 6、抓包技术-通用方案-http/s-R…

算法-盒子中小球的最大数量

原题目链接&#xff1a;1742. 盒子中小球的最大数量 - 力扣&#xff08;LeetCode&#xff09; 你在一家生产小球的玩具厂工作&#xff0c;有 n 个小球&#xff0c;编号从 lowLimit 开始&#xff0c;到 highLimit 结束&#xff08;包括 lowLimit 和 highLimit &#xff0c;即 n…