opencv学习笔记(七)---图像金字塔
图像金字塔指的是同一图像不同分辨率的子图的集合,有向下取样金字塔,向上取样金字塔,拉普拉斯金字塔....它是图像多尺度表达的一种,最主要的是用于图像的分割
向下取样金字塔指高分辨率图像向低分辨率图像的转换,从第i层获得第i+1层的步骤(G[i]->G[i+1])
1.对图像G【i】进行高斯卷积,卷积核为
得到一个新的高斯模糊后的图像,
2.对新图像删除所有偶数行和偶数列(像素),得到缩小为原图四分之一的新图,即G[i+1]
上述操作称为Octave。
重复下去,可以不断缩小图像(每次变为原图的四分之一),但会丢失一些图像。
向上取样金字塔指低分辨率图像向高分辨率图像的转换,从第i层获得第i+1层的步骤(G[i]->G[i+1])
1.每个方向上扩大为原来的二倍,即增加行和列,新增的行和列以0填充
2.使用与向下取样同样的卷积核的4倍对每一个像素处理,得到新图
但想上去样是一个模糊图像,不能得到新的信息。
(向上取样和向下取样不是互逆的)
向下取样:Python: cv2.pyrDown(src[, dst[, dstsize]]) → dst
向上取样:Python: cv2.pyrUp(src[, dst[, dstsize]]) → dst
一般只需要src一个参数即可
import cv2 as cv
import numpy as np #图像金字塔
img = cv.imread("E:/pictures/lena.jpg")
down = cv.pyrDown(img) #向下取样
up = cv.pyrUp(down) #向上取样
cv.imshow("up",up)
diff = img-up
cv.imshow("diffenent",diff) #比较和原图的差异
cv.imshow("orginal",img)
cv.imshow("down",down)
cv.waitKey()
cv.destroyAllWindows()



拉普拉斯金字塔:向上取样是图像的尺度变大,向下取样是图像的尺度变大,拉普拉斯金字塔:L[i] = G[i] - pyrUp(pyrDown(src))(L[i]表示i层拉普拉斯图像,G[i]表示原图)也就是上述代码的diffent图像,是在高斯金字塔的基础上构造的金字塔,意思是拉普拉斯金字塔每一层的图像为同一层高斯金字塔的图像减去上一层的图像进行上采样并高斯模糊的结果。说的有点绕,可以看网上的这幅图进行理解

实现起来很简单:
img = cv.imread("E:/pictures/lena.jpg")
down = cv.pyrDown(img)
up = cv.pyrUp(down)
L1 = img-up #1层拉普拉斯图像
down2 = cv.pyrDown(down)
up2 = cv.pyrUp(down2)
L2 = down-up2 #2层拉普拉斯图像
#以此类推..........
cv.imshow("orginal",img)
cv.imshow("L1",L1)
cv.imshow("L2",L2)
cv.waitKey()
cv.destroyAllWindows()


