OpenCV 11(图像金字塔)

news/2024/7/21 6:42:16 标签: opencv, 计算机视觉, 图像处理

一、 图像金字塔

**图像金字塔**是图像中多尺度表达的一种,最主要用于图像的分割,是一种以多分辨率来解释图像的有效但概念简单的结构。简单来说, 图像金字塔是同一图像不同分辨率的子图集合.

图像金字塔最初用于机器视觉和图像压缩。其通过梯次向下采样获得,直到达到某个终止条件才停止采样。金字塔的底部是待处理图像的高分辨率表示,而顶部是低分辨率的近似。我们将一层一层的图像比喻成金字塔,层级越高,则图像越小,分辨率越低

**常见两类图像金字塔**

**高斯金字塔 ( Gaussian pyramid)**: 用来向下/降采样,主要的图像金字塔
**拉普拉斯金字塔(Laplacian pyramid)**: 用来从金字塔低层图像重建上层未采样图像,在数字图像处理中也即是预测残差,可以对图像进行最大程度的还原,配合高斯金字塔一起使用。 

1.1 高斯金字塔

**高斯金字塔**是通过高斯平滑和亚采样获得一系列下采样图像.

原理非常简单, 如下图所示:

原始图像 M * N -> 处理后图像 M/2 * N/2.

每次处理后, 结果图像是原来的1/4.

  • 图片与卷积核卷积  -- 高斯平滑
  • 去除所有偶数的行和列 -- 图像缩小到原图的1/4 

注意: 向下采样会丢失图像信息.

- pyrDown 向下采样

import cv2
import numpy as np


img = cv2.imread('./lena.png')

print(img.shape)
dst = cv2.pyrDown(img)

print(dst.shape)

cv2.imshow('img', img)
cv2.imshow('dst', dst)
cv2.waitKey(0)
cv2.destroyAllWindows()

- pyrUp 向上取样

  向上取样是向下取样的相反过程, 是指图片从小变大的过程.

 

 # 向上采样
  # 向下采样
  import cv2
  import numpy as np
  
  
  img = cv2.imread('./lena.png')
  
  print(img.shape)
  dst = cv2.pyrUp(img)
  
  print(dst.shape)
  
  cv2.imshow('img', img)
  cv2.imshow('dst', dst)
  cv2.waitKey(0)
  cv2.destroyAllWindows()

- 取样可逆性研究

​        在根据向上和向下取样的原理, 我们能够发现图像在变大变小的过程中是有信息丢失的. 即使把图片变回原来大小,图片也不是原来的图片了, 而是损失了一定的信息.

# 研究采样中图像的损失
import cv2
import numpy as np


img = cv2.imread('./lena.png')

# 先放大, 再缩小
dst = cv2.pyrUp(img)
dst = cv2.pyrDown(dst)

cv2.imshow('img', img)
cv2.imshow('dst', dst)
cv2.imshow('loss', img - dst)
cv2.waitKey(0)
cv2.destroyAllWindows()

1.2 拉普拉斯金字塔

将降采样之后的图像再进行上采样操作,然后与之前还没降采样的原图进行做差得到残差图(为还原图像做信息的准备)

也就是说,拉普拉斯金字塔是通过源图像减去先缩小后再放大的图像的一系列图像构成的。保留的是残差!

残差就是丢失掉的信息。

拉普拉斯金字塔是由高斯金字塔构成的没有专门的函数。

拉普拉斯金字塔图像只像图像边缘,它的大部分元素都是0,用于图像压缩。

 

# 研究采样中图像的损失
import cv2
import numpy as np


img = cv2.imread('./lena.png')

dst = cv2.pyrDown(img)
dst = cv2.pyrUp(dst)

lap0 = img - dst
cv2.imshow('img', img)
cv2.imshow('dst', dst)
cv2.imshow('lap0', lap0)
cv2.waitKey(0)
cv2.destroyAllWindows()

# 研究采样中图像的损失
import cv2
import numpy as np


img = cv2.imread('./lena.png')

dst = cv2.pyrDown(img)
dst = cv2.pyrUp(dst)

lap0 = img - dst
cv2.imshow('img', img)
cv2.imshow('dst', dst)
cv2.imshow('lap0', lap0)


第二层拉普拉斯效果:
dst1 = cv2.pyrDown(dst)
dst2 = cv2.pyrUp(dst1)
lap1 = dst - dst2 
cv2.imshow('lap1 ', lap1)

cv2.waitKey(0)
cv2.destroyAllWindows()

 


http://www.niftyadmin.cn/n/5014992.html

相关文章

力扣接雨水(解析)

给定 n 个非负整数表示每个宽度为 1 的柱子的高度图,计算按此排列的柱子,下雨之后能接多少雨水。 示例 1: 输入:height [0,1,0,2,1,0,1,3,2,1,2,1] 输出:6 解释:上面是由数组 [0,1,0,2,1,0,1,3,2,1,2,1] …

Wireshark TS | 网络路径不一致传输丢包问题

问题背景 网络路径不一致,或者说是网络路径来回不一致,再专业点可以说是网络路径不对称,以上种种说法,做网络方向的工程师肯定会更清楚些,用简单的描述就是: A 与 B 通讯场景,C 和 D 代表中间…

【HTML专栏4】常用标签(标题、段落、换行、文本格式化、注释及特殊字符)

本文属于HTML/CSS专栏文章,适合WEB前端开发入门学习,详细介绍HTML/CSS如果使用,如果对你有所帮助请一键三连支持,对博主系列文章感兴趣点击下方专栏了解详细。 博客主页:Duck Bro 博客主页系列专栏:HTML/CS…

Word文档超过了20MB如何缩小?文件压缩这样做

在现代办公中,我们常常会遇到各种大小的Word文档,而当一个文档大小超过20MB时,无论是发送还是接收,都会带来诸多不便。那么,如何将过大的Word文档缩小呢?下面,就给大家分享几个简单且实用的方法…

React 与 TS 结合使用 Hook 总结

在学习 React 时,我们总会遇到在 TS 和 JS 之间切换来开发多个项目,而有时会忘记 TS 的语法,所以编写一下 React 结合 TS 开发时的一些总结知识点,以便后续回顾用。 **说明:**这只是总结 React 与 TS 结合使用时的写法…

01_前端css编写的三种方式

前言 CSS的引入方式共有三种&#xff1a;行内样式、内部样式表、外部样式表 一、内联式引入 用法&#xff1a; 在元素上直接通过style属性进行设置css样式设置 示例&#xff1a; <h1 style"color:red;">style属性的应用</h1> <p style"font-si…

Android相机-架构3

目录 引言 1. Android相机的整体架构 2. 相机 HAL 2.1 AIDL相机HAL 2.2 相机 HAL3 功能 3. HAL子系统 3.1 请求 3.2 HAL和相机子系统 3.2.1 相机的管道 3.2.2 使用 Android Camera API 的步骤 3.2.3 HAL 操作摘要 3.3 启动和预期操作顺序 3.3.1 枚举、打开相机设备…

【GO语言基础】控制流

系列文章目录 【Go语言学习】ide安装与配置 【GO语言基础】前言 【GO语言基础】变量常量 【GO语言基础】数据类型 【GO语言基础】控制流 文章目录 系列文章目录条件语句if-else 结构判断一个字符串是否为空&#xff1a;switch结构 循环结构for 循环&#xff08;C风格&#xff…