フィルターのクリア

Interpolation of 3D arrays against a 1D vector

3 ビュー (過去 30 日間)
Ahmad Gad
Ahmad Gad 2022 年 8 月 25 日
コメント済み: Ahmad Gad 2022 年 8 月 25 日
Hello all.
I have a video data represented as 3D matrix in the form of Data(x,y,t). Here, x,y represent the pixel number and t is the time. I have the time vector stored in a separate variable. I need to interpolate the variable Data at a new time vector represented by variable t_new to get the new variable Data_new(x,y,t_new). I am using the following code:
n = 20;
m = 60;
t = linspace(0,1,n)';
t_new = linspace(0,1,m)';
Data = rand(50,50,n);
Data_new = permute(interpn(t,permute(Data,[3 2 1]),t_new),[3 2 1]);
% Verification by plotting the time history of selected pixel:
x = 25;
y = 25;
plot(t,reshape(Data(x,y,:),n,1),t_new,reshape(Data_new(x,y,:),m,1))
It looks fine to me. but the main concerns I am asking about:
  1. I had to use permute twice. I am not able to do it without permute. Can I avoid this?
  2. Is there a faster method to perform this interpolation?
Thanks and best,
Ahmad

採用された回答

Matt J
Matt J 2022 年 8 月 25 日
編集済み: Matt J 2022 年 8 月 25 日
[Nx,Ny,~]=size(Data);
F=griddedInterpolant({1:Nx,1:Ny,t},Data);
Data_new=F({1:Nx,1:Ny,t_new});
  2 件のコメント
Ahmad Gad
Ahmad Gad 2022 年 8 月 25 日
Thank you very much for the prompt response. That is very helpful.
Ahmad Gad
Ahmad Gad 2022 年 8 月 25 日
Can you tell me why griddedInterpolant is nearly 5-6 times faster than interpn? Thanks!

サインインしてコメントする。

その他の回答 (0 件)

カテゴリ

Help Center および File ExchangeImages についてさらに検索

タグ

製品


リリース

R2021b

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by