Matlab和python里的插值与插值平滑

Matlab

griddedInterpolant 函数

%% 二维图像插值平滑
sz = size(C);
xg = 1:sz(1);
yg = 1:sz(2);
F = griddedInterpolant({xg,yg},angle(C));
xq = (0:0.1:sz(1));
yq = (0:0.1:sz(2));
F.Method = 'linear';%可以改成spline,cubic之类的,和interp1、plot(指matlab用spcrv插值)曲线那边插值类似的模式
vq = F({xq,yq});
imagesc(vq);axis square
title('Higher Resolution')

还有interp1 interp2函数,分别对应一维和二维的插值 

%% 还有interp1 interp2函数,分别对应一维和二维的插值
vq = interp1(x,v,xq,method,extrapolation);%官方:不建议使用该语法。请改用 griddedInterpolant。
%interp1例子,来自程序——Mycolormap:
mycolorpoint=[[0 0 16];...
    [8 69 99];...
    [57 174 156];...
    [198 243 99];...
    [222 251 123];...
    [239 255 190]];
mycolorposition=[1 11 33 50 57 64];%插值的位置
%xq = 1:64;
mycolormap_r=interp1(mycolorposition,mycolorpoint(:,1),1:64,'linear','extrap');%extrap是外插,来计算落在 x 域(这里指mycolorposition)范围外的点
mycolormap_g=interp1(mycolorposition,mycolorpoint(:,2),1:64,'linear','extrap');
mycolormap_b=interp1(mycolorposition,mycolorpoint(:,3),1:64,'linear','extrap');
mycolor=[mycolormap_r',mycolormap_g',mycolormap_b']/255;
mycolor=round(mycolor*10^4)/10^4;

spcrv函数

%plot画曲线插值的例子,来自程序——TM_analysis:
plot(x,z)%插值前
%spcrv函数
x1=x'; 
z1=z'.*10;%要转成行向量spcrv才能画
value = spcrv([[x1(1) x1 x1(end)];[z1(1) z1 z1(end)]],3);
plot(value(1,:),value(2,:))
%或者interp1函数
x2=x'; 
z2=z'.*10;
xx=0:0.05:2.5;
y2=interp1(x2,z2,xx,'linear');
plot(x2,z2,'-o',xx,y2,'r')

Python

1.pcolormesh——shading属性有'flat' 、'nearest'、'auto'、'gouraud'等选项,选择'gouraud'则指定Gouraud 着色,其中四边形中的颜色在网格点之间线性插值,matlab中也有类似的函数pcolorpcolormesh 网格和阴影_Matplotlib 中文网

2.imshow里的 interpolation

import matplotlib.pylab as plt
import numpy as np


data = np.load(file="intensitym6.npy")
X = np.arange(0, 64, 1)
Y = np.arange(0, 64, 1)
X, Y = np.meshgrid(X, Y)

# colormesh original
plt.subplot(2, 2, 1)
plt.pcolormesh(X, Y, data, cmap='RdBu')
plt.axis('square')

# pcolormesh with special shading
plt.subplot(2, 2, 2)
plt.pcolormesh(X, Y, data, cmap='RdBu',shading='gouraud')##这个和matlab里的pcolor中,facecolor 的 interp有点像
##matlab 用set设置对象属性,比如pcolor的属性,python里也有setp好像,能用? scipy库也有插值哎?
plt.axis('square')

# imshow bilinear interp.
plt.subplot(2, 2, 3)
plt.imshow(data, cmap='RdBu', interpolation = 'bilinear')

# imshow bicubic interp.
plt.subplot(2, 2, 4)
plt.imshow(data, cmap='RdBu', interpolation = 'bicubic')

plt.show()

3.scipy库里的interp2d函数 

import matplotlib.pylab as plt
import numpy as np
from scipy.interpolate import interp2d
#import palettable
#from palettable.cartocolors.sequential import DarkMint_4 #用不了不知道为啥

data = np.load(file="intensitym6.npy")
X = np.arange(0, 64, 1)
Y = np.arange(0, 64, 1)
X, Y = np.meshgrid(X, Y)

# colormesh original
plt.subplot(1, 2, 1)
plt.pcolormesh(X, Y, data, cmap='RdBu')
plt.axis('square')

# scipy interp. cubic
f = interp2d(X, Y, data, kind='cubic')
xnew = np.arange(0, 64, .1)
ynew = np.arange(0, 64, .1)
data1 = f(xnew,ynew)
Xn, Yn = np.meshgrid(xnew, ynew)
plt.subplot(1,2,2)
plt.pcolormesh(Xn, Yn, data1, cmap='RdBu')
plt.axis('square')

plt.show()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值