图像的像素之间的平滑c\imshow在matlab中像matplotlib imshow

15 matlab plot matplotlib

当我imshow()在python中使用matplotlib 来表示一个小矩阵时,如果在像素之间平滑,它会产生一些排序.有什么方法可以在Matlab中使用imshow或使用imagesc

例如,使用matplotlib,这是单位矩阵的输出imshow(eye(3)): 在此输入图像描述

在matlab中, imagesc(eye(3)):

在此输入图像描述

我能想到的解决方案是使用一些滤波器进行外推和平滑处理,但这与单个像素级别无关.我也尝试了myaaexport_fig,但它们并不令人满意.Myaa在应用后可以使用所有GUI,因此我无法放大或缩小,并且export_fig让我将图形保存到文件然后对该文件进行操作,太麻烦了.那么,是否有一种方法可以告诉matlab的数字引擎(java或什么不是)进行平滑,同时保持图形GUI的良好可用性?

Rut*_*ies 39

这是由于默认插值设置为'双线性'.我认为'none'将是一个更直观的默认值.您可以使用以下命令更改默认插值方法(例如插值=无):

mpl.rcParams['image.interpolation'] = 'none'
Run Code Online (Sandbox Code Playgroud)

有关自定义Matplotlib的更多信息,请访问网站

下面的代码将概述所有插值方法:

methods = [None, 'none', 'nearest', 'bilinear', 'bicubic', 'spline16', 'spline36', 'hanning', 'hamming', \
           'hermite', 'kaiser', 'quadric', 'catrom', 'gaussian', 'bessel', 'mitchell', 'sinc', 'lanczos']

grid = np.random.rand(4,4)

fig, ax = plt.subplots(3,6,figsize=(12,6), subplot_kw={'xticks': [], 'yticks': []})
fig.subplots_adjust(hspace=0.3, wspace=0.05)

ax = ax.ravel()

for n, interp in enumerate(methods):
    ax[n].imshow(grid, interpolation=interp)
    ax[n].set_title(interp)
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述