cfp*_*cfp 7 matlab surface matlab-figure shading bilinear-interpolation
考虑以下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
Run Code Online (Sandbox Code Playgroud)
注意,C在90度旋转下是不变的.另请注意以下句子中的帮助pcolor:
使用着色interp,使用C的所有元素,通过四个顶点处的颜色的双线性插值对每个单元进行着色.
但是,绘制的图像如下:
请注意,图像在90度旋转下不是不变的(例如考虑四个角).现在,除非我可怕地误解双线性插值,否则这一定是错的.MATLAB似乎是在三角形上插值,这与双线性插值不同.
有没有办法解决这个MATLAB错误,并获得正确的双线性插值?(除了我自己手动插入额外的点,如果放大到足够远,这仍然无法解决问题.)
我记得过去在 Matlab 官方论坛上读过一些关于这种奇怪行为的帖子。不幸的是,我现在通过快速搜索没有找到任何东西。无论如何...您不是第一个指出 与shading interpwith 结合使用的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;
Run Code Online (Sandbox Code Playgroud)
这产生了惊人的结果,并且输出没有显示任何伪影或不对称: