图像双三次插值算法原理及python实现一. 图像双三次插值算法原理:
假设源图像 A 大小为 m*n,缩放后的目标图像 B 的大小为 M*N。那么根据比例我们可以得到 B(X,Y) 在 A 上的对应坐标为 A(x,y) = A( X*(m/M), Y*(n/N) )。在双线性插值法中,我们选取 A(x,y) 的最近四个点 。而在双立方插值法中,我们选取的是最近的16个像素点作为计算目标图像 B(X,Y) 处像素值的参数 。如图所示:
如图所示 P 点就是目标图像 B 在 (X,Y) 处对应于源图像中的位置,P 的坐标位置会出现小数部分 , 所以我们假设 P 的坐标为 P(x+u,y+v),其中 x,y 分别表示整数部分,u,v 分别表示小数部分 。那么我们就可以得到如图所示的最近 16 个像素的位置 , 在这里用 a(i,j)(i,j=0,1,2,3) 来表示 。
双立方插值的目的就是通过找到一种关系 , 或者说系数,可以把这 16 个像素对于 P 处像素值的影响因子找出来,从而根据这个影响因子来获得目标图像对应点的像素值,达到图像缩放的目的 。
BiCubic基函数形式如下:
二. python实现双三次插值算法
from PIL import Image
import numpy as np
import math
# 产生16个像素点不同的权重
def BiBubic(x):
x=abs(x)
if x=1:
return 1-2*(x**2)+(x**3)
elif x2:
return 4-8*x+5*(x**2)-(x**3)
else:
return 0
# 双三次插值算法
# dstH为目标图像的高,dstW为目标图像的宽
def BiCubic_interpolation(img,dstH,dstW):
scrH,scrW,_=img.shape
#img=np.pad(img,((1,3),(1,3),(0,0)),'constant')
retimg=np.zeros((dstH,dstW,3),dtype=np.uint8)
for i in range(dstH):
for j in range(dstW):
scrx=i*(scrH/dstH)
scry=j*(scrW/dstW)
x=math.floor(scrx)
y=math.floor(scry)
u=scrx-x
v=scry-y
tmp=0
for ii in range(-1,2):
for jj in range(-1,2):
if x+ii0 or y+jj0 or x+ii=scrH or y+jj=scrW:
continue
tmp+=img[x+ii,y+jj]*BiBubic(ii-u)*BiBubic(jj-v)
【python中插值函数 python scipy 插值】retimg[i,j]=np.clip(tmp,0,255)
return retimg
im_path='../paojie.jpg'
image=np.array(Image.open(im_path))
image2=BiCubic_interpolation(image,image.shape[0]*2,image.shape[1]*2)
image2=Image.fromarray(image2.astype('uint8')).convert('RGB')
image2.save('BiCubic_interpolation.jpg')
三. 实验结果:
四. 参考内容:
如何通过python实现三次样条插值spline函数可以实现三次样条插值 x = 0:10; y = sin(x); xx = 0:.25:10; yy = spline(x,y,xx); plot(x,y,'o',xx,yy) 另外fnplt csapi这两个函数也是三次样条插值函数 , 具体你可以help一下!
python线性插值解析在缺失值填补上如果用前后的均值填补中间的均值,比如,0,空 , 1,我们希望中间填充0.5;或者0 , 空,空,1,我们希望中间填充0.33,0.67这样 。
可以用pandas的函数进行填充,因为这个就是线性插值法
df..interpolate()
dd=pd.DataFrame(data=https://www.04ip.com/post/[0,np.nan,np.nan,1])
dd.interpolate()
补充知识:线性插值公式简单推导
以上这篇python线性插值解析就是我分享给大家的全部内容了 , 希望能给大家一个参考,也希望大家多多支持 。
「Scipy」样条插值在数据可视化中的运用 好久没有更新文章了,学校的教材发下来了 , 作业一下就变多了 。
首先,把最终效果放出来:
运用样条插值,即 B-Spline ,可以使你在图表中使用曲线连接离散数据(在插值法中,这些离散数据称为 节点 )
正如你在上面所看到的那样,在Python中插值非常简单,Scipy 中的 interpolate 为你提供了样条插值所需要的一系列函数 。
推荐阅读
- 和小朋友玩的体育游戏中班,体育游戏小朋友教案
- js所有全局方法,js中的全局变量
- 怎么给微信公众号加编辑器,微信公公众号编辑
- 无花果是什么作用视频,无花果果的功效与作用及食用方法
- 包含vb.net显示变量值的词条
- flutter路由动画,flutter路由切换动画
- sqlserver在线备份,sqlserver在线备份不允许的操作
- python指定函数数据 python 指定数据类型
- 电商扶贫到底如何,电商的扶贫应该怎样做