TiShow
TiShow

Reputation: 1024

Concatenated images are badly degraded

I am trying to display several pictures on my Jupyter notebook. However, the pixel is really rough like below.enter image description here

The pixel of original picture is clear. How should I improve this issue ? This is a certain point of process to have a classification whether the picture is dog or cat. I have a many pictures of dogs and cat in the folder located on same directory and just took them from there. The picture is I just tried to show on the Jupyter notebook with using matplotlib. Thank you in advance.

Upvotes: 0

Views: 113

Answers (2)

ImportanceOfBeingErnest
ImportanceOfBeingErnest

Reputation: 339590

The image quality seems to be degraded in the example picture simply because you are trying to show a 64 pixel large image on 400 pixels or so on screen. Each original pixel thus comprises several pixels on screen.

It seems you do not necessarily want to use matplotlib at all if the aim is to simply show the image in its original size on screen.

%matplotlib inline
import numpy as np
from IPython import display
from PIL import Image

a = np.random.rand(64,64,3)
b = np.random.rand(64,64,3)
c = (np.concatenate((a,b), axis=1)*255).astype(np.uint8)
display.display(Image.fromarray(c))

enter image description here

To achieve a similar result with matplotlib, you need to crop the margin around the axes and make sure the figure size is exactly the size of the array to show.

%matplotlib inline
import numpy as np
import matplotlib.pyplot as plt

a = np.random.rand(64,64,3)
b = np.random.rand(64,64,3)
c = np.concatenate((a,b), axis=1)

fig, ax = plt.subplots(figsize=(c.shape[1]/100.,c.shape[0]/100.), dpi=100)
fig.subplots_adjust(0,0,1,1)
ax.axis("off")
_ = ax.imshow(c)

enter image description here

Upvotes: 1

ode2k
ode2k

Reputation: 2723

To force the resolution of the matplotlib inline images:

import matplotlib as plt

dpi = 300 # Recommended to set between 150-300 for quality image preview
plt.rcParams['figure.dpi'] = dpi

I think it uses a very low setting around 80 dpi by default.

Upvotes: 1

Related Questions