55

我正在加载一个带有 scikit-image 的 TIF 文件,并在 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

4 回答 4

54

要更改笔记本上的“%matplotlib inline”图形分辨率,请执行以下操作:

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

如果您要下载/打印笔记本,我建议将 dpi 设置在 150 到 300 之间。确保在魔术命令将 dpi 重置为其默认值%matplotlib inline之前运行mpl.rcParams['figure.dpi']= dpi(感谢@fabioedoardoluigialberto 注意到这一点)。

下面的代码片段仅更改通过 savefig 方法保存的图形的 dpi,而不是内联生成的图形。

import matplotlib as mpl
mpl.rc("savefig", dpi=dpi)
于 2017-09-11T17:49:39.027 回答
44

根据https://www.reddit.com/r/IPython/comments/1kg9e2/ipython_tip_for_getting_better_quality_inline/

你也可以在你的单元格中执行这个魔法:

%config InlineBackend.figure_format = 'svg'

打印质量看起来会好很多。您也可以更改svgretina, 以使用更高分辨率的 PNG(不是很好)。不过,请注意,如果您的图片变得过于复杂,svg图片的尺寸会比retina图片大得多

于 2018-04-06T02:02:26.270 回答
6

内联 matplotlib 图形的分辨率比您在 GUI 窗口或保存的图像中看到的分辨率有所降低,大概是为了节省笔记本文件中的空间。要更改它,您可以执行以下操作:

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

哪些dpi数字可以控制内联图的大小/分辨率。我相信内联默认值是 80,而 matplotlib 其他地方的默认值是 100。

通过拖动手柄缩放结果图不起作用的原因是该图被渲染为 png,因此缩放它会缩放但不会改变固有分辨率。

于 2014-08-20T19:57:09.503 回答
2

假设这与 iPython 笔记本(使用 %matplotlib 内联)在您拖动图像并调整大小时发生的情况相同,则修复相当简单。

如果您只是创建一个具有不同默认大小的图形,那么分辨率也会随着默认大小的增加而增加(在 ipython 中更改 imshow 的分辨率)。例如:

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()
于 2016-06-10T21:54:43.083 回答