首页 > 其他分享 >上采样的几种方式

上采样的几种方式

时间:2023-09-15 20:48:22浏览次数:40  
标签:采样 方式 img 像素 transforms 图像 几种 像素点 interpolation

上采样:

在卷积神经网络中,由于输入图像通过卷积神经网络(CNN)提取特征后,输出的尺寸往往会变小

而有时我们需要将图像恢复到原来的尺寸以便进行进一步的计算(如图像的语义分割),这个使图像由小分辨率映射到大分辨率的操作,叫做上采样。

上采样的几种方法:

插值:
一、最近邻插值(Nearest Neighbor Interpolation)

对于未知位置,直接采用与它最邻近的像素点的值为其赋值

原图中(0,0)在放大后对应(0,0)

原图中(1,1)在放大后对应(4,4)

 

二、双线性插值(Bilinear Interpolation)

 

双线性插值就是做两次线性变换,先在X轴上做一次线性变换,求出每一行的R点:

 

再通过一次线性变换求出在该区域中的P点:

可以把上式汇成所要计算的f(x,y)

 

三、双三次插值(Bicubic Interpolation)

图中点(x,y)=(i+u,j+v)的值通过矩形网格中该点邻近的16个点加权平均得到。

假设源图像A大小为m*n,缩放K倍后的目标图像B的大小为M*N,即K=M/m。

A的每一个像素点是已知的,B是未知的,我们想要求出目标图像B中每一像素点(X,Y)的值,必须先找出像素(X,Y)在源图像A中对应的像素(x,y),再根据源图像A距离像素(x,y)最近的16个像素点作为计算目标图像B(X,Y)处像素值的参数,利用BiCubic基函数求出16个像素点的权重,图B像素(x,y)的值就等于16个像素点的加权叠加。

  根据比例关系x/X=m/M=1/K,我们可以得到B(X,Y)在A上的对应坐标为A(x,y)=A(X*(m/M),Y*(n/N))=A(X/K,Y/K)。

如图所示P点就是目标图像B在(X,Y)处对应于源图像A中的位置,P的坐标位置会出现小数部分,

所以我们假设 P的坐标为P(x+u,y+v),其中x,y分别表示整数部分,u,v分别表示小数部分(蓝点到a11方格中红点的距离)。

那么我们就可以得到如图所示的最近16个像素的位置,在这里用a(i,j)(i,j=0,1,2,3)来表示,如上图。

 

 我们要做的就是求出BiCubic函数中的参数x,从而获得上面所说的16个像素所对应的权重W(x)。

BiCubic基函数是一维的,而像素是二维的,所以我们将像素点的行与列分开计算。

BiCubic函数中的参数x表示该像素点到P点的距离:

例如a00距离P(x+u,y+v)的距离为(1+u,1+v),因此a00的横坐标权重i_0=W(1+u),纵坐标权重j_0=W(1+v),a00对B(X,Y)的贡献值为:(a00像素值)* i_0* j_0。

因此,a0X的横坐标权重分别为W(1+u),W(u),W(1-u),W(2-u);ay0的纵坐标权重分别为W(1+v),W(v),W(1-v),W(2-v);

B(X,Y)像素值为:

 

其实在插值计算时还可以使用矩阵表示,如下:

其中f(i+u,j+v)即为要计算的值,而A、C分别表示权重也就是第一种方式中的w_x,w_y,B为原图中16个邻近点构成的矩阵,计算权重的函数使用S(x)去近似。

 

源代码:

import torch
from torchvision import transforms
from PIL import Image
from torchvision.utils import  save_image


img=Image.open('./Jay.png',mode='r')
img_to_tensor=transforms.ToTensor()(img)
# print(img_to_tensor.shape)

nearest_neighbor_interpolation=transforms.Resize(size=(1024,1024),
                                       interpolation=transforms.InterpolationMode.NEAREST)
nearest_resize_img=nearest_neighbor_interpolation(img_to_tensor)

bilinear_interpolation=transforms.Resize(size=(1024,10248),
                                       interpolation=transforms.InterpolationMode.BILINEAR)
