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

边栏推荐
猜你喜欢

Mysql体系化之JOIN运算实例分析

45.【list链表的应用】

Shell script if statement
Dry goods | 4 tips for MySQL performance optimization

firewalld

joiplay模拟器如何导入游戏存档

JS中? ?和??=和?.和 ||的区别

mysql中关于存储过程无法实现迁移复制表中数据问题

uniapp折叠框二级循环

.NET Cross-Platform Application Development Hands-on Tutorial | Build a Kanban-style Todo App with Uno Platform
随机推荐
Soft Exam Study Plan
Shell编程条件语句 test命令 整数值,字符串比较 逻辑测试 文件测试
xss绕过:prompt(1)
MySQL数据库的truncate与delete区别
Ukraine's foreign ministry: wu was restored to complete the export of food security
How to adjust Chinese in joiplay simulator
数据清洗-使用es的ingest
background对float的子元素无效
asser利用蚁剑登录
MySQL面试题
JS中? ?和??=和?.和 ||的区别
xss靶机训练【实现弹窗即成功】
游戏商城表建立
Game mall table establishment
状态机动态规划之股票问题总结
HCIP Day 15 Notes
2022 China Logistics Industry Conference and Entrepreneur Summit Forum will be held in Hangzhou!
mysql 中手动设置事务提交
实验7(MPLS实验)
从编译的角度来学作用域!