week1 作业记录 双线性上采样

本文记录了实现双线性上采样的过程,包括unpooling、nearest interpolation和bilinear interpolation。通过运行比较,发现矩阵版本的双线性插值在时间和效果上优于循环版本,两者结果一致但运行时间相差悬殊。
摘要由CSDN通过智能技术生成

Target

  1. 安装python环境,安装numpy,pytorch等库、
  2. 跑通老师提供的双线性插值循环版本upsampling.ipynb
  3. 用numpy实现双线性插值的矩阵版本(函数提示:np_mgrid,np.clip, np.expand_dims
  4. 测试双线性插值循环版和矩阵版本的运行时间和结果差异(参考陈老师提供的nearest的代码)
    提交要求:
  5. 提交双线性插值矩阵版本的python代码(建议.py 或 .ipynb格式)
  6. 提交两个版本的运行时间和结果差异截图

过程记录

跑通没什么问题,总结一下代码中各种upsample的方法。

1. unpooling

这个是直接给了一个scale放大系数,细节就是在目标大小图像中填值的时候,使步长为scale

def unpooling(src, scale):
    '''
    src: input image
    scale: dst_size / src_size , int
    
    直接扩大图像,在没有值的地方补零。
    随着scale变大,要补的0越来越多,图像整体会越来越暗。
    '''
    ## 判断scale,只能upsample整数倍的size
    assert isinstance(scale, int)
    
    src_h, src_w, channel = src.shape
    dst_h = src_h * scale
    dst_w = src_w * scale
    dst = np.zeros((dst_h, dst_w, channel), dtype=src.dtype)
    dst[::scale, ::scale] = src
    return dst

img_u = unpooling(img, 2)

# 改scale为1测试,dif为0
# print('Difference: ', ((img_u - img)**2).sum())

cv2.imshow('show', img_u)
cv2.waitKey(0)
cv2.destroyAllWindows()

2. nearest interpolation

近邻插值,在目标图像中的每个点处,插入最近位置的源图像中的像素值。核心思想就是先找到目标图的当前坐标在源图像中的位置,数学关系是:src_x + 0.5 = (dst_x + 0.5) / x_scale

# 矩阵版本 nearest upsample
def nearest_interpolation_v2(src, dst_size):
    src_h, src_w, 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值