图像金字塔:简单来说就是同一图像的不同分辨率的子图集合,可以将图像在不同的尺寸进行展示。分为2类:高斯金字塔和拉普拉斯金字塔。
高斯金字塔:图片层次越高,分辨率越低。顶部是通过将底部图像中的连续的行和列去除得到的。顶部图像中的每个像素值等于下一层图像中 5 个像素的高斯加权平均值。这样操作一次一个 MxN 的图像就变成了一个 (M/2)x(N/2) 的图像。所以这幅图像的面积就变为原来图像面积的四分之一。这被称为Octave。连续进行这样的操作我们就会得到一个分辨率不断下降的图像金字塔。
拉普拉斯金字塔:主要展示的是图像的轮廓信息,它是当前层次的图像,和高层次图像做高斯模糊的图像,做差值。
OpenCV中提供cv2.pyrDown()和cv2.pyrUp()两个函数来实现金字塔功能。
- cv2.pyrDown() 从一个高分辨率大尺寸的图像向上构建一个金子塔(尺寸变小,分辨率降低,会丢失信息);
- cv2.pyrUp() 从一个低分辨率小尺寸的图像向下构建一个金子塔(尺
寸变大,但分辨率不会增加)。
import numpy as np
import cv2
img = cv2.imread('opencv_logo.jpg', 0)
lower_reso = cv2.pyrDown(img)
higher_reso = cv2.pyrUp(img)
cv2.imshow('img',img)
cv2.imshow('lower_reso', lower_reso)
cv2.imshow('higher_reso', higher_reso)
cv2.waitKey(0)
cv2.destroyAllWindows()