Встроенные изображения имеют низкое качество

Я загружаю файл 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()
Другие вопросы по тегам