Scikit-image 简明教程

Scikit Image - Image Collections

在计算机视觉和图像处理中, image collection 是一个术语,用于描述一群或一组被认为作为一个单一实体以同时管理和处理多幅图像之目的而放在一起的图像。

它可以用来存储和管理一组相关图像,如一段视频中的帧序列或来自不同来源的图像集合。它简化了多幅图像的管理和处理,从而更易于处理图像处理和计算机视觉任务。

ImageCollection class in skimage

在scikit-image库中,图像集合由 ImageCollection 类表示,它提供了一个用于加载、管理和操作图像文件集合的功能。

它允许你指定一个模式或文件名列表,将相应的图像加载到内存中,并方便地访问它们。以下是该类的语法示例:

class skimage.io.ImageCollection(load_pattern, conserve_memory=True, load_func=None, **load_func_kwargs)

以下是类的参数−

  1. load_pattern ——表示要加载的文件名的模式的字符串或字符串列表。文件名路径可以是绝对路径或相对路径。

  2. conserve_memory (optional) − 布尔值。如果设置为 True,则一次只能在内存中保留一张图像。如果设置为 False,则图像将在加载后缓存,以提高后续访问速度。

  3. load_func (optional) ——用于读取图像文件的可调用对象。默认情况下,它使用来自scikit-image库的imread函数。但是,如果需要,可以指定其他函数。

  4. **load_func_kwargs (optional) ——传入load_func函数的其他关键字参数。

它创建一个ImageCollection对象,允许你对加载的图像执行各种操作,如遍历集合、访问单个图像以及对整个集合应用操作。

Example 1

以下示例将演示如何加载指定目录中的所有JPEG文件。结果ImageCollection对象将存储在collection变量中。

from skimage import io

# Load all the JPEG files in a directory
collection = io.ImageCollection('Images_/*.jpg')
print('Type:',type(collection))
print('Total loaded JPEG files are',len(collection))

输出将显示集合对象的类型和加载的JPEG文件数量。

Type: < class 'skimage.io.collection.ImageCollection'>
Total loaded JPEG files are 5

Example 2

以下示例演示如何使用ImageCollection对象的files属性访问扩展的文件名。

from skimage import io

# Load all the JPEG and PNG files in a directory
collection = io.ImageCollection(['Images_/*.jpg', 'Images_/*.png'])
# Access the expanded file list
file_list = collection.files
# Print the list of files one by one
print("Files:")
for image in file_list:
   print(image)
Files:
Images_\Blank.png
Images_\Blank_img.png
Images_\ColorDots.png
Images_\Trees.jpg
Images_\WhiteDots2.jpg
Images_\WhiteDots4.jpg
Images_\Zoo.jpg
Images_\balloons_noisy.png
Images_\binary image.png
Images_\tree.jpg

你还可以使用skimage.io模块中名为io.imread_collection()的直接函数来读取图像集合。

The imread_collection() function

imread_collection()函数用于加载图像集合,它将返回一个ImageCollection对象,表示加载的图像集合。

以下是此函数的语法和参数 -

skimage.io.imread_collection(load_pattern, conserve_memory=True, plugin=None, **plugin_args)

以下是该函数的参数 -

  1. load_pattern ——表示要加载的文件名的模式的字符串或字符串列表。文件名路径可以是绝对路径或相对路径。

  2. conserve_memory (optional) - 布尔值。如果设置为 True,一次只保留一张图像在内存中。如果设置为 False,则在加载后将缓存图像,以提高后续访问的速度。

  3. plugin_args (optional) - 传递给所选插件的其他关键字参数。

imread_collection() 是一个便捷的包装函数,它在内部为加载一组图像创建一个 ImageCollection 对象。除了直接使用 ImageCollection 类外,在需要根据模式或文件名列表快速加载图像时,使用 imread_collection() 函数处理简单用例会很好。

Example 1

以下示例演示如何加载特定目录中的所有 tiff 文件。

from skimage import io

# Load all the tiff images
collection = io.imread_collection('Images_/*.tiff', plugin='tifffile')
print('Dipaly the tifffile collection:')
print(collection)
Dipaly the tifffile collection:
['Images_\\file_example_TIFF_1MB.tiff', 'Images_\\file_example_TIFF_10MB.tiff']

Example 2

以下示例将通过指定字符串列表(模式)来加载一组 tiff 和 JPEG 图像。

from skimage import io

# Load a collection of JPEG and tifffile images
collection = io.imread_collection(['Image Collection/*.jpg', 'Image
Collection/*.tiff'])
print('Dipaly the JPEG and tifffile collection:')
print(collection)
Dipaly the JPEG and tifffile collection:
['Image Collection\\Trees.jpg', 'Image Collection\\WhiteDots2.jpg', 'Image
Collection\\WhiteDots4.jpg', 'Image Collection\\Zoo.jpg', 'Image
Collection\\file_example_TIFF_1MB.tiff', 'Image
Collection\\file_example_TIFF_10MB.tiff', 'Image Collection\\tree.jpg']

The Imread_collection_wrapper() function

imread_collection_wrapper 是装饰器函数,用于创建 imread_collection() 函数的自定义版本。此包装器函数封装了使用指定图像读取函数创建 ImageCollection 对象的逻辑。

以下是此函数的语法 -

skimage.io.imread_collection_wrapper(imread)

The imshow_collection() function

imshow_collection() 函数用于显示一系列图像。它将 ImageCollection 对象作为输入并显示包含在此集合中的图像。

在此处,此函数的语法和参数 -

skimage.io.imshow_collection(ic, plugin=None, **plugin_args)

以下是参数 -

  1. ic - 表示要显示的图像集合的 ImageCollection 对象。

  2. plugin (optional) - 用于图像显示的插件名称(字符串)。默认情况下,会尝试不同的插件,直至找到合适的插件。

  3. plugin_args - 传递给所选插件的用于图像显示的其他关键字参数。

Example

以下示例演示如何使用 imsave_collection() 函数显示一组图像。

from skimage import io

# Load all the JPEG and PNG files in a directory
collection = io.ImageCollection('Images_/*.jpg')
# Access the expanded file list
file_list = collection.files
# Print the list of files one by one
print("Files:")
for image in file_list:
   print(image)
# Display the collection of images
io.imshow_collection(collection)
io.show()

运行以上代码将产生以下结果 -

imshow collection 1