python+opencv图像金字塔融合(超详细讲解原理及代码讲解)

更新时间:2023-07-11 04:25:04 阅读: 评论:0

python+opencv图像⾦字塔融合(超详细讲解原理及代码讲解)本篇内容参考《Opencv官⽅教程中⽂版(Python)》的内容进⾏讲解和分析,其下载⽹址为
拓跋氏
download.csdn/download/dengxf01/9692646
由于书中代码所使⽤版本问题,所以,不少读者将其代码复制后,运⾏时出现错误,在这⾥我
将以Python3.6.1,Opencv 3.2版本进⾏代码展⽰和讲解。
图像⾦字塔主要涉及两个函数:cv2.pyrUp()(图像尺⼨变⼩),cv2.pyrDown()(图像尺⼨变
⼤,但会模糊)
图像⾦字塔有两类类型:⾼斯⾦字塔和拉普拉斯⾦字塔。
⾼斯⾦字塔的顶部是通过将底部图像中的连续的⾏和列去除得到的。顶部图像中的每个像素值
等于下⼀层图像中 5 个像素的⾼斯加权平均值。这样操作⼀次⼀个 MxN 的图像就变成了⼀个
M/2xN/2 的图像。所谓的5个元素是指:前后左右+⾃⾝。下图为⾼斯⾦字塔cv2.pyrUp() 的效果美丑对照原则
皮影戏的来历⾼斯⾦字塔将⼩图变⼤图⽤,cv2.pyrDown(),但是图像会模糊,如下图,从⼩图变⼤后的图像
对于拉普拉斯⾦字塔,其计算公式与⾼斯⾦字塔相关,具体为
Li=Gi-pyrUp(Gi+1), 其中i和i+1为下⾓标
拉普拉斯⾦字塔的图像效果为:
图像融合的两个重要作⽤为:
1.实现两个图像的⽆缝连接,下⾯⽤苹果和橘⼦的例⼦说明
时不与我
2.图像压缩,从苹果和橘⼦的例⼦中,读者可以体会如何利⽤⼩图像(被⾼斯⾦字塔变换后的图像)和⼏层拉普拉斯⾦字塔表⽰⼤图像信息(拉普拉斯⾦字塔即使图像很⼤,由于⼤部分为⿊⾊,可认为是0,因此压缩后数量很⼩)
苹果和橘⼦的例⼦的原始图像和融合后效果如图所⽰:
对于读者,实施苹果和橘⼦的数据准备阶段:
苹果和橘⼦的图⽚,但是要注意!!!!!!!!!!!由于程序采⽤六层⾦字塔,⼀次其图⽚像素的⾏数和列数要能够被(2X2X2X2X2X2)整除哦,否则计算过程中像素矩阵对不上就⿇烦了。
程序:
[python] view plain copy
法定节假日工资
1. import cv2
2. import numpy as np
3. A = cv2.imread('apple.jpg')
4. B = cv2.imread('orange.jpg')
5. # generate Gaussian pyramid for A
6. G = A.copy()
7. gpA = [G]
8. for i in np.arange(6):    #将苹果进⾏⾼斯⾦字塔处理,总共六级处理
9.    G = cv2.pyrDown(G)
10.    gpA.append(G)
11. # generate Gaussian pyramid for B
12. G = B.copy()
13. gpB = [G]
14. for i in np.arange(6):  # #将橘⼦进⾏⾼斯⾦字塔处理,总共六级处理
15.    G = cv2.pyrDown(G)
16.    gpB.append(G)
17. # generate Laplacian Pyramid for A
18. lpA = [gpA[5]]
19. for i in np.arange(5,0,-1):    #将苹果进⾏拉普拉斯⾦字塔处理,总共5级处理
20.    GE = cv2.pyrUp(gpA[i])
21.    L = cv2.subtract(gpA[i-1],GE)
22.    lpA.append(L)
23. # generate Laplacian Pyramid for B
24. lpB = [gpB[5]]
25. for i in np.arange(5,0,-1):    #将橘⼦进⾏拉普拉斯⾦字塔处理,总共5级处理
26.    GE = cv2.pyrUp(gpB[i])
27.    L = cv2.subtract(gpB[i-1],GE)
牛奶之歌
28.    lpB.append(L)
29. # Now add left and right halves of images in each level
30. #numpy.hstack(tup)
穷人读后感31. #Take a quence of arrays and stack them horizontally
32. #to make a single array.
33. LS = []
34. for la,lb in zip(lpA,lpB):
35.    rows,cols,dpt = la.shape
36.    ls = np.hstack((la[:,0:cols//2], lb[:,cols//2:]))    #将两个图像的矩阵的左半部分和右半部分
拼接到⼀起
37.    LS.append(ls)
辩论赛四辩总结陈词格式38. # now reconstruct
39. ls_ = LS[0]  #这⾥LS[0]为⾼斯⾦字塔的最⼩图⽚
40. for i in xrange(1,6):                        #第⼀次循环的图像为⾼斯⾦字塔的最⼩图⽚,依次通过
拉普拉斯⾦字塔恢复到⼤图像
41.    ls_ = cv2.pyrUp(ls_)
42.    ls_ = cv2.add(ls_, LS[i])                #采⽤⾦字塔拼接⽅法的图像
43. # image with direct connecting each half
44. real = np.hstack((A[:,:cols/2],B[:,cols/2:]))  #直接的拼接
45. cv2.imwrite('Pyramid_blending2.jpg',ls_)
46. cv2.imwrite('Direct_blending.jpg',real)
对于读者进⾏程序调试时,可通过cv2.imshow()和cv2.waitKey()函数进⾏查看各个过程的输出。完!

本文发布于:2023-07-11 04:25:04,感谢您对本站的认可!

本文链接:https://www.wtabcd.cn/fanwen/fan/82/1090201.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:图像   字塔   讲解   代码   读者   融合   总结
相关文章
留言与评论(共有 0 条评论)
   
验证码:
推荐文章
排行榜
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图