Встроенные изображения имеют низкое качество
Я загружаю файл TIF с scikit-изображением и отображаю его в блокноте ipython (версия 2.2.0). Это работает, однако, изображение довольно маленькое при первом отображении, и когда я изменяю его размер с помощью перетаскиваемого маркера в правом нижнем углу изображения, оно просто изменяет масштаб изображения, сохраняя разрешение оригинала, поэтому оно очень размытое при увеличении, По сути, ipython превращает мое изображение в миниатюру на лету.
Я пытался использовать Matplotlib plt.imshow()
а также, который имеет точно такой же результат. Я начинаю ноутбук с ipython notebook --pylab inline
,
from skimage import io
import matplotlib.pyplot as plt
image_stack = io.MultiImage("my_image.tif")
image = image_stack[0] # it's a multi-page TIF, this gets the first image in the stack
io.imshow(image) # or plt.imshow(image)
io.show() # or plt.show()
4 ответа
Чтобы изменить разрешение рисунка "%matplotlib inline" на ноутбуке, выполните следующие действия:
import matplotlib as mpl
mpl.rcParams['figure.dpi']= dpi
Я рекомендую установить dpi где-то между 150 и 300, если вы собираетесь загрузить / распечатать блокнот. Убедиться, что %matplotlib inline
работает до mpl.rcParams['figure.dpi']= dpi
в противном случае магическая команда сбрасывает dpi к значению по умолчанию (кредит @fabioedoardoluigialberto за это замечание).
Приведенный ниже фрагмент кода изменяет только dpi рисунков, сохраненных с помощью метода savefig, а не встроенных рисунков.
import matplotlib as mpl
mpl.rc("savefig", dpi=dpi)
Согласно https://www.reddit.com/r/IPython/comments/1kg9e2/ipython_tip_for_getting_better_quality_inline/
Вы также можете выполнить эту магию в своей клетке:
%config InlineBackend.figure_format = 'svg'
Качество печати будет выглядеть значительно лучше. Вы также можете изменить svg
в retina
, чтобы использовать PNG с более высоким разрешением (не так хорошо). Тем не менее, обратите внимание, что если ваша картина становится слишком сложной, svg
картинка будет иметь гораздо больший размер, чем у retina
картина
Разрешение встроенных фигур matplotlib немного уменьшено по сравнению с тем, что вы видите в окне графического интерфейса или сохраненном изображении, возможно, для экономии места в файле ноутбука. Чтобы изменить его, вы можете сделать:
import matplotlib as mpl
mpl.rc("savefig", dpi=dpi)
куда dpi
это число, которое будет контролировать размер / разрешение встроенных графиков. Я полагаю, что встроенное значение по умолчанию равно 80, а по умолчанию в Matplotlib - 100.
Причина, по которой масштабирование получающегося графика путем перетаскивания маркера не работает, заключается в том, что график отображается как png, поэтому масштабирование его увеличивает, но не меняет собственное разрешение.
Если предположить, что это то же самое, что происходит с записной книжкой iPython (со встроенным% matplotlib), когда вы перетаскиваете и изменяете размер изображения, исправление довольно простое.
Если вы просто создаете фигуру с другим размером по умолчанию, то разрешение также увеличивается с размером по умолчанию ( Изменить разрешение imshow в ipython). Например:
fig = plt.figure(figsize = (10,10))
ax = fig.add_subplot(111)
ax.imshow(array)
Нечто подобное должно увеличить разрешение того, что вы пытаетесь построить. Похоже, это работает для меня с вашим кодом:
from skimage import io
import matplotlib.pyplot as plt
%matplotlib inline
image_stack = io.MultiImage("my_image.tif")
image = image_stack[0]
fig = plt.figure(figsize= (20,20)) #create an empty figure to plot into with 20x20 size
io.imshow(image)
io.show()