图像金字塔是一幅图像的多个不同分辨率的子图所构成的图像集合。该组图像由单个图像通过不断采样产生,最小的图像可能仅仅有一个像素点。

图像金字塔基本理论

图像金字塔是同一图像不同分辨率的子图合集,是通过对原图像不断地向下采样而产生的,即由高分辨率的图像(大尺寸)产生低分辨率的近似图形(小尺寸)。

图像金字塔示例

最简单的图像金字塔可以通过不断删除图像的偶数行和偶数列得到。例如,有一幅N*N的图像通过删除偶数行和偶数列处理,得到一个N/2*N/2大小的图像。经过如此处理之后,就可以得到原图向1/4的图像。

高斯金字塔

对原图像进行滤波,得到原始图像的近似图像,然后将近似图像的偶数行和偶数列删除,以获取向下采样的结果。

  • 领域滤波器:采用领域平均滤波技术求原始图像的近似图像。产生平均金字塔
  • 高斯滤波器:采用高斯滤波器对原始图像进行滤波,得到高斯金字塔。

生成高斯金字塔的过程

向上采样,通过将图像的宽度与高度都变为原来的2倍。因此,要在结果图像中补充大量的像素点。对新生成的像素点进行大量的插值。例如最临近插值补零插值

向上采样和向下采样是相反的操作。且这两种操作是不可逆的。

向下采样pyrDown函数

实现图像高斯金字塔操作中的向下采样:

dst = cv2.pyrDown(src[,dstsize[,borderType]])
  • src为原始图像
  • dst为目标图像
  • dstsize为目标图像的大小
  • borderType为边界类型,默认值为BORDER_DEFAULT,且只支持BORDER_DEFAULT

cv2.pyrDown()函数首先对原始图像进行高斯滤波变换,然后通过抛弃偶数行和偶数列来实现向下采样。

import cv2
img1 = cv2.imread(r'E:\Blog\OpenCV\mn.png',0)
r1 = cv2.pyrDown(img1)  
r2 = cv2.pyrDown(r1)  
r3 = cv2.pyrDown(r2)
print('img1尺寸大小',img1.shape)
print('r1尺寸大小',r1.shape)
print('r2尺寸大小',r2.shape)
print('r3尺寸大小',r3.shape)
cv2.imshow('ORIGINAL',img1)
cv2.imshow('R1',r1)
cv2.imshow('R2',r2)
cv2.imshow('R3',r3)
cv2.waitKey()
img1尺寸大小 (289, 498)
r1尺寸大小 (145, 249)
r2尺寸大小 (73, 125)
r3尺寸大小 (37, 63)

运行结果

向上采样pyrUp函数

向上采样:

dst = cv2.pyrUp(src[,dstsize[,borderType]])
  • src为原始图像
  • dst为目标图像
  • dstsize为目标图像的大小
  • borderType为边界类型,默认值为BORDER_DEFAULT,且只支持BORDER_DEFAULT
import cv2
img1 = cv2.imread(r'E:\Blog\OpenCV\logo.png',0)
r1 = cv2.pyrUp(img1)  
r2 = cv2.pyrUp(r1)  
r3 = cv2.pyrUp(r2)
print('img1尺寸大小',img1.shape)
print('r1尺寸大小',r1.shape)
print('r2尺寸大小',r2.shape)
print('r3尺寸大小',r3.shape)
cv2.imshow('ORIGINAL',img1)
cv2.imshow('R1',r1)
cv2.imshow('R2',r2)
cv2.imshow('R3',r3)
cv2.waitKey()
img1尺寸大小 (98, 98)
r1尺寸大小 (196, 196)
r2尺寸大小 (392, 392)
r3尺寸大小 (784, 784)

采样结果


博主个人公众号
版权声明 ▶ 本网站名称:陶小桃Blog
▶ 本文链接:https://www.52txr.cn/2022/OpenCV32.html
▶ 本网站的文章部分内容可能来源于网络,仅供大家学习与参考,如有侵权,请联系站长进行核实删除。
▶ 转载本站文章需要遵守:商业转载请联系站长,非商业转载请注明出处!!

最后修改:2022 年 05 月 28 日
如果觉得我的文章对你有用,请随意赞赏