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

图像金字塔

有时为了在图像中检测一个物体(例如人脸、汽车或其他类似的物体),需要调整图像的大小或对图像进行子采样,并进行进一步的分析。在这种情况下,会保持一组具有不同分辨率的同一图像。称这种集合为图像金字塔。之所以称之为金字塔,是因为当按分辨率降序排列这些图像时,会形成一个以正方形为底的金字塔形状。下面的图片可以帮助你更详细地理解这个概念。
在这里插入图片描述
新层的面积将是下面层的1/4。如果底层图像(高分辨率或第0层)的大小是M x N,那么它上面的层的大小将是(M/2 x N/2)。其中图层越高,尺寸越小。
在一些著名的CNN神经网络中(如ResNet、YOLO、SSD等),它们都使用了图像金字塔获取输入图像的特征。
在这里插入图片描述

高斯金字塔

高斯金字塔是SIFT算法中引入的概念。实际上,高斯金字塔并不是一个金字塔,而是由多个组(Octave)金字塔组成,每个组金字塔包含多个层(Interval)。

构建高斯金字塔的过程如下:

  1. 首先,将原始图像放大一倍,作为高斯金字塔的第一组的第一层。然后,对第一组的第一层图像进行高斯平滑(也称为高斯滤波),得到第一组金字塔的第二层。高斯卷积函数如下所示:

在这里插入图片描述

在SIFT算法中,参数σ取固定值1.6。

  1. 接下来,将σ乘以一个比例系数k,得到新的平滑因子σ= k * σ,然后使用该因子对第一组的第二层图像进行平滑处理,得到第一组的第三层。

  2. 重复以上步骤,直到得到L层图像。在同一组内,每层图像的尺寸相同,但平滑系数不同。它们的平滑系数分别为:0,σ,kσ,k2σ,k3σ,……,k^(L-2)σ。

  3. 将第一组的倒数第三层图像进行比例因子为2的降采样,得到第二组的第一层。然后对第二组的第一层图像进行σ的高斯平滑处理,得到第二组的第二层,类似于步骤2。重复此过程,得到第二组的L层图像。在同一组内,它们的尺寸相同,但在不同组之间,第二组的图像尺寸是第一组图像尺寸的一半。

通过反复执行以上步骤,可以得到O组金字塔,每组包含L层,共计O*L个图像。这些图像一起构成了高斯金字塔。

在同一组内,不同层图像的尺寸相同,后一层图像的平滑系数是前一层图像平滑系数的k倍。在不同组之间,后一组的第一个图像是前一组倒数第三个图像的二分之一采样,尺寸是前一组的一半。

缩减或下采样

高斯金字塔中的缩减操作是根据下面给出的关系进行的。
在这里插入图片描述
这里的l代表层级,w(m,n)是窗口函数(高斯)。缩减操作与卷积操作的唯一区别是,在卷积操作中,步长值为1,而在缩减操作中步长值为2。用高斯掩模与每一行和每一列交替进行卷积。

