图像金字塔(opencv_python学习)

介绍

图像金字塔是一种用于处理图像的多尺度表示方法,可以在不同分辨率下对图像进行分析和处理。其中,高斯金字塔用于图像降采样(缩小),拉普拉斯金字塔用于图像重建。

在OpenCV中,cv.pyrUp()和cv.pyrDown()函数用于实现图像金字塔的操作。

高斯金字塔:

通过重复向下采样(缩小)操作来生成图像金字塔。每个下一层级的图像都是前一层级图像的模糊和缩小版本。这实现了将图像尺寸减小一半的效果。

代码思路:

  1. 首先,代码将图像A复制到变量G中作为初始层级。然后,创建一个空列表gpA用于存储图像A的高斯金字塔。

  2. 接下来,通过循环操作生成高斯金字塔。循环从0到5,共进行6次迭代(自定义)。在每次迭代中,使用cv.pyrDown函数对当前层级的图像G进行下采样操作,得到下一层级的图像G。然后,将该图像G添加到gpA列表中。

  3. 最终,gpA列表将包含图像A的高斯金字塔层级,其中索引0表示最底层(原始图像),索引6表示最顶层(最小尺寸)。

# 生成A的高斯金字塔
G = A.copy()
gpA = [G]
for i in xrange(6):
	G = cv.pyrDown(G)
	gpA.append(G)

拉普拉斯金字塔:

通过对高斯金字塔进行差分运算来生成图像金字塔。每个层级的图像都是该层级高斯金字塔图像与上一层级高斯金字塔图像上采样(放大)后的结果之差。这使得每个层级的图像都包含了高频细节信息。

代码思路;

  1. 创建了一个空列表lpA用于存储图像A的拉普拉斯金字塔。然后,从高斯金字塔的最后一层开始(即gpA[5]),通过循环逐层生成拉普拉斯金字塔。

  2. 在每一层中,代码首先使用cv.pyrUp函数进行上采样操作,将上一层级的图像扩大为当前层级的尺寸。然后,通过使用cv.subtract函数计算当前层级与上一层级图像之间的差异(即拉普拉斯图像)。将该拉普拉斯图像添加到lpA列表中。

  3. 最终,lpA列表将包含图像A的拉普拉斯金字塔层级。

# 生成A的拉普拉斯金字塔
lpA = [gpA[5]]
for i in xrange(5,0,-1):
	GE = cv.pyrUp(gpA[i])
	L = cv.subtract(gpA[i-1],GE)
	lpA.append(L)

使用金字塔进行图像融合

在图像融合中,使用金字塔可以将两个或多个图像混合在一起,消除它们之间的不连续性和边界。这种技术被广泛应用于全景图拼接、HDR图像合成、虚实融合等领域。

# 现在在每个级别中添加左右两半图像
LS = []
for la,lb in zip(lpA,lpB):
	rows,cols,dpt = la.shape
	ls = np.hstack((la[:,0:cols/2], lb[:,cols/2:]))
	LS.append(ls)
# 现在重建
ls_ = LS[0]
for i in xrange(1,6):
	ls_ = cv.pyrUp(ls_)
	ls_ = cv.add(ls_, LS[i])
# 图像与直接连接的每一半
real = np.hstack((A[:,:cols/2],B[:,cols/2:]))
cv.imwrite('Pyramid_blending2.jpg',ls_)
cv.imwrite('Direct_blending.jpg',real)

这段代码用于在每个级别中将左右两半图像合并,并进行金字塔重建。

  1. 首先,代码创建了一个空列表LS用于存储合并后的图像。然后,通过循环迭代从拉普拉斯金字塔lpA和lpB中获取每个级别的图像la和lb。对于每个级别,代码使用np.hstack函数将图像la的左半部分和图像lb的右半部分水平拼接在一起,得到合并后的图像ls。将ls添加到LS列表中。

  2. 接下来,代码使用cv.pyrUp函数和cv.add函数对重建图像进行逐级上采样和融合。首先,将LS列表中的第一个图像赋值给变量ls_。然后,循环从1到5,共进行5次迭代。在每次迭代中,先使用cv.pyrUp函数进行上采样操作,将ls_图像扩大为当前级别的尺寸。然后,使用cv.add函数将上一级别的重建图像ls_与当前级别的合并图像LS[i]相加,得到更新后的重建图像ls_。

  3. 最后,代码使用np.hstack函数将原始图像A的左半部分和图像B的右半部分水平拼接在一起,得到直接连接的图像real。使用cv.imwrite函数将重建图像ls_和直接连接的图像real保存为文件。

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值