OpenCV 图像预处理—图像金字塔

文章目录

    • 相关概念
      • 高斯金字塔
      • 拉普拉斯金字塔
      • 应用
    • 构建高斯金字塔为什么要对当前层进行模糊?
      • 1. 平滑处理
      • 2. 减少混叠(Aliasing)
      • 3. 多尺度表示
      • 4. 图像降采样
    • 举个栗子
      • 创建高斯金字塔和拉普拉斯金字塔,并用拉普拉斯金字塔恢复图像

相关概念

高斯金字塔(Gaussian Pyramid)和拉普拉斯金字塔(Laplacian Pyramid)是图像处理中的两种多尺度表示方法,用于图像的分层处理和分析。

高斯金字塔

在这里插入图片描述

高斯金字塔是一系列按分辨率逐层降低的图像集合,每层图像通过对上一层图像进行高斯模糊和下采样得到。具体步骤如下:

  1. 高斯模糊:对图像进行高斯模糊处理,减少高频成分。
  2. 下采样:将模糊处理后的图像按一定比例缩小(通常为2)。

这样逐层处理,直到图像变得非常小。高斯金字塔用于图像的多尺度分析,例如图像金字塔法则在图像压缩、特征提取等领域的应用。

构建高斯金字塔的步骤:

  1. 从原始图像开始,作为金字塔的最底层。
  2. 对当前层图像进行高斯模糊。
  3. 对模糊后的图像进行下采样,得到下一层图像。
  4. 重复步骤2和步骤3,直到达到预定的层数或图像尺寸小于一定阈值。

拉普拉斯金字塔

拉普拉斯金字塔是高斯金字塔的一种变体,通过记录每层图像与其上层图像之间的差异来构建。具体步骤如下:

  1. 高斯金字塔:首先构建高斯金字塔。
  2. 图像差异:计算高斯金字塔中每层图像与上层图像的差异。具体来说,对高斯金字塔中的每一层图像进行上采样,并减去相应的上一层图像,得到当前层的拉普拉斯金字塔图像。

拉普拉斯金字塔常用于图像压缩和图像融合等领域,因为它能够有效地表示图像的细节信息。

构建拉普拉斯金字塔的步骤:

  1. 构建高斯金字塔。
  2. 对高斯金字塔的每一层图像进行上采样。
  3. 计算上采样图像与其上层图像的差异,得到当前层的拉普拉斯金字塔图像。
  4. 重复步骤2和步骤3,直到达到金字塔顶层。

应用

  • 图像压缩:拉普拉斯金字塔可以用于图像压缩,因为它可以有效地表示图像的边缘和细节信息。
  • 图像融合:在多分辨率图像融合中,拉普拉斯金字塔可以用于将不同分辨率的图像融合在一起,保留更多的细节信息。
  • 图像增强:通过高斯金字塔,可以对图像进行多尺度的平滑处理,有助于去噪和图像增强。

这两种金字塔结构在图像处理和计算机视觉领域都有着广泛的应用。

构建高斯金字塔为什么要对当前层进行模糊?

构建高斯金字塔时对当前层进行高斯模糊(Gaussian Blur)有几个重要的原因:

1. 平滑处理

高斯模糊是对图像进行平滑处理,减少高频噪声和细节。这种平滑处理能够避免在下采样时出现锯齿效应(aliasing),使得下采样后的图像更加平滑和自然。

2. 减少混叠(Aliasing)

混叠效应是指在图像下采样过程中,高频分量折叠回低频分量,导致图像失真。高斯模糊通过平滑处理去除高频分量,减少了混叠效应,使得下采样后的图像更能真实地反映原图像的特征。

3. 多尺度表示

高斯金字塔的构建旨在获得图像的多尺度表示。通过对图像进行高斯模糊并逐层下采样,可以生成一系列分辨率不同的图像,每一层图像代表原图像的不同尺度。这种多尺度表示在图像处理和分析中具有重要意义,可以用于图像金字塔压缩、特征提取和物体检测等任务。

4. 图像降采样

在进行降采样时,如果直接对原始图像进行下采样,可能会丢失图像中的细节和重要信息。高斯模糊使得图像在降采样之前得到平滑处理,从而在降采样过程中保留更多的关键信息,使得金字塔中各层图像能够更好地代表原图像。

举个栗子

该代码构建了三层高斯金字塔

int main()
{string imagePath = "C:\\Users\\Marxist\\Pictures\\coco\\show_jpg.jpg";string mix_image_path = "C:\\Users\\Marxist\\Pictures\\coco\\Linux.jpg";Mat image = imread(imagePath);//读取灰度图像Mat resize_image ;resize(image,resize_image,Size(500,500));imshow("source image",resize_image);Mat g1 ,g2 ,g3;pyrDown(resize_image,g1,Size(250,250));pyrDown(g1,g2,Size(125,125));imshow("g1",g1);imshow("g2",g2);waitKey();return 0;
}

在这里插入图片描述

创建高斯金字塔和拉普拉斯金字塔,并用拉普拉斯金字塔恢复图像

