上采样之双线性插值法

  • One:上采样的定义
    • 上采样的类型:
      • 一、双线性插值:
      • 二、转置卷积 :
      • 三、上采样(unsampling)
      • 四、上池化(unpooling)
      • 总结:
  • tow:具体的讲解双线性插值
    • 线性插值
        • 具体来说线性插值的过程如下:(如图:)
      • 扩展到双线性插值:
  • Three:Python实现

One:上采样的定义

上采样实际上是一个统称。在下采样的过程中,我们把一张图片的特征提取出来,实际上是把图片的关键部分提取出来的,图片的分辨率就降低了,可以说图片缩小了;在上采样过程中,要恢复图片的大小,提高图片的分辨率,就要用到一些方法,任何可以让图片变成高分辨率的技术都可以称为上采样

上采样的类型:

1. 双线性插值
双线性插值又称为双线性内插
2. 转置卷积
转置卷积又称为反卷积,但是这种叫法是不对的。
3. 上采样—Unsampling

4. 上池化—Unpooling

一、双线性插值:

FCN(全卷机神经网络)中上采样的过程用到的就是双线性插值法,双线性插值不需要学习任何的参数,通过人为的操作的。
实际上,双线性插值还包括:{最近邻插值、双线性插值、双立方插值},后面我们会详细的讲解第二种——双线性插值。

二、转置卷积 :

有人称转置卷积为** 反卷积**,这种叫法是不对的,以后不要这样叫了。
双线性插值不需要学习参数,但是转置卷积最大的特点就是要学习参数。

三、上采样(unsampling)

上采样(unsampling)相对来说比较简单,直接填充最临近的数值:

四、上池化(unpooling)

上池化,又称为** 反池化 **,这个过程中保存了最大池化的位置,应该将上池化和下采样结合起来。

总结:

对比上面两个示意图,可以发现区别:
两者的区别在于UnSampling阶段** 没有 **使用MaxPooling时的位置信息,而是直接将内容复制来扩充Feature Map。第一幅图中右边4*4矩阵,用了四种颜色的正方形框分割为四个区域,每一个区域内的内容是直接复制上采样前的对应信息。UnPooling的过程,特点是在Maxpooling的时候保留最大值的位置信息,之后在unPooling阶段使用该信息扩充Feature Map,除最大值位置以外,其余补0。

tow:具体的讲解双线性插值

在讲解双线性插值的时候,先讲解线性插值:

线性插值

我们想把一个像素为2 * 2的图片放大为一个3 * 3 的图片,如下图所示:
上图中,我们已经知道的是四个值,为了放大图片,我们进行根据已知的像素点填充未知的像素点
特别注意:线性插值是一种针对一维数据的插值方法,它根据一维数据序列中需要插值的点的左右邻近两个数据点来进行数值的估计,根据到这两个点的距离来分配它们的比重的。

具体来说线性插值的过程如下:(如图:)

注意,我们插入的是Y值,X是相对的位置:

根据图中的假设:已知点(x0,y0)、(x1,y1),试问在x处插值,y的值是多少?用我们初中学过的知识,已知两个点的坐标可以得到一条线,又已知线上一点的一个坐标可以求得这个点的另一个坐标值。这就是线性插值的原理。x只是表示的相对的位置,y才是我们想要的结果:

详细过程以及结果:

扩展到双线性插值:

如图,已知Q12,Q22,Q11,Q21,但是要插值的点为P点,这就要用双线性插值了,首先在x轴方向上,对R1和R2两个点进行插值,这个很简单,然后根据R1和R2对P点进行插值,这就是所谓的双线性插值。

Three:Python实现

import cv2
import numpy as np
import timedef resize(src, new_size):dst_w, dst_h = new_size # 目标图像宽高src_h, src_w = src.shape[:2] # 源图像宽高if src_h == dst_h and src_w == dst_w:return src.copy()scale_x = float(src_w) / dst_w # x缩放比例scale_y = float(src_h) / dst_h # y缩放比例# 遍历目标图像,插值dst = np.zeros((dst_h, dst_w, 3), dtype=np.uint8)for n in range(3): # 对channel循环for dst_y in range(dst_h): # 对height循环for dst_x in range(dst_w): # 对width循环# 目标在源上的坐标src_x = (dst_x + 0.5) * scale_x - 0.5src_y = (dst_y + 0.5) * scale_y - 0.5# 计算在源图上四个近邻点的位置src_x_0 = int(np.floor(src_x))src_y_0 = int(np.floor(src_y))src_x_1 = min(src_x_0 + 1, src_w - 1)src_y_1 = min(src_y_0 + 1, src_h - 1)# 双线性插值value0 = (src_x_1 - src_x) * src[src_y_0, src_x_0, n] + (src_x - src_x_0) * src[src_y_0, src_x_1, n]value1 = (src_x_1 - src_x) * src[src_y_1, src_x_0, n] + (src_x - src_x_0) * src[src_y_1, src_x_1, n]dst[dst_y, dst_x, n] = int((src_y_1 - src_y) * value0 + (src_y - src_y_0) * value1)return dstif __name__ == '__main__':img_in = cv2.imread('../data/picture/timg.jpg')start = time.time()img_out = cv2.resize(img_in, (600,600))#print'cost %f seconds' % (time.time() - start)cv2.imshow('src_image', img_in)cv2.imshow('dst_image', img_out)cv2.waitKey()

