17

当我在 python 中使用 matplotlibimshow()来表示一个小矩阵时,如果在像素之间进行平滑处理,它会产生某种排序。imshow使用or时有什么方法可以在 Matlab 中使用imagesc吗?

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

在matlab中, imagesc(eye(3))

在此处输入图像描述

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

4

1 回答 1

45

这是由于默认插值设置为“双线性”。我认为“无”将是更直观的默认值。您可以更改默认插值方法(例如插值=无):

mpl.rcParams['image.interpolation'] = 'none'

有关自定义 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)

在此处输入图像描述

于 2013-02-06T11:37:27.177 回答