8

考虑以下 MATLAB 代码:

C = [ 0 0 0 0 0
      0 1 2 1 0
      0 2 4 2 0
      0 1 2 1 0
      0 0 0 0 0 ];
pcolor( C );
shading interp;
axis square

请注意,C它在 90 度旋转下是不变的。另请注意帮助中的这句话pcolor

使用着色 interp,每个单元格通过使用 C 的所有元素在其四个顶点处的颜色的双线性插值来着色。

但是,绘制的图像如下:

代码输出

请注意,图像在 90 度旋转下不是不变的(考虑例如四个角)。现在,除非我严重误解了双线性插值,否则这一定是错误的。MATLAB 似乎在对三角形进行插值,这与双线性插值不同。

有没有办法解决这个 MATLAB 错误,并获得正确的双线性插值?(除了自己手动插入额外的点,如果放大得足够远,这仍然无法解决问题。)

4

1 回答 1

1

我记得过去在 Matlab 官方论坛上读过一些关于这种奇怪行为的帖子。不幸的是,我现在通过快速搜索一无所获。无论如何...您不是第一个指出shading interp与 with 结合使用的人pcolor,其行为方式很奇怪,创建不反映基础数据的形状。

主要问题是shading interp在数据点之间进行插值而不关心网格对平滑的敏感程度。如果您想要一个看起来没有锯齿状的结果,您必须提供以更高分辨率采样的数据:

C = [
    0 0 0 0 0
    0 1 2 1 0
    0 2 4 2 0
    0 1 2 1 0
    0 0 0 0 0
];
C = interp2(C,5,'cubic');

pcolor(C);
shading interp;
axis square;

这会产生惊人的结果,并且输出不会显示任何伪影或不对称:

输出

于 2017-11-18T18:05:51.507 回答