双线性插值是图像缩放的一种方式,其主要分为两步线性插值,一是在x方向插值,二是用x方向插值结果再在y方向插值,具体步骤如下:

1.定位像素点
先找到目标图像像素点(dst_x, dst_y)在源图像上的像素点位置(src_x, src_y)。
一般是使用直接缩放:
src_x=dst_x * scale_x (scale_x为源图像与目标图像宽比例)
而我们这里使用几何中心对称:
src_x = (dst_x + 0.5) * scale_x - 0.5
然后找到上下左右最近邻的四个像素点用于计算插值。
2. 两步插值(借别人图)

效果图如下:

上采样之双线性插值法相关推荐

  1. 学无疑物-上采样之双线性插值法详解

    什么是插值 Interpolation is a method of constructing new data points within the range of a discrete set o ...

  2. 图像语义分割中的上采样(Upsampling)和下采样(subsampling)

    图像语义分割中的上采样和下采样 1. 下采样(subsampled) 2. 上采样(upsampled) 2.1 线性插值 2.2 单线性插值 2.3 双线性插值 2.4 双线性插值举例 2.5 插值 ...

  3. opencv:用最邻近插值和双线性插值法实现上采样(放大图像)与下采样(缩小图像)

    上采样与下采样 概念: 上采样: 放大图像(或称为上采样(upsampling)或图像插值(interpolating))的主要目的 是放大原图像,从而可以显示在更高分辨率的显示设备上. 下采样: 缩 ...

  4. torch 双线性上采样

    如果您想下采样/常规调整大小,您应该使用interpolate()方法,这里的上采样方法已经不推荐使用了. Upsample CLASS torch.nn.Upsample(size=None, sc ...

  5. 卷积神经网络 池化层上采样(upsampling、interpolating)、下采样(subsampled、downsampled)是什么?(上采样为放大图像或图像插值、下采样为缩小图像)

    缩小图像:或称为下采样(subsampled)或降采样(downsampled) 主要目的有两个:1.使得图像符合显示区域的大小:2.生成对应图像的缩略图. 放大图像:或称为上采样(upsamplin ...

  6. 上采样(放大图像)和下采样(缩小图像)(最邻近插值和双线性插值的理解和实现)

    上采样和下采样 什么是上采样和下采样? • 缩小图像(或称为下采样(subsampled)或降采样(downsampled))的主要目的有 两个:1.使得图像符合显示区域的大小:2.生成对应图像的缩略 ...

  7. 过采样与欠采样图像重采样(上采样下采样)

    参考文章: https://blog.csdn.net/majinlei121/article/details/46742339 https://blog.csdn.net/Chaolei3/arti ...

  8. 上采样,重采样和下采样,降采样

    一.上采样(重采样) 1.上采样就是重采样也就是放大图像,通常使用的目的是 (1)使图片达到更高的分辨率 (2)再经过pooling后上采样可以放大信息,循环迭代可以不断增强有用信息 2. 上采样原理 ...

  9. 图像的上采样(upsampling)与下采样(subsampled)

    参考: http://blog.csdn.net/majinlei121/article/details/46742339 http://blog.csdn.net/augusdi/article/d ...

最新文章

  1. linux那个11命令是什么意思,11个有用的Linux命令
  2. 零点起飞学mysql视频_零点起飞学MySQL
  3. 深入理解Semaphore
  4. linux磁盘虚拟化
  5. php运行socket服务器,PHP_php简单socket服务器客户端代码实例,本篇文章分享一个简单的socket - phpStudy...
  6. 帝国CMS附件大小限制
  7. js鼠标按键事件和键盘按键事件用法实例汇总
  8. 牛客小白月赛2 D 虚虚实实 【欧拉图】【连通图】
  9. 七招挽回受损WORD文档
  10. 鸿蒙正式版什么时候上线,终于来了!华为鸿蒙正式版6月2日上线,EMUI时代落幕...
  11. 相对布局父类属性_Unity3D RectTransform使用详解:布局、属性、方法
  12. SQL注入 详解 有图有真相
  13. java物流项目功能介绍_JAVAEE——BOS物流项目13:Quartz概述、创建定时任务、使用JavaMail发送邮件、HighCharts概述、实现区域分区分布图...
  14. oracle 18c,Oracle 18c
  15. latex大括号公式编辑
  16. 使用百度地图API,定位并显示自己的位置
  17. cassandra 数据库
  18. JAVA开发离线语音识别
  19. K - Period(周期)
  20. MySQL---数据库从入门走向大神系列(十)-Connection对象池、装饰模式与动态代理模式

热门文章

  1. www.google.com.hk 的服务器响应时间过长,网站响应时间 - 一般性能规则
  2. java万年历课程设计
  3. MATLAB之机器人鲁棒自适应PD控制代码
  4. layui框架中用laypage与后端搭配使用做分页列表
  5. 【Porteus】S-policy 和 (s,S)-policy
  6. 外贸找客户的几十种方法,总有一种适合你
  7. IPv4 和 IPv6 正则表达式
  8. java实现顺序查找
  9. 隐藏魅族手机的smartbar
  10. sql server 查看字段备注等信息