当前位置:网站首页>pytorch bilinear interpolation
pytorch bilinear interpolation
2022-07-31 00:14:00 【fksfdh】
1、单线性插值


化简得:
重要公式
将yTreated as a function of pixel values;

2、双线性插值
问题:求P点的像素值?

According to the unilinear interpolation formula:
1、得到R1和R2点的像素值:

2、然后通过R1和R2线性插值得到P点的像素值:

所以,A total of cubic unilinear interpolation is used,final pixel value.
另外,Which is due to the difference between adjacent pixels1,所以y2 - y1 = 1 ,和x2-x1 = 1,So the denominator is 1.
最终得到的计算公式为:


3、最近邻法
使用下面公式,Find the nearest pixel value
其中:
存在问题:右偏移

The original formula is offset right,The new formula centers on it.
Because it is offset right in the original formula,So use the center point coincidence to eliminate it.
Below is the optimization formula:
4、Simple implementation of bilinear interpolation
Find by nearest neighborP点,Then you need to find four adjacent pixels.
通过floorThe function finds the lower bound,floor +1 find the upper limit,But to prevent exceeding the pixel coordinate value of the image
import numpy as np
import matplotlib.pyplot as plt
from PIL import Image
def Bilinear(dst,des_w,des_h,src_w,src_h):
for c in range(3):
for dst_x in range(des_w):
for dst_y in range(des_h):
src_x = (dst_x + 0.5)*src_w/des_w - 0.5
src_y = (dst_y + 0.5)*src_h/des_h - 0.5
#Four proximity points
src_x_1 = int(np.floor(src_x))
src_y_1 = int(np.floor(src_y))
src_x_2 = min(src_x_1 + 1,src_w -1)
src_y_2 = min(src_y_1 + 1,src_h -1)
R1 = (src_x_2 - src_x) * src[src_y_1,src_x_1,c] + (src_x - src_x_1) * src[src_y_1,src_x_2,c]
R2 = (src_x_2 - src_x) * src[src_y_2,src_x_1,c] + (src_x - src_x_1) * src[src_y_2,src_x_2,c]
P = int((src_y_2 - src_y) * R1 + (src_y - src_y_1) * R2)
dst[dst_y, dst_x, c] = P
return dst
def show_img(dst):
dst = dst.astype(np.uint8)
plt.figure()
plt.subplot(121)
plt.imshow(src)
plt.subplot(122)
plt.imshow(dst)
# plt.imsave("./img.png",dst)
plt.show()
if __name__ == '__main__':
src = Image.open("./img_1.png")
src_w = src.width
src_h = src.height
src = np.array(src)
dst = np.ones((960, 1280, 3))
des_w = dst.shape[1]
des_h = dst.shape[0]
# print(des_w,des_h)
dst = Bilinear(dst,des_w,des_h,src_w,src_h)
show_img(dst)

5、pytorch中双线性插值
import torch
from torch.nn import functional as F
from PIL import Image
import numpy as np
import matplotlib.pyplot as plt
img = Image.open("./img.png")
img = np.array(img,dtype=float)
print(img.shape)
img = torch.from_numpy(img)
print(img.shape)
img = img.unsqueeze(0).permute(0,3,1,2) #[b,c,h,w]
img = F.interpolate(img,scale_factor=(2,2),mode='bilinear')
# print(img.shape)
img = img.squeeze(0).permute(1,2,0)
print(img.shape)
a = torch.tensor(img, dtype=torch.uint8)
print(a.shape)
plt.figure()
plt.imshow(a)
plt.show()

边栏推荐
猜你喜欢

天空云变化案例

Shell programming conditional statement test command Integer value, string comparison Logical test File test

测试人面试 常被问到的计算机网络题,高薪回答模板来了

【深入浅出玩转FPGA学习15----------时序分析基础】

@requestmapping注解的作用及用法

Manually set transaction commit in mysql

IOT跨平台组件设计方案

jira是什么

transition过渡&&animation动画

雪佛兰开拓者,安全保障温暖你的家庭出行的第一选择
随机推荐
joiplay模拟器如何导入游戏存档
How to open the payment channel interface?
一款好用的接口测试工具——Postman
Axure轮播图
pytorch的安装注意事项
机器学习1一回归模型(二)
如何在 AWS 中应用 DevOps 方法?
测试人面试 常被问到的计算机网络题,高薪回答模板来了
mysql 中手动设置事务提交
The difference between ?? and ??= and ?. and || in JS
对象集合去重的方法
DNS解析过程【访问网站】
@requestmapping注解的作用及用法
MySQL的grant语句
MySQL面试题
第一个独立完成的千万级项目
Encapsulate and obtain system user information, roles and permission control
SWM32系列教程6-Systick和PWM
HCIP Day 15 Notes
How to import game archives in joiplay emulator