拉噗拉司金字塔LaplacianPyramid学习笔记(一半章子怡 + 一半孙俪)
奇丑无比…有点微妙
发布日期:2022-01-31 02:37:39
浏览次数:37
分类:技术文章
本文共 2173 字,大约阅读时间需要 7 分钟。
OpenCV3拉噗拉噗拉噗拉嘶金字塔LaplacianPyramid学习笔记(一半章子怡 + 一半孙俪)
这个算法对我来说很难,所以写下过程来记录
OpenCV中的一个基本的左右混合图片的算法,对大神来说可能很简单,小白觉得光看官方的代码还有很多不能理解的地方。所以特地作了一些图来帮助自己理解和记录。也希望对同样刚入门计算机图像的人有所帮助。
PS:如果理解不到位,或者有更多给我的学习建议,请给我留言哈~Emmm, 混合橘子和苹果有什么意思嘛!
我们来找两个美女混一下~ 个人还是更喜欢孙俪的颜(严重跑偏第一步,为两张图分别生成高斯金字塔
// 载入库,读入图片import cv2import numpy as npA = cv2.imread('SunLi.jpg')B = cv2.imread('ZhangZiYi.jpg')// 为孙俪生成高斯金字塔G = A.copy()gpA = [G]for i in range(6): G = cv2.pyrDown(G) gpA.append(G) // 为章子怡生成高斯金字塔H = B.copy()gpB = [H]for i in range(6): H = cv2.pyrDown(H) gpB.append(H)
cv2.pyrDown(src)
顶部图像中的每个像素值等于下一层图像中 5 个像素的高斯加权平均值 如下图所示,1号像素取其上下左右中的高斯平均数,234号亦然。 这个操作相当于抽离了一半的列和行。图像变为原来的一半。第二步,为两张图分别生成拉普拉斯金字塔
// 为A生成拉普拉斯金字塔lpA = [gpA[5]]for i in range(5, 0, -1): // 将金字塔升级 UP = cv2.pyrUp(gpA[i]) // 用上一层的金字塔减去升级完的金字塔 LA = cv2.subtract(gpA[i-1], UP) // 将这一层加入数列 lpA.append(LA)// 为B生成拉普拉斯金字塔lpB = [gpB[5]]for i in range(5, 0, -1): // 将金字塔升级 UP = cv2.pyrUp(gpB[i]) // 用上一层的金字塔减去升级完的金字塔 LA = cv2.subtract(gpB[i-1], UP) // 将这一层加入数列 lpB.append(LA)cv2.pyrUp(src) 这个函数负责把小的图像放大两倍(信息有丢失的) 我们从gpA[5]开始,把它放大两倍,然后储存在UP中
cv2.subtract(gpA[i-1], UP)
然后我们用和UP一样大小,但信息量更大的gpA[i-1]去减去UP 如上图所示 第一步是“gpA[4]” 减去 “gpA[5]的up版本”,储存在lpA[1]中。 第二步是是“gpA[3]“ 减去 “gpA[4]的up版本”,储存在lpA[2]中,以此类推。数学公式如下图所示
G代表高斯金字塔,L代表拉普拉斯金字塔 它生成的图片很像边界图,大部分的像素点都是0第三步, 融合两张图的拉普怕斯金字塔
// 每一层拉普拉斯都是一半左边一半右边LS = []// 把两张图的每一层通过zip两两配对for la, lb in zip(lpA, lpB): // 读取图片的列数 cols rows, cols, dpt = la.shape // 取孙俪的左边,章子怡的右边融合成新的拉普怕斯金字塔 ls = np.hstack((la[:, :int(cols/2)], lb[:, int(cols/2):])) LS.append(ls)这里我们注意到除了LS[0]取自于一半的lpA[0]和lpB[0]是“彩色”的图像 其他的都是“边缘”图像
第四步,不停的pryUP最小的图像,并将其与拉普拉斯的上层相加,获得最终图像
// 重新构建图像ls_ = LS[0]for i in range(1, 6): //不停的pyrUP最小的图像 ls_ = cv2.pyrUp(ls_) //并将其与一半一半的拉普拉斯相加 ls_ = cv2.add(ls_, LS[i]) cv2.imshow('image', ls_)cv2.waitKey(0)cv2.destroyAllWindows()这个步骤我的理解是: 1.模糊放大一个图片 2.强化这个图片的边缘 3.循环上面这个过程
emmmm,所以最后我们就获得了一个肥肠模糊…但是边缘又不糊的混合图像…
emmmm,总之就是…后记-一些小想法
通过强调拼合的边缘+模糊放大的办法,自然的融合了图像,不过丢失的信息让图像看上去有点不真实。边缘一直累加超过255了,就很泛白(莫名还有点像打了高光??)
感觉如果多加一些边界,而不是一半一半的办法来混合图像的话效果应该会很有趣(就是hstack那里要再想一下)
或者就单纯用来处理一张图像,再调一下色调啥的(港风P图系列??)
希望我的记录对和我一样的小白有帮助!
转载地址:https://blog.csdn.net/qq_20474257/article/details/89785478 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!
发表评论
最新留言
很好
[***.229.124.182]2024年04月17日 18时49分54秒
关于作者
喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
三郎数据结构算法学习笔记:单向环形链表约瑟夫问题
2019-04-26
前端特效H5+css+js:动态可拉进度条+附完整源码
2019-04-26
三郎数据结构学习笔记:双向循环链表(判断是否对称)附源码
2021-06-29
三郎数据结构算法学习笔记:基数排序
2021-06-29
三郎数据结构算法学习笔记:斐波那契(黄金分割法)查找算法
2021-06-29
Java中标识符的命名规则是什么?硬性要求和非硬性要求
2021-06-29
Java中八种基本数据类型的大小,以及他们的封装类
2021-06-29
Spring依赖注入的方式有几种,各是什么?
2021-06-29
SpringMVC怎么样设定重定向和转发的?
2021-06-29
SpringMVC常用的注解有哪些?
2021-06-29
spring bean的生命周期
2021-06-29
计算机网络子网划分详解
2021-06-29
计算机网络生成树算法STP简介
2021-06-29
三郎数据结构算法学习笔记:哈希表查找
2021-06-29
三郎数据结构算法学习笔记:二叉树的三种遍历及增删改查
2021-06-29
三郎数据结构算法学习笔记:顺序存储二叉树
2021-06-29
三郎数据结构算法学习笔记:线索二叉树
2021-06-29
解释Spring支持的几种bean的作用域。
2021-06-29
Spring框架中都用到了哪些设计模式?
2021-06-29
什么是MyBatis?
2021-06-29