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

边栏推荐
猜你喜欢
随机推荐
MPI简谈
DNS解析过程【访问网站】
Shell脚本 if语句
How to Repair Word File Corruption
Kotlin特殊类
xss靶机训练【实现弹窗即成功】
The first level must project independently
leetcode:127. 单词接龙
Shell script if statement
Ukraine's foreign ministry: wu was restored to complete the export of food security
oracle数据库版本问题咨询(就是对比从数据库查询出来的版本,和docker里面的oracle版本)?
宽客必备神器-AKShare
二叉查找树的定义,查找,插入,删除
Word文件损坏如何修复
flex布局父项常见属性flex-wrap
作业:iptables防止nmap扫描以及binlog
Encapsulate and obtain system user information, roles and permission control
Android安全性优化——APP加固
"Wei cup" school more than 2022 cattle summer camp 4 Nancy (polocy) pelosi article variance law of Arts
joiplay模拟器如何调中文









