MATLAB爱好者论坛-LabFans.com

MATLAB爱好者论坛-LabFans.com (https://www.labfans.com/bbs/index.php)
-   资料存档 (https://www.labfans.com/bbs/forumdisplay.php?f=72)
-   -   用MATLAB进行稀疏矩阵插值 (https://www.labfans.com/bbs/showthread.php?t=26353)

poster 2019-12-14 20:13

用MATLAB进行稀疏矩阵插值
 
如果我有这样的矩阵

A = [1 2; 3 4]; 我可以像这样使用interp2进行插值

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,但是这些似乎都不完全适合我的需求。



[B]回答:[/B]

一个好的解决方案是使用我的[URL="http://www.mathworks.com/matlabcentral/fileexchange/4551"]inpaint_nans[/URL] 。只需提供不存在任何信息的NaN元素,然后使用inpaint_nans。它将对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) [IMG]https://i.stack.imgur.com/RGqcK.jpg[/IMG]

编辑:

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

[IMG]https://i.stack.imgur.com/xtiYg.jpg[/IMG]

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

[x,y] = meshgrid(0:.01:2); z = sin(3*(x+y.^2)).*cos(2*x - 5*y); surf(x,y,z) view(-23,40) [IMG]https://i.stack.imgur.com/XUNzK.jpg[/IMG]

现在,删除此数组中大约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) [IMG]https://i.stack.imgur.com/LI64i.jpg[/IMG]



[url=https://stackoverflow.com/questions/5021646]更多&回答...[/url]


所有时间均为北京时间。现在的时间是 05:05

Powered by vBulletin
版权所有 ©2000 - 2025,Jelsoft Enterprises Ltd.