当前位置: 首页 > article >正文

OpenCV-上下采样

文章目录

  • 一,简介
  • 二、下采样(Downsampling)
  • 三、上采样(Upsampling)
  • 四、代码实现
    • 1.图像读取
    • 2.下采样
    • 3.上采样
    • 4.拉普拉斯金字塔
  • 五、应用

一,简介

  • 高斯金字塔是图像处理、计算机视觉和信号处理中常用的一项技术,其核心在于通过高斯平滑和亚采样(即下采样)来构建图像的多尺度表示。在高斯金字塔中,上下采样是构建金字塔层级的关键步骤。

  • 拉普拉斯金字塔(Laplacian Pyramid)是高斯金字塔的一种扩展,用于捕捉和重建图像在不同尺度上的细节信息。在高斯金字塔中,每一层图像都是通过对其上一层图像进行高斯模糊和下采样得到的,这个过程会导致图像细节的损失。拉普拉斯金字塔则通过记录这些在高斯金字塔构建过程中丢失的细节来工作。

  • 拉普拉斯金字塔的每一层都是高斯金字塔中当前层与其上采样并高斯模糊后的上一层图像之间的差异。这个差异图像包含了当前层特有的细节信息,即那些在上采样过程中无法从上一层恢复的信息。

二、下采样(Downsampling)

下采样是高斯金字塔构建过程中的一个重要环节,其目的是减小图像的分辨率,从而生成金字塔的下一层图像。下采样的具体步骤通常包括:

  • 高斯模糊:首先,对原始图像或当前层的图像进行高斯模糊处理。高斯模糊是一种减少图像噪声和细节的方法,它通过使用高斯函数作为权重函数来对图像进行平滑处理。
  • 下采样:在高斯模糊之后,进行亚采样操作。亚采样通常是通过删除图像的偶数行和偶数列(或其他规则的间隔采样)来实现的,这样处理后的图像面积将是原图的四分之一。亚采样操作进一步减小了图像的分辨率,为构建金字塔的下一层提供了基础。

通过不断重复上述步骤,可以构建出高斯金字塔的多个层级,每个层级的图像分辨率逐渐降低,但保留了图像的主要结构和特征。

三、上采样(Upsampling)

与下采样相反,上采样是增加图像分辨率的过程,通常用于从金字塔的较低层级重建较高层级的图像。然而,在高斯金字塔中,上采样并不是直接用于构建金字塔的,而是与其他技术(如拉普拉斯金字塔)结合使用,以实现图像的放大和细节恢复。

在高斯金字塔的上下文中,上采样通常涉及以下步骤:

  • 插值:首先,将图像的每个方向(通常是行和列)扩大为原来的两倍。新增的行和列通常使用零值或其他插值方法(如双线性插值、双三次插值等)进行填充。
  • 卷积:然后,使用与下采样时相同或相似的高斯核对放大后的图像进行卷积处理,以平滑图像并减少插值产生的锯齿效应。

四、代码实现

1.图像读取

jijia_yuan = cv2.imread('3.png', cv2.IMREAD_GRAYSCALE)

jijia = cv2.resize(jijia_yuan, (720, 408))
cv2.imshow('jijia', jijia)
cv2.waitKey(0)

图像读取与调整大小:
使用cv2.imread()读取图像,并指定cv2.IMREAD_GRAYSCALE以灰度模式读取。
使用cv2.resize()将图像调整为720x408的大小,以适应显示或后续处理的需要。

2.下采样

jijia_down_1 = cv2.pyrDown(jijia)  # 下采样
cv2.imshow('down1', jijia_down_1)
cv2.waitKey(0)
jijia_down_2 = cv2.pyrDown(jijia_down_1)
cv2.imshow('down2', jijia_down_2)
cv2.waitKey(0)

高斯金字塔的下采样:
cv2.pyrDown()函数用于构建高斯金字塔的下采样层级。它首先用高斯核对图像进行卷积,然后删除图像的偶数行和列,从而减小图像尺寸(通常是宽和高都减半)。
您对jijia进行了两次下采样,生成了jijia_down_1和jijia_down_2。

3.上采样

jijia_up_1 = cv2.pyrUp(jijia)
cv2.imshow('up1', jijia_up_1)
cv2.waitKey(0)
jijia_up_2 = cv2.pyrUp(jijia_up_1)
cv2.imshow('up2', jijia_up_2)
cv2.waitKey(0)

