opencv学习笔记19:图像金字塔和图像拉普拉斯金字塔 (用于图像放大和缩小)

图像金字塔原理

图像金字塔:只不同分辨率,不同尺寸子图构成的集合。
opencv学习笔记19:图像金字塔和图像拉普拉斯金字塔 (用于图像放大和缩小)_第1张图片

取样
向下取样:有一个图像G0,对它重新采样,得到分辨率小些的G1,以此类推。
向上取样:有一个图像G3,然后变成像素更多的G2,以此类推。
opencv学习笔记19:图像金字塔和图像拉普拉斯金字塔 (用于图像放大和缩小)_第2张图片

向下取样方法
opencv学习笔记19:图像金字塔和图像拉普拉斯金字塔 (用于图像放大和缩小)_第3张图片

高斯卷积核:自身像素点取36,近一些的取24,越远的像素越低。最后除以像素点个数
opencv学习笔记19:图像金字塔和图像拉普拉斯金字塔 (用于图像放大和缩小)_第4张图片
删除偶数行列:使尺寸变为原始四分之一。
向下取样会丢失一些信息。
向上取样方法

opencv学习笔记19:图像金字塔和图像拉普拉斯金字塔 (用于图像放大和缩小)_第5张图片
如原始图像45,12,3,89,149。一轮向上取样后变为右边。
因为含义0,在使用卷积核时,等于一个像素点被稀释掉为原来的四分之一。所以还要乘以4使图像正常。
opencv学习笔记19:图像金字塔和图像拉普拉斯金字塔 (用于图像放大和缩小)_第6张图片
向下取样和向上取样是不可逆操作。无法恢复原图。

向下取样函数使用

python+OpenCV
dst=cv2.pyrDown(src)

dst:取样结果
src:原始图像

import cv2
import numpy as np
o=cv2.imread("logo.png")
r1=cv2.pyrDown(o)
r2=cv2.pyrDown(r1)
cv2.imshow("original",o)
cv2.imshow("PyrDown1",r1)
cv2.imshow("PyrDown2",r2)
cv2.waitKey()
cv2.destroyAllWindows()

向上取样函数使用

dst=cv2.pyrUp(src)
dst:取样结果
src:原始图像

import cv2
import numpy as np
o=cv2.imread("lena256.bmp",cv2.IMREAD_GRAYSCALE)
r=cv2.pyrUp(o)
cv2.imshow("original",o)
cv2.imshow("pyrUp",r)
cv2.waitKey()
cv2.destroyAllWindows()

放大图像会导致图像模糊
opencv学习笔记19:图像金字塔和图像拉普拉斯金字塔 (用于图像放大和缩小)_第7张图片

向下取样向上取样可逆性研究

研究经过一次向下和向上取样后,图像像素是否变化。

import cv2
o=cv2.imread("girl.bmp")
r=cv2.pyrUp(o)
r2=cv2.pyrDown(r)
diff=r2-o
cv2.imshow("difference",diff)
cv2.waitKey()
cv2.destroyAllWindows()

经过一次向上再向下后,再与原图求差,其结果见下面。可以发现经过向上向下后不能恢复原图

拉普拉斯金字塔

结果=原始图像-先向下再向上
向下:尺寸变小
向上:尺寸变大
opencv学习笔记19:图像金字塔和图像拉普拉斯金字塔 (用于图像放大和缩小)_第8张图片

下图信息为进行两次:
(结果1=原始图像-先向下再向上)
(结果2=结果1-先向下再向上)
opencv学习笔记19:图像金字塔和图像拉普拉斯金字塔 (用于图像放大和缩小)_第9张图片

import cv2
o=cv2.imread("lena.bmp")
od=cv2.pyrDown(o)
odu=cv2.pyrUp(od)
lapPyr=o-odu
o1=od
o1d=cv2.pyrDown(o1)
o1du=cv2.pyrUp(o1d)
lapPyr1=o1-o1du
cv2.imshow("lapPyr",lapPyr)
cv2.imshow("lapPry1",lapPyr1)
cv2.waitKey()
cv2.destroyAllWindows()

opencv学习笔记19:图像金字塔和图像拉普拉斯金字塔 (用于图像放大和缩小)_第10张图片

总目录链接:
python3+opencv学习笔记汇总目录(适合基础入门学习)

电气专业的计算机小白,写博文不容易。如果你觉得本文不错。请点个赞支持下。谢谢。

你可能感兴趣的:(CV计算机视觉)