Статья представляет собой обзор наиболее популярных Python-библиотек, предназначенных для простого и понятного преобразования изображений (image).

Вряд ли кто-нибудь будет спорить, что современный мир заполнен огромными объемами данных, причем существенная часть этих данных — изображения. Но чтобы работать с image, картинку надо сначала обработать. Под обработкой в данном случае подразумевается процесс анализа и технических операций, производимых с цифровым изображением в целях улучшения качества image либо извлечения информации, необходимой для последующего применения.

Общие задачи следующие:

  • кадрирование,
  • отражение,
  • сегментация,
  • вращение,
  • классификация,
  • восстановление,
  • извлечение признаков,
  • распознавание.

Прекрасным средством для решения вышеописанных задач является язык программирования Python. Вдобавок к этому, данный язык программирования очень доступен, широко популярен и повсеместно применяется в качестве научно-технического языка. А раз так, то неудивительно, что внутри экосистемы Пайтона существует большое количество хороших инструментов, предназначенных для обработки image. Их и рассмотрим.

Scikit-image

Пакет для Питона, имеющий открытый исходный код и работающий с массивами NumPy. Позволяет реализовывать алгоритмы и утилиты с последующим их применением в научно-исследовательских, образовательных и даже промышленных программных приложениях. Пакет прост и понятен, с ним справятся даже новички. Код написан активным сообществом, реализован качественно и является рецензированным.

Также библиотека хорошо задокументирована, причем в документации можно найти много практических примеров.

Пакет импортируется как skimage, а большая часть функций располагается внутри подмодулей. На картинке ниже пример, каким путем можно выполнить фильтрацию изображений:

Инструменты Python для работы с изображениями

NumPy

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

Все нужные ресурсы и документация есть на официальном сайте NumPy.

Вот каким путем можно выполнить маскировку image с помощью NumPy:

Инструменты Python для работы с изображениями

Как видим, распознать внешность человека с камерой теперь невозможно.

SciPy

SciPy — не менее важный научный модуль, сравнимый с NumPy. Он позволяет решать основные задачи по обработке изображений и не только. К примеру, в подмодуле scipy.ndimage есть функции, работающие в n-мерных NumPy-массивах. Текущий пакет содержит функции для линейной/нелинейной фильтрации, интерполяции В-сплайнами, бинарной морфологии и пр. Полный список функций лучше смотреть в документации.

Рассмотрим, как SciPy используется для размытия изображений посредством фильтра Гаусса:

Инструменты Python для работы с изображениями

PIL, он же Pillow

PIL — это Python Imaging Library и бесплатная библиотека, предназначенная для открытия, работы, а также сохранения разных форматов изображений. Неприятная новость заключается в том, что ее разработка остановилась, причем последнее обновление выходило в далеком 2009. Но есть и хорошая новость: существует Pillow — форк PIL, который активно развивается и характеризуется простой установкой. Pillow работает на основных ОС и поддерживает Python 3-й версии. Имеет базовый функционал методов для обработки изображений, в том числе точечные операции, преобразование цветового пространства, фильтры с набором ядер свертки и пр.

Примеры использования и процесс установки хорошо описаны в документации.

Улучшаем image через ImageFilter в Pillow:

from PIL import Image, ImageFilter

#считывание изображения

im = Image.open( 'image.jpg' )

#отображение изображения

im.show()

from PIL import ImageEnhance

enh = ImageEnhance.Contrast(im)

enh.enhance(1.8).show("30% more contrast")

Инструменты Python для работы с изображениями

OpenCV

Одна из наиболее популярных библиотек, которая используется при обработке приложений по компьютерному зрению (Computer Vision — популярнейшее сегодня направление и технология, используемая в системах управления процессами, системах видеонаблюдения с камер, системах дополненной реальности и т. д.) Версия интерфейса для Пайтона называется OpenCV-Python, и именно Python­-обертка во фронтенде обеспечивает легкое развертывание и настройку. Отличный инструмент для высоконагруженных вычислительных программ, работа которых связана с Computer Vision. Руководство здесь.

На jpg картинке ниже — пример наложения изображения посредством пирамид с целью создания нового фрукта.

