当前位置首页 > 教育资讯

Model我们最常见的投影模型-针孔相机的成像原理

更新时间:2024-02-15 文章作者:佚名 信息来源:网络整理 阅读次数:

模型nJG物理好资源网(原物理ok网)

我们最常见的投影模型描述了针孔相机成像原理。从上图可以基于相似三角形得出结论nJG物理好资源网(原物理ok网)

frac{X_c}{Z_c} = frac{u-c_x}{f}tag{1}\nJG物理好资源网(原物理ok网)

其中 c_x 是图像中光轴的 x 坐标。 如果相机的光轴与感光元件完全对齐,则c_x = frac{1}{2}W,W为图像的宽度(像素)nJG物理好资源网(原物理ok网)

当我们最常见的将三维点投影到像素坐标系中时,可以直接使用下面的公式,它对应的是针孔相机模型。nJG物理好资源网(原物理ok网)

begin{}u \v \ 1\ end{} = begin{} f_x \ 0 \ c_x\ 0 \ f_y \ c_y\ 0 \ 0 \ 1\ end{} begin{} X_c \Y_c\Z_cend{} tag{2}\nJG物理好资源网(原物理ok网)

p=KP标签{3}\nJG物理好资源网(原物理ok网)

其中P为相机坐标系中的三维点,K为相机内参,p为像素坐标系中的坐标。nJG物理好资源网(原物理ok网)

实际计算时上面的公式也可以写成下面的公式nJG物理好资源网(原物理ok网)

