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

图像金字塔

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

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

相关文章

基于OrangePi Zero2的智能家居项目(开发阶段)

智能家居项目的软件实现 紧接上文 基于OrangePi Zero2的智能家居项目(准备阶段)-CSDN博客 目录 一、项目整体设计 1.1项目整体设计 1.2具体划分 二、开发工作的前期准备 1、进行分类,并用Makefile文件进行管理 参考:自己创…

硬件了解 笔记 2

CPU 内存控制器:负责读写数据 代理系统和平台IO:与主板上的芯片组通信,并管理PC中其他组件之间的数据流 主板:巨大的印刷电路板 Chipset:芯片组,位于散热器下方,直接连接到CPU的系统代理部分 …

详解网络攻击的发生原因、类型及如何防范

网络攻击是访问计算机系统或者大小,修改或窃取数据的未经授权的企图。网络破坏分子可以使用多种攻击媒介,推出包括网络攻击的恶意软件,网络钓鱼,勒索,以及人在这方面的中间人攻击。固有风险和残余风险使这些攻击中的每…

【大数据存储】实验五:Mapreduce

实验Mapreduce实例——排序(补充程序) 实验环境 Linux Ubuntu 16.04 jdk-8u191-linux-x64 hadoop-3.0.0 hadoop-eclipse-plugin-2.7.3.jar eclipse-java-juno-SR2-linux-gtk-x86_64 实验内容 在电商网站上,当我们进入某电商页面里浏览…

鸿蒙实战开发:【实现应用悬浮窗】

如果你要做的是系统级别的悬浮窗&#xff0c;就需要判断是否具备悬浮窗权限。然而这又不是一个标准的动态权限&#xff0c;你需要兼容各种奇葩机型的悬浮窗权限判断。 fun checkPermission(context: Context): Boolean if (Build.VERSION.SDK_INT < Build.VERSION_CODES.M)…

[Arduino学习] ESP8266读取DHT11数字温湿度传感器数据

目录 1、传感器介绍 2、接线 3、DHT.h库 1、传感器介绍 DHT11数字温湿度传感器是一款含有已校准数字信号输出的温湿度复合传感器&#xff0c;是简单环境监测项目的理想选择。 温度分辨率为1C&#xff0c;相对湿度为1&#xff05;。温度范围在0C到50C之间&#xff0c;湿度的测…

java Web 健身管理系统idea开发mysql数据库LayUI框架java编程计算机网页源码maven项目

一、源码特点 java Web健身管理系统是一套完善的信息管理系统&#xff0c;结合java 开发技术和bootstrap完成本系统&#xff0c;对理解JSP java编程开发语言有帮助&#xff0c;系统具有完整的源代码和数据库&#xff0c;系统主要采用B/S模式开发。 前段主要技术 layUI bootst…

PVE设置显卡直通(二:Linux显卡直通,以及Linux系统下安装cuda库)

PVE设置显卡直通(一:硬件设置) 本文仅记录PVE关于Linux下的显卡直通步骤 例程不过多阐述 ps: 无直通经验的同学,先参阅 PVE设置显卡直通(一:硬件设置),再参阅本博文 参阅完成 PVE设置显卡直通(一:硬件设置)后,直接在PVE面板中添加显卡硬件到自己的主机即可,此文中…

CTK插件框架学习-插件注册调用(03)

CTK插件框架学习-新建插件(02)https://mp.csdn.net/mp_blog/creation/editor/136923735 一、CTK插件组成 接口类&#xff1a;对外暴露的接口&#xff0c;供其他插件调用实现类&#xff1a;实现接口内的方法激活类&#xff1a;负责将插件注册到CTK框架中 二、接口、插件、服务…

ABC318 F - Octopus

解题思路 对于每个宝藏维护个区间&#xff0c;答案一定在这些区间中对于每个区间的端点由小到大排序对于每个点进行判断&#xff0c;若当前位置合法&#xff0c;则该点一定为一个右端点则该点到前一个端点之间均为合法点若前一个点不合法&#xff0c;则一定是某一个区间限制的…

C++万物起源:类与对象(三)拷贝构造、赋值重载

