2.6.3 基础操作

图像是数组: 使用完整的numpy机制。

2.6.3 基础操作 - 图1

In [21]:

  1. face = misc.face(gray=True)
  2. face[0, 40]

Out[21]:

  1. 127

In [22]:

  1. # 切片
  2. face[10:13, 20:23]

Out[22]:

  1. array([[141, 153, 145],
  2. [133, 134, 125],
  3. [ 96, 92, 94]], dtype=uint8)

In [24]:

  1. face[100:120] = 255
  2. lx, ly = face.shape
  3. X, Y = np.ogrid[0:lx, 0:ly]
  4. mask = (X - lx / 2) ** 2 + (Y - ly / 2) ** 2 > lx * ly / 4
  5. # 掩码(masks)
  6. face[mask] = 0
  7. # 象征索引(Fancy indexing)
  8. face[range(400), range(400)] = 255

2.6.3 基础操作 - 图2

[Python source code]

2.6.3.1 统计信息

In [26]:

  1. face = misc.face(gray=True)
  2. face.mean()

Out[26]:

  1. 113.48026784261067

In [27]:

  1. face.max(), face.min()

Out[27]:

  1. (250, 0)

np.histogram

练习

  • scikit-image logo作为数组打开 (http://scikit-image.org/_static/img/logo.png), 或者在你电脑上的其他图像。
  • 剪切图像的有意义部分,例如,logo中的python圆形。
  • matplotlib显示图像数组。改变interpolation方法并且放大看一下差异。
  • 将你的图像改变为灰度
  • 通过改变它的最小最大值增加图像的对比度。选做:使用scipy.stats.scoreatpercentile (读一下文本字符串!) 来饱和最黑5%的像素和最亮5%的像素。
  • 将数组保存为两个不同的文件格式 (png, jpg, tiff)

2.6.3 基础操作 - 图3

2.6.3.2 几何图像变换

In [28]:

  1. face = misc.face(gray=True)
  2. lx, ly = face.shape
  3. # 剪切
  4. crop_face = face[lx / 4: - lx / 4, ly / 4: - ly / 4]
  5. # up <-> down 翻转
  6. flip_ud_face = np.flipud(face)
  7. # 旋转
  8. rotate_face = ndimage.rotate(face, 45)
  9. rotate_face_noreshape = ndimage.rotate(face, 45, reshape=False)

2.6.3 基础操作 - 图4

[Python source code]