当前位置:   article > 正文

[OpenCV / The Laplacian pyramid] 浅析拉普拉斯金字塔 / 利用拉普拉斯完成采样的恢复 学习笔记

laplacian pyramid

拉普拉斯金字塔(The Laplacian pyramid)有什么用?如何实现上下采样的逆操作?是什么原理?

一、背景

众所周知,上采样和下采样是不不可逆的操作。也就是:

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

–摘自《OpenCV 轻松入门:面向 Python》

因此,我们引入了拉普拉斯金字塔(The Laplacian pyramid)。

二、分析

1.拉普拉斯金字塔(The Laplacian pyramid)定义

一言概之,拉普拉斯金字塔(The Laplacian pyramid)就是 :每一层的图像是由 :拉普拉斯金字塔中的第i层,等于「高斯金字塔中的第i层」与「高斯金字塔中的第i+1层的向上采样结果」之差。

书里面有很多图,简单易懂,再次推荐这本书《OpenCV 轻松入门:面向 Python》,入门利器。 一些小错误也已经在博文视点上做了勘误。

在这里插入图片描述

2.原理

由上一小节我们知道,拉普拉斯金字塔是一个"高斯差值金字塔"。
所以拉普拉斯金字塔实际上是保存的是损失部分信息。

在这里插入图片描述
左图是右图的简化,这样看比简洁,但是仍然不够直观。

书上的demo我就暂时不参考了(我某平台借阅的正版的电子版排版有问题),把我自己学习的时候写的demo发给大家。

3. 代码与效果

这个效果用我原来的apple不好做,我还去专门找了一下 Lena小姐的照片。

补充一个概念,以免有同学混淆,所谓高斯金字塔:
在这里插入图片描述


import numpy as np
import cv2 as cv
from matplotlib import pyplot as plt

img = cv.imread('lena.jpg', cv.IMREAD_GRAYSCALE)
Gus0 = img
Gus1 = cv.pyrDown(Gus0)
Gus2 = cv.pyrDown(Gus1)
Gus3 = cv.pyrDown(Gus2)

Lap0 = Gus0 - cv.pyrUp(Gus1)
Lap1 = Gus1 - cv.pyrUp(Gus2)
Lap2 = Gus2 - cv.pyrUp(Gus3)

prGus = cv.pyrUp(Gus3)
for i in range(2):
    prGus = cv.pyrUp(prGus)

plt.figure(0)
plt.subplot(221), plt.imshow(img, 'gray'), plt.title('Org/Gus0'), plt.axis('off')
plt.subplot(222), plt.imshow(Gus3, 'gray'), plt.title('Gus3'), plt.axis('off')  # 为了效果明显 我们选用第3层高斯
plt.subplot(223), plt.imshow(cv.pyrUp(Gus3), 'gray'), plt.title('prGus'), plt.axis('off')  # 如果我们直接上采样
plt.subplot(224), plt.imshow(Lap2, 'gray'), plt.title('LAP2'), plt.axis('off')

plt.figure(1)
rep = Lap0 + cv.pyrUp(Lap1 + cv.pyrUp(Lap2 + cv.pyrUp(Gus3)))
plt.subplot(121), plt.imshow(img, 'gray'), plt.title('Org/Gus0'), plt.axis('off')
plt.subplot(122), plt.imshow(rep, 'gray'), plt.title('LapToRestore'), plt.axis('off')

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30

在这里插入图片描述
为了效果,我们采用第四层Gaussian作为比较对象
可以看到,第四层高斯(第二幅图)是非常模糊的。
直接向上采样四次(第三幅图)的还原图也是模糊,这足以证明Gauss不是一个可逆操作。
第四幅图是第三层拉普拉斯金字塔图像。

使用拉普拉斯金字塔修复后:
在这里插入图片描述

为了确定是否是无损复原,我们简单验证一下:

在这里插入图片描述

可以看到img和rep是完全相等两个numpy array

拉普拉斯金字塔毫无疑问可以完成无损修复,因为他就是记录了损失信息。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/2023面试高手/article/detail/545468
推荐阅读
相关标签
  

闽ICP备14008679号