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.mzph.cn/web/50260.shtml

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

相关文章

【PyTorch】基于YOLO的多目标检测项目(二)

【PyTorch】基于YOLO的多目标检测项目&#xff08;一&#xff09; 【PyTorch】基于YOLO的多目标检测项目&#xff08;二&#xff09; YOLO-v3网络由跨距为2的卷积层、跳跃连接层和上采样层组成&#xff0c;没有池化层。网络接收一幅416 * 416的图像作为输入&#xff0c;并提供三…

C++从入门到入土(三)--6个默认成员函数

目录 前言 什么是默认成员函数 构造函数 概念 特性 析构函数 概念 特性 拷贝构造函数 概念 特性 赋值运算符重载 特性 前言 很久没有更新文章了&#xff0c;最近把类和对象相关的知识重新回顾了一遍&#xff0c;打算从今天开始继续更新C从入门到入土系列。前面我们…

DVWA中SQL注入漏洞细说

SQL注入是一种安全漏洞&#xff0c;它允许攻击者通过影响Web应用程序的后端数据库。攻击者可以通过在输入字段中插入恶意SQL代码来执行非授权查询&#xff0c;从而获取或修改数据。 在开始启动SQL注入之前我们先将DVWA的安全等级调整到Low 1、我们在SQL Injection中输入 1 and…

Linux文件恢复

很麻烦 一般还是小心最好 特别恢复的时候 可能不能选择某个文件夹去扫描恢复 所以 删除的时候 用rm -i代替rm 一定小心 以及 探索下linux的垃圾箱机制 注意 一定要恢复到不同文件夹 省的出问题 法1 系统自带工具 debugfs 但是好像不能重启&#xff1f; testdisk 1、安装 …

Flink笔记整理(四)

Flink笔记整理&#xff08;四&#xff09; 文章目录 Flink笔记整理&#xff08;四&#xff09;六、Flink中的时间和窗口6.1 窗口&#xff08;Window&#xff09;窗口的概念窗口的分类窗口API概览窗口分配器窗口函数&#xff08;Window Functions&#xff09; 6.2 时间语义&…

MySQL的库操作和表操作

文章目录 MYSQLSQL语句分类服务器&#xff0c;数据库和表的关系 库操作表操作 MYSQL SQL语句分类 DDL【data definition language】 数据定义语言&#xff0c;用来维护存储数据的结构代表指令: create, drop, alterDML【data manipulation language】 数据操纵语言&#xff0…

关键路径算法(Critical Path)

这个算法《算法导论》中并没有提及&#xff0c;很多书和博客说的有点奇怪&#xff0c;所以写本文作为笔记。 关键路径是什么 关键路径的定义非常简单&#xff1a;就是一个图中&#xff0c;权值之和最大的路径就是关键路径。 那么就可以知道关键路径不唯一。 为什么有关键路…

安装 moleculeSTM 踩坑日记

“学习 LLM &#xff0c;在大模型时代为自己存张船票”。 相信很多人都有这样的想法。那么&#xff0c;在 AI for science 领域&#xff0c;哪些 LLM 模型值得一试呢&#xff1f; 笔者认为&#xff1a; LLM 直接预测 SMILES 性质 or 直接生成 SMILES 的技术路线是行不通的。因…

搭建DNS正向解析,反向解析+搭建DNS主从架构+搭建DNS多区域+时间同步

主要在局域网中配置&#xff0c;不存在外网 正向解析&#xff1a;域名解析为IP named.conf 解决权限 named.rfc1912.zones 解决解析方式 环境准备&#xff1a;三台机器都做下面的操作 基础配置&#xff1a;网络配置&#xff0c;关闭安全架构&#xff0c;关闭防火墙&#x…

使用langchain4j调用大模型写个聊天助手

LangChain4j是一款基于Java的高效、灵活的AI大模型应用框架&#xff0c;专为简化Java应用程序与LLMs&#xff08;大语言模型&#xff09;的集成而设计。它提供统一API和模块化设计&#xff0c;支持多种LLM提供商和嵌入模型&#xff0c;以及丰富的工具箱&#xff0c;如AI服务和R…

