计算机视觉学习笔记--高斯金字塔,DoG金字塔和拉普拉斯金字塔附带代码

news/2024/10/20 17:19:49/

尺度空间和图像金字塔

  • 尺度并非指图像的大小,而是指图像的模糊程度,从近距离到远距离图像越来越模糊的过程,也是图像的尺度越来越大的过程。
  • 尺度空间是图像在不同尺度下的连续表示。其中最常见的是使用高斯核对图像进行卷积。随着高斯滤波核尺度的增加,图像变得越来越模糊,直到只剩下最基本的特征。
  • 图像金字塔是尺度空间的一种具体实现方式。它是由一系列不同分辨率的图像组成,这些图像以金字塔的形状排列。

常见的金字塔有以下几种:

  1. 高斯金字塔(Gaussian Pyramid):高斯金字塔是通过对图像进行高斯滤波和下采样来构建的。高斯滤波可以平滑图像,下采样可以降低图像的分辨率。高斯金字塔具有尺度不变性,可以用于尺度不变的图像处理任务。
  2. DoG 金字塔(Difference of Gaussians Pyramid):DoG 金字塔是通过对高斯金字塔同一层中的不同图像进行差分来构建的。DoG 金字塔可以捕捉图像的局部特征,可以用于目标检测和边缘检测等任务。
  3. 拉普拉斯金字塔(Laplacian Pyramid):拉普拉斯金字塔是通过对高斯金字塔不同分辨率图像进行差分来构建的。拉普拉斯金字塔可以捕捉图像的边缘和细节信息,可以用于图像融合和特征提取等任务。

图像金字塔通常通过对图像进行下采样或上采样来构建。

下采样可以降低图像的分辨率,上采样可以提高图像的分辨率。

        下采样缩小原图,使得图像符合对应的显示区域。把一个位于原始图像上的s*s的窗口变成一个像素,若原图为x*y,则下采样之后的原图的尺寸为(x/s)(y/s)。实现方法有池化(pooling),卷积步长调整等。

        上采样放大图像,可以在更高分辨率的显示设备上显示,但是会对图像的质量进行影响,实现方法有插值,反卷积,反池化。

高斯金字塔

         高斯金字塔通过对图像进行高斯滤波和下采样获得一系列下采样图像。高斯金字塔的下采样是对高斯滤波后的图像进行,以降低图像的分辨率。

下采样可以通过以下几种方式实现:

  • 平均池化:对图像的每个局部区域进行平均操作,从而得到一个像素值。
  • 最大池化:对图像的每个局部区域进行最大值操作,从而得到一个像素值。
  • 双线性插值:通过对相邻像素进行插值来得到新的像素值。

高斯金字塔的构建过程

  1. 将原图作为高斯金字塔的第 0 层图像
  2. 对高斯金字塔的第 i 层(i = 0,1,2...)图像进行高斯滤波,可以用不同的平滑系数(σ):
  3. 对高斯滤波后的图像进行下采样,生成高斯金字塔的第 i+1 层图像
  4. 高斯金字塔的第 i 层图像的尺寸为:

其中,width_0 和 height_0 是原始图像的宽度和高度。

重复前面两步,直到达到预定的金字塔层数。

 

 DoG 金字塔

        DoG 金字塔(Difference of Gaussians Pyramid)是指通过对高斯金字塔同一层中的不同图像进行差分来构建的图像金字塔。

 DoG 金字塔的构建过程:

  1. 对原始图像进行高斯滤波,得到不同尺度的高斯金字塔
  2. 对相邻尺度的高斯金字塔进行差分,得到 DoG 金字塔                                             DoG 金字塔的第i层第 j 张可以表示为: DoG(i, j) = G(i, j) - G(i, j-1)
  3. 确定极值点,对 DoG 金字塔进行极值点检测,找到图像的局部特征点。

 拉普拉斯金字塔

 拉普拉斯金字塔它可以捕捉图像的边缘和细节信息,它也是基于高斯金字塔构建的。

拉普拉斯金字塔的构建过程:

  1. 构建高斯金字塔。
  2. 对高斯金字塔进行差分,得到拉普拉斯金字塔。拉普拉斯金字塔的第 i 层可以表示为:Laplacian(i) = G(i) - Expand(G(i+1))
  3. 其中,G(i) 是高斯金字塔的第 i 层,Expand(i) 是图像的上采样操作。拉普拉斯金字塔捕捉了高斯金字塔连续层之间的细节差异,强调了原始图像中存在的边缘和高频分量。

比较 

 

金字塔类型特性构建方式应用
高斯金字塔提供图像的多尺度表示高斯模糊和下采样尺度不变形,图像压缩
DoG金字塔比较高斯金字塔的相邻级别,强调牧户差异并且捕获角点和斑点等局部特征高斯金字塔中的相邻层的差异目标检测,边缘检测
拉普拉斯金字塔关注不同尺度下图像中存在的所用边缘和细节通过获取高斯金字塔中相邻级别之间的差异来计算拉普拉斯金字塔,涉及对上一层的金字塔图像进行上采样图像融合,增强,纹理分析

代码部分

高斯金字塔