bilinear_resize_img=bilinear_interpolation(img_to_tensor)
#
bicubic_interpolation=transforms.Resize(size=(1024,1024),
                                       interpolation=transforms.InterpolationMode.BICUBIC)
bicubic_resize_img=bicubic_interpolation(img_to_tensor)

save_image(nearest_resize_img,'./nearest.png')
save_image(bilinear_resize_img,'./bilinear.png')
save_image(bicubic_resize_img,'./bicubic.png')

 

 

 

 

 



 

标签:采样,方式,img,像素,transforms,图像,几种,像素点,interpolation
From: https://www.cnblogs.com/WANGYIFEI124/p/17705862.html

相关文章

  • Dynamic CRM 字段数据类型及其后端赋值方式
    dynamiccrm字段数据类型及其赋值方式首先实例化一个对象:Entity_entity=newEntity("salesorder");1.十进制数取值:var_typeDecimal=_entity.GetAttributeValue<decimal>("unitprice");赋值:_entity["unitpri......
  • springmvc中设置请求方式的转换,将post请求转换为put与delete,需要在web.xml中设置过滤
    2023-09-15web.xml<!--请求方式过滤器--><filter><filter-name>HiddenHttpMethodFilter</filter-name><filter-class>org.springframework.web.filter.HiddenHttpMethodFilter</filter-class></filter><filter......
  • 说话方式
    说话方式1.题目地址https://www.acwing.com/problem/content/1559/2.题目解析这道题主要就是给定一个字符串,求出字符串中出现次数最多的单词。3.题解首先,来讲述一下这道题的思路:1.由于这道题中的字符串含有空格,因此我们不能用cin接收,而应该......
  • 本地开发部署方式
           如果担心你拉取到别人的代码,或者别人拉取到你的,配置false就可以 ......
  • 拼多多面试题解析:Java实现继承的七种方式!
    大家好,我是小米!今天,我要和大家一起来深入探讨一下拼多多的面试题:Java实现继承有哪7种方式?这是一个相当有深度的问题,不过别担心,我会尽力以通俗易懂的方式给大家讲解清楚,让大家对Java继承有更深刻的理解。什么是继承在Java编程中,继承是一种非常重要的概念,它允许一个类(子类/派......
  • mybatis查询大批量数据的几种方式
    问题背景公司里有很多需要跑批数据的场景,这些数据几十万到几千万不等,目前我们采用的是分页查询,但是分页查询有个深度分页问题,上百万的数据就会查询的很慢常规解决方案全量查询分页查询流式查询游标查询1.全量查询默认情况下,全量查询的话系统会把所有结果集存储在内存中......
  • JS 的6种加载方式
    一、正常模式<scriptsrc="index.js"></script>这种情况下JS会阻塞dom渲染,浏览器必须等待index.js加载和执行完成后才能去做其它事情二、async模式<scriptasyncsrc="index.js"></script>async模式下,它的加载是异步的,JS不会阻塞DOM的渲染,async加载是无顺序......
  • Lucene分页方式(转)
    推荐的做法是为每一次分页导航都执行一次新的查询。因为Hits中保存的并不是真正的Document,因此可以通过HIts.doc(index)的方式取出在一定范围内的Document。在获得Hits后可以用类似下面的方法进行分页处理:privateListprocessHits(Hitshits,intstartIn......
  • 探索未来的人机交互方式
    在21世纪,人工智能(AI)已成为科技领域的重要焦点,特别是在“生成式AI”这个细分领域中。所谓的“生成式AI”是指能够创造、理解和生成各种形式内容的人工智能系统。本文将重点探讨“生成式AI”报告中的重点词汇或短语,为您解析它的潜力与未来。一、生成式AI的背景近年来,随着深度学习和自......
  • 使用python进行数据同步,根据游标的方式
    使用python进行数据同步,根据游标的方式一、介绍:数据同步分为好几种,比如根据最大id排序,其次才是根据游标进行排序。为什么不使用最大id进行数据同步?如下:因为如果数据表中的数据是按照降序排序的,那么每次根据最大id取1000条数据的方式也是一种可行的分页查询方式。这种方式的优......