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-image | OpenCV | PIL/Pillow |
|---|---|---|---|
| Основное назначение | Научная обработка изображений | Компьютерное зрение, реальное время | Базовая работа с изображениями |
| Формат данных | NumPy array | NumPy array (BGR) | Собственный объект Image |
| Производительность | Высокая (Cython/C) | Очень высокая (C/C++) | Средняя (C) |
| Документация | Подробная, с примерами | Обширная, но часто устаревшая | Хорошая |
| Поддержка глубокого обучения | Нет | Есть (DNN модуль) | Нет |
| Лицензия | BSD-3 | BSD | HPND (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 →