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

news2024/11/19 23:22:26

图像金字塔

有时为了在图像中检测一个物体(例如人脸、汽车或其他类似的物体),需要调整图像的大小或对图像进行子采样,并进行进一步的分析。在这种情况下,会保持一组具有不同分辨率的同一图像。称这种集合为图像金字塔。之所以称之为金字塔,是因为当按分辨率降序排列这些图像时,会形成一个以正方形为底的金字塔形状。下面的图片可以帮助你更详细地理解这个概念。
在这里插入图片描述
新层的面积将是下面层的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 np

def 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 = downsampled
    return pyramid

# Example usage
image = cv2.imread('input_image.jpg', cv2.IMREAD_GRAYSCALE)
levels = 4
laplacian_pyr = laplacian_pyramid(image, levels)

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

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

相关文章

耐腐蚀耐高温实验室塑料烧杯进口高纯PFA材质反应器特氟龙烧杯

PFA烧杯在实验过程中可作为储酸容器或涉及强酸强碱类实验的反应容器,用于盛放样品、试剂,可搭配电热板加热、蒸煮、赶酸用。 外壁均有凸起刻度,直筒设计,带翻边,便于夹持和移动,边沿有嘴,便于倾…

【前端面试3+1】10 npm run dev 发生了什么、vue的自定义指令如何实现、js的数据类型有哪些及其不同、【最长公共前缀】

一、npm run dev发生了什么 运行npm run dev时,通常是在一个基于Node.js的项目中,用来启动开发服务器或者执行一些开发环境相关的任务。下面是一般情况下npm run dev会执行的步骤: 1. 查找package.json中的scripts字段: npm会在项…

Unity自定义icon

Unity自定义icon 1. 新建文件夹 OfficeFabricIconSet2. 新建Iconset3. 新建子文件夹Textures并添加icon图片4. 向iconset添加Quad Icons5. 最终效果 教程来源处: https://365xr.blog/build-your-own-button-icon-set-for-microsoft-hololens-2-apps-with-mrtk-using…

园区管理(源码+文档)

园区管理系统(小程序、ios、安卓都可部署) 文件包含内容程序简要说明含有功能项目截图客户端登录页我的退出登录发布详细注意事项公告列表入园记录主页我的资料电梯报修意见反馈客服入园申请注册招商列表 后台管理签到管理公告管理招商管理入园管理反馈报…

玩机进阶教程-----高通9008线刷XML脚本修改备份 檫除的操作步骤解析

在高通9008官方固件中我们可以看到刷写需要的脚本rawprogram0.xml和辅助脚本patch0.xml,脚本的作用在于将固件内各个分区对应写入手机内。根据分区地址段。然后判断脚本中那些分区不写入。以下步骤将分析emmc字库为例来讲解如何将默认刷入脚本修改为备份 檫除脚本。…

从汇编看函数调用

文章目录 函数调用流程栈相关寄存器及的作用简介寄存器功能指令功能 函数的括号{}正括号反括号 栈函数调用函数内部处理 参数传递传值,变量不可改传指针,变量可改C 传引用 函数调用流程 目标:函数调用前后栈保持不变 保存main函数的寄存器…

爬虫实战三、PyCharm搭建Scrapy开发调试环境

#一、环境准备 Python开发环境以及Scrapy框架安装,参考:爬虫实战一、Scrapy开发环境(Win10Anaconda)搭建 PyCharm安装和破解,参考:爬虫实战二、2019年PyCharm安装(激活到2100年) …

【机器学习】“强化机器学习模型:Bagging与Boosting详解“

1. 引言 在当今数据驱动的世界里,机器学习技术已成为解决复杂问题和提升决策制定效率的关键工具。随着数据的增长和计算能力的提升,传统的单一模型方法已逐渐无法满足高精度和泛化能力的双重要求。集成学习,作为一种结合多个学习算法以获得比…

WPS二次开发专题:如何获取应用签名SHA256值

作者持续关注WPS二次开发专题系列,持续为大家带来更多有价值的WPS开发技术细节,如果能够帮助到您,请帮忙来个一键三连,更多问题请联系我(QQ:250325397) 在申请WPS SDK授权版时候需要开发者提供应用包名和签…

