Открыть сервис

scikit-image

scikit-image — это библиотека с открытым исходным кодом для языка программирования Python, предназначенная для обработки изображений. Она предоставляет набор алгоритмов, функций и утилит для выполнения задач компьютерного зрения, анализа и манипуляции цифровыми изображениями. scikit-image является частью экосистемы научных вычислений Python, тесно интегрируясь с библиотеками NumPy, SciPy и Matplotlib. Основное назначение библиотеки — предоставление высокоуровневого, документированного и проверенного инструментария для исследователей, инженеров и разработчиков, работающих в области обработки изображений и анализа данных.

История

Библиотека scikit-image была создана в 2009 году группой разработчиков, включая Стефана ван дер Вальта (Stéfan van der Walt) и Йоханнеса Шёнбергера (Johannes Schönberger), как часть более широкого проекта scikit (набор библиотек для машинного обучения и научных вычислений). Первый стабильный релиз (0.1) состоялся в 2010 году. Разработка велась в рамках Google Summer of Code и при поддержке сообщества. С тех пор библиотека активно развивается: выходят новые версии, добавляются модули, улучшается производительность и документация. На 2024 год scikit-image является одним из стандартных инструментов для обработки изображений в научной среде наряду с OpenCV, PIL/Pillow и SimpleITK.

Ключевые характеристики

  • Открытый исходный код: распространяется под лицензией BSD-3, что допускает свободное использование, модификацию и распространение как в некоммерческих, так и в коммерческих проектах.
  • Интеграция с NumPy и SciPy: изображения в scikit-image представлены как многомерные массивы NumPy (ndarray), что позволяет использовать все возможности этих библиотек для математических операций, линейной алгебры и статистики.
  • Высокая производительность: критически важные алгоритмы реализованы на Cython (расширение Python, позволяющее компилировать код в C) или C, что обеспечивает скорость, близкую к нативной.
  • Обширная документация: каждая функция и модуль снабжены подробными описаниями, примерами использования и ссылками на научные статьи.
  • Активное сообщество: разработка ведётся на GitHub, поддерживается система отслеживания ошибок и запросов на новые функции.

Структура и модули

Библиотека организована в виде набора модулей, каждый из которых отвечает за определённую область обработки изображений. Основные модули включают:

  • skimage.io — функции для чтения и записи изображений в различных форматах (PNG, JPEG, TIFF, BMP и др.).
  • skimage.colorпреобразование цветовых пространств (RGB, HSV, Lab, XYZ и др.).
  • skimage.filters — фильтрация изображений: размытие (гауссово, медианное), выделение границ (Собель, Превитт, Кэнни), детекция углов (Харрис, FAST).
  • skimage.segmentationсегментация изображений: разделение на области (алгоритмы водораздела, SLIC, Felzenszwalb, активные контуры).
  • skimage.feature — извлечение признаков: детекторы и дескрипторы (SIFT, SURF, ORB, HOG), локальные бинарные шаблоны (LBP), гистограммы.
  • skimage.transform — геометрические преобразования (поворот, масштабирование, аффинные и проективные преобразования), выравнивание изображений.
  • skimage.morphology — морфологические операции (эрозия, дилатация, открытие, закрытие, скелетизация).
  • skimage.measure — измерение свойств объектов (площадь, периметр, центроид, моменты), построение контуров.
  • skimage.exposure — коррекция экспозиции и контраста (гистограммное выравнивание, гамма-коррекция).
  • skimage.restoration — восстановление изображений (удаление шума, деблюр, inpainting).
  • skimage.util — вспомогательные функции (создание тестовых изображений, случайные шумы, преобразование типов данных).

Применение

scikit-image используется в широком спектре задач, включая:

  • Научные исследования: анализ микроскопических изображений (клетки, ткани, биологические структуры), обработка спутниковых снимков, астрономических данных.
  • Медицинская диагностика: обработка медицинских изображений (рентген, КТ, МРТ) для выявления патологий, сегментации органов и тканей.
  • Промышленность и робототехника: контроль качества продукции, распознавание дефектов, навигация роботов.
  • Компьютерное зрение: предварительная обработка изображений перед подачей в нейронные сети, извлечение признаков для классификации и детекции объектов.
  • Образование: изучение методов обработки изображений, проведение лабораторных работ и курсовых проектов.

Примеры использования

1. Чтение и отображение изображения

```python from skimage import io, data import matplotlib.pyplot as plt

Загрузка встроенного тестового изображения

image = data.camera()

Отображение

plt.imshow(image, cmap='gray') plt.show() ```

2. Фильтрация и выделение границ

```python from skimage import filters, io

image = io.imread('example.jpg', as_gray=True) edges = filters.sobel(image) # Выделение границ оператором Собеля ```

3. Сегментация методом водораздела

```python from skimage import segmentation, color, io from skimage.filters import sobel

image = io.imread('cells.jpg') edges = sobel(image) markers = segmentation.watershed(edges, markers=100) # Сегментация ```

Сравнение с другими библиотеками

Характеристикаscikit-imageOpenCVPIL/Pillow
Основное назначениеНаучная обработка изображенийКомпьютерное зрение, реальное времяБазовая работа с изображениями
Формат данныхNumPy arrayNumPy array (BGR)Собственный объект Image
ПроизводительностьВысокая (Cython/C)Очень высокая (C/C++)Средняя (C)
ДокументацияПодробная, с примерамиОбширная, но часто устаревшаяХорошая
Поддержка глубокого обученияНетЕсть (DNN модуль)Нет
ЛицензияBSD-3BSDHPND (PIL) / Historical (Pillow)

Ограничения

  • Не предназначена для реального времени: хотя производительность высока, scikit-image не оптимизирована для обработки видеопотоков в реальном времени (как OpenCV).
  • Не включает нейросетевые модели: для задач глубокого обучения требуется использование специализированных библиотек (TensorFlow, PyTorch, Keras).
  • Отсутствие поддержки GPU: большинство алгоритмов выполняются на CPU, хотя некоторые операции могут быть ускорены через NumPy/SciPy.
  • Сложность для новичков: требует понимания работы с массивами NumPy и основ обработки изображений.

Интересные факты

  • scikit-image является частью проекта scikit, который также включает библиотеки для машинного обучения (scikit-learn) и обработки сигналов (scikit-signal).
  • Библиотека активно используется в научных публикациях: многие алгоритмы, реализованные в scikit-image, цитируются в статьях по компьютерному зрению и обработке изображений.
  • Встроенные тестовые изображения (например, data.camera(), data.astronaut(), data.coins()) часто используются в учебных целях и для демонстрации алгоритмов.

Источники

  • Официальная документация scikit-image: https://scikit-image.org/docs/stable/
  • GitHub-репозиторий проекта: https://github.com/scikit-image/scikit-image
  • Статья «scikit-image: image processing in Python» (PeerJ, 2014)
  • Книга «Python for Data Analysis» (Wes McKinney, 2017) — разделы по обработке изображений
  • Материалы курса «Image Processing with Python» (DataCamp)

BFOmetr — база данных и аналитика по компаниям России.

На главную BFOmetr →