《深度学习》OpenCV 高阶 图像金字塔 用法解析及案例实现

目录

一、图像金字塔

1、什么是图像金字塔

2、图像金字塔作用

1)金字塔尺度间的图像信息补充

2)目标检测与识别

3)图像融合与拼接

4)图像增强与去噪

5)图像压缩与编码

二、用法解析

1、向下采样

1)概念

2)做法

3)代码实现

运行结果:

2、向上采样

1)概念

2)做法

3)上下采样区别

4)代码实现

运行结果:

3、拉普拉斯金字塔

1)概念

2)拉普拉斯金字塔定义

3)拉普拉斯金字塔构建过程

4)代码实现

运行结果:


一、图像金字塔

1、什么是图像金字塔

图像金字塔是由一幅图像多个不同分辨率子图 构成的图像集合 。是通过一个图像不断的降低采样率产生的,最小的图像可能仅仅有一个像素点。图像金字塔的底部是待处理的高分辨率图像(原始图像),而顶部则为其低分辨率的近似图像。

2、图像金字塔作用

1)金字塔尺度间的图像信息补充

在不同尺度的图像金字塔中,每一层图像都包含了原始图像在不同空间尺度上的信息。这样可以提供更全面的图像信息,使得后续的图像处理和分析算法能够更好地利用图像特征。

2)目标检测与识别

金字塔可以用于目标检测和识别算法中的多尺度搜索,通过在不同尺度的金字塔中检测目标并进行匹配,可以提高检测的准确率和鲁棒性。

3)图像融合与拼接

在图像融合和拼接任务中,金字塔可以提供多尺度的图像信息,从而实现更精细和准确的融合和拼接结果。

4)图像增强与去噪

金字塔可以用于图像增强和去噪算法中,通过在不同尺度上对图像进行处理,可以有效地提高图像质量,并去除图像中的噪声。

5)图像压缩与编码

金字塔可以用于图像压缩和编码算法中,通过对图像进行分解和编码,可以实现更高的压缩比和更好的图像质量。

二、用法解析

1、向下采样

1)概念

向金字塔顶部移动时,图像的尺寸和分辨率都不断地降低。通常情况下,每向上移动一级,图像的宽和高都降低为原来的1/2

2)做法

1、高斯滤波

2、删除其偶数行和偶数列

3、OpenCV函数cv2.pyrDown()

3)代码实现
python 复制代码
import cv2
face = cv2.imread('face.jpg',cv2.IMREAD_GRAYSCALE)  # 以灰度图的形式加载
cv2.imshow('face',face)   # 展示原图 灰度图
cv2.waitKey(0)
face_down_1 = cv2.pyrDown(face)   # 对原图做下采样
cv2.imshow('face_down_1',face_down_1)
cv2.waitKey(0)
face_down_2 = cv2.pyrDown(face_down_1)   # 再做下采样
cv2.imshow('face_down_2',face_down_2)
cv2.waitKey(0)
运行结果:

注意: 在经过下采样时图片的尺寸必须为偶数,因为下采样是将原图尺寸缩小一半,奇数大小无法缩放

2、向上采样

1)概念

通常将图像的宽度和高度 为原来的2倍 。这意味着,向上采样的结果图像的大小 是原始图像的4倍 。因此,要在结果图像中补充大量的像素点。对新生成的像素点进行赋值的行为,称为插值

2)做法

1、插值

2、高斯滤波

3)上下采样区别

通过以上分析可知,向上采样和向下采样是相反的两种操作 。但是,由于向下采样会丢失像素值,所以这两种操作并不是可逆的。也就是说,对一幅图像先向上采样、再向下采样,是无法恢复其原始状态的 ;同样,对一幅图像先向下采样、再向上采样也无法恢复到原始状态

