当前位置:网站首页>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()

边栏推荐
- 天空云变化案例
- joiplay模拟器rtp如何安装
- firewalld
- In MySQL, the stored procedure cannot realize the problem of migrating and copying the data in the table
- leetcode:127. 单词接龙
- joiplay模拟器如何导入游戏存档
- Unity 加载读取PPT
- Jetpack Compose学习(8)——State及remeber
- joiplay模拟器报错如何解决
- Chevrolet Trailblazer, the first choice for safety and warmth for your family travel
猜你喜欢
随机推荐
Android security optimization - APP reinforcement
动态修改el-tab-pane 的label(整理)
leetcode 406. Queue Reconstruction by Height
Learn Scope from a Compilation Perspective!
A Brief Talk About MPI
uniapp folding box secondary loop
【深入浅出玩转FPGA学习13-----------测试用例设计1】
Linux 部署mysql 5.7全程跟踪 完整步骤 django部署
Flex布局使用
WebServer process explanation (registration module)
How to open the payment channel interface?
firewalld
uniapp开发微信小程序-软考刷题小程序
Jetpack Compose学习(8)——State及remeber
Gabor滤波器学习笔记
Soft Exam Study Plan
对象集合去重的方法
ABC 261 F - Sorting Color Balls(逆序对)
乌克兰外交部:乌已完成恢复粮食安全出口的必要准备
[动态规划] 0-1背包问题和完全背包问题