目录 一、拷贝构造函数 1.1拷贝构造函数的概念与特征 1.2拷贝构造的实现 1.3默认构造函数 1.4拷贝构造函数典型调用场景 二、赋值运算符重载 2.1赋值运算符重载的格式 一、拷贝构造函数 1.1拷贝构造函数的概念与特征 在c语言语法中&#xff0c;我们可以将一个变量赋值给…

SSTI模板注入(jinja2)

前面学习了SSTI中的smarty类型&#xff0c;今天学习了Jinja2&#xff0c;两种类型都是flask框架的&#xff0c;但是在注入的语法上还是有不同 SSTI&#xff1a;服务器端模板注入&#xff0c;也属于一种注入类型。与sql注入类似&#xff0c;也是通过凭借进行命令的执行&#xff…

【JavaWeb】Day32.MySQL概述

什么是数据库 数据库&#xff1a;英文为 DataBase&#xff0c;简称DB&#xff0c;它是存储和管理数据的仓库。 像我们日常访问的电商网站京东&#xff0c;企业内部的管理系统OA、ERP、CRM这类的系统&#xff0c;以及大家每天都会刷的头条、抖音类的app&#xff0c;那这些大家所…

项目5-验证码案例

选择使用Google的开源项目Kaptcha来实现. 1.Kaptcha 插件介绍 Kaptcha 是Google的⼀个高度可配置的实⽤验证码⽣成⼯具. 代码: http://code.google.com/p/kaptcha/ ⽹上有很多⼈甚⾄公司基于Google的kaptcha进⾏了⼆次开发. 我们选择⼀个直接适配SpringBoot的 开源项目 htt…

Vue 大文件切片上传实现指南包会,含【并发上传切片,断点续传,服务器合并切片,计算文件MD5,上传进度显示,秒传】等功能

Vue 大文件切片上传实现指南 背景 在Web开发中&#xff0c;文件上传是一个常见的功能需求&#xff0c;尤其是当涉及到大文件上传时&#xff0c;为了提高上传的稳定性和效率&#xff0c;文件切片上传技术便显得尤为重要。通过将大文件切分成多个小块&#xff08;切片&#xff0…

(免费分享)基于微信小程序自助停取车收费系统

本项目的开发和制作主要采用Java语言编写&#xff0c;SpringBoot作为项目的后端开发框架&#xff0c;vue作为前端的快速开发框架&#xff0c;主要基于ES5的语法&#xff0c;客户端采用微信小程序作为开发。Mysql8.0作为数据库的持久化存储。 获取完整源码&#xff1a; 大家点赞…

上位机图像处理和嵌入式模块部署(qmacvisual并发执行)

【 声明&#xff1a;版权所有&#xff0c;欢迎转载&#xff0c;请勿用于商业用途。 联系信箱&#xff1a;feixiaoxing 163.com】 类似于qmacvisual这样的软件&#xff0c;其实价格并不便宜。比如大家熟知的halcon、vision pro、vision master这样的软件&#xff0c;最便宜的版本…

AlexNet网络模型

AlexNet 是一个深度卷积神经网络&#xff0c;由 Alex Krizhevsky、Ilya Sutskever 和 Geoffrey Hinton 在 2012 年的 ImageNet 大规模视觉识别挑战赛&#xff08;ILSVRC&#xff09;中首次提出并获得了显著的成功。它是深度学习历史上一个里程碑式的模型&#xff0c;对后来的深…

【漏洞复现】通天星CMSV6车载主动安全监控云平台inspect_file接口处存在任意文件上传漏洞

免责声明&#xff1a;文章来源互联网收集整理&#xff0c;请勿利用文章内的相关技术从事非法测试&#xff0c;由于传播、利用此文所提供的信息或者工具而造成的任何直接或者间接的后果及损失&#xff0c;均由使用者本人负责&#xff0c;所产生的一切不良后果与文章作者无关。该…

【opencv】教程代码 —features2D(4)利用两张摄像机拍摄的图片计算单应性矩阵...

homography_from_camera_displacement.cpp Chessboard poses 棋盘姿态 使用根据相机位移计算的单应性扭曲图像 使用根据绝对相机姿势计算的单应性扭曲图像 Warped images comparison 扭曲图像比较 左侧-nfindHomography 右侧-使用根据相机位移计算的单应性扭曲图像 终端输出&a…