{ begin{align} &u=frac{}{Z_c} + c_x\ &v=frac{}{Z_c} + c_y end{align}tag{4}\nJG物理好资源网(原物理ok网)

如果我们加上将世界坐标系的点转移到相机坐标系的过程,上面的投影过程就变成了nJG物理好资源网(原物理ok网)

p=K[R|t]P_wtag{5}\nJG物理好资源网(原物理ok网)

总结nJG物理好资源网(原物理ok网)

这部分可以直接参考:链接包含畸变模型。 稍后将介绍失真模型。nJG物理好资源网(原物理ok网)

不同相机型号nJG物理好资源网(原物理ok网)

以上就是针孔相机的成像过程。 需要注意的一点是,对于相机坐标系中的点P,无论如何延伸,在图片上的成像点都是同一个点。 也就是说,对于一个三维点,乘以一个系数,上述模型中的成像点保持不变。 这一点对于后面了解其他相机型号其实特别重要。nJG物理好资源网(原物理ok网)

什么是相机型号nJG物理好资源网(原物理ok网)

一句话总结:相机模型从数学上描述了现实世界中的三维点与图像中的像素坐标之间的映射关系。nJG物理好资源网(原物理ok网)

经典成像模型nJG物理好资源网(原物理ok网)

由于成像模型是用来描述真实相机镜头的投影关系的,因此理论与现实之间不可避免地存在差距。 因此,研究人员设计了不同的成像模型来描述不同镜头的投影关系。 真实的物理镜头也可以基于这些数学模型进行设计。 其实只要成像角度比镜头稍大一点(可以想象为鱼眼镜头),如果还是用简单的针孔模型来描述,偏差就会很大,所以需要不同的相机模型来描述它。nJG物理好资源网(原物理ok网)

经典成像模型的第一步是首先将三维坐标点投影到单位球体(Unit)上。 有时这个单位球体也称为nJG物理好资源网(原物理ok网)

P_s=frac{P_c}{||P_c||}=[frac{X_c}{||P_c||},frac{Y_c}{||P_c||},frac{Z_c}{|| P_c||}]\nJG物理好资源网(原物理ok网)

资料来源:DSO:与nJG物理好资源网(原物理ok网)

这部分的经典论文是::The Wrong ModelnJG物理好资源网(原物理ok网)

参考:错误的模型; 首先将三维点投影到单位球面上。 其在图像上的成像点与图像y轴之间的角度保持不变。 它与图像上原点的距离是角度 α 的函数。nJG物理好资源网(原物理ok网)

q=sqrt{(X_s^2+Y_s^2)}\ alpha=atan(q,Z_s)\ beta=atan(Y_s,X_s)tag{6}\nJG物理好资源网(原物理ok网)

上图中的点P=[X_s,Y_s,Z_s]就是三维点投影到单位圆上后的点。 当该点投影到图像上时,与图像x轴的角度保持不变。 它到图像中心的距离是anglealpharho(alpha)的函数,这个函数的不同形式对应着不同的经典成像模型nJG物理好资源网(原物理ok网)

经典成像模型的成像功能nJG物理好资源网(原物理ok网)

上图来自于nJG物理好资源网(原物理ok网)

本文直观地列出了五种经典投影模型的投影函数。 与上面的表示法略有不同,上面引用的论文的表达方式更加统一,但不太直观。 上图中的θ可以看作是式(6)中β角为0时退化的α角。因此,无论是从博文还是论文《The Wrong Model》中,我们都可以推导出如下的成像方程:五款经典相机型号。 这里我们仍然用论文中的表述:The Wrong Model 来描述。nJG物理好资源网(原物理ok网)

rho(alpha)=k tan(alpha), ( ) rho(alpha)=k tan(frac{alpha}{2}), ( ) rho(alpha )=k alpha, ( ) rho(alpha)=k sin(alpha), (正弦律 ) rho(alpha)=k sin(frac{alpha} {2}),(等实体角度)不同成像模型的半径投影方程函数图nJG物理好资源网(原物理ok网)

:为什么错误的模型可以投影到单位球体上nJG物理好资源网(原物理ok网)

无论是小孔成像模型还是其他模型,都可以看作是首先将世界的点缩放到单位球。 这是可能的原因是,在从相机的光学中心发出的线上,线上的所有点都被投影到相同的像素值。 也就是说,我们做投影的时候,按一个常数缩放的结果是一样的。 教程中对此进行了描述:nJG物理好资源网(原物理ok网)

因此,对于 k≠0,一个点的所有 k*Ph 都指向同一点 Ph。其中的一个是,在 a 下,所有 Ph 都指向同一点。 这就是这样做的原因,因为沿着一条射线,所有的射线都指向同一个图像点,例如,沿着上面模型的图像中的红色射线,所有的射线都指向同一个图像。 这也是模型中的比例 s。 概括nJG物理好资源网(原物理ok网)

如果你想对这部分有更全面(但很基础)的了解,可以按照以下顺序阅读:nJG物理好资源网(原物理ok网)

:错误(用更多的函数图来描绘不同投影方程的距离差异、成像角度差异等) 镜头(用实际图片展示不同投影模型的成像效果) 相机的畸变nJG物理好资源网(原物理ok网)

不同的相机型号对应不同类型的物理镜头,但在实际的物理镜头中不可能完美对应某个相机型号。 这里的不完善之处包括镜头本身的安装误差和成像模型本身的表达限制。 事实上,镜头制造商的主要工作之一就是设计和生产尽可能接近相机型号的镜头。nJG物理好资源网(原物理ok网)

因此,成像模型与真实镜头成像之间的差异称为畸变。 失真也可以通过一定的数学函数来描述。 可以简单的理解,畸变就是在完美的相机成像模型中间插入一个函数,使得最终的像素坐标与利用相机投影关系得到的坐标不一致。nJG物理好资源网(原物理ok网)

但需要注意的是,实际代码中“失真”一词的含义并不是消除成像模型与真实物理成像过程之间的特定差距。 用于消除失真的代码实际上校正了图片的成像过程以使用透视。 ( ) 模型的图像。 也就是说,图像去除畸变后,图像的投影函数仅用透视投影的四个参数(fx,fy,cx,cy)来表示。nJG物理好资源网(原物理ok网)

以透视投影镜头中出现的径向畸变模型为例,本文中的公式(4)实际上会变为nJG物理好资源网(原物理ok网)

begin{} u\v\ end{} = begin{} f_x g_1(x',y';omega) + c_x\ f_y g_2(x',y';omega) + c_y end{}tag{7}\nJG物理好资源网(原物理ok网)

nJG物理好资源网(原物理ok网)

begin{} x'\y'\ end{} = begin{} X_c/Z_c\ Y_c/Z_c end{}tag{8}\nJG物理好资源网(原物理ok网)

式(7)中的函数g(cdot,cdot;omega)描述了畸变模型。 可以看出:给出了最经典的畸变模型之一。nJG物理好资源网(原物理ok网)

总结nJG物理好资源网(原物理ok网)

严格来说(不知道对不对),畸变这个词应该描述的是实际情况不可能完美,所以没有一个相机模型能够完美地描述物理镜头。 这里的实际误差称为失真。nJG物理好资源网(原物理ok网)

但是当使用或者其他工具库去畸变的时候,意思就是我们用一个高阶函数来拟合相机和小孔成像相机之间的间隙,然后用优化的方法来使用这个高阶函数的系数。阶函数(畸变参数)将图像转换为使用针孔成像过程成像的图片。nJG物理好资源网(原物理ok网)

也就是说,去除畸变后,你可以认为该图片就是利用针孔成像模型成像的图片。nJG物理好资源网(原物理ok网)

全景相机( )-CMei型号nJG物理好资源网(原物理ok网)

上面提到的不同相机型号已经有很多成像模型,理论上可以成像水平角度大于180度的图像。 后来,不同的研究人员提出了不同的全景相机模型来模拟全景相机的成像过程。nJG物理好资源网(原物理ok网)

:通过镜片实现小孔成像原理,主要是折射; :使用标准相机加遮罩; :通过多个摄像头重叠视野;nJG物理好资源网(原物理ok网)

实现了两个成像模型的标定小孔成像原理,即nJG物理好资源网(原物理ok网)

CMei 的 View Point from Grids,位于 cv:: 命名空间nJG物理好资源网(原物理ok网)

和 cv:: 命名空间中的模型 和 for 、广角和鱼眼nJG物理好资源网(原物理ok网)

这里我们以CMei模型为例。 投影过程如下图所示。nJG物理好资源网(原物理ok网)

代码示例1:针孔相机去畸变(模型)nJG物理好资源网(原物理ok网)

# undistort image
h,  w = img.shape[:2]
newcameramtx, roi = cv2.getOptimalNewCameraMatrix(K, distortions, (w,h), alpha, (w,h))
undistorted_img = cv2.undistort(img, K, distortions, None, newcameramtx)
x, y, w, h = roi
undistorted_img = undistorted_img[y:y+h, x:x+w]
# undistort image points
if points2d.ndim == 2:
    points2d = points2d[:, None, :]
undistorted_points = cv2.undistortPoints(points2d, K, distortions, P=K)
undistorted_points = undistorted_points.reshape(-1, 2)
nJG物理好资源网(原物理ok网)

代码示例 2:全向镜头去畸变 ( )nJG物理好资源网(原物理ok网)

# undistort image
if newK:
        K_new = np.zeros((3,3), np.float64)
        h,w = img.shape[:2]
        K_new[0, 0] = w/4
        K_new[0, 2] = w/2
        K_new[1, 1] = h/4
        K_new[1, 2] = h/2
        K_new[2, 2] = 1.0
else:
        K_new = None
undistorted_img = cv2.omnidir.undistortImage(
img, K, distortions, Xi, cv2.omnidir.RECTIFY_PERSPECTIVE, Knew=K_new)
# undistort image points
if points2d.ndim == 2:
    points2d = points2d[:, None, :]
undistorted_points = cv2.omnidir.undistortPoints(points2d, K, distortions, Xi, None)
undistorted_points = undistorted_points.squeeze()
f0 = K_new[0,0]
f1 = K_new[1,1]
c0 = K_new[0,2]
c1 = K_new[1,2]
undistorted_points[:, 0] = f0* undistorted_points[:, 0] + c0
undistorted_points[:, 1] = f1 * undistorted_points[:, 1] + c1
nJG物理好资源网(原物理ok网)

一个坑nJG物理好资源网(原物理ok网)

旧版本的cv2::::有bug,请参考这个issue。 Space尚未成为官方稳定接口,因此它被维护在--包中。 最新的软件包 (4.6.x) 已修复错误。 请务必检查是否存在该错误! ! ! !nJG物理好资源网(原物理ok网)

代码示例三:鱼眼相机去畸变( )nJG物理好资源网(原物理ok网)

这部分接口还没有使用过。 用完之后我会补上的。nJG物理好资源网(原物理ok网)

相机标定方法张正友标定方法也是使用的算法。中文解释原文其他信息nJG物理好资源网(原物理ok网)

这个CSDN专栏的投影模型系列文章看起来很专业、很系统,但我还没读过。nJG物理好资源网(原物理ok网)

::: 有一篇文章从模型、广角、鱼眼三个方面简单介绍了相机View Point的统一投影模型:The Wrong Model相机底层nJG物理好资源网(原物理ok网)

发表评论

统计代码放这里