首页 > 其他分享 >《深度学习》OpenCV 高阶 图像金字塔 用法解析及案例实现

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

时间:2024-09-10 20:21:54浏览次数:3  
标签:采样 cv2 face down 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)代码实现
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)代码实现
# 上采样
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)代码实现

                       (需要衔接上述代码)

# #  拉普拉斯金字塔
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)
运行结果:

标签:采样,cv2,face,down,OpenCV,图像,金字塔,高阶
From: https://blog.csdn.net/qq_64603703/article/details/142106769

相关文章

  • OpenCV-模板匹配
    文章目录一、简介1.定义与原理2.算法与方法3.参数解释二、代码实现1.读取数据2.检查图像是否成功加载3.获取模板的高度和宽度4.模板匹配5.计算匹配区域坐标6.显示图像7.全部代码三、总结一、简介在OpenCV中,模型匹配(或称为模板匹配)是一种用于在图像中查找与给定模板......
  • opencv学习:模板匹配和argparse 模块的代码实现及优缺点
    模板匹配模板匹配算法(TemplateMatchingAlgorithm),这是一种在图像处理和计算机视觉领域常用的方法,用于在一个大图像中寻找一个小模板图像的位置。模板匹配算法通过滑动窗口的方式在目标图像上移动模板图像,并计算模板图像与目标图像的局部区域之间的相似度。算法步骤读取图......
  • OpenCV 与 Matplotlib 的结合使用:轮毂检测与目标跟踪
    目录绘制轮廓图像实现思路1.读取图像并转换为灰度图像2.二值化处理3.查找轮廓4.绘制轮廓5.显示结果代码实现效果展示动态逐步显示轮廓结果实现思路1.读取图像并缩放2.转换为灰度图像3.二值化处理4.查找轮廓5.动态显示轮廓6.显示最终结果并关闭窗口......
  • OpenCV 与 YoloV3的结合使用:目标实时跟踪
    目录代码分析1.YOLO模型加载2.视频加载与初始化3.视频帧处理4.物体检测5.处理检测结果6.边界框和类别显示7.帧率(FPS)计算8.结果显示与退出9.资源释放整体代码效果展示总结代码分析这段代码使用YOLO(YouOnlyLookOnce)模型进行视频中的物体检测,并通......
  • 【OpenCV】简介入门及资料文档,工具准备和环境部署
    OpenCV已更新到 4.x,计算机视觉和机器学习的软件库git地址:https://github.com/opencv/opencv1.跨平台:Linux,Windows,Android,MacOS2.由C和C++轻量级编写3.提供C++,Java,Python,Ruby,MATLAB,C#、Ch、Ruby,GO接口应用:图像处理(滤波、边缘检测等)视频处理(实时视频处理等)物体......
  • [Vue] 高阶组件和套一层父组件的区别
    前言App.vue的套一层布局组件MainLayout,MainLayout做一些统一的布局之外,再做一些子路由相同的逻辑,比如子路由需要权限访问。但是不灵活,如果一堆路由组件中有一个不需要这个功能,就不能通过父组件嵌套统一逻辑。高阶组件比起套一层父组件复用逻辑更灵活一些。高阶组件高阶组......
  • 【机器学习】C++与OpenCV实战:创建你的第一个图片显示程序
    ......
  • qt5.15.2+opencv4.10+VS2019_64 均值滤波,高斯滤波算法详细分析
    目录 一.加载图像二.灰度图像三.均值滤波1.均值滤波均值滤波算法(MeanFiltering):    参数含义:    一句话总结:均值滤波特点:应用场景:缺点:2.高斯滤波高斯滤波算法(GaussianBlur):        高斯滤波计算过程:    参数含义:    ......
  • opencv学习:图像轮廓识别及代码实现
    图像轮廓1.获取图像轮廓cv2.findContours()函数是OpenCV库中用于检测图像中轮廓的函数。它可以检测到图像中所有连通区域的边界,并返回这些轮廓的列表。从OpenCV3.4版本开始,这个函数的返回值和参数有所变化,以下是详细的参数说明:方法:contours,hierarchy=cv2.findCon......
  • 基于ARM芯片与OpenCV的工业分拣机器人项目设计与实现流程详解
    一、项目概述项目目标和用途本项目旨在设计和实现一套工业分拣机器人系统,能够高效、准确地对不同类型的物品进行自动分拣。该系统广泛应用于物流、仓储和制造业,能够显著提高工作效率,降低人工成本。技术栈关键词ARM芯片步进电机控制OpenCV图像识别无线通信模块......