首页 > 编程语言 >opencv-python图像金字塔

opencv-python图像金字塔

时间:2023-08-10 18:57:22浏览次数:40  
标签:采样 img python dst cv2 opencv 图像 金字塔

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

一幅图像的金字塔是一系列以金字塔形状排列的分辨率逐渐降低,且来源于同一张原始图的图像集合。层级越高,图像越小,分辨率越低。

图像金字塔的原理:相当于图像的缩小和放大。

图像缩小:先进行高斯模糊,再降采样,需要一次次的重复,不能一次到底。

图像放大:先进行图像扩大,在进行卷积或者使用拉普拉斯金字塔。

OpenCV中有关图像金字塔的操作有pyrup()和pyrdown(),分别用于完成上采样和下采样。

1 高斯金字塔

高斯金字塔(G(i))通过高斯平滑和亚采样获得一系列下采样图像,主要的图像金字塔。

向下采样:将图像和高斯内核卷积,然后将所有偶数行和列去除,处理后的图像是原图的1/4(向下采样会丢失图像信息)。

向上采用是其相反过程:1 将图像在每个方向扩大为原来的两倍,新增的行和列用0填充;2 使用先前同样的内核(乘以4)与放大后的图像卷积,获取近似值。

import cv2
import numpy as np

img = cv2.imread('./cat.jpg')
print(img.shape)
dst = cv2.pyrDown(img)  #下采样,分辨率减小1/4
print(dst.shape)
dst2 = cv2.pyrUp(dst)  #上采样,会模糊一些
print(dst2.shape)

cv2.imshow('img',img)
cv2.imshow('dst',dst)
cv2.imshow('dst2',dst2)

cv2.waitKey(0) 
cv2.destroyAllWindows()

 向下采样:

 

 向上采样:

 

2 拉普拉斯金字塔

用于从金字塔低层图像重建上层未采样图像,还原图像。

 L(i) = G(i) - pyrUp(pyrDown(G(i)))

拉普拉斯金字塔等于 将原图先进行高斯下采样,再进行高斯上采样,然后用原图减去采样后的图,即拉普拉斯金字塔是通过原始图像减去先缩小后放大的图像的一系列图像构成,保留的是残差。拉普拉斯金字塔图像只是图像边缘,大部分是0,用于图像压缩。

拉普拉斯金字塔流程如下:

import cv2
import numpy as np

img = cv2.imread('./cat.jpg')

dst_down = cv2.pyrDown(img)  #高斯下采样
dst_up = cv2.pyrUp(dst_down)   #高斯上采样

lap0 = img - dst_up   #第0层 拉普拉斯金字塔图

dst1_down = cv2.pyrDown(dst_down)
dst1_up = cv2.pyrUp(dst1_down,dstsize=(dst_down.shape[1],dst_down.shape[0]))

print(dst_down.shape)
print(dst1_up.shape)
lap1 = dst_down - dst1_up  #第1层 拉普拉斯金字塔图

new_img = dst_up + lap0 #加上0层的拉普拉斯金字塔

cv2.imshow('img',img)
cv2.imshow('lap0',lap0)
cv2.imshow('lap1',lap1)
cv2.imshow('dst_up',dst_up)
cv2.imshow('new_img',new_img)

cv2.waitKey(0) 
cv2.destroyAllWindows()

上采样还原的时候加上拉普拉斯金字塔可以尽可能的还原图像

 

 

  

 

标签:采样,img,python,dst,cv2,opencv,图像,金字塔
From: https://www.cnblogs.com/libai123456/p/17621241.html

相关文章

  • python编译pyc文件
    python提供了内置的类库来实现把py文件编译为pyc文件,这个模块就是py_compile模块。将单个python文件转为pyc文件python-mpy_compilemycode.py将一个目录中的python文件转为pyc文件python-mcompileall./your_path/编译完成后如果想要直接运行Pyc文件注意两点:1.要把p......
  • python操作MySQL
    #macOS操作MySQL服务#启动MySQLmysql.serverstart#停止MySQLmysql.serverstop#重启MySQLmysql.serverrestart#查看当前MySQL服务状态mysql.serverstatus#配置MySQL服务器#我们需要运行以下脚本配置MySQL服务器的安全性:mysql_secure_install......
  • GIL 锁或将在 CPython 中成为可选项
    哈喽大家好,我是咸鱼几天前有媒体报道称,经过多次辩论,Python指导委员会打算批准通过PEP703提案,让GIL(全局解释器)锁在CPython中成为一个可选项PEP703提案主要目标是使GIL变成可选项,即允许Python解释器在特定情况下不使用GIL这将允许Python在多核处理器上更好地利用......
  • python dict 和 object 相互转换
    pythondict和object的相互转换dict.py借助dict,isinstance来实现对象与字典之间的相互转换defas_dict(obj):ifnothasattr(obj,"__dict__"):returnobjresult={}forkey,valinobj.__dict__.items():ifkey.startswith("_"):......
  • 使用Aspose.BarCode,在 Python 中扫描条码
    条形码是机器可读的数据表示形式,由平行线或几何图案直观地表示。它们提供了一种快速准确的方法来存储和检索信息,例如产品详细信息、库存代码或跟踪号码。条形码有多种类型,包括UPC、EAN、QR码等。每种类型都有特定的结构和编码机制。在这篇博文中,我们将学习如何构建高性能的Python......
  • Python列表排序sort和sorted的区别
    lst_1=[3,1,2]lst_2=[4,6,5]print(lst_1.sort())lst_1.sort()print(lst_1)print(sorted(lst_2))#None#[1,2,3]#[4,5,6]所以结论就是:sorted(list)原来的list不变,生成一个新的排好序的list对象。list.sort()改变原有的list,不会返回对象。......
  • 在 Python 中使用 Pygal 绘制世界地图
    在Python的Pygal库的帮助下,我们可以在Python中创建令人惊叹的世界地图,因为它提供了不同的功能来创建和自定义图形。本文探讨了绘制世界地图、自定义地图样式、添加数据以突出显示国家或地区以及将地图呈现为SVG文件的分步过程。无论您是想可视化地理数据、展示国际统计数据......
  • 在Python中使用LooseVersion进行软件版本号比对
    技术背景Python是一门极其热门、极其灵活的开发语言,其更新迭代的速度也非常的快速。有时候我们遇到不同的软件版本不同方法处理的情况,此时就需要用到版本号比对的工具。举一个例子说,我们要在python代码中区分numpy版本在1.21.6之前和之后的版本。虽然我们可以自己手写一个软件版......
  • python与selenium
    seleniumIDE脚本语言记录(录制) 屏幕操作(回放)seleniumRC自动化脚本selenium GRID分布式定位页面元素八种方式定位表格定位某个单元格 定位表格的子元素定位网页:静态网页动态网页......
  • RedHat:安装Python3.7
    学习自:rhel安装python3.7_redhat安装python3_weixin_44282127的博客-CSDN博客1、准备工作以下过程需要以用户角度开展:su-用户1)创建存放安装包的文件夹mkdir/opt/python2)去Python官网下载所需的python版本(这里以3.7.16为例)①选择Linux ②找到对应版本的python......