opencv学习(图像金字塔)
1.什么是图像金字塔
图像金字塔是一种多尺度图像表示方法,通过对原始图像进行下采样(缩小)和上采样(放大),生成一系列不同分辨率的图像集合,形似 “金字塔”(底部是高分辨率原始图像,向上逐渐变为低分辨率图像)。
2.核心作用
多尺度分析:不同分辨率的图像适用于检测不同大小的目标(如大目标在低分辨率图像中更易识别,小目标需要高分辨率)。
图像融合:结合不同尺度的图像信息(如拉普拉斯金字塔可无缝融合两张图像的细节)。
降维与压缩:低分辨率图像数据量小,便于快速处理和存储。
特征提取:在多个尺度上提取特征(如 SIFT 特征依赖金字塔实现尺度不变性)。
3.常见的2种操作方法
高斯金字塔,拉普拉斯金字塔
(1)高斯金字塔
是最常见的类型,通过下采样和上采样操作生成,核心是高斯模糊(平滑)和降采样。
下采样(缩小图像):cv2.pyrDown()
上采样(放大图像):cv2.pyrUp()
如代码示例:
img=cv2.imread(\'aiye.jpg\')def cv_show(name,img): cv2.imshow(name,img) cv2.waitKey(0) cv2.destroyAllWindows()cv_show(\'aiye\',img)print(img.shape)#高斯金字塔(向下采样(图像缩小),向上采样(图像放大,矩阵添0))up1=cv2.pyrUp(img)cv_show(\'up1\',up1)print(up1.shape)down1=cv2.pyrDown(img)cv_show(\'down1\',down1)print(down1.shape)\'\'\'先执行上采样再执行下采样,或者先下后上都是无法恢复到原图的\'\'\'
(2)拉普拉斯金字塔
基于高斯金字塔构建,用于保留图像下采样过程中丢失的细节,核心是 “原始图像与上采样后的下采样图像的差值”。
计算方式:
公式:Li=Gi−pyrUp(pyrDown(Gi))
如代码示例:
up2=cv2.pyrUp(down1)\'\'\'img 和 up2 的尺寸不同(一个是 (299,299,3),另一个是 (300,300,3)),无法进行减法运算(lap=img-up2),则先让两个图像的尺寸大小一致了再进行减法。要么改img要么改up2\'\'\'up2_rs=cv2.resize(up2,(img.shape[1],img.shape[0]))lap=img-up2_rscv_show(\'lap\',lap)print(lap.shape)