有两种方法可以画平滑曲线,第一罩备种是拟合的方法,第二种是用spcrv。
其实原理应该都一样就是插值。下面是源程序,大家可以根据需要自行选择,更改拟合的参数。
clc,clear
a = 1:1:6 %横坐标
b = [8.0 9.0 10.0 15.0 35.0 40.0]%纵坐标
plot(a, b, 'b') %自然状态的画图效果
hold on
%第一种,画平滑曲线的方法
c = polyfit(a, b, 2) %进行拟合,c为2次拟物前毁合后的系数
d = polyval(c, a, 1) %拟合后,每一个横坐悔颂标对应的值即为d
plot(a, d, 'r') %拟合后的曲线
plot(a, b, '*') %将每个点 用*画出来
hold on
%第二种,画平滑曲线的方法
values = spcrv([[a(1) a a(end)][b(1) b b(end)]],3)
plot(values(1,:),values(2,:), 'g')
本质上是数据插值,把粗分辨率数据插樱裂高值成细网格记录一个例子:
B3.m程序:
clear
clc
%% 读取数据
Lon_Data=ncread('2020-Jan-(1-31)-(0-24)-(150-450)-RH.nc','longitude')
Lat_Data=ncread('2020-Jan-(1-31)-(0-24)-(150-450)-RH.nc','latitude')
RH_Data=ncread('2020-Jan-(1-31)-(0-24)-(150-450)-RH.nc','r')
level=ncread('2020-Jan-(1-31)-(0-24)-(150-450)-RH.nc','level')
%% 计算250,300hPa平均湿度,6点和12点脊尺平均
r250=squeeze(RH_Data(:,:,find(level==250),:))
r300=squeeze(RH_Data(:,:,find(level==300),:))
r250_mean=nanmean(r250,3)%平均函数
r300_mean=nanmean(r300,3)
%% 读.shp 地区边源闹界
map=shaperead('广西.shp')
bou_x=[map(:).X]%提取经度
bou_y=[map(:).Y]%提取纬度
%% 掩摸,抠数据
latlim_GX = [21 26.5]
lonlim_GX = [104 112.5]
lat_GX=21:0.02:26.5
lon_GX=104:0.02:112.5
M=length(lat_GX)
N=length(lon_GX)
R = georasterref('RasterSize',[M N],'ColumnsStartFrom','south','LatitudeLimits',latlim_GX,'LongitudeLimits',lonlim_GX)
Z = zeros(R.RasterSize)
Z = vec2mtx(bou_y,bou_x,Z,R,'filled')
Z(Z>1)=nan
Z(Z==1)=0
%% 湿度插值
[X,Y]=meshgrid(lon_GX,lat_GX)
[plon,plat]=meshgrid(Lon_Data,Lat_Data)
r_250=griddata(double(plon),double(plat),r250_mean',X,Y)
r_250(isnan(Z))=nan
r_300=griddata(double(plon),double(plat),r300_mean',X,Y)
r_300(isnan(Z))=nan
%% 272.6hpa高度插值
l=[250 300]
r_272=nan(276,426)
for m=1:276
for n=1:426
y=[r_250(m,n),r_300(m,n)]
r_272(m,n)= interp1(l,y,272.6)%线性插值
clear y
end
end
%% 绘图
subplot(2,2,1)
contourf(X,Y,r_272,100,'LineStyle','none')
hold on
plot(bou_x,bou_y,'r','LineWidth',1.5)
hold off
box on
hc = colorbar
set(gca,'Clim',[16 26])
set(hc,'linewi',1)
set(hc,'YTick',[16:1:26])
set(get(hc,'Title'),'string','(%)','fontsize',16,'fontweight','Bold')
set(gcf,'color','white')
set(gca,'Xlim',[104 113])
set(gca,'Ylim',[21 27])
set(gca,'XMinorTick','on','TickDir','out')
set(gca,'fontweight','Bold','fontsize',16,'linewi',1)
xlabel('经度','FontSize',16)
ylabel('纬度','Fontsize',16)
set(gca,'fontweight','Bold','fontsize',15,'linewidth',2)
title('272.6 hPa','fontweight','Bold','fontsize',18)
效果图:
你好,首先读取文件到一个变量枯消AA = imread(文件)就是读入文件
然后你吧A的一部分取出来,然后记住坐标
比如说 b = A(1:100,40:100) 括号里是x和y的范围
然后你可以用gaussian做平滑处理
先设置一个过滤器,用来处理图像 你可以用help fspecial来看介绍,有不同的过滤器。
gaussianFilter = fspecial('gaussian', [7, 7], 5)
然后你用
imfilter(b, gaussianFilter, 'symmetric', 'conv')
处理以后
你在把b放回A里面
A(1:100,40:100) = b 不知道行不行,羡行只要你放回原位就可以没派知了。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)