int main()
{string imagePath = "C:\\Users\\Marxist\\Pictures\\coco\\show_jpg.jpg";string mix_image_path = "C:\\Users\\Marxist\\Pictures\\coco\\Linux.jpg";Mat image = imread(imagePath);//读取灰度图像Mat resize_image ;imshow("source image",image);//    By default, size of the output image is computed as `Size((src.cols+1)/2, (src.rows+1)/2)`,如果Size不指定,就是默认缩一半
//    pyrDown(resize_image,g1,Size(250,250));// 构建高斯金字塔vector<Mat> gaussian_pyramid;Mat current_image = image;for (int i = 0; i < 3; ++i) {Mat down;pyrDown(current_image, down);gaussian_pyramid.push_back(down);current_image = down;}// 构建拉普拉斯金字塔vector<Mat> laplacian_pyramid;for (int i = 0; i < gaussian_pyramid.size() - 1; ++i) {Mat up;pyrUp(gaussian_pyramid[i + 1], up, gaussian_pyramid[i].size());Mat laplacian = gaussian_pyramid[i] - up;laplacian_pyramid.push_back(laplacian);}// 最顶层高斯金字塔图像也加入拉普拉斯金字塔laplacian_pyramid.push_back(gaussian_pyramid.back());// 显示拉普拉斯金字塔for (int i = 0; i < laplacian_pyramid.size(); ++i) {imshow("Laplacian Pyramid Level " + to_string(i + 1), laplacian_pyramid[i]);}// 从拉普拉斯金字塔恢复原始图像Mat reconstructed_image = laplacian_pyramid.back(); // 从最顶层开始for (int i = laplacian_pyramid.size() - 2; i >= 0; --i) {Mat up;pyrUp(reconstructed_image, up, laplacian_pyramid[i].size());reconstructed_image = up + laplacian_pyramid[i];}// 显示恢复的图像imshow("Reconstructed Image", reconstructed_image);waitKey(0);return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/385646.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【VUE】个人记录:父子页面数据传递

1. 父传子 在父页面中&#xff0c;调用子页面的组件位置处&#xff0c;通过“&#xff1a;”进行参数传递 <child-component :childData"parentData"></child-component>parentData对象&#xff0c;需要在父页面的data中进行初始化声明 在子页面中&am…

百易云资产管理运营系统 comfileup.php 文件上传致RCE漏洞复现(XVE-2024-18154)

0x01 产品简介 百易云资产管理运营系统,是专门针对企业不动产资产管理和运营需求而设计的一套综合解决方案。该系统能够覆盖资产的全生命周期管理,包括资产的登记、盘点、评估、处置等多个环节,同时提供强大的运营分析功能,帮助企业优化资产配置,提升运营效率。 0x02 漏…

为RTEMS Raspberrypi4 BSP添加SPI支持

为RTEMS Raspberrypi4 BSP添加SPI支持 主要参考了dev/bsps/shared/dev/spi/cadence-spi.c RTEMS 使用了基于linux的SPI框架&#xff0c;SPI总线驱动已经在内核中实现。在这个项目中我需要实习的是 RPI4的SPI主机控制器驱动 SPI在RTEMS中的实现如图&#xff1a; 首先需要将S…

Profinet从站转TCP/IP协议转化网关(功能与配置)

如何将Profinet和TCP/IP网络连接通讯起来呢?近来几天有几个朋友问到这个问题&#xff0c;那么作者在这里统一说明一下。其实有一个不错的设备产品可以很轻易地解决这个问题&#xff0c;名为JM-DNT-PN。接下来作者就从该设备的功能及配置详细说明一下。 一&#xff0c;设备主要…

Python:随机数、随机选择的应用

step1:导入 导入的random相当于是创建了random文件里的的一个对象 import random random() 产生0~1随机数 randint(a,b)产生a~b的整数 闭区间&#xff0c;可以取到a,b random.choice(touple_name)从touple_name&#xff08;数组、列表..&#xff09;中随机选择元素 import rand…

JSP内置对象及作用域

Request 存东西ResponseSession 存东西Application [ SerlvetContext ] 存东西config [ SerlvetConfig ]out/targetpage 不用了解exception <% page contentType"text/html;charsetUTF-8" language"java" %> <html> <head><title>…

DBeaver使用SQL脚本编辑器

文章目录 1 新建脚本2 选择数据库3 编写脚本【按行执行】参考 1 新建脚本 2 选择数据库 3 编写脚本【按行执行】 光标放到需要执行的行上&#xff0c;点击【最上面的按钮】 或者选中某片代码&#xff0c;然后执行 也可以编写一个脚本然后执行 参考 dbeaver安装和使用教程 …

LeetCode 热题 HOT 100 (011/100)【宇宙最简单版】

【图论】No. 0200 岛屿数量 【中等】&#x1f449;力扣对应题目指路 希望对你有帮助呀&#xff01;&#xff01;&#x1f49c;&#x1f49c; 如有更好理解的思路&#xff0c;欢迎大家留言补充 ~ 一起加油叭 &#x1f4a6; 欢迎关注、订阅专栏 【力扣详解】谢谢你的支持&#xf…

Chrome谷歌浏览器Console(控制台)显示文件名及行数

有没有这样的困扰&#xff1f;Chrome谷歌浏览器console(控制台)不显示编译文件名及行数? 设置&#xff08;Settings&#xff09;- > 忽略列表&#xff08;lgnore List&#xff09;-> 自定义排除规则&#xff08;Custom exclusion rules&#xff09; 将自定义排除规则…

Skyeye云智能制造企业版源代码全部开放

智能制造一体化管理系统 [SpringBoot2 - 快速开发平台]&#xff0c;适用于制造业、建筑业、汽车行业、互联网、教育、政府机关等机构的管理。包含文件在线操作、工作日志、多班次考勤、CRM、ERP 进销存、项目管理、EHR、拖拽式生成问卷、日程、笔记、工作计划、行政办公、薪资模…

【数据结构】堆,优先级队列

目录 堆堆的性质大根堆的模拟实现接口实现构造方法建堆入堆判满删除判空获取堆顶元素 Java中的PriorityQueue实现的接口构造方法常用方法PriorityQueue注意事项 练习 堆 如果有一个集合K {k0&#xff0c;k1&#xff0c; k2&#xff0c;…&#xff0c;kn-1}&#xff0c;把它的…

【C++】C++入门基础

✨✨欢迎大家来到Celia的博客✨✨ &#x1f389;&#x1f389;创作不易&#xff0c;请点赞关注&#xff0c;多多支持哦&#x1f389;&#x1f389; 所属专栏&#xff1a;C 个人主页&#xff1a;Celias blog~ 目录 一、C简介 二、第一个C程序 三、namespace 命名空间 3.1 na…

UART 通信协议

文章目录 一 简介二 电平标准三 引脚定义四 数据格式五 波特率 一 简介 ​ UART (Universal Asynchronous Receiver/Transmitter)&#xff0c;通用异步收发器&#xff0c;是一种串行、异步、全双工通信协议。 串行&#xff1a;利用一条传输线&#xff0c;将数据一位一位地传送…

一整套开箱即用的前端管理后台解决方案,基于 Vue.js搭配使用 iView UI 组件库形成的,私活神器

前言 在现代Web应用开发中&#xff0c;后台管理系统的构建常常面临诸多挑战&#xff0c;如复杂的权限管理、多语言支持、响应式设计等。现有解-决方案可能存在功能不丰富、定制难度大、开发效率低等问题。 为了解决这些痛点&#xff0c;一款新的软件——iView Admin&#xff…

【Docker】Windows11环境下的安装

前置依赖环境配置 确保虚拟化开启 搜索栏直接搜索如下功能 勾选下面两个选项&#xff0c;确定 重启电脑&#xff0c;以管理员身份打开PowerShell wsl --status wsl --update打开微软应用商店选择一个Ubuntu版本下载并打开 输入一个用户名和密码 然后就可以在Windows下使…

Flink-CDC解析(第47天)

前言 本文主要概述了Flink-CDC. 1. CDC 概述 1.1 什么是CDC&#xff1f; CDC是&#xff08;Change Data Capture 变更数据获取&#xff09;的简称 &#xff0c;在广义的概念上&#xff0c;只要是能捕获数据变更的技术&#xff0c;都可以称之为 CDC。 核心思想是&#xff0c…

昇思MindSpore 应用学习-GAN图像生成-CSDN

模型简介 生成式对抗网络(Generative Adversarial Networks&#xff0c;GAN)是一种生成式机器学习模型&#xff0c;是近年来复杂分布上无监督学习最具前景的方法之一。 最初&#xff0c;GAN由Ian J. Goodfellow于2014年发明&#xff0c;并在论文Generative Adversarial Nets中…

超逼真AI生成电影来了!《泰坦尼克号》AI重生!浙大阿里发布MovieDreamer,纯AI生成电影引爆热议!

视频生成领域的最新进展主要利用了短时内容的扩散模型。然而&#xff0c;这些方法往往无法对复杂的叙事进行建模&#xff0c;也无法在较长时间内保持角色的一致性&#xff0c;而这对于电影等长篇视频制作至关重要。 对此&#xff0c;浙大&阿里发布了一种新颖的分层框架Mov…

图解分布式事务中的2PC与Seata方案

文章目录 文章导图什么是2PC解决传统2PC方案XA方案DTP模型举例&#xff1a;新用户注册送积分总结&#xff1a; Seata方案设计思想执行流程举例&#xff1a;新用户注册送积分 Seata实现2PC事务&#xff08;AT模式&#xff09;前提整体机制写隔离读隔离实际案例理解要点说明核心代…

uniapp小程序中富文本内容渲染图片不展示的问题

文章目录 1.从后端请求的数据中图片是这样的2.前端我是用Uview中的u-parse组件3.这样修改去掉富文本中的所有反斜杠4.完美解决 1.从后端请求的数据中图片是这样的 <p><img src\\\"https://zhangsanfengcode.cn:8084/images/2024-06-28a257befe.jpg\\\" alt…