高斯金字塔的上采样:
cv2.pyrUp()函数用于对图像进行上采样,通常是高斯金字塔下采样操作的逆过程。它通过插入零值(通常称为零填充)并在新的行和列之间应用插值来增加图像的尺寸(通常是宽和高都加倍)。
但请注意,cv2.pyrUp()并不是cv2.pyrDown()的完全逆操作,因为在下采样过程中丢失的信息无法恢复。因此,直接对下采样后的图像进行上采样会导致图像变得模糊。

4.拉普拉斯金字塔

# 对下采样后图像进行上采样,图像变模糊,无法复原
jijia_down_1_up = cv2.pyrUp(jijia_down_1)
jijia_down_2_up = cv2.pyrUp(jijia_down_2)

cv2.imshow('down_up1', jijia_down_1_up)
cv2.imshow('down_up2', jijia_down_2_up)
cv2.waitKey(0)
# 拉普拉斯金字塔
l0 = jijia - jijia_down_1_up
l1 = jijia_down_1 - jijia_down_2_up

fuyuan = jijia_down_1_up + l0
cv2.imshow('l0', l0)
cv2.imshow('l1', l1)
cv2.imshow('fuyuan', fuyuan)
cv2.waitKey(0)
cv2.destroyAllWindows()

拉普拉斯金字塔的尝试:
拉普拉斯金字塔用于捕捉高斯金字塔中相邻层级之间的差异,即细节损失。
计算l0和l1,它们分别是jijia与jijia_down_1_up、jijia_down_1与jijia_down_2_up之间的差异。然而,由于jijia_down_1_up和jijia_down_2_up是上采样后的图像,它们无法完全复原下采样前的图像细节,因此l0和l1包含了这种细节损失的表示。

五、应用

上下采样在图像处理中有多种应用,包括图像缩放、图像金字塔构建、图像压缩等。图像金字塔是一种多分辨率的图像表示,其中图像被逐步下采样以形成不同尺度的表示。图像金字塔在图像融合、图像匹配、图像分割等任务中非常有用。

在图像压缩中,下采样可以减少图像的冗余信息,而上采样则可以在解压缩时恢复图像到原始尺寸(尽管细节可能有所损失)。然而,现代的图像压缩算法通常使用更复杂的编码和解码技术来最小化这种损失。


http://www.kler.cn/news/306948.html

相关文章:

  • Pytorch是如何做显存管理的
  • qmt量化交易策略小白学习笔记第64期【qmt编程之获取获取期权全推数据--code_list全推tick数据】
  • 鸿蒙媒体开发系列01——资源分类访问
  • 移情别恋c++ ദ്ദി˶ー̀֊ー́ ) ——13.mapset
  • 【springboot】整合spring security 和 JWT
  • Vue接入高德地图并实现基本的路线规划功能
  • Redis基础,常用操作命令,主从复制,一主两从,事务数据库操作
  • day01 - Java基础语法
  • [Golang] Sync
  • HarmonyOS开发之全局状态管理
  • 天融信把桌面explorer.exe删了,导致开机之后无windows桌面,只能看到鼠标解决方法
  • C++基础面试题 | 什么是C++中的虚继承?
  • LabVIEW机动车动态制动性能校准系统
  • spring项目中如何通过redis的setnx实现互斥锁解决缓存缓存击穿问题
  • [项目][WebServer][HttpServer]详细讲解
  • 一码空传临时网盘PHP源码,支持提取码功能
  • 数据中台进化为数据飞轮的必要
  • 【笔记】自动驾驶预测与决策规划_Part2_基于模型的预测方法
  • 初学Linux(学习笔记)
  • Vue.js入门系列(二十九):深入理解编程式路由导航、路由组件缓存与路由守卫
  • 【C++】入门基础(下)
  • Java项目基于docker 部署配置
  • 关于新版本 tidb dashboard API 调用说明
  • 评价类——熵权法(Entropy Weight Method, EWM),完全客观评价
  • ansible安全优化篇
  • 在深圳停车场我居然能看到很漂亮的瓦房
  • 707. 设计链表
  • SQL,从每组中的 json 字段中提取唯一值
  • 鸿蒙开发基础
  • Rust Web开发框架对比:Warp与Actix-web