OpenCv高阶(一)——图像金字塔(上采样、下采样)

目录

图像金字塔

一、上下采样原理

1、向下取样

2、向上采样

3、图像金字塔的作用

二、案例实现

1、高斯下采样

2、高斯金字塔中的上采样

3、对下采样的结果做上采样,图像变模糊,无法复原

4、拉普拉斯金字塔(图片复原)


图像金字塔

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

下采样 是一种减小图像尺寸的方法,它通常涉及到降低图像的分辨率,即减少图像中像素的数量,从而使图像看起来更小。

上采样 是一种增大图像尺寸的方法,它通过插值和滤波技术来恢复图像的分辨率和细节,通常用于图像放大或者与下采样后的图像进行比较。 resize函数 是一种通用的图像尺寸调整方法,它可以按照指定的目标尺寸来缩放图像,不涉及金字塔结构或者特定的滤波操作。

一、上下采样原理

1、向下取样

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

做法:

1、高斯滤波

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

OpenCV函数cv2.pyrDown()

2、向上采样

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

1、插值

2、高斯滤波

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

dst = cv2.pyrUp( src, dstsize\[, borderType]

3、图像金字塔的作用

特征点提取(SIFT、HOG、ORB等)

· 模板匹配

· 光流跟踪

二、案例实现

将图片显示封装到一个函数中

复制代码
import cv2
import matplotlib.pyplot as plt
import numpy as np


def cv_show(name,value):
    cv2.imshow(name,value)
    cv2.waitKey(0)

1、高斯下采样

cv2.pyrDown()下采样函数

dst = cv2.pyrDown(src ,dst, dstsize \[, borderType ])

dst:目标图像

src:原始图像

dstsize:目标图像的大小

复制代码
face=cv2.imread('../data/face.png')
# face=cv2.resize(face,dsize=None,fx=0.5,fy=0.5)    #如果图片显示过大,可以使用这个设置图片大小
cv2.imshow('face',face)
cv2.waitKey(0)

#对原图片进行下采样
face_down_1=cv2.pyrDown(face)
cv_show('down_1',face_down_1)

#对第一次下采样的结果再次下采样处理
face_down_2=cv2.pyrDown(face_down_1)
cv_show('down_2',face_down_2)

效果:

依次做下采样,发现图片越来越模糊,是因为下采样会丢失掉数据。

2、高斯金字塔中的上采样

cv.pyUp()上采样函数

复制代码
dst = cv2.pyrUp(src [,dst, dstsize [, borderType] ])
dst:目标图像
src:原始图像
dstsize:目标图像的大小
复制代码
#对原图进行上采样处理
face_up_1=cv2.pyrUp(face)
cv_show('face_up_1',face_up_1)

#对上采样处理过的图像再做一次上采样
face_up_2=cv2.pyrUp(face_up_1)
cv_show('face_up_2',face_up_2)

3、对下采样的结果做上采样,图像变模糊,无法复原

复制代码
face_down_1_up=cv2.pyrUp(face_down_1)    #下采样G1

face_down_2_up=cv2.pyrUp(face_down_2)    #下采样G2

cv_show('down_1_up',face_down_1_up)
cv_show('down_2_up',face_down_2_up)

效果:

对原图做一次下采样一次上采样,这时图片就恢复到与原图同样的大小,与原图做对照发现通过对下采样的数据上采样得到的结果更加模糊了,是因为下采样会丢失掉数据

4、拉普拉斯金字塔(图片复原)

找出下采样原图丢失的数据,复原丢失数据的图像,使图像更加清晰

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

拉普拉斯金字塔的定义

Li = Gi -- pyrUp(pyrdown(Gi)) 式中:

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

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

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

对原图做一次下采样再对下采样的结果做一次上采样,这时虽然与原图大小相同但是经过采样图像丢失了一部分数据

拉普拉斯金字塔的原理是原图-下采样再上采样,这时就得到了丢失的数据,将丢失的数据加到下采样再上采样上就可以将这个图像复原。

复制代码
L0=face-face_down_1_up
L1=face_down_1-face_down_2_up
fuyuan=face_down_1_up+L0
cv_show('L0',L0)
cv_show('L1',L1)
cv_show('fuyuan',fuyuan)

效果:下面的图片就是原图做下采样丢失掉的数据点

相关推荐
fanstuck3 小时前
1M 上下文能怎么用?我用 Seed Evolving 做了一个招标文件版本差异审查器
服务器·人工智能·数据分析·开源·aigc
墨舟的AI笔记5 小时前
React 组件库的 Tree Shaking:按需加载与副作用的工程化治理
人工智能
WoooChi6 小时前
DailyTech-20260724
人工智能·科技·业界资讯
zh路西法6 小时前
【CAM Grad-CAM Grad-CAM++】深度学习模型可解释性:从原理到YOLOv8部署实战
人工智能·深度学习·yolo·yolov8·grad-cam·cam
雨辰AI6 小时前
全集实战:企业级大模型服务化部署全栈指南|FastAPI 封装 + Nginx 负载均衡 + 高可用架构 从单机到生产一步到位
人工智能·ai·负载均衡·fastapi·ai编程
触底反弹6 小时前
Vibe Coding 不写 Git,等于悬崖边飙车
人工智能·git·面试
咖啡屋和酒吧7 小时前
健康管理:现代生活的科学守护
人工智能·生活·精选
星栈独行7 小时前
翻完 Pi 源码:它和 Codex、Claude Code 有何不同
开发语言·javascript·人工智能·程序人生
没有梦想的咸鱼185-1037-16637 小时前
AI-Python机器学习与深度学习技术:CNN/Transformer/扩散模型、SHAP可解释及Hermes智能体自动化
人工智能·python·深度学习·机器学习·chatgpt·cnn·transformer
船漏了就会沉7 小时前
Kimi K3 vs DeepSeek-V4:国产大模型的技术路线之争
人工智能