天天看點

matlab超限像素平滑法_像matplotlib imshow一樣在matlab中的圖像像素之間進行平滑

matlab超限像素平滑法_像matplotlib imshow一樣在matlab中的圖像像素之間進行平滑

When I use matplotlib's imshow() in python to represent a small matrix, it produces a some sort if smoothing between pixels. Is there any way to have this in Matlab when using imshow or imagesc?

For example, using matplotlib this is the output of the identity matrix imshow(eye(3)):

matlab超限像素平滑法_像matplotlib imshow一樣在matlab中的圖像像素之間進行平滑

while in matlab, imagesc(eye(3)):

matlab超限像素平滑法_像matplotlib imshow一樣在matlab中的圖像像素之間進行平滑

A solution I can think of is to extrapolate and smooth using some filter, but that won't be relevant for the single pixel levels. I've also tried myaa and export_fig, but they are not satisfactory. Myaa is taking all GUI usabily after being applied, so I can't zoom in or out, and export_fig makes me save the figure to a file and then operate on that file, too cumbersome. So, is there a way to tell the figure engine of matlab (java or what not) to do this smoothing while keeping the nice usability of the figure GUI?

解決方案

It is due to the default interpolation which is set to 'bilinear'. I think 'none' would be a more intuitive default. You can change the default interpolation method (eg interpolation=None) with:

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

More information about customising Matplotlib can be found on the website

The code below will give you an overview of all interpolation methods:

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)

matlab超限像素平滑法_像matplotlib imshow一樣在matlab中的圖像像素之間進行平滑