Сглаживание между пикселями imagesc\imshow в matlab, как matplotlib imshow
Когда я использую matplotlib imshow()
в python для представления маленькой матрицы, он производит какой-то вид, если сглаживание между пикселями. Есть ли способ получить это в Matlab при использовании imshow
или imagesc
?
Например, используя matplotlib, это вывод идентификационной матрицы imshow(eye(3))
:
![enter image description here]()
в то время как в matlab, imagesc(eye(3))
:
![enter image description here]()
Решением, которое я могу придумать, является экстраполяция и сглаживание с использованием какого-либо фильтра, но это не будет актуально для уровней одного пикселя. Я также пробовал myaa и export_fig, но они не являются удовлетворительными. Myaa использует весь GUI после применения, поэтому я не могу увеличивать или уменьшать масштаб, а export_fig заставляет меня сохранять фигуру в файл, а затем работать с этим файлом, слишком громоздким. Итак, есть ли способ сказать движку фигур Matlab (java или что не так) для этого сглаживания, сохраняя при этом удобство использования графического интерфейса фигуры?
Ответы
Ответ 1
Это связано с интерполяцией по умолчанию, которая установлена на "билинейный". Я думаю, что "никто" не будет более интуитивным дефолтом. Вы можете изменить метод интерполяции по умолчанию (например, интерполяция = Нет) с помощью:
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)
![enter image description here]()