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

news2024/11/19 21:28:56

尺度空间和图像金字塔

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

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

  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金字塔比较高斯金字塔的相邻级别,强调牧户差异并且捕获角点和斑点等局部特征高斯金字塔中的相邻层的差异目标检测,边缘检测
拉普拉斯金字塔关注不同尺度下图像中存在的所用边缘和细节通过获取高斯金字塔中相邻级别之间的差异来计算拉普拉斯金字塔,涉及对上一层的金字塔图像进行上采样图像融合,增强,纹理分析

代码部分

高斯金字塔

import cv2
import numpy as np
import matplotlib.pyplot as plt
from pylab import *
def build_gaussian_pyramid(image, levels):
    pyramid = [image]  #列表
    temp = image
    for 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)

拉普拉斯金字塔

import cv2
from pylab import *

def build_gaussian_pyramid(image, levels):
    pyramid = [image]  # 列表
    temp = image
    for 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_pyramid

image = 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.coloradmin.cn/o/2199945.html

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

相关文章

网格剖分-耳切法效果展示

1.前言 将简单多边形转换成一组由同样顶点组成的三角形集合是计算机图形学中的一个经典问题。问题中,简单多边形是指由一组有序顶点组成的,点V0~点Vn-1。相邻的顶点之间通过边(Vi,Vi-1)连接,并且边(Vn-1,V0)连接起始点…

换毛季来临,铲屎官如何应对猫咪掉毛?宠物空气净化器该怎么选?

养猫前,我是潇洒自如的单身汉;养猫后,我就是勤恳辛劳的保姆!每天下班还要“伺候”猫孩子,收拾它一天在家掉落的猫毛。虽说我没有洁癖,但换毛季可不是开玩笑的,稍微偷懒几天没有清理,…

C++竞赛初阶—— 石头剪子布

题目内容 石头剪子布,是一种猜拳游戏。起源于中国,然后传到日本、朝鲜等地,随着亚欧贸易的不断发展它传到了欧洲,到了近现代逐渐风靡世界。简单明了的规则,使得石头剪子布没有任何规则漏洞可钻,单次玩法比…

苹果开发者网站iOS应用创建全流程详解

引言 在当今的移动开发领域,uni-app 和 Flutter 等跨平台开发工具为开发者提供了便利,可以一次编写代码并部署到多个平台。然而,尽管这些工具简化了应用的开发过程,但它们在iOS应用的构建和发布环节往往并不涉及太多。对于希望在…

上传本地项目到GitHub远程仓库(极简洁操作版)

第一步:在GitHub创建一个空的仓库 第二步:将仓库克隆(下载)到本地 第三步:将你要上传的所有文件放到这个克隆的仓库文件夹中 第四步:通过git add .将待上传文件添加到暂存区 此时,可以通过git …

网际报文协议ICMP及ICMP重定向实例详解5

之前在一个项目中遇到了与ICMP重定向相关的问题,因为缺乏对ICMP相关内容的了解,排查了很长一段时间才查出来。本文给大家简要地介绍一下ICMP及ICMP重定向相关的内容。 1、ICMP的概念 ICMP(Internet Control Message Protocol)网际…

156-反溯源隐藏C2项目域前置云函数数据中转DNS转发

演示案例: CS-隐藏防朔源-域前置-C2&CDN CS-隐藏防朔源-云函数-C2&API 触发 CS-隐藏防朔源-DNS 解析-C2&流量伪装 CS-隐藏防朔源-数据转发-C2&Iptables&中间件 接上节课的知识点,上节课只讲了利用CDN进行隐藏的方式 #域前置-CDN 配合…

每日一练:分割回文串Ⅳ

1745. 分割回文串 IV - 力扣(LeetCode) 题目要求: 给你一个字符串 s ,如果可以将它分割成三个 非空 回文子字符串,那么返回 true ,否则返回 false 。 当一个字符串正着读和反着读是一模一样的&#xff0…

Win32 API 控制台鼠标操作、坐标获取与相关函数介绍

