同一图像具有不同分辨率的图像被称为图像金字塔(因为它们被保存在堆叠中,底部最大图像,顶部最小图像看起来像金字塔)。
图像金字塔应用于处理同一图像的不同分辨率的图像。
图像金字塔操作的是图像的像素问题。
1、学习目标
如何使用Python和OpenCV的Image Pyramids。
使用图像金字塔 来做图像缩放
2、使用的函数方法
图像金字塔有两种。
1)高斯金字塔:
cv2.pyrDown()
cv2.pyrUp()
2)拉普拉斯金字塔:
拉普拉斯金字塔由高斯金字塔形成。没有专属功能。拉普拉斯金字塔图像仅与边缘图像相似。它的大部分元素都是零。它们用于图像压缩。
3、程序
(1)
结果
(2)
出现的结果类似于这样
第二个程序运行时出现了一个问题:
Traceback (most recent call last):
File "F:/OpenCV/pyramid.py", line 18, in
laplacian = cv2.subtract(gp[i], gaussian_extended)
cv2.error: OpenCV(4.1.0) C:\projects\opencv-python\opencv\modules\core\src\arithm.cpp:663: error: (-209:Sizes of input arguments do not match) The operation is neither 'array op array' (where arrays have the same size and the same number of channels), nor 'array op scalar', nor 'scalar op array' in function 'cv::arithm_op'
好像是图片不匹配的问题,我现在一头雾水,有没有哪个大佬指点一下。
函数程序讲解:
(1)高斯金字塔
(a)原理:
高斯金字塔的顶部是通过将底部图像的连续行与列去掉得到的。
每一层图像中的像素值等于下一层图像中对应位置5个像素的高斯加权平均值。这样操作一个MN的图像就变成了(M/2)(N/2)的图像,图像的面积就变为原来的1/4,连续进行这样的操作,就会得到一些列的金字塔的图像。
(b)用来向下采样
向下采样缩小图像的时候, 实际上丢失 了一些信息。
(2)
从一个高分辨率大尺寸的图像向上构建一个金字塔(尺寸变小,分辨率降低)
cv2.pyrDown()
参数:
tmp: 当前图像,初始化为原图像 src 。
dst: 目的图像( 显示图像,为输入图像的一半)
Size( tmp.cols/2, tmp.rows/2 ) :目的图像大小
默认情况:
直接输入需要操作的图像,图像按缩小1/4来处理
(3)
从一个低分辨率小尺寸的图像向上构建一个金字塔(尺寸变大,但分辨率不会增加)
cv2.pyrUp()
(4)
拉普拉斯金字塔(Laplacian pyramid):
用来从金字塔低层图像重建上层未采样图像
拉普拉斯金字塔可以由高斯金字塔计算得来。公式如下: