{"id":14262,"url":"\/distributions\/14262\/click?bit=1&hash=8ff33b918bfe3f5206b0198c93dd25bdafcdc76b2eaa61d9664863bd76247e56","title":"\u041f\u0440\u0435\u0434\u043b\u043e\u0436\u0438\u0442\u0435 \u041c\u043e\u0441\u043a\u0432\u0435 \u0438\u043d\u043d\u043e\u0432\u0430\u0446\u0438\u044e \u0438 \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u0435 \u0434\u043e 1,5 \u043c\u043b\u043d \u0440\u0443\u0431\u043b\u0435\u0439","buttonText":"\u041f\u043e\u0434\u0440\u043e\u0431\u043d\u0435\u0435","imageUuid":"726c984a-5b07-5c75-81f7-6664571134e6"}

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
Комментарии
-3 комментариев
Раскрывать всегда