NTA

Kornia - Python библиотека для обработки изображений в задачах CV

В этой статье я хотел бы познакомить читателей с библиотекой для ЯП python — Kornia, имеющей богатый функционал в области computer vision. Библиотека написана с использованием pytorch, в ее основе лежат готовые решения, такие как torchvision, PIL, skimage, tf.image, OpenCV. В Kornia реализована возможность выполнения вычислений не только с использованием CPU, но и GPU, что делает фреймворк довольно производительным.

Библиотека содержит в своем составе ряд компонентов, пробежимся по основным:

1. kornia.enhance – предоставляет набор функций, для улучшения изображений:

  1. adjust_brightness – управляет яркостью изображения
  2. adjust_contrast – управление контрастностью
  3. adjust_saturation – насыщенность изображения
  4. adjust_gamma – гамма-контроль
  5. adjust_hue – управление оттенками

Ниже приведен код и результат работы метода adjust_contrast:

import matplotlib.pyplot as plt import cv2 import kornia as K import numpy as np import torch import torchvision from PIL import Image # Функция для считывания изображения с диска и преобразования его в torch-массив для последующей обработки: def load_torch_image(fname): img = K.image_to_tensor(cv2.imread(fname), False).float() / 255 img = K.color.bgr_to_rgb(img) return img # Функция отрисовки и вывода на экран torch-массива при помощи MatPlotLib: def imshow(tensor): image = torchvision.utils.make_grid(tensor, nrow=2) image = K.utils.tensor_to_image(image) plt.imshow(image) plt.axis('off') plt.show() # Функция для сохранения torch-массива как изображения на диск: def save_tensor_as_image(path, tensor): image = torchvision.utils.make_grid(tensor, nrow=2) image = K.utils.tensor_to_image(image) im = Image.fromarray(np.uint8(image*255)) im.save(path) fname0 = 'kot_sneg.png' img1 = load_torch_image(fname0) img2 = K.enhance.adjust_contrast(img1, 1.15) save_tensor_as_image('kot_sneg_0.png', img2)

2. kornia.color – функции для работы с цветом:

  1. bgr_to_rgb – приводит формат цветопредставления BGR к RGB.
  2. rgb_to_grayscale – RGB к черно-белому.
  3. rgb_to_hsv – привести RGB изображение к цветовой модели HSV.

Результат работы kornia.color.rgb_to_grayscale():

img1 = load_torch_image(fname0) img2 = K.color.rgb_to_grayscale(img1) save_tensor_as_image('kot_sneg_0.png', img2)

3. kornia.filters – набор методов для фильтрации изображений, а также функции определения границ на изображениях:

  1. box_blur
  2. blur_pool2d
  3. gaussian_blur2d
  4. max_blur_pool2d
  5. median_blur
  6. motion_blur (различные виды размытия, прямоугольное, по Гауссу, движением и т.д.)
  7. spatial_gradient
  8. sobel
  9. laplacian
  10. canny(Функции определения границ на изображениях)kornia.filters.canny() в деле:
img1 = load_torch_image(fname0) img2 = K.filters.canny(img1)[0] save_tensor_as_image('kot_sneg_0.png', 1. - img2.clamp(0., 1.))

4. kornia.morphology – набор инструментов для математической морфологии:

  1. morphology.dilation
  2. morphology.erosion
  3. morphology.opening
  4. morphology.closing
  5. morphology.gradient
  6. morphology.bottom_hat
  7. morphology.top_hat

(Это функции эрозии, наращивания, размыкания и т.д.) kornia.morphology.dilation():

img1 = load_torch_image(fname0) kernel = torch.tensor([[0, 1, 0], [1, 1, 1], [1, 0, 1]]).to('cpu') #Структурирующий элемент img2 = K.morphology.dilation(img1, kernel) save_tensor_as_image('kot_sneg_0.png', img2)

5. kornia.geometry – методы для работы с геометрией, в том числе с искажениями перспективы:

  1. get_perspective_transform – функция вычисления трансформации перспективы.
  2. warp_perspective – применение трансформации к изображению.
  3. rotate – поворот изображения.
  4. get_rotation_matrix2d – расчет матрицы множественного поворота.
  5. warp_affine – применить вращение из матрицы.
  6. rescale – изменение размера (есть antialiasing).

Ниже код и результат связки из get_perspective_transform() и warp_perspective():

img1 = load_torch_image(fname0) points_src = torch.tensor([[ [0., 0.], [1079., 0.], [1079., 959.], [0., 959.] ]]) points_dst = torch.tensor([[ [30., 160.], [1040., 15.], [1040., 490.], [30., 930.] ]]) M = K.geometry.get_perspective_transform(points_src, points_dst) img_warp = K.geometry.warp_perspective(img1.float(), M, dsize=(960, 1080)) save_tensor_as_image('kot_sneg_0.png', img_warp)