Инструменты Python для работы с изображениями

SimpleCV

Очередной фреймворк с открытым исходным кодом, предназначенный для создания Computer Vision-приложений. С ним появляется доступ к ряду мощных CV-библиотек (к тому же OpenCV) без надобности изучения глубины цвета, цветовых пространств, файловых форматов и т. д. Кривая обучения гораздо меньше, чем в OpenCV, то есть основной слоган — «компьютерное зрение становится проще». Также среди преимуществ:

  • простые CV-тесты cмогут писать даже начинающие разработчики;
  • алгоритм работы обеспечивает функциональную совместимость не только с изображениями (images), но и с камерой (camera), видеофайлами, видеопотоками.

А вот и понятная документация, где можно найти много практических примеров. Один из них — на фотографии ниже:

Инструменты Python для работы с изображениями

Mahotas

Очередная библиотека Python для обработки изображений и Computer Vision. Включает в себя как стандартные обрабатывающие функции (фильтрация, морфологические операции), так и более современные CV-возможности, позволяющие вычислять признаки и находить особые точки и локальные дескрипторы. Python-интерфейс обеспечивает высокую скорость разработки, а алгоритмы написаны на С++. В результате Mahotas представляет собой быструю библиотеку с минимальным кодом и зависимостями. В документации по ссылке можно найти инструкции по установке и даже пошаговые уроки по освоению.

Решение задач по поиску  и обработке происходит с помощью простого кода. На картинке jpg ниже можно увидеть задачу по поиску под названием «Где Уолли?». Для выполнения поиска требуется минимум кода.  

Инструменты Python для работы с изображениями

На рисунке ниже — результат поиска:

Инструменты Python для работы с изображениями

SimpleITK

ITK — кроссплатформенная система, которая предоставляет широкий набор средств по анализу image. SimpleITK — это  упрощенный слой, который надстроен поверх ITK. Он облегчает работу с библиотекой и упрощает собой набор инструментов для выполнения анализа изображений, имеющих большое число компонентов, которые поддерживают общую фильтрацию, а также сегментацию и регистрацию изображений. SimpleITK написан на C++, однако доступен и для других языков, в том числе и Python.

Возможности SimpleITK можно посмотреть, к примеру, используя Jupyter Notebook. Там же демонстрируется интерактивный анализ изображений с применением языков Python и R.

На анимации ниже  визуализирован процесс преобразования при регистрации КТ- и МРТ-снимков. Доступен и исходный код.

Инструменты Python для работы с изображениями

Pgmagick

Обертка для библиотеки GraphicsMagick — системы, которую порой называют швейцарским ножом в обработке image. Тут предоставляется коллекция эффективных библиотек и инструментов, которые поддерживают запись, чтение и операции с изображениями в десятках основных форматов (GIF, JPEG, PNG, PDF, TIFF и пр.). Есть подробное руководство пользователя и ссылка на Github.

На примерах ниже можно увидеть такие операции, как масштабирование изображения и выделение контуров.

Инструменты Python для работы с изображениями
Инструменты Python для работы с изображениями

PyCairo

Это уже комплект привязок Пайтон-кода для графической библиотеки Cairo. Последняя представляет собой 2D-библиотеку, предназначенную для прорисовки векторной графики. Сама по себе векторная графика интересна тем фактом, что она не теряет свою четкость в случае изменения размеров либо трансформации. Можно вызывать и Cairo-команды. Вводное руководство здесь.

Вот каким путем выполняется отрисовка линий, основных фигур и радиальных градиентов:

Инструменты Python для работы с изображениями

Вывод

Сегодня хватает бесплатных и полезных инструментов по обработке изображений в Python (GIF, JPEG, PNG, PDF, TIFF и пр.). Некоторые известны очень хорошо, некоторые нет. Рекомендуется поработать с разными инструментами, чтобы выбрать наиболее удобную и эффективную библиотеку, максимально подходящую для решения поставленных задач.

На этом все, если хотите повысить навыки программирования на Python, добро пожаловать на один из наших курсов:

Инструменты Python для работы с изображениями

Источник