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

Я загружаю файл TIF с помощью scikit-изображения и отображаю его inline в ноутбуке 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 a multi-page TIF, this gets the first image in the stack

io.imshow(image)  # or plt.imshow(image)
io.show()  # or plt.show()

Ответы

Ответ 1

Чтобы изменить разрешение "% matplotlib inline" на ноутбуке, выполните следующие действия:

import matplotlib as mpl
mpl.rcParams['figure.dpi']= dpi

Я рекомендую установить dpi где-то между 150 и 300, если вы собираетесь загружать/печатать ноутбук.

Сниппет ниже, только изменяет dpi на фигуры, сохраненные с помощью метода savefig, а не на встроенные цифры.

import matplotlib as mpl
mpl.rc("savefig", dpi=dpi)

Ответ 2

Разрешение встроенных фигур matplotlib немного уменьшено по сравнению с тем, что вы увидите в окне графического интерфейса пользователя или сохраненным изображением, по-видимому, для экономии места в файле ноутбука. Чтобы изменить его, вы можете сделать:

import matplotlib as mpl
mpl.rc("savefig", dpi=dpi)

Где dpi - некоторое число, которое будет контролировать размер/разрешение встроенных графиков. Я полагаю, что встроенное значение по умолчанию - 80, а по умолчанию в другом месте - matplotlib - 100.

Причина, по которой масштабирование результирующего графика путем перетаскивания дескриптора не работает, заключается в том, что график отображается как png, поэтому масштабирование масштабируется, но не изменяет внутреннее разрешение.

Ответ 3

Предполагая, что это то же самое, что происходит с ноутбуком iPython (с% matplotlib inline), когда вы перетаскиваете и изменяете размер изображения, исправление довольно просто.

Если вы просто создаете фигуру с другим размером по умолчанию, то разрешение также увеличивается с размером по умолчанию (Изменить разрешение 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()