opencv学习笔记(七)---图像金字塔的更多相关文章
- 【opencv学习笔记七】访问图像中的像素与图像亮度对比度调整
今天我们来看一下如何访问图像的像素,以及如何改变图像的亮度与对比度. 在之前我们先来看一下图像矩阵数据的排列方式.我们以一个简单的矩阵来说明: 对单通道图像排列如下: 对于双通道图像排列如下: 那么对 ...
- [OpenCV学习笔记3][图像的加载+修改+显示+保存]
正式进入OpenCV学习了,前面开始的都是一些环境搭建和准备工作,对一些数据结构的认识主要是Mat类的认识: [1.学习目标] 图像的加载:imread() 图像的修改:cvtColor() 图像的显 ...
- OpenCV学习笔记(10)——图像梯度
学习图像梯度,图像边界等 梯度简单来说就是求导. OpenCV提供了三种不同的梯度滤波器,或者说高通滤波器:Sobel,Scharr和Lapacian.Sobel,Scharr其实就是求一阶或二阶导. ...
- OpenCV学习笔记(7)——图像阈值
简单阈值,自适应阈值,Otsu's二值化等 1.简单阈值 当像素值高于阈值时,我们给这个像素赋予一个新值,否则给他赋予另一个值.这个函数就是cv2.threshhold().这个函数的第一个参数就是原 ...
- opencv学习笔记(六)---图像梯度
图像梯度的算法有很多方法:sabel算子,scharr算子,laplacian算子,sanny边缘检测(下个随笔)... 这些算子的原理可参考:https://blog.csdn.net/poem_q ...
- opencv学习笔记(五)----图像的形态学操作
图像的形态学操作有基本的腐蚀和膨胀操作和其余扩展形态学变换操作(高级操作)-----开运算,闭运算,礼帽(顶帽)操作,黑帽操作...(主要也是为了去噪声,改善图像) 形态学操作都是用于处理二值图像(其 ...
- opencv学习笔记3——图像缩放,翻转和阈值分割
#图像的缩放操作 #cv.resize(src,dsize,dst=None,,fx=None,fy=None,interpolation=None) #src->原图像,dsize->目 ...
- OpenCV学习笔记(3)——图像的基本操作
获取图像的像素值并修改 获取图像的属性(信息) 图像的ROI() 图像通道的拆分及合并 1.获取并修改像素值 先读入图像装入一个图像实体,然后该实体相当于一个多维list,可以直接用数组操作提取像素信 ...
- OpenCV学习笔记七:opencv_nonfree模块
一,简介: 顾名思义,这个模块不是free的.主要包含: 1,SIFT implementation. The class implements SIFT algorithm by D. Lowe. ...
随机推荐
- php设置错误,错误记录
//设置错误级别. error_reporting(E_ALL); //显示所有错误 error_reporting(E_ALL&~E_NOTICE); //显示所有错误但不显示提示级别的 ...
- 226. Invert Binary Tree 翻转二叉树
[抄题]: Invert a binary tree. 4 / \ 2 7 / \ / \ 1 3 6 9 to 4 / \ 7 2 / \ / \ 9 6 3 1 [暴力解法]: 时间分析: 空间分 ...
- Hibernate入门级实例
一.开发环境 Win8 + jdk1.7 + MyEclipse + Tomcat5.0 + MySQL 说明:其实Hibernate是非常独立的框架,根本不需要MyEclipse,Eclipse,T ...
- Java 8特性
1. Java8的新特性 1.1. Lambda表达式和函数式接口 最简单的Lambda表达式可以用逗号分隔的参数列表.->符号和功能语句块来表示.示例如下: Arrays.asList( &q ...
- Python代码规范利器Flake8
写代码其实是需要规范的,团队中更是如此:不然 Google 也不会发布各种编码规范,耳熟能详的有Google C++ 风格指南,Google Python 风格指南,等等. 这些规范有用吗?有用也没用 ...
- [Training Video - 4] [Groovy] Function in detail
Employee.log=log Employee e1 = new Employee() Employee e2 = new Employee() e1.name = "A" e ...
- Perl 学习笔记-哈希
1.Perl中的哈希 高效快捷, 没有大小限制. 大哈希一样很快! 命名: 和Perl其他标识符一样, 同时拥有自己的的名字空间. $roger{"sex"} 和 $roger没 ...
- bbs3
第三天 昨日回顾: 1 验证码刷新 -$("#img_code")[0].src+="?" -本质就是向这个地址又发了一次请求 2 js中字符串拼接 -es5之 ...
- 用kettle实现数据库迁移之oracle到mysql
项目完成后,需要把历史oracle 的数据库转移mysql 用kettle 转换数据. 步骤: 1.打开spoon.bat,文件-->新建-->转换,点击“主对象树”,DB连接右键“新建” ...
- ConfigureAwait(false)避免上下文延续
之前MVC利用MvcHtmlString封装通用下拉菜单,菜单数据需要从webapi获取,自然用到了 await Http Client.GetAsync(Url)方法,前端 @Html.Select ...