python">import cv2
import numpy as np
import matplotlib.pyplot as plt
from pylab import *
def build_gaussian_pyramid(image, levels):pyramid = [image]  #列表temp = imagefor i in range(1,levels):# 高斯滤波blurred = cv2.GaussianBlur(temp,(5,5),0 )# 下采样width,height=temp.shape[:2]down_sampled = cv2.resize(blurred, (width//2,height//2), interpolation=cv2.INTER_AREA)pyramid.append(down_sampled) #加入到列表temp = down_sampled  #作为下一次下采样的对象return pyramid
image = cv2.imread('g:\lena.jpg')
pyramid = build_gaussian_pyramid(image,3)
#窗口显示for i, layer in enumerate(pyramid):window_name = f'Gaussian Pyramid Level {i}'cv2.imshow(window_name, layer)cv2.waitKey(0)

拉普拉斯金字塔

python">import cv2
from pylab import *def build_gaussian_pyramid(image, levels):pyramid = [image]  # 列表temp = imagefor i in range(1, levels):# 高斯滤波blurred = cv2.GaussianBlur(temp, (5, 5), 0)# 下采样width, height = temp.shape[:2]down_sampled = cv2.resize(blurred, (width // 2, height // 2), interpolation=cv2.INTER_AREA)pyramid.append(down_sampled)  # 加入到列表temp = down_sampled  # 作为下一次下采样的对象return pyramid
def build_laplacian_pyramid(image, levels):# 构建高斯金字塔gaussian_pyramid = build_gaussian_pyramid(image, levels)# 构建拉普拉斯金字塔列表laplacian_pyramid = []for i in range(len(gaussian_pyramid)-1):# 上采样up_sampled = cv2.resize(gaussian_pyramid[i+1], (gaussian_pyramid[i].shape[1],gaussian_pyramid[i].shape[0]), interpolation=cv2.INTER_LINEAR)# 相减laplacian_layer = cv2.subtract(gaussian_pyramid[i], up_sampled)laplacian_pyramid.append(laplacian_layer)return laplacian_pyramidimage = cv2.imread('g:\lena.jpg')
pyramid = build_laplacian_pyramid(image,4)
#窗口显示
for i, layer in enumerate(pyramid):window_name = f'Gaussian Pyramid Level {i}'cv2.imshow(window_name, layer)cv2.waitKey(0)

http://www.ppmy.cn/news/1538473.html

相关文章

【QT Quick】C++交互:暴露 C++ 对象到 QML

【QT Quick】C交互:暴露 C 对象到 QML 在 Qt Quick 开发中,使用 Context Property 将 C 对象暴露给 QML 是一种直观有效的方式。这种方法允许我们直接在 QML 中访问 C 对象的属性和方法,而无需使用信号和槽。这篇文章将详细展开如何通过 Con…

Excel重新踩坑1:加密保护工作簿、编辑保护工作簿、编辑保护工作表、允许编辑区域;填充柄;同时编辑多个单元格为同一个值

0、工作簿和工作表的概念: 一个Excel文件就是一个工作簿,工作簿当中有很多工作表,每个工作表中有很多单元格构成。 1、加密保护工作簿:全部保护起来 给工作簿设置密码,需要密码才能打开工作簿,看到其中的…

力扣面试150 最大正方形 二维DP 记忆化搜索 DFS

Problem: 221. 最大正方形 &#x1f468;‍&#x1f3eb; 参考题解 class Solution {public int maximalSquare(char[][] matrix) {// base condition: 如果矩阵为空&#xff0c;直接返回面积为 0if (matrix null || matrix.length < 1 || matrix[0].length < 1) {re…

阿里云的Qwen2.5-Coder 和 Qwen2.5-Math专有模型怎么样?

阿里云发布Qwen2.5 系列模型&#xff0c;最新发布的 Qwen2.5 系列中包括普通的大语言模型 (LLM) 以及针对编程和数学的专用模型&#xff1a;Qwen2.5-Coder 和 Qwen2.5-Math。 包括&#xff1a; Qwen2.5: 0.5B、1.5B、3B、7B、14B、32B 和 72BQwen2.5-Coder: 1.5B、7B 和 32B&…

【云从】三、计算机网络基础

文章目录 1、网络2、网络通信2.1 IP地址2.2 子网掩码2.3 网关2.4 私有地址和公有地址2.5 NAT网络地址转换 3、网络架构及设备 1、网络 网络&#xff0c;即通过通信线路&#xff08;如光纤、网线&#xff09;和通信设备&#xff08;如路由器、光猫&#xff09;&#xff0c;将各…

Python大数据学习之Hadoop学习——day08_hive函数

一.hive查询 语法结构&#xff1a; SELECT [ALL | DISTINCT] 字段名&#xff0c;字段名,... FROM 表名 [inner | left outer | right outer | full outer | left semi join 表名 on 关联条件] [where 非聚合条件] [GROUP BY 分组字段名] [HAVING 聚合条件] [ORDER BY 排序字段…

【前端】 常用的版本控制符号汇总

前端的版本控制符主要用于管理前端项目中依赖包的版本。它们通常在package.json文件中定义&#xff0c;帮助开发者指定所需的库和框架的版本范围。以下是一些关键概念&#xff1a; 版本控制符号详解&#xff1a; 1. 依赖管理 在前端开发中&#xff0c;依赖管理工具&#xff…

Python Enhancement Proposals,Python 增强提案

PEPs&#xff08;Python Enhancement Proposals&#xff0c;Python 增强提案&#xff09;是 Python 社区提出的建议文档&#xff0c;用于描述 Python 新特性的设计、语言的改进、核心开发过程中的重要问题或信息。PEP 是 Python 开发过程中的核心机制之一&#xff0c;用来记录对…