内联图像质量低

问题描述 投票:26回答:4

我正在加载带有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()
matplotlib ipython-notebook scikit-image
4个回答
25
投票

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

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

如果你打算在笔记本电脑上使用download/print,我建议将dpi设置在150到300之间。确保%matplotlib inlinempl.rcParams['figure.dpi']= dpi之前运行,否则magic命令将dpi重置为其默认值(归功于@fabioedoardoluigialberto注意到这一点)。

下面的snipppet只更改通过savefig方法保存的数字的dpi,而不是内联生成的数字。

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

13
投票

根据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图片的尺寸大得多


7
投票

内联matplotlib数字的分辨率与您在GUI窗口或保存的图像中看到的相比有所缩小,可能是为了节省笔记本文件中的空间。要更改它,您可以:

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

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

通过拖动手柄缩放结果绘图的原因是图形渲染为png,因此缩放它会缩放但不会更改内在分辨率。


2
投票

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

如果您只是创建一个具有不同默认大小的图形,则分辨率也会随着默认大小(Change resolution of imshow in 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()
© www.soinside.com 2019 - 2024. All rights reserved.