Image Pyramid
今天我们介绍图像处理邻域中比较常用的一种方法,image pyramid, 也叫图像金字塔。就是将图像进行一层一层的下采样,图像金字塔是为了构建图像的多尺度,让模型能够更好的适应图像的尺度变化,图像金字塔可以广泛应用于图像识别,目标检测,还有光流配准,块匹配都能看到它的身影。图像金字塔主要有两种,一种是高斯金字塔,gaussian pyramid,另外一种是拉普拉斯金字塔,Laplacian Pyramids。
G_0 = I \\\qquad \qquad \qquad G_1 = Down(G_0 \ast F) \\ \qquad \qquad \qquad G_2 = Down(G_1 \ast F) \\ \cdot \cdot \cdot \\ \qquad \qquad \qquad \quad G_N = Down(G_{N-1} \ast F)
GkGkG_k 表示的每一层金字塔中的图像,FF F 表示高斯卷积核,∗∗ \ast 表示卷积操作,DownDownDown 表示下采样,上面的表达式,就可以构建一个图像金字塔。这个在 Open-CV 中有现成的函数,下面给出一段代码,看看高斯金字塔的构建:
import numpy as npimport matplotlib.pyplot as pltA = cv2.imread('D:/Python_Code/Test_img/2.jpg')row, col, dpt = A.shapepyr_level = 4# generate Gaussian pyramid for AG = A.copy()gpA = [G]for i in range(pyr_level):G = cv2.pyrDown(G)gpA.append(G)G = np.zeros([row, col, dpt], dtype='uint8')rowX2 = row // 2colX2 = col // 2G[:rowX2, :colX2, :] = gpA[1]rowX4 = rowX2 // 2colX4 = colX2 // 2G[rowX2:rowX2+rowX4, colX2:colX2+colX4, :] = gpA[2]G[:rowX4, colX2:colX2+colX4, :] = gpA[2]rowX8 = rowX4 // 2colX8 = colX4 // 2G[rowX2+rowX4:rowX2+rowX4+rowX8, colX2+colX4:colX2+colX4+colX8, :] = gpA[3]G[ :rowX8, colX2+colX4:colX2+colX4+colX8, :] = gpA[3]cv2.imshow("gau_pyr", G)
下面给出一个效果图:
下面看看,拉普拉斯金字塔,拉普拉斯金字塔其实是根据高斯金字塔计算得来的:
L_0 = G_0 - Up(G_1 \ast F) \\L_1 = G_1 - Up(G_2 \ast F) \\ L_2 = G_2 - Up(G_3 \ast F) \\ \cdot \cdot \cdot \\ \qquad L_{N-1} = G_{N-1} - Up(G_{N} \ast F) \\ L_N = G_N \\
利用拉普拉斯金字塔,可以实现图像的重建,根据上面的表达式,我们可以得到:
G_{N-1} \approx L_{N-1} + Up(L_N) \\ G_{N-2} \approx L_{N-2} + Up(G_{N-1}) \\ \cdot \cdot \cdot \\ G_{1} \approx L_1 + Up(G_2) \\G_{0} \approx L_0 + Up(G_1)
也就是说,把拉普拉斯金字塔层层上采样,再累加,就可以重建出最初的图像。下面给出一段代码:
import cv2import numpy as npA = cv2.imread('D:/Python_Code/Test_img/2.jpg')pyr_level = 4# generate Gaussian pyramid for AG = A.copy()gpA = [G]for i in range(pyr_level):G = cv2.pyrDown(G)gpA.append(G)# generate Laplacian Pyramid for AlpA = [gpA[pyr_level -1 ]]for i in range(pyr_level - 1,0,-1):GE = cv2.pyrUp(gpA[i])L = cv2.subtract(gpA[i-1],GE)lpA.append(L)# Now add left and right halves of images in each levelLS = []for la,lb in zip(lpA,lpB):rows,cols,dpt = la.shapels = laLS.append(ls)# now reconstructls_ = LS[0]for i in range(1,pyr_level):ls_ = cv2.pyrUp(ls_)ls_ = cv2.add(ls_, LS[i])cv2.imwrite('Pyramid_blending2.jpg',ls_)
原图:
重建后的图:
Image Pyramid相关推荐
- main方法_错误: 在类 ZiFUChuan.Pyramid 中找不到 main 方法, 请将 main 方法定义为:
错误: 在类 ZiFUChuan.Pyramid 中找不到 main 方法, 请将 main 方法定义为: public static void main(String[] args) 否则 Java ...
- Paper8:Spatial Pyramid Pooling in Deep Convolutional Networks for Visual Recognition
Spatial Pyramid Pooling in Deep Convolutional Networks for Visual Recognition 还未读
- R语言ggplot2可视化:ggplot2可视化两个水平条形图(horizontal)、并设置两个条形图使用共享的X轴、使用类似population pyramid可视化的方式绘制共享X轴的水平条形图
R语言ggplot2可视化:ggplot2可视化两个水平条形图(horizontal).并设置两个条形图使用共享的X轴.使用类似population pyramid可视化的方式绘制共享X轴的水平条形图 ...
- 【文本分类】Deep Pyramid Convolutional Neural Networks for Text Categorization
·阅读摘要: 本文提出了DPCNN(深度金字塔CNN)模型.在transformer.bert还没兴起的年代,模型越深效果越好,但是模型的复杂度会随着深度提升.粗略地说,DPCNN就是为了解决CN ...
- 人群密度估计--Generating High-Quality Crowd Density Maps using Contextual Pyramid CNNs
Generating High-Quality Crowd Density Maps using Contextual Pyramid CNNs ICCV2017 针对人群密度估计问题,本文主要从 i ...
- 场景解析--Pyramid Scene Parsing Network
Pyramid Scene Parsing Network CVPR2017 语义分割 https://github.com/hszhao/PSPNet 针对 FCN 中没有 context 信息,本 ...
- 目标检测--Feature Pyramid Networks for Object Detection
CVPR2017 Feature Pyramid Networks for Object Detection https://arxiv.org/abs/1612.03144 Code will be ...
- 如何为Pyramid添加Middleware
在pylons的文档中,有专门讲过如何添加自己的Middleware, 通过这些Middleware, 我们可以改变输入和输出.这也是WSGI(Web Server Gateway Interface ...
- maskrcnn用于目标检测_用于目标检测的池化渐进网络(Pooling Pyramid Network)
用于目标检测的池化渐进网络(Pooling Pyramid Network) 题目: Pooling Pyramid Network for Object Detection 作者: Pengchon ...
- 奖牌分配/Median Pyramid Hard
题目背景 有一个环形的围墙,围墙上有一些塔,每个塔中有一个守卫. 题目描述 现在要发给每个守卫一些奖章,第i个守卫需要P[i]个奖章.每个守卫自己的奖章必须都是不同种类的,而且相邻的两个守卫得到的奖章 ...
最新文章
- 如何定位并优化慢查询Sql
- python3 实现 websocket server 解决中文乱码
- python批量删除文件1001python批量删除文件_Python实现递归遍历文件夹并删除文件...
- 图像的评价指标之SSMI——结构相似性
- my_free mysql源代码_MySQL源代码管中窥豹(一)_MySQL
- Spring的AOP和IOC是什么?使用场景有哪些?Spring事务与数据库事务,传播行为,数据库隔离级别
- wpf 语音通话_WPF+WCF一步一步打造音频聊天室(三):语音聊天
- 【NET CORE微服务一条龙应用】第二章 配置中心使用
- 2016蓝桥杯省赛---java---B---2(生日蜡烛)
- 米酷影视v7.2.1影视电影网站管理系统源码修复版
- 面试: 华为综合测试
- 深度挖坑系列之三:人脸识别,角度空间,欧氏空间,margin
- 盘点5大高频移动端场景,你不会用就落后了(内附模板下载)
- 红米k40和红米k40pro的区别 哪个好
- 什么是交互设计?交互设计是做什么的?
- PCI DSS安全评估简介
- 瑞士名表排名介绍及手表品牌识别
- Linux运维课程 第一阶段 重难点摘要(二)网络基础
- 机房布线网络布线之常用兵器谱
- “破晓之战”星杯传说赛后复盘分析