Win32 API 控制台鼠标操作、坐标获取与相关函数介绍 一、前置介绍读取控制台输入缓冲区数据 ReadConsoleInput 函数控制台输入缓冲区中的输入事件 INPUT_RECORD 结构鼠标输入事件 MOUSE_EVENT_RECORD 结构更改输入模式 SetConsoleMode 函数 二、鼠标坐标获取(以下代码环境为 VS…

阿里出品2024版Java架构师面试指南,涵盖Java所有核心技能

最近很多粉丝朋友私信我说:熬过了去年的裁员潮却没熬过现在的内卷;打开Boss直拒一排已读不回,回的基本都是外包,薪资还给的不高,对技术水平要求也远超从前;感觉Java一个初中级岗位有上千人同时竞争&#xf…

面试必备:经典的 Shell 十三问!

1. 为何叫做shell? 我们知道计算机的运作不能离开硬件,但使用者却无法直接操作硬件,硬件的驱动只能通过一种称为操作系统(OS,Operating System)的软件来管控。linux严格来说只是一个操作系统,我们称之为内核(kernel)。 使用者没…

基于vue框架的大学生在线教育jp6jw(程序+源码+数据库+调试部署+开发环境)系统界面在最后面。

系统程序文件列表 项目功能:学生,教师,课程类型,课程信息,资料类型,课程资料,课程名称,选课信息,学生咨询,教师回复 开题报告内容 基于Vue框架的大学生在线教育平台开题报告 一、课题背景 随着互联网技术的飞速发展和全球教育需求的日益多元化,在线教…

单细胞转录组 —— STARsolo 原始数据处理

单细胞转录组 —— STARsolo 原始数据处理实战 前言 前面我们已经介绍了几种原始数据处理工具,最后再介绍一种多平台兼容的快速定量工具 —— STARsolo。 主要使用的还是 STAR 比对软件,只是增加了更多对单细胞数据的处理,不同平台数据的差…

2.5 Spring Boot整合Spring MVC框架

今天,我将向大家介绍如何在Spring Boot中整合Spring MVC框架,并展示如何创建和测试控制层(Controller)。 首先,让我们简要回顾一下Spring MVC。Spring MVC是一个基于Servlet的MVC框架,它简单、侵入性小&am…

安装Node.js环境,安装vue工具

一、安装Node.js 去官方网站自行安装自己所需求的安装包 这是下载的官方网站 下载 | Node.js 中文网 给I accept the terms in the License Agreement打上勾然后点击Next 把安装包放到自己所知道的位置,后面一直点Next即可 等待它安装好 然后winr打开命令提示符cmd 二、安装…

线稿如何快速上色?AI自动线稿上色教程分享

前言 在数字艺术的世界里,上色是一个既耗时又需要技巧的步骤。幸运的是,随着AI技术的发展,我们有了像千鹿AI这样的工具,它可以帮助艺术家和设计师自动完成线稿的上色工作。以下是使用千鹿AI进行自动线稿上色的详细教程。 准备工作…

vue 入门二

参考&#xff1a;丁丁的哔哩哔哩 11.组件基础 传递 props 1.父组件 <BlogPost title"My journey with Vue" />子组件<script setup> defineProps([title]) </script><template><h4>{{ title }}</h4> </template>2.prop…

【springboot9736】基于springboot+vue的逍遥大药房管理系统

作者主页&#xff1a;Java码库 主营内容&#xff1a;SpringBoot、Vue、SSM、HLMT、Jsp、PHP、Nodejs、Python、爬虫、数据可视化、小程序、安卓app等设计与开发。 收藏点赞不迷路 关注作者有好处 文末获取源码 项目描述 伴随着全球信息化发展&#xff0c;行行业业都与计算机技…

10月9日

没看清x的范围

前端vue-配置请求拦截器

1.配置拦截器&#xff0c;记得20行的导出 2.响应拦截器&#xff0c;记得28行的导出 3.拦截器不止可以拦截&#xff0c;还可以添加内容