Scikit 图像 - 多图像

多图像或多帧图像通常是指可以在单个文件中存储和表示多个图像或帧的图像格式。例如,动画 GIF 和多帧 TIFF 文件就是多图像格式的示例。

Scikit 图像中的 MultiImage 类

scikit-image io 模块 中的 MultiImage 类专门用于处理多帧 TIFF 图像。它提供了一种加载和操作多帧 TIFF 图像的便捷方法。

使用 MultiImage 类处理多帧 TIFF 时,它会返回一个图像数据数组列表,类似于 ImageCollection 类。但是,它们处理多帧图像的方式有所不同。 Multi-Image 将多帧 TIFF 图像的所有帧作为列表中的单个元素存储,其形状为 (N, W, H),其中 N 是帧数,W 和 H 是每帧的宽度和高度。

以下是此类的语法 −

class skimage.io.MultiImage(filename, conserve_memory=True, dtype=None,
**imread_kwargs)

以下是类的参数 −

  • filename − 指定要加载的模式或文件名的字符串或字符串列表。路径可以是绝对路径,也可以是相对路径。
  • conserve_memory(可选) − 布尔值。如果设置为 True,则每次只会在内存中保留一张图像。如果设置为 False,则加载后会缓存图像以提高后续访问速度。

示例 1

以下示例演示如何使用 MultiImage 类加载多帧 TIFF 图像并获取有关已加载图像的信息。

from skimage.io import MultiImage

# 加载多帧 TIFF 图像
multi_image = MultiImage('Images_/Multi_Frame.tif')

# 访问并显示有关已加载图像文件的信息
print(multi_image)
print('类型:',type(multi_image))
print('长度:',len(multi_image))
print('形状:',multi_image[0].shape)

输出

['Images_/Multi_Frame.tif']
类型:< class 'skimage.io.collection.MultiImage' >
长度:1
形状:(6, 382,​​ 363, 3)

示例 2

让我们使用 ImageCollection 类读取相同的多帧 TIFF 文件"Multi_Frame.tif",并观察它与 MultiImage 类相比如何处理多帧图像。

from skimage.io import ImageCollection

# 加载多帧 TIFF 图像
ic = ImageCollection('Images_/Multi_Frame.tif')

# 访问并显示已加载图像文件的信息
print(ic)
print('Type:',type(ic))
print('Length:',len(ic))
print('Shape:',ic[0].shape)

输出

['Images_/Multi_Frame.tif']
Type: < class 'skimage.io.collection.ImageCollection' >
Length:6
Shape:(382,363,3)

处理动画 GIF 图像 时,MultiImage 仅读取第一帧,而 ImageCollection 默认读取所有帧。

示例 3

让我们看看以下示例,并观察 Mu​​ltiImage 类如何处理动画 GIF 图像。

from skimage.io import MultiImage

# 加载动画 GIF 图像
multi_image = MultiImage('Images/dance-cartoon.gif')

# 显示 multi_image 对象
print(multi_image)
print('Type:',type(multi_image))
print('Length:',len(multi_image))
for i, frame in enumerate(multi_image):
   print('Image {} shape:{}'.format(i, frame.shape))

输出

['Images/dance-cartoon.gif']
Type: < class 'skimage.io.collection.MultiImage'>
Length: 1
Image 0 shape:(300, 370, 4)

示例 4

我们使用 ImageCollection 类读取相同的 GIF 文件"dance-cartoon.gif",并观察它与 MultiImage 类相比如何处理动画 GIF 图像。

from skimage.io import ImageCollection

# 加载动画 GIF 图像
ic = ImageCollection('Images/dance-cartoon.gif')

# 访问并显示有关已加载图像文件的信息
print(ic)
print('Type:',type(ic))
print('Length:',len(ic))
for i, frame in enumerate(ic):
   print('Image {} shape:{}'.format(i, frame.shape))

输入图像

Dance Cartoon

输出

['Images/dance-cartoon.gif']
Type: <class 'skimage.io.collection.ImageCollection'>
Length: 12
Image 0 shape:(300, 370, 4)
Image 1 shape:(300, 370, 4)
Image 2 shape:(300, 370, 4)
Image 3 shape:(300, 370, 4)
Image 4 shape:(300, 370, 4)
Image 5 shape:(300, 370, 4)
Image 6 shape:(300, 370, 4)
Image 7 shape:(300, 370, 4)
Image 8 shape:(300, 370, 4)
Image 9 shape:(300, 370, 4)
Image 10 shape:(300, 370, 4)
Image 11 shape:(300, 370, 4)