10-图像金字塔
图像金字塔
图像金字塔是图像中多尺度表达的一种,最主要用于图像的分割,是一种以多分辨率来解释图像的有效但概念简单的结构
1.向下取样(缩小图像)
在图像向下取样中,一般分两步:
1> 对图像Gi进行高斯卷积核(高斯滤波)
2> 删除所有的偶数行和列
高斯卷积核,如下:
整体过程就是,原始图像 G_i 具有 M*N 个像素,进行向下取样之后,所得到的图像 G_i+1 具有 M/2 * N/2 个像素,每次处理后,结果图像是原始图像的四分之一(向下取样是会丢失一部分信息)
2.向上取样(放大图像)
在图像向上取样是由小图像不断放大图像的过程。它将图像在每个方向上扩大为原图像的2倍,新增的行和列均用0来填充,并使用与“向下取样”相同的卷积核乘以4,再与放大后的图像进行卷积运算,以获得“新增像素”的新值
如图下图所示,它在原始像素45、123、89、149之间各新增了一行和一列值为0的像素
需要注意:向上取样和向下取样无法互逆的
向下取样函数及使用
dst = cv2.pyrDown(src)
其中,dst是向下取样结果,src是原始图像
import cv2 import numpy as np img = cv2.imread(r"image\man.bmp",cv2.IMREAD_UNCHANGED) # 向下取样 r1 = cv2.pyrDown(img) r2 = cv2.pyrDown(r1) cv2.imshow("original",img) cv2.imshow("pyrDown1",r1) cv2.imshow("pyrDown2",r2) cv2.waitKey(0) cv2.destroyAllWindows()
图像向下采样的实验结果:
向上取样函数及使用
dst = cv2.pyrUp(src)
其中,dst是向上取样结果,src是原始图像
import cv2 import numpy as np img = cv2.imread(r"image\p.bmp",cv2.IMREAD_UNCHANGED) # 向上取样 r1 = cv2.pyrUp(img) r2 = cv2.pyrUp(r1) cv2.imshow("original",img) cv2.imshow("pyrUp1",r1) cv2.imshow("pyrUp2",r2) cv2.waitKey(0) cv2.destroyAllWindows()
图像向上取样的实验结果:
拉普拉斯金字塔
拉普拉斯金字塔就是记录高斯金字塔每一级下采样后再上采样与原始图像的差异,目的是为了能够完整的恢复出每一层级的下采样前图像
L = G - cv2.pyrUp(cv2.pyrDown(G))
其中,G是原始图像,L是拉普拉斯金字塔图像
import cv2 img = cv2.imread(r"image\lena.bmp",cv2.IMREAD_UNCHANGED) # 拉普拉斯金字塔 od = cv2.pyrDown(img) odu = cv2.pyrUp(od) laplacian = img - odu cv2.imshow("original",img) cv2.imshow("laplacian",laplacian) cv2.waitKey(0) cv2.destroyAllWindows()
拉普拉斯金字塔的实验结果: