![]() |
用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.