光伏混合储能直流微网直流母线电压下垂控制MATLAB仿真

微❤关注“电气仔推送”获得资料&#xff08;专享优惠&#xff09; 模型简介 此模型以混合储能系统为研究对象&#xff0c;采用基于关联参数SOC的改进下垂控制策略&#xff0c;将初始下垂系数与储能单元SOC的n次幂的比值作为现行下垂系数&#xff0c;通过改变n值&#xff0c;…

【快速上手ESP32(ESP-IDF)】ADC数模转换(含单次转换和连续转换以及校准)

这篇为重置版。 因为准备录制视频了&#xff0c;然后回过头看看之前讲ADC的文章发现有不少错误的地方&#xff08;但是代码是可以用的&#xff09;&#xff0c;而且讲的也不全面&#xff0c;因此决定写下这个重置版。 这边提供三种使用ADC的方法&#xff0c;第一种是老方法&a…

港科夜闻 | 香港科大与阿里巴巴合作,计划成立大数据与人工智能联合实验室

关注并星标 每周阅读港科夜闻 建立新视野 开启新思维 1、香港科大与阿里巴巴合作&#xff0c;计划成立大数据与人工智能联合实验室。香港科大7月19日与阿里巴巴集团签署合作备忘录&#xff0c;计划成立「香港科技大学–阿里巴巴大数据与人工智能联合实验室」&#xff0c;就生成…

科普文:万字梳理31个Kafka问题

1、 kafka 是什么,有什么作用 2、Kafka为什么这么快 3、Kafka架构及名词解释 4、Kafka中的AR、ISR、OSR代表什么 5、HW、LEO代表什么 6、ISR收缩性 7、kafka follower如何与leader同步数据 8、Zookeeper 在 Kafka 中的作用&#xff08;早期&#xff09; 9、Kafka如何快…

UDP程序设计

UDP协议概述 UDP&#xff0c;User Datagram Protocol&#xff0c;用户数据报协议&#xff0c;是一个简单的面向数据报(package-oriented)的传输层协议&#xff0c;规范为&#xff1a;RFC 768。 UDP提供数据的不可靠传递&#xff0c;它一旦把应用程序发给网络层的数据发送出去…

Java | Leetcode Java题解之第300题最长递增子序列

题目&#xff1a; 题解&#xff1a; class Solution {public int lengthOfLIS(int[] nums) {int len 1, n nums.length;if (n 0) {return 0;}int[] d new int[n 1];d[len] nums[0];for (int i 1; i < n; i) {if (nums[i] > d[len]) {d[len] nums[i];} else {int…

做一个能和你互动玩耍的智能机器人之四--固件

在openbot的firmware目录下我们能够找到arduino的固件源码和相关的文档。 openbot的controller目录下&#xff0c;是控制器的代码目录&#xff0c;用来控制机器人做一些动作。未来的目标是加入大模型&#xff0c;使其能够理解人的语言和动作来控制。 固件代码&#xff0c;支持…

利用小爱同学与点灯科技+esp8266+舵机,制作智能关灯神器:小白也可制作,米家同步设备可实现多部手机进行控制。(亲测有用)

利用小爱同学与点灯科技&#xff0c;制作智能关灯神器&#xff1a;小白也可制作&#xff0c;米家同步设备可实现多部手机进行控制。 文章目录 利用小爱同学与点灯科技&#xff0c;制作智能关灯神器&#xff1a;小白也可制作&#xff0c;米家同步设备可实现多部手机进行控制。1.…

19. Revit API: Parameter(参数)

一、前言 我们在前面或多或少提到也用到参数了&#xff0c;这篇便细讲一下。 首先&#xff0c;我们知道好多信息都藏在参数里&#xff0c;或者说可以从参数中获取。我们还能够通过调整参数的值&#xff0c;改变模型的形态&#xff0c;即族的参变。 其次&#xff0c;有时族上…