Встроенные изображения имеют низкое качество
Я загружаю файл 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()