scikit-image初识

scikit-image是一个基于 numpy 数组的Python的图像处理包。

这个包的引用方法是:

  1. import skimage

skimage中大多数的函数都隶属于它的子模块中,例如:

  1. from skimage import data
  2. camera = data.camera()

skimage中的子模块列表及其函数列表可以参考API文档

在scikit-image中,所有的图像都是使用numpy进行表示,例如可以用一个二维数组来表示一个灰度二维图像:

  1. type(camera)
  2. # <type 'numpy.ndarray'>
  3. camera.shape
  4. # (512, 512)

其中,skimage.data 子模块中提供了一组函数用于获取各种示例图像,便于我们基于这些示例图像快速入门scikit-image的功能。

  1. coins = data.coins()
  2. from skimage import filters
  3. threshold_value = filters.threshold_otsu(coins)
  4. threshold_value
  5. # 107

当然,我们也可以直接将图片文件读取成为numpy中的Array,只需要使用skimage.io.imread即可。

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

此外,我们还可以使用natsort来对图片进行排序并加载多张图片:

  1. import os
  2. from natsort import natsorted, ns
  3. from skimage import io
  4. list_files = os.listdir('.')
  5. print(list_files)
  6. # ['01.png', '010.png', '0101.png', '0190.png', '02.png']
  7. list_files = natsorted(list_files)
  8. print(list_files)
  9. # ['01.png', '02.png', '010.png', '0101.png', '0190.png']
  10. image_list = []
  11. for filename in list_files:
  12. image_list.append(io.imread(filename))

scikit-image快速入门

scikit-image中图像是通过NumPy中的ndarray的数据结构来表示的。
因此,我们可以利用Numpy中很多的标准方法直接对数据进行处理:

  1. from skimage import data
  2. camera = data.camera()
  3. type(camera)
  4. # <type 'numpy.ndarray'>

例如,计算图片的形状与像素点数:

  1. camera.shape
  2. # (512, 512)
  3. camera.size
  4. # 262144

还有计算图片的亮度的统计信息:

  1. camera.min(), camera.max()
  2. # (0, 255)
  3. camera.mean()
  4. # 118.31400299072266

Numpy检索

Numpy的索引可以用于数据查询和数据修改,例如:

  1. # 查询camera中第10行、第20列的元素
  2. camera[10, 20]
  3. # 153
  4. # 修改camera中第3行、第10列的元素为0
  5. camera[3, 10] = 0

PS:在Numpy的索引中,第一个维度camera.shape[0]对应的是行数、第二个维度camera.shape[1]对应的是列数。
另外,原点camera[0, 0]位于整个图像的左上角。

这种表示方法与矩阵和线性代数中的表示方法一致,但是与笛卡尔坐标不一致。

除了逐个像素处理外,我们还可以直接使用Numpy来直接查询和修改整组像素的值。

一、切片

  1. # 设置前十行为黑色(0)
  2. camera[:10] = 0

二、掩码

  1. mask = camera < 87
  2. # 将掩码为真的像素点统一设置为白色(255)
  3. camera[mask] = 255

修改图像颜色

坐标变化