一、Kornia概述
Kornia 是一个可微分库,可将经典计算机视觉集成到深度学习模型中。
它由一组例程和可微分模块组成,用于解决通用计算机视觉问题。 该软件包的核心是使用 PyTorch 作为其主要后端,既提高效率,又利用反向模式自动微分来定义和计算复杂函数的梯度。
Kornia 在OpenCV和PyTorch这两个功能强大的库之间架起了一座桥梁。
Korniahttps://kornia.github.io/
二、模块组成
kornia.augmentation – 基于 GPU 的图像增强模块
kornia.utils – 图像到张量转换实用程序
kornia.color – 色彩空间转换模块
kornia.morphology –形态图像转换模块
kornia.losses – 几个损失函数的集合
kornia.geometry – 用于几何 CV 任务,例如使用各种相机模型进行图像转换
kornia.enhance – 强度转换和归一化模块
kornia.filters – 用于边缘检测和图像过滤用例
kornia.feature – 用于特征检测
三、一些简单图像示意
形态学算子
数据扩充
图像特征检测
四、一些简单代码示例
1、图像滤波
import cv2
from matplotlib import pyplot as plt
import numpy as np
import torch
import torchvision
import kornia as K
# 我们使用 OpenCV 将图像加载到以 numpy.ndarray 表示的内存中
img_bgr: np.ndarray = cv2.imread('drslump.jpg', cv2.IMREAD_COLOR)
# 将numpy数组转换为torch
x_bgr: torch.Tensor = K.utils.image_to_tensor(img_bgr) # CxHxWx
x_bgr = x_bgr[None,...].float() / 255.
x_rgb: torch.Tensor = K.color.bgr_to_rgb(x_bgr)
# 定义图像显示方法
def imshow(input: torch.Tensor):
if input.shape != x_rgb.shape:
input = K.geometry.resize(input, size=(x_rgb.shape[-2:]))
out = torch.cat([x_rgb, input], dim=-1)
out = torchvision.utils.make_grid(out, nrow=2, padding=5)
out_np: np.ndarray = K.utils.tensor_to_image(out)
plt.imshow(out_np)
plt.axis('off')
plt.show()
# box blur
x_blur: torch.Tensor = K.filters.box_blur(x_rgb, (9, 9))
imshow(x_blur)
2、图像匹配
图像匹配是在同一场景的两幅图像之间寻找像素和区域对应关系的过程。 这种对应对于场景的 3D 重建和相对相机位姿估计很有用。 它也被称为“宽基线立体声”,您可以在宽基线立体声博客上了解更多信息
我们为图像匹配提供了许多模块和功能:从局部特征检测器、描述符、描述符匹配、几何模型估计等构建块,建议从高级 API 开始,例如 LoFTR,您可以使用它来查找两个图像之间的对应关系。
from kornia.feature import LoFTR
matcher = LoFTR(pretrained="outdoor")
input = {"image0": img1, "image1": img2}
correspondences_dict = matcher(input)
五、小结
虽然计算机视觉以及机器学习的框架很多,依然层出不穷,Kornia不算新框架,但是Kornia还是其中比较有特点的,切入角度比较清奇的库。一是感觉很有学习和借鉴的价值。二是也是机器学习框架开源、融合的趋势的的代表。
个人感觉,多了解一下这些新的学习库,有助于拓宽思路、开阔眼界。