如何处理Jenkins打包npm install没有拉取到最新依赖的问题

问题背景: 我们项目中有私有依赖包 frame,是私有服务器上通过 npm 去管理。frame包 publish 之后,通过Jenkins打包时,npm install 一直没有拉取最新的代码。 思考:通过在本地直接替换 node_modules 里的 frame 包&…

推理端框架简介 高通SNPE 神经网络处理引擎 阿里巴巴 MNN 腾讯 FeatherCNN 端侧推理引擎 卷积计算优化 卷积计算优化

高性能计算(High performance computing, 缩写HPC) 指通常使用很多处理器(作为单个机器的一部分) 或者某一集群中组织的几台计算机(作为单个计 算资源操作)的计算系统和环境。 有许多类型的HPC 系统,其范围从标准计算机的大型集群,到高度专用的硬件。 大多数基于集群的H…

复现带积分柱状图+多个分类注释

Original research: Tumor microenvironment evaluation promotes precise checkpoint immunotherapy of advanced gastric cancer - PMC (nih.gov) 补充文件位置:https://www.ncbi.nlm.nih.gov/pmc/articles/PMC8356190/bin/jitc-2021-002467supp001.xlsx 原图 该…

【JavaSE】类和对象详解(下)

前言 面向对象程序的三大特性:封装、继承、多态~ 书接上回 类和对象(上)~ 欢迎关注个人主页:逸狼 创造不易,可以点点赞吗~ 如有错误,欢迎指出~ 目录 前言 封装 private public 快速生成可访问封装的方法 包…

29-控制流(下):iam-apiserver服务核心功能实现讲解

我们再来看下 iam-apiserver 中的核心功能实现。 这些关键代码设计分为 3 类,分别是应用框架相关的特性、编程规范相关的特性和其他特性。 应用框架相关的特性 应用框架相关的特性包括三个,分别是优雅关停、健康检查和插件化加载中间件。 优雅关停 …

尚硅谷2024最新Git企业实战教程 | Git与GitLab的企业实战

这篇博客是尚硅谷2024最新Git企业实战教程,全方位学习git与gitlab的完整笔记。 这不仅仅是一套Git的入门教程,更是全方位的极狐GitLab企业任务流开发实战!作为一应俱全的一站式DevOps平台,极狐GitLab的高阶功能全面覆盖&#xff0…

Python实现BOA蝴蝶优化算法优化卷积神经网络分类模型(CNN分类算法)项目实战

说明:这是一个机器学习实战项目(附带数据代码文档视频讲解),如需数据代码文档视频讲解可以直接到文章最后获取。 1.项目背景 蝴蝶优化算法(butterfly optimization algorithm, BOA)是Arora 等人于2019年提出的一种元启发式智能算…

云存储中常用的相同子策略的高效、安全的基于属性的访问控制的论文阅读

参考文献为2022年发表的Efficient and Secure Attribute-Based Access Control With Identical Sub-Policies Frequently Used in Cloud Storage 动机 ABE是实现在云存储中一种很好的访问控制手段,但是其本身的计算开销导致在实际场景中应用收到限制。本论文研究了…

Wireshark TS | HTTP 传输文件慢问题

问题背景 之前有几篇文章写过关于应用传输慢的问题,延用之前的老套话,应用传输慢是一种比较常见的问题,慢在哪,为什么慢,有时候光从网络数据包分析方面很难回答的一清二楚,毕竟应用的定义范围实在太广&…

蓝桥杯嵌入式学习笔记(9):RTC程序设计

目录 前言 1. RTC介绍 2. 使用CubeMx进行源工程配置 3. 代码编程 3.1 准备工作 3.2 进行bsp_rtc.h编写 3.3 进行bsp_rtc.c编写 3.4 main.c编写 3.4.1 头文件引用 3.4.2 变量声明 3.4.3 子函数声明 3.4.4 函数实现 3.4.5 main函数编写 4. 代码实验 5. 总结 前言 因本人备赛蓝…

企业微信企业主体变更认证介绍

企业微信变更主体有什么作用? 说一个自己亲身经历的事情,当时我在一家教育公司做运营,公司所有客户都是通过企业微信对接的。后来行业整顿,公司不得不注销,换了营业执照打算做技能培训,但发现注销后原来的企…