window=5
offset= window//2
gwindow =gkern(window,1.4)
row,col = gray_img.shape
if row%2==0:h = row-offset
else:h = row-offset-1
if col%2==0:w = row-offset
else:w = row-offset-1
nextLevel= np.zeros((w//2-1,h//2-1))
for i in range(2, w):for j in range(2, h):if j%2==0 and i%2==0:patch = gray_img[i-offset:i+offset+1,j-offset:j+offset+1]psum= np.dot(patch,gwindow).sum()nextLevel[(i//2)-1,(j//2)-1] = psum

opencv 实现

lowResImage = cv2.pyrDown(highResImage)

扩展或上采样

高斯金字塔中的扩展操作是根据下面给出的关系进行的。为了更清楚地理解上面的关系,让我们在一维情况下展开上面的公式。
在这里插入图片描述
上面的公式中的非整数值最终将被消除,最终公式将只有三个项。
在这里插入图片描述

上面的图片中的a、b、c、d和e项是一维中的高斯权重。在扩展操作中,新像素是通过不同的高斯权重组合从旧像素创建的。
在这里插入图片描述

highResImage = cv2.pyrUp(lowResImage)

拉普拉斯金字塔

在这里插入图片描述
在高斯金字塔中,首先对图像应用高斯模糊,然后进行子采样以降低分辨率。这一过程在每个后续层级上重复进行,从而构建出一个由多个分辨率逐渐减小的图像层组成的金字塔结构。

而在拉普拉斯金字塔中,首先创建一个高斯金字塔,然后通过对每个高斯层级的应用拉普拉斯算子来构建。拉普拉斯算子,也就是拉普拉斯-高斯(LoG)算子,用于突出图像中的边缘和高频细节。这与Marr-Hildreth边缘检测器中使用的概念相似,该检测器利用LoG来识别图像中的边缘。

实际上,拉普拉斯金字塔是通过从高斯金字塔的每个层级中减去其下一层级上采样后的图像来创建的。这个过程在下面的公式中有所体现:

L i = G i − u p s a m p l e ( G i + 1 ) L_{i} = G_{i} - upsample(G_{i+1}) Li=Giupsample(Gi+1)

其中 L i L_{i} Li 是拉普拉斯金字塔的第 i i i层, G i G_{i} Gi 是高斯金字塔的第 i i i层, u p s a m p l e upsample upsample是上采样操作。

通过这种方法,可以生成拉普拉斯金字塔的每一层,从而捕获图像的不同尺度的细节信息。这在图像处理和计算机视觉中非常有用,尤其是在需要对图像进行多尺度分析的应用中,如图像融合、纹理分析和特征提取等。

OpenCV代码实现

import cv2
import numpy as npdef laplacian_pyramid(image, levels):pyramid = [image]for _ in range(levels):image = cv2.GaussianBlur(image, (5, 5), 0)downsampled = cv2.pyrDown(image)expanded = cv2.pyrUp(downsampled)diff = cv2.subtract(image, expanded)pyramid.append(diff)image = downsampledreturn pyramid# Example usage
image = cv2.imread('input_image.jpg', cv2.IMREAD_GRAYSCALE)
levels = 4
laplacian_pyr = laplacian_pyramid(image, levels)

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

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

相关文章

人大金仓数据库介绍与使用指南

人大金仓数据库是一款强大的关系型数据库管理系统,具有简单易用、高性能和稳定可靠的特点。本文将介绍人大金仓数据库的安装方法、常用的SQL语法以及相关工具的使用。 一、安装方法: 1、下载人大金仓数据库安装程序; 2、运行安装程序&#…

自动驾驶之心规划控制笔记

Search-based Path Planning Methods Path Finding Problem 一般来说指标有距离,耗费时间,能量,或者多目标。 左图是拓扑地图,蓝色的点就是顶点,绿色的线是连接关系。最后得到的是一个从哪里走的一个最优,并非精细解。 右图是栅格地图,这个搜索出来的是在相对分辨率比…

SSL证书有哪些种类?有免费的吗?

SSL证书主要有以下几种类型: 1. 域名验证型SSL证书 (DV SSL): - 仅对申请者的域名所有权进行验证,无需人工验证申请单位的真实身份。 - 审核快速,通常适用于个人网站、小型组织或各类加密应用。 2. 组织验证型SSL证书 (OV…

C++的并发世界(五)——线程状态切换

0.线程状态 初始化:该线程正在被创建; 就绪:该线程在列表中就绪,等待CPU调度; 运行:该线程正在运行; 阻塞:该线程被阻塞挂机,Blocked状态包括:pend&#xff…

顶级Layer-3 通证正在飙升,布局龙头Degen Chain(含bitget教程)

近期以太坊生态内,Base 一枝独秀,其 TVL 突破 25 亿美元,创历史新高。并且生态内的社交文化和 DeFi 板块的龙头都很惹眼。 Farcaster 协议上的 meme 币 DEGEN 目前价格为 0.018 美元,7 日涨幅达 376%。 DEGEN 兴起于 Farcaster 的…

数据开发-面试真题。

1. 自我介绍 2.在培训班的学过的项目经历 3.之前的工作经历,以及薪资 4.开始讲之前的项目经历 5.技术面试官开始提问。 kafka中进行数据分层,怎么从kafka中实时查询到相关的数据,一条或几条 6.java中的集合,以及io流 7.给定…

知识产权与标准化

根据希赛相关视频课程汇总整理而成,是个人软考的复习笔记,仅供参考 知识产权概述 知识产权类型: ①著作权(版权、文学产权) ② 工业产权(产业产权) 知识产权的特点: 无形性、独占性…

PS从入门到精通视频各类教程整理全集,包含素材、作业等(7)复发

PS从入门到精通视频各类教程整理全集,包含素材、作业等 最新PS以及插件合集,可在我以往文章中找到 由于阿里云盘有分享次受限制和文件大小限制,今天先分享到这里,后续持续更新 PS敬伟01——90集等文件 https://www.alipan.com/s…

【学习笔记】java项目—苍穹外卖day07

文章目录 苍穹外卖-day07课程内容1. 缓存菜品1.1 问题说明1.2 实现思路1.3 代码开发1.4 功能测试1.5 代码提交 2. 缓存套餐2.1 Spring Cache2.1.1 介绍2.1.2 常用注解2.1.3 入门案例 2.2 实现思路2.3 代码开发2.4 功能测试2.5 代码提交 3. 添加购物车3.1 需求分析和设计3.1.1 产…

Leetcode刷题-数组(二分法、双指针法、窗口滑动)

数组 1、二分法 704. 二分查找 - 力扣&#xff08;LeetCode&#xff09; 需要注意区间的问题。首先在最外面的循环判断条件是left<right。那就说明我们区间规定的范围就是【left,right】 属于是左闭右闭&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&…

基于java实现的沙县小吃点餐系统

开发语言&#xff1a;Java 框架&#xff1a;ssm 技术&#xff1a;JSP JDK版本&#xff1a;JDK1.8 服务器&#xff1a;tomcat7 数据库&#xff1a;mysql 5.7&#xff08;一定要5.7版本&#xff09; 数据库工具&#xff1a;Navicat11 开发软件&#xff1a;eclipse/myeclip…

WebKit简介

1、简介&#xff08;WebKit&#xff09; WebKit 是一个开源的浏览器引擎&#xff0c;最初由苹果公司基于KHTML&#xff08;K Desktop Environment的HTML渲染引擎&#xff09;开发&#xff0c;并广泛应用于Safari浏览器&#xff0c;后来也被其他多款浏览器和应用采用。WebKit负…

Python程序设计 魔法函数

1.魔法方法 Python中有一些特殊方法&#xff0c;它们允许我们的类和Python更好地集成。在标准库参考&#xff08;Standard Library Reference&#xff09;中&#xff0c;它们被称为魔法方法(Magic Methods)&#xff0c;是与Python的其他特性无缝集成的基础。 例如&#xff0c…

Redis高可用与持久化

目录 一、Redis高可用 二、Redis持久化 1、持久化的功能&#xff1a; 2、Redis 提供两种方式进行持久化&#xff1a; 三、RDB持久化 1、触发条件 1.手动触发 2.自动触发 3.其他自动触发机制 2、执行流程 3、启动时加载 四、AOF持久化 1、开启AOF 2、执行流程 1.…

vue3+elementPlus:实现数字滚动效果(用于大屏可视化)

自行封装注册一个公共组件 案例一&#xff1a; //成功案例&#xff1a; //NumberScroll.vue /* 数字滚动特效组件 NumberScroll */<template><span class"number-scroll-grow"><spanref"numberScroll":data-time"time"class&qu…

构建知识图谱的基石:理解本体和数据模型

构建知识图谱的基石&#xff1a;理解本体和数据模型 一、本体的基本概念 1. 定义与重要性 本体&#xff08;Ontology&#xff09;在计算机科学和信息科学中&#xff0c;尤其是在知识图谱领域&#xff0c;扮演着重要的角色。它提供了一种形式化的描述知识领域的方法&#xff0…

【SpringCloud】Config配置中心

Spring Cloud Config是一个集中的外部配置管理服务器&#xff0c;它支持从各种来源读取配置数据&#xff0c;如Git仓库、本地文件系统、数据库等&#xff0c;并为微服务应用提供统一的配置管理。通过使用Spring Cloud Config&#xff0c;你可以将应用程序的配置信息集中管理&am…

金融案例:构建高效统一的需求登记与管理方案

在金融行业数字化转型背景下&#xff0c;银行等金融机构面临着业务模式创新与数据应用的深度融合。业务上所需要的不再是单纯的数据&#xff0c;而是数据背后映射的业务趋势洞察&#xff0c;只有和业务相结合转化为业务度量指标&#xff0c;经过数据分析处理呈现为报表进行展示…

【零基础C语言】编译和链接

1.翻译环境和运行环境 翻译环境&#xff1a;将源代码转化为可执行的机器指令 运行环境&#xff1a;用于执行机器指令 1.1 翻译环境 翻译环境由编译和链接两大过程构建&#xff0c;编译又可以分为三大过程&#xff1a; 【1】预处理(预编译) 【2】编译 【3】汇编 不同的.c文件经…

力扣(数组)找到所有数组中消失的数字

给你一个含 n 个整数的数组 nums &#xff0c;其中 nums[i] 在区间 [1, n] 内。请你找出所有在 [1, n] 范围内但没有出现在 nums 中的数字&#xff0c;并以数组的形式返回结果。 示例 1&#xff1a; 输入&#xff1a;nums [4,3,2,7,8,2,3,1] 输出&#xff1a;[5,6]示例 2&am…