资讯专栏INFORMATION COLUMN

OpenCV笔记整理【高斯金字塔&拉普拉斯金字塔】

Maxiye / 2926人阅读

摘要:定义形式简单理解就是先对当前一层的高斯金字塔图像,向下采样,然后向上采样,最后使用当前图像减去两次采样后的图像表示拉普拉斯金字塔中的第层。表示高斯金字塔中的第层。

图像金字塔

是同一图像不同分辨率的子图集合,通过对原图的不断向下采样而产生,由高分辨率的图像产生低分辨率的近似图像。

1. 高斯金字塔:不可逆采样

向下采样

import cv2o=cv2.imread("lena.bmp",cv2.IMREAD_GRAYSCALE)r1=cv2.pyrDown(o) # 对原图第一次向下采样r2=cv2.pyrDown(r1) # 对第一次采样的图像再次向下采样r3=cv2.pyrDown(r2) # 对第二次采样的图像再次向下采样print("o.shape=",o.shape)print("r1.shape=",r1.shape) # 打印采样后的图像分辨率print("r2.shape=",r2.shape)print("r3.shape=",r3.shape)cv2.imshow("original",o)cv2.imshow("r1",r1)cv2.imshow("r2",r2)cv2.imshow("r3",r3)cv2.waitKey()cv2.destroyAllWindows()


向上采样

import cv2o=cv2.imread("lenas.bmp")r1=cv2.pyrUp(o) # 向上采样r2=cv2.pyrUp(r1) r3=cv2.pyrUp(r2)print("o.shape=",o.shape)print("r1.shape=",r1.shape)print("r2.shape=",r2.shape)print("r3.shape=",r3.shape)cv2.imshow("original",o)cv2.imshow("r1",r1)cv2.imshow("r2",r2)cv2.imshow("r3",r3)cv2.waitKey()cv2.destroyAllWindows()



为什么说高斯金字塔采样是不可逆的?
这里使用原始图像减去先向下采样后向上采样的图像,看看结果,理论上来说,两张图像相减结果为0(就是一片漆黑),就说明这两张图像是一张图。

import cv2o=cv2.imread("lena.bmp")down=cv2.pyrDown(o) # 先向下采样up=cv2.pyrUp(down) # 再向上采样diff=up-o   #构造diff图像,查看up与o的差异cv2.imshow("original",o)cv2.imshow("up",up)cv2.imshow("difference",diff)cv2.waitKey()cv2.destroyAllWindows()


上面相减后的结果并非是0,也就证实了通过高斯金字塔向下采样并不是向上采样的逆运算,因为通过高斯滤波后,进行了抛弃偶数行列操作,不了避免的丢失了像素信息。


2. 拉普拉斯金字塔:可逆行采样

为了解决上述丢失像素细节的问题,这里使用另外一种采样方式----拉普拉斯金字塔。

定义形式:Li = Gi - pyrUp(Gi + 1)
简单理解就是: 先对当前一层的高斯金字塔图像,向下采样,然后向上采样,最后使用当前图像减去两次采样后的图像

  • Li:表示拉普拉斯金字塔中的第i层。
  • Gi:表示高斯金字塔中的第i层。
import cv2import numpy as npimport matplotlib.pyplot as pltO=cv2.imread("lena.bmp")# 高斯金字塔并向下采样G0=OGd=cv2.pyrDown(G0)# 高斯金字塔并向上采样Gu=cv2.pyrUp(Gd)# 得到拉普拉斯金字塔L0=G0-Gu # 通过拉普拉斯图像复原RG0=L0+Guprint("G0.shape=",G0.shape)print("RG0.shape=",RG0.shape)result=RG0-G0  #将RG0和G0做减法#计算result的绝对值,避免求和时负负为正(PS:3+(-3)=0)result=abs(result)  #计算result所有元素的和print("原始图像G0与恢复图像RG0差值的绝对值和:",np.sum(result))  # 使用pyplot显示图像plt.figure(figsize=(10,10),dpi=100)plt.subplot(1,3,1)plt.title("G0")plt.imshow(G0),plt.axis("off")plt.subplot(1,3,2)plt.title("L0")plt.imshow(L0),plt.axis("off")plt.subplot(1,3,3)plt.title("RG0")plt.imshow(RG0),plt.axis("off")

运行结果:

拜了个拜。。。

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/121101.html

相关文章

  • opencv python 图像字塔

    摘要:所以这幅图像的面积就变为原来图像面积的四分之一这被称为一个八度。 Image Pyramids 图像金字塔 通常,我们曾经使用恒定大小的图像.但在某些情况下,我们需要使用不同分辨率的(相同)图像.例如,在搜索图像中的某些内容时,如脸部,我们不确定该对象在所述图像中的大小. 具有不同分辨率的图像被称为图像金字塔(因为当它们保持在堆叠中,底部具有最高分辨率图像而顶部具有最低分辨率图像时,...

    SwordFly 评论0 收藏0
  • OpenCV-Python计算机视觉函数

    摘要:如果不设置这个,图片只会一瞬间显示,就消失了。括号里面也可以设置显示时长。 目录 1、概述 2、OpenCV基础 读取图片 imread 调整显示窗口大小 resizeWindow 调整图像尺寸大小 resize 色彩空间进行转换 cvtColor 绘制线段 line 绘制矩形框 recta...

    levius 评论0 收藏0
  • python数字图像处理实现图像的形变与缩放

      小编写这篇文章的主要目的,主要是给大家介绍关于Python的一些事宜,比如会涉及到图像处理相关的问题,比如会涉及到相关的图像的形变与缩放,那么,遇到这种问题的话,具体要怎么操作呢?下面就给大家详细解答下。  skimage的transform模块  图形的放大与缩小,应用到的技术是skimage的transform模块,函数比较多,功能齐全。  1、改变图片尺寸resize  函数格式为:  ...

    89542767 评论0 收藏0
  • 图像字塔分层算法

    摘要:拉普拉斯金字塔用来从金字塔低层图像重建上层未采样图像,在数字图像处理中也即是预测残差,可以对图像进行较大程度的还原,配合高斯金字塔一起使用。 一. 图像金字塔概述1. 图像金字塔是图像中多尺度表达的一种,最主要用于图像的分割,是一种以多分辨率来解释图像的有效但概念简单的结构。2. 图像金字塔最初用于机器视觉和图像压缩,一幅图像的金字塔是一系列以金字塔形状排列的分辨率逐步降低,且来源于同一张原...

    jeffrey_up 评论0 收藏0
  • Programming Computer Vision with Python (学习笔记十一)

    摘要:降采样的目的是为了综合所有不同清晰度的图像进行关键点提取,这种关键点携带了不同清晰度的信息,对缩放具有不变性。是对的一种改进,主要特点是快速。的达到维,导致的比较耗时,使用哈尔小波转换得到的方向,让的降到维,减少了一半,提高了匹配速度。 尺度不变特征变换(Scale-invariant feature transform, 简称SIFT)是图像局部特征提取的现代方法——基于区域/图像块...

    levius 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<