6. kornia.augmentation – инструменты аугментации:

  1. ColorJitter
  2. RandomAffine
  3. RandomPerspective

Ниже код и результат его работы:

img1 = load_torch_image(fname0) aug = K.augmentation.AugmentationSequential( K.augmentation.ColorJitter(0.1, 0.1, 0.1, 0.1, p=1.0), K.augmentation.RandomAffine(360, [0.1, 0.1], [0.7, 1.2], [30., 50.], p=1.0), K.augmentation.RandomPerspective(0.5, p=1.0), data_keys=['input'], return_transform=False, same_on_batch=False, ) for i in range(4): img2 = aug(img1) save_tensor_as_image(f'kot_sneg_{i}.png', img2)

Вышеперечисленными методами функционал библиотеки не ограничивается. Специалисты, занятые разработкой ПО в области computer vision могут найти в ней множество инструментов, которые помогут сэкономить время на написание кода. Например, в kornia реализован алгоритм Connected-component labeling (CCL) для сегментации мелких объектов на изображении, на базе этого фреймворка легко реализовать обучение модели Torch с автоматической аугментацией датасета и разделением данных на батчи, при этом есть возможность выбора между CPU или GPU.

Kornia может стать удобной надстройкой над классическими инструментами работы с изображениями, она активно поддерживается разработчиками и имеет емкую, удобную документацию.(https://kornia.readthedocs.io/en/latest/)

0
0 комментариев
Популярные
По порядку
Читать все 0 комментариев
Как Counter Strike сделал меня веб-разработчиком и как я открыл свою веб-студию

Я, как и многие подростки, начинал свой путь с компьютерных игр, вернее с видеоигр, тогда еще компьютеры не были настолько популярными. Да, я про те времена, когда мы зависали, играя в приставку SEGA и у нас горели блоки питания от перегрева, кто в теме, тот поймет =)

«Азбука вкуса» завоевала серебро и бронзу на международном конкурсе дизайна World Brand Design Society Awards

Проекты инхаус дизайн-студии «Азбуки вкуса» — упаковка Мосальского стейка и редизайн упаковки СТМ «Азбука вкуса» — получили серебряную и бронзовую награды в двух номинациях: Дизайн упаковки и Редизайн упаковки.

«Яндекс» купит технологическую платформу рекламного сервиса eLama Статьи редакции

Платформа сохранит название и продолжит развиваться под брендом eLama.

Узнай, как мы делаем бизнес

Команда Southbridge и Слёрм запускает серию бесплатных вебинаров «Как делается бизнес», которые помогут руководителям проектов, директорам выйти за стандартные рамки управления и эффективно развивать компанию.

Avito доставка. Покупатель не принимал товар, но вернувшись обратно- был выдан неизвестному лицу

Доброго времени дня. Вот и у меня произошла неприятная ситуация с Авито и Boxberry: вернувшийся мне товар в виде видеокарты GTX1070 стоимостью 35.000 руб. был вручен постороннему человеку без проверки документов.

«Альфа-банк»: звонки от фейковой «службы безопасности банка»

После оформления заявки на кредит на официальном сайте АльфаБанка, начали поступить звонки от мошенников

Переход в облако только начинается, а прогнозы о будущем метавселенных могут не сбыться: тренды до 2030 года Статьи редакции

Аналитик и бывший партнёр фонда Andreessen Horowitz Бенедикт Эванс считает, что даже если технологии становятся лучше, это не значит, что им удастся заменить старые и привычные — они могут просто занять свою нишу на рынке.

9 soft skills, которые точно пригодятся в 2022. Часть 2

Продолжаем говорить об актуальных soft skills от сооснователя digital-агентства The Architect Саши Сучкова. Сегодня разбираемся, что такое эмоциональный интеллект, как работать со стрессом и что нужно делать, чтобы оставаться гибким в любой ситуации.

Копировать мир и стать посредником всех услуг: как Meta может монетизировать метавселенную Статьи редакции

Financial Times проанализировало патенты, которые зарегистрировала компания — они не означают, что Meta создаст технологию, но дают представление о примерном развитии метавселенной.

В новогоднюю ночь клиенты Yota переписывались в Viber и WhatsApp

По данным Yota, в период с 31 декабря по 1 января объем трафика мессенджеров Viber и WhatsApp среди пользователей оператора вырос более чем на 50% по сравнению с периодом 24-25 декабря.

Люди на вырост: как it-компании получить новых сотрудников с нужными компетенциями

Чем занимаются стажеры «Ситимобила» — рассказывает (теперь уже) штатная сотрудница компании.

null