3.3.2 输入/输出, 数据类型和颜色空间
I/O: skimage.io
In [4]:
from skimage import io
读取文件: skimage.io.imread()
In [7]:
import os
filename = os.path.join(skimage.data_dir, 'camera.png')
camera = io.imread(filename)
支持所有被Python Imaging Library(或者imread
plugin
关键词提供的任何I/O插件)的数据格式。 也支持URL图片路径:
In [3]:
logo = io.imread('http://scikit-image.org/_static/img/logo.png')
存储文件:
In [4]:
io.imsave('local_logo.png', logo)
(imsave
也用外部插件比如PIL)
3.3.2.1 数据类型
图像ndarrays可以用整数(有符号或无符号)或浮点来代表。
小心整数类型的溢出
In [8]:
camera = data.camera()
camera.dtype
Out[8]:
dtype('uint8')
In [8]:
camera_multiply = 3 * camera
可用不同的整型大小: 8-, 16- 或 32-字节, 有符号或无符号。
一个重要的 (如果有疑问的话) skimage
惯例: 图像浮点支持在[-1, 1] (与所以浮点图像相对)
In [9]:
from skimage import img_as_float
camera_float = img_as_float(camera)
camera.max(), camera_float.max()
Out[9]:
(255, 1.0)
一些图像处理程序需要应用在浮点数组上,因此,输出的数组可能类型和数据范围都与输入数组不同
In [9]:
try:
from skimage import filters
except ImportError:
from skimage import filter as filters
camera_sobel = filters.sobel(camera)
camera_sobel.max()
Out[9]:
0.5915023652179584
在上面的例子中,我们使用scikit-image
的子模块filters
,在0.11到0.10版本间,filter
被重命名为filters
,为了避免与Python内置的filter
冲突。
在skimage提供了下列skimage实用的函数来转化dtype和data range: util.img_as_float
、 util.img_as_ubyte
等。
看一下用户手册来了解细节。
In [ ]:
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 [ ]:
3.3.1. Introduction and concepts
Images are NumPy’s arrays np.ndarray