4)代码实现
python 复制代码
# 上采样
face_up_1 = cv2.pyrUp(face)
cv2.imshow('face_up_1',face_up_1)  # G1
cv2.waitKey(0)
face_up_2 = cv2.pyrUp(face_up_1)
cv2.imshow('face_up_2',face_up_2)  # G2
cv2.waitKey(0)
#
# # # #对下采用后图像进行上采样,图像变模糊,无法复原
face_down_1_up = cv2.pyrUp(face_down_1)  # 下采样G1
face_down_2_up = cv2.pyrUp(face_down_2)  # 下采样G2

cv2.imshow('face_down_1_up',face_down_1_up)
cv2.imshow('face_down_2_up',face_down_2_up)
cv2.waitKey(0)
运行结果:

3、拉普拉斯金字塔

1)概念

为了在向上采样是能够恢复具有较高分辨率的原始图像 ,就要获取 在采样过程中所丢失的信息 ,这些丢失的信息就构成了拉普拉斯金字塔。 也是拉普拉斯金字塔是有向下采样时丢失的信息构成。

2)拉普拉斯金字塔定义

Li = Gi -- pyrUp(pyrdown(Gi))

Li: 表示拉普拉斯金字塔 中的第i层

Gi: 表示高斯金字塔 中的第i层

Gi+1 : 表示高斯金字塔 中的第 i+1 层

3)拉普拉斯金字塔构建过程

1、 首先,原始图像通过降采样操作缩小尺寸,得到一系列不同分辨率的图像。

2、 然后,每一级的图像通过上采样 操作放大到原始尺寸 ,与上一级降采样得到的图像相减得到拉普拉斯金字塔的每一级

3、 重复上述步骤,直到达到金字塔的最底层(分辨率最低)

4、 拉普拉斯金字塔的每一级包含了每个像素与上一级相同位置的像素之间的高频信息 ,可以理解为图像的细节信息。较高级别的金字塔包含了较低级别金字塔中消失的细节信息,可以通过级联金字塔的级别进行图像重建。

4)代码实现

(需要衔接上述代码)

python 复制代码
# #  拉普拉斯金字塔
L0 = face - face_down_1_up
L1 = face_down_1 - face_down_2_up

fuyuan = face_down_1_up + L0
cv2.imshow('L0',L0)
cv2.imshow('L1',L1)
cv2.waitKey(0)
cv2.imshow('fuyuan',fuyuan)
cv2.waitKey(0)
运行结果:
相关推荐
wenzhangli7几秒前
Harness Engineering:AICode 的灵魂——Ooder A2UI 从难产到重生的深度实践
人工智能·ai编程
Deepoch5 分钟前
Deepoc 具身模型开发板在田间除草机器人自主作业中的技术应用
人工智能·机器人·具身模型·deepoc·除草机器人
ai大模型中转api测评11 分钟前
解密 GPT-5.5:原生多模态架构如何重定义 AI 逻辑推理与精准制图
大数据·人工智能·gpt·架构·api
冷雨夜中漫步14 分钟前
Claude Code源码分析——Claude Code Agent Loop 详细设计文档
java·开发语言·人工智能·ai
xixixi7777717 分钟前
英伟达Agent专用全模态模型出击,仿冒AI智能体泛滥成灾,《AI伦理安全指引》即将落地——AI治理迎来“技术-风险-规范”三重奏
人工智能·5g·安全·ai·大模型·英伟达·智能体
直奔標竿19 分钟前
Java开发者AI转型第二十六课!Spring AI 个人知识库实战(五)——联网搜索增强实战
java·开发语言·人工智能·spring boot·后端·spring
数据皮皮侠AI23 分钟前
中国城市可再生能源数据集(2005-2021)|顶刊 Sci Data 11 种能源面板
大数据·人工智能·笔记·能源·1024程序员节
G311354227328 分钟前
如何用 QClaw 龙虾做一个规律作息健康助理 Agent
大数据·人工智能·ai·云计算
幂律智能29 分钟前
零售行业合同管理数智化转型解决方案
大数据·人工智能·零售
旺财矿工30 分钟前
零基础搭建 OpenClaw 2.6.6 Win11 本地化运行环境
人工智能·openclaw·小龙虾·龙虾·openclaw安装包