Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/hibernate/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
用MATLAB实现稀疏矩阵插值_Matlab_Interpolation - Fatal编程技术网

用MATLAB实现稀疏矩阵插值

用MATLAB实现稀疏矩阵插值,matlab,interpolation,Matlab,Interpolation,如果我有这样一个矩阵 A = [1 2; 3 4]; newA = interp2(A,2); 我可以用interp2像这样插值 A = [1 2; 3 4]; newA = interp2(A,2); 我得到一个5x5插值矩阵 但是如果我有这样一个矩阵呢: B = zeros(20); B(3,2) = 5; B(17,4) = 3; B(16, 19) = 2.3; B(5, 18) = 4.5; 我将如何插值(或填充空格)这个矩阵。我已经研究过interp2和TriScatter

如果我有这样一个矩阵

A = [1 2; 3 4];
newA = interp2(A,2);
我可以用interp2像这样插值

A = [1 2; 3 4];
newA = interp2(A,2);
我得到一个5x5插值矩阵

但是如果我有这样一个矩阵呢:

B = zeros(20);
B(3,2) = 5;
B(17,4) = 3;
B(16, 19) = 2.3;
B(5, 18) = 4.5;

我将如何插值(或填充空格)这个矩阵。我已经研究过interp2和TriScatteredInterp,但它们似乎都不完全符合我的需要。

一个好的解决方案是使用我的。只需在不存在信息的地方提供NaN元素,然后使用inpaint_NaN。它将对NaN元素进行插值,将其填充到与数据点平滑一致的位置

B = nan(20);
B(3,2) = 5;
B(17,4) = 3;
B(16, 19) = 2.3;
B(5, 18) = 4.5;
Bhat = inpaint_nans(B);

surf(B,'marker','o')
hold on
surf(Bhat)

编辑:

对于那些对修复能否处理更复杂的表面感兴趣的人,我曾经拍过一幅莫奈的数字化画作(在左侧看到,然后通过随机删除50%的像素对其进行破坏。最后,我应用了修复,以查看是否可以很好地恢复图像。右侧图像是修复后的图像。虽然分辨率较低,但恢复后的图像恢复得不错

作为另一个示例,请尝试以下操作:

[x,y] = meshgrid(0:.01:2);
z = sin(3*(x+y.^2)).*cos(2*x - 5*y);
surf(x,y,z)
view(-23,40)

现在,删除此数组中约7/8的元素,并将其替换为NaN

k = randperm(numel(z));
zcorrupted = z;
zcorrupted(k(1:35000)) = NaN;
使用修复恢复。z轴具有不同的缩放比例,因为边缘上下+/-1之间存在微小变化,但在其他情况下,后一个曲面是一个很好的近似值

zhat = inpaint_nans(zcorrupted);
surf(x,y,zhat)
view(-23,40)

为什么
TriScatteredInterp
不符合您的需要?它似乎很理想。因为TriScatteredInterp在阵列的角点外推时存在问题。基于细分,它将仅在数据的凸包内插值。哇,这的确是一项不错的工作!您是否愿意展示一个更复杂的示例,如w嗯?谢谢,谢谢你使用BSD许可证。如果这是GPL或类似的东西,我想我不能用它。我可以用你的八度音阶吗?