图像变形
ISAAC教程合集地址: https://blog.csdn.net/kunhe0512/category_12163211.html
文章目录
- 图像变形
- 几何畸变
- 图像投影
- 透视畸变校正
- 径向畸变校正
- 切向畸变校正
- 其他相机固有参数
- 焦距
- 主点(投影中心)
- 未失真输出的光学特性
- 输出主点
- 输出焦距
- 输出图像大小
- 输出方向
- Isaac 不失真Codelet
真实世界拍摄的图像有一定的缺陷,包括:
-
几何畸变(和其他光学像差)
-
噪音
-
渐晕
-
颜色不平衡
本节介绍用于校正几何失真的可用资源。
大多数计算机视觉算法对渐晕和色彩平衡不敏感。 它们被设计为对噪声具有鲁棒性,但它们往往依赖于理想的透视图像,也称为针孔图像,不会出现失真。
以下是几何扭曲或扭曲图像的示例,后面是校正示例。
扭曲:
矫正:
几何畸变
几何失真通常分为两种形式:径向和切向。
径向畸变本质上是径向对称的,在简单镜头中很常见,目的是尽量减少其他光学像差,例如散光、色差、彗差、场曲率和球面像差。 复合透镜的畸变要小得多,因为它们可以同时最小化所有这些像差,但由于它们体积大且价格昂贵,因此很少出现在机器人等嵌入式应用中。 几何失真可以用单变量多项式建模,并且在采集后很容易在软件中校正。
切向畸变不是径向对称的,尽管它相对于从投影中心辐射的线是对称的。 切向畸变由复合透镜中未对准的元件引起,因此在嵌入式应用中的简单透镜中可以忽略不计。 它是用双变量多项式建模的,也很容易在软件中进行校正。
图像投影
使用典型的相机和镜头获取的投影有两种基本类型:透视/直线/平面和鱼眼/等距/球面。 透视镜头的实际最大视场角 (FOV) 为 120°,而鱼眼镜头可以达到 180° 以上,有些甚至超过 220°。
径向畸变可用于表示具有透视镜头的鱼眼镜头,反之亦然——达到一定的 FOV。 理想透镜与正切(或反正切)函数相关,该函数可以通过靠近投影中心的多项式很好地近似,但在远离投影中心时会迅速发散。 最好使用与镜头最匹配的投影模型。 根据经验,FOV < 90° 应使用透视图作为基础投影,FOV > 120° 应使用鱼眼。
Isaac SDK 支持透视镜头的径向和切向畸变校正,但仅支持鱼眼镜头的径向畸变校正。
透视畸变校正
几何畸变被实现为径向和切向畸变校正的总和。 Isaac SDK 使用 Brown 模型,OpenCV 也使用该模型。 但是,径向和切向系数的顺序不同。 Isaac SDK 使用
{
k
0
,
k
1
,
k
2
,
k
3
,
k
4
}
\{k0,k1,k2,k3,k4\}
{k0,k1,k2,k3,k4}
,其中 OpenCV 使用
{
k
0
,
k
1
,
k
3
,
k
4
,
k
2
}
\{k0,k1,k3,k4,k2\}
{k0,k1,k3,k4,k2}
. OpenCV 可用于校准相机的固有参数,包括这些系数。
径向畸变校正
径向畸变用以下公式校正:
x 0 = x i + x i ( k 0 r i 2 + k 1 r i 4 + k 2 r i 6 ) x_0 = x_i + x_i(k_0r^2_i + k_1r^4_i + k_2r^6_i) x0=xi+xi(k0ri2+k1ri4+k2ri6)
y 0 = y i + y i ( k 0 r i 2 + k 1 r i 4 + k 2 r i 6 ) y_0 = y_i + y_i(k_0r^2_i + k_1r^4_i + k_2r^6_i) y0=yi+yi(k0ri2+k1ri4+k2ri6)
其中:
r i = x i 2 + y i 2 r_i = \sqrt{x^2_i+y^2_i} ri=xi2+yi2
切向畸变校正
切向畸变用以下公式校正:
x o = x i + 2 k 3 x i y i + k 4 ( r i 2 + 2 x i 2 ) x_o=x_i+2k_3x_iy_i+k_4(r^2_i+2x^2_i) xo=xi+2k3xiyi+k4(ri2+2xi2)
y o = y i + k 3 ( r i 2 + 2 y i 2 ) + 2 k 4 x i y i y_o=y_i+k_3(r^2_i+2y^2_i)+2k_4x_iy_i yo=yi+k3(ri2+2yi2)+2k4xiyi
这也是 OpenCV 使用的模型。
其他相机固有参数
除了畸变之外,相机的另一个固有参数包括焦距和主点。
焦距
数码相机的焦距以像素为单位,但也可以认为是像素/弧度。 理想透视透镜的投影方程为:
r = f tan ϑ r=f \tan ϑ r=ftanϑ
理想的鱼眼镜头是:
r = f ϑ r=f ϑ r=fϑ
其 r r r中是距投影中心的距离, θ θ θ是与光轴的倾斜角。 从这些方程式可以明显看出,焦距等于投影中心的角像素密度——因此解释为像素/弧度。
主点(投影中心)
镜头光轴与成像平面相交的点称为投影的主点或中心。 理想情况下,这将位于所采集图像的中心,但在商用相机中,这已被视为相差多达 100 像素。
未失真输出的光学特性
变形工具是通用的,包括生成的输出图像的参数,包括焦距、主点和方向,以及图像大小。
输出主点
畸变校正会改变输入矩形的形状,使其呈凸形或凹形弯曲。 这种弯曲是相对于主点发生的,因此最好将输出和输入主点保持在相对于其中心的相同位置,以产生对称剪裁或曝光透明度。
输出焦距
为了在输出上保持与输入相同的分辨率,它们的焦距应该大致相同。 Warp API 有一个单独的水平和垂直焦距,不同的焦距也可以在输出中保持。 另一种选择是对两个输出焦距使用两个输入焦距的几何平均值。 第三种选择是将输出焦距减少到 70%,以取消使用拜耳传感器获取彩色图像时发生的插值,以更少的像素产生相同的细节以提高吞吐量。
输出图像大小
校正失真和改变焦距会影响投影图像的大小。 一个合理的选择是保持输出的图像大小、焦距和主点与输入相同。
输出方向
在单眼视觉的情况下,将输出投影定向到与输入相同的方向就足够了。 然而,对于立体视觉,如果两个相机都指向相同的方向并且具有相同的焦距,则可以使用明显更快且更稳健的算法。 旋转矩阵或一组欧拉角都可以指定旋转校正。
Isaac 不失真Codelet
Isaac 无失真Codelet采用彩色相机原型并生成另一个彩色相机原型。 这些原型中的每一个都包括相机内在参数和图像。 输入和输出内在参数之间的唯一区别是输出失真为 0。此外,如果源图像是鱼眼,则会将其转换为透视图像。
更多精彩内容:
https://www.nvidia.cn/gtc-global/?ncid=ref-dev-876561