python+opencv-14 图像金字塔

本文深入探讨了图像金字塔技术,包括高斯金字塔和拉普拉斯金字塔的原理与应用。通过Python和OpenCV实现了图像金字塔的构建过程,展示了如何利用金字塔进行图像复原。适合于从事图像处理、计算机视觉领域的技术人员阅读。

图像金字塔

图像金字塔是一种以多分辨率来解释图像的有效结构,常用于图像分割、机器视觉和图像压缩中。一幅图像的金字塔是一系列以金字塔形状排列的分辨率逐步降低且来源于同一张原始图的图像集合。通过梯次向下采样获得。金字塔的底部是待处理图像的高分辨率表示,顶部是低分辨率的近似。通常情况下,向上移动一级,图像的宽和高都降低为原来的二分之一。
常见的图像金字塔有有高斯金字塔和拉普拉斯金字塔两种。其中,高斯金字塔一般是下采样图像,拉普拉斯金字塔一般用来从金字塔底层重建上一层的未采样图形。

高斯金字塔

高斯金字塔通过不断的进行下采样和滤波产生,且每次下采样图像的宽和高都会减小为原来的一半。
上采样和下采样相反,是将图像的宽与高扩大2倍。因此,图像需要补充大量的像素点,这时就会用到插值方法。接着就是使用下采样时所用的高斯滤波器对补零后的图像进行滤波处理,以获取向上采样的结果图像。
上采样和下采样是相反的两种操作。由于向下采样会丢失像素值,所以这两种操作不可逆。

拉普拉斯金字塔

为了在上采样时恢复为具有较高分辨率的原始图像,需要获取这些丢失的信息,于是便有了拉普拉斯金字塔。

代码实现

pyrDown()函数实现下采样

import cv2 as cv

image = cv.imread("fenshuiling.jpg", 0)

img1 = cv.pyrDown(image)
img2 = cv.pyrDown(img1)
img3 = cv.pyrDown(img2)

cv.imshow("image", image)
cv.imshow("image1", img1)
cv.imshow("image2", img2)
cv.imshow("image3", img3)

print("image.shape", image.shape)
print("image1.shape", img1.shape)
print("image2.shape", img2.shape)
print("image3.shape", img3.shape)

cv.waitKey()
cv.destroyAllWindows()

在这里插入图片描述

pyrUp()函数实现上采样

import cv2 as cv

image = cv.imread("2.jpeg", 0)

img1 = cv.pyrUp(image)
img2 = cv.pyrUp(img1)
img3 = cv.pyrUp(img2)

cv.imshow("image", image)
cv.imshow("image1", img1)
cv.imshow("image2", img2)
cv.imshow("image3", img3)

print("image.shape", image.shape)
print("image1.shape", img1.shape)
print("image2.shape", img2.shape)
print("image3.shape", img3.shape)

cv.waitKey()
cv.destroyAllWindows()

在这里插入图片描述

实现拉普拉斯金字塔

拉普拉斯金字塔的某一层图像是该层高斯金字塔图像与上一层高斯金字塔图像之差。

import cv2 as cv

image = cv.imread("lena.jpg", 0)

img0 = image
img1 = cv.pyrDown(img0)
img2 = cv.pyrDown(img1)
img3 = cv.pyrDown(img2)

I0 = img0 - cv.pyrUp(img1)
I1 = img1 - cv.pyrUp(img2)
I2 = img2 - cv.pyrUp(img3)

cv.imshow("I0", I0)
cv.imshow("I1", I1)
cv.imshow("I2", I2)

cv.waitKey()
cv.destroyAllWindows()

在这里插入图片描述

用金字塔实现图像复原

使用高斯金字塔和拉普拉斯金字塔实现对图像的复原。

import cv2 as cv

image = cv.imread("lena.jpg", 0)

img0 = image
img1 = cv.pyrDown(img0)
img2 = cv.pyrDown(img1)
img3 = cv.pyrDown(img2)

I0 = img0 - cv.pyrUp(img1)
I1 = img1 - cv.pyrUp(img2)
I2 = img2 - cv.pyrUp(img3)

M0 = I0 + cv.pyrUp(img1)
M1 = I1 + cv.pyrUp(img2)
M2 = I2 + cv.pyrUp(img3)

cv.imshow("image", image)
cv.imshow("M0", M0)
cv.imshow("M1", M1)
cv.imshow("M2", M2)

cv.waitKey()
cv.destroyAllWindows()

在这里插入图片描述

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值