3.3.2 输入/输出, 数据类型和颜色空间

I/O: skimage.io

In [4]:

  1. from skimage import io

读取文件: skimage.io.imread()

In [7]:

  1. import os
  2. filename = os.path.join(skimage.data_dir, 'camera.png')
  3. camera = io.imread(filename)

3.3.2 输入/输出, 数据类型和颜色空间 - 图1

支持所有被Python Imaging Library(或者imread plugin关键词提供的任何I/O插件)的数据格式。 也支持URL图片路径:

In [3]:

  1. logo = io.imread('http://scikit-image.org/_static/img/logo.png')

存储文件:

In [4]:

  1. io.imsave('local_logo.png', logo)

(imsave也用外部插件比如PIL)

3.3.2.1 数据类型

3.3.2 输入/输出, 数据类型和颜色空间 - 图2

图像ndarrays可以用整数(有符号或无符号)或浮点来代表。

小心整数类型的溢出

In [8]:

  1. camera = data.camera()
  2. camera.dtype

Out[8]:

  1. dtype('uint8')

In [8]:

  1. camera_multiply = 3 * camera

可用不同的整型大小: 8-, 16- 或 32-字节, 有符号或无符号。

一个重要的 (如果有疑问的话) skimage 惯例: 图像浮点支持在[-1, 1] (与所以浮点图像相对)

In [9]:

  1. from skimage import img_as_float
  2. camera_float = img_as_float(camera)
  3. camera.max(), camera_float.max()

Out[9]:

  1. (255, 1.0)

一些图像处理程序需要应用在浮点数组上,因此,输出的数组可能类型和数据范围都与输入数组不同

In [9]:

  1. try:
  2. from skimage import filters
  3. except ImportError:
  4. from skimage import filter as filters
  5. camera_sobel = filters.sobel(camera)
  6. camera_sobel.max()

Out[9]:

  1. 0.5915023652179584

在上面的例子中,我们使用scikit-image的子模块filters,在0.11到0.10版本间,filter被重命名为filters,为了避免与Python内置的filter冲突。

skimage提供了下列skimage实用的函数来转化dtype和data range: util.img_as_floatutil.img_as_ubyte等。

看一下用户手册来了解细节。

In [ ]:

  1. An important (if questionable) skimage convention: float images are supposed to lie in [-1, 1] (in order to have comparable contrast for all float images)

In [ ]:

  1. 3.3.1. Introduction and concepts
  2. Images are NumPys arrays np.ndarray