How to smoothly interpolate between distant points in 2D matrix?

조회 수: 2 (최근 30일)
Valentin
Valentin 2017년 4월 1일
댓글: Valentin 2017년 4월 1일
Hey guys,
I have a matrix such as A = [0 0 0 0 0 0;0 5 7 0 9 0;0 0 0 0 0 0;0 0 0 0 0 0;0 0 0 0 0 0;0 0 5 0 0 0;0 3 0 0 6 0;1 0 0 0 0 0]; as I only have some measurements in the area 8x6, points without measurements are zero.
Now I want to interpolate between the points where I have data (>0) using the following:
%if true
[X,Y] = meshgrid(1:1:6,1:1:8);
[Xq,Yq] = meshgrid(1:0.1:6,1:0.1:8);
Vq = interp2(X,Y,A,Xq,Yq);
surf(Xq,Yq,Vq)
%end
This is the product:
The question is, how can I only interpolate between the points with values >0 ("connect the peaks"? If I try to set all zeros as NaN the result is even worse...
Thanks a lot for your help!
Valle

채택된 답변

John D'Errico
John D'Errico 2017년 4월 1일
편집: John D'Errico 2017년 4월 1일
1. Replace the zeros with NaNs.
2. Use my inpaint_nans tool, found on the File Exchange.
A(A==0) = NaN
A =
NaN NaN NaN NaN NaN NaN
NaN 5 7 NaN 9 NaN
NaN NaN NaN NaN NaN NaN
NaN NaN NaN NaN NaN NaN
NaN NaN NaN NaN NaN NaN
NaN NaN 5 NaN NaN NaN
NaN 3 NaN NaN 6 NaN
1 NaN NaN NaN NaN NaN
B = inpaint_nans(A)
B =
3.1888 5.5122 7.6469 9.0166 9.8404 10.513
3.0913 5 7 8.1801 9 9.8074
3.1825 4.7842 6.3775 7.5284 8.4156 9.2531
3.2633 4.581 5.911 6.9897 7.8907 8.7576
3.1307 4.2808 5.4915 6.4791 7.3464 8.2189
2.6661 3.7807 5 5.8982 6.722 7.5883
1.8903 3 4.1818 5.1491 6 6.8921
1 2.2296 3.4176 4.4402 5.3339 6.2119
surf(B)

추가 답변 (0개)

카테고리

Help CenterFile Exchange에서 Interpolation에 대해 자세히 알아보기

Community Treasure Hunt

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

Start Hunting!

Translated by