当前位置: 首页 > news >正文

威海高新园区建设运营有限公司网站用网站开发客户发邮件

威海高新园区建设运营有限公司网站,用网站开发客户发邮件,wordpress菜单栏不显示,品牌设计就是vi设计吗0. 摘要 本文旨在较为直观地介绍相机成像背后的数学模型#xff0c;主要的章节组织如下#xff1a; 第1章用最简单的针孔投影模型为例讲解一个三维点是如何映射到图像中的一个像素 第2章介绍除了针孔投影模型外其他一些经典投影模型#xff0c;旨在让读者建立不同投影模型…0. 摘要 本文旨在较为直观地介绍相机成像背后的数学模型主要的章节组织如下 第1章用最简单的针孔投影模型为例讲解一个三维点是如何映射到图像中的一个像素 第2章介绍除了针孔投影模型外其他一些经典投影模型旨在让读者建立不同投影模型之间的建模过程 第3章介绍如何把不同的投影模型用一个统一的投影过程表达 第4章进一步补充第三章的统一投影模型并介绍畸变的定义和去畸变的原理 第5章针对全景相机的基本概念和两种应用广泛的全景相机模型做出介绍 第5章用代码示例介绍如何使用OpenCV的接口对图像去畸变 1. 相机成像过程 为了具体说明相机的成像可以以最简单的针孔相机成像来予以说明。 针孔相机由一面有小光圈的遮光盒和另一面有胶卷组成 由于研究中使用的大多数商用相机都是基于类似的结构使用薄透镜、小孔径和光传感器代替胶片因此在计算机图形学和计算机视觉研究中针孔相机模型通常用于解释和建模图像形成。 说到图像的成像就必须提到三个坐标系相机坐标系、世界坐标系、图像坐标系 aICS图像坐标系是附着在每个图像上的坐标系用于指定像素位置。按照惯例从观众的角 度来看原点位于图像的左上角x-指向右侧的轴以及y-轴向下。 b) CCS摄影机坐标系的原点附着到摄影机计算机视觉约定使用带z的右手系统那么z-指向相 机正在观察的对象的轴指向相机的外侧和图像平面的内侧y-指向下方的轴x-轴向 右。 需要注意OpenCV使用的这种约定可能与计算机图形软件如Blender中使用的视图坐标系不同后者使相机观察方向未负z坐标和y-指向上方的轴。 cWCS世界坐标系将摄影机与场景中的其他对象相关联。 一个三维空间中的点怎样映射到图片上的一个像素 先从一个最简单的问题开始一个三维空间中的点是如何经过相机成像变为图像上的一个像素的 我们最常见的投影模型Perspective Projection Model 描述的就是针孔相机 的成像原理。从上面的图根据相似三角形可以得出 其中为光轴在图像中的坐标如果相机的光轴与感光元器件完全对齐的话, 是图像的宽度单位是像素。 从上面的关系可以得出将一个三维点投影到像素坐标系的时候可以直接使用下面的公式。对应的就是针孔相机模型。下标 表示这个点是在相机坐标系下的点 公式1-2在代码中也经常对分开进行计算 当然为了简化记号公式1-2也通常记为矩阵相乘的形式 如果我们提前对做归一化处理也就是除以假设点位于相机前即则可以去掉系数即如下形式 公式1-4中位于的平面又叫归一化平面nomalized plane下文会再次提到。 公式1-2到公式1-5其实都是等价的. 如果给的三维点是在世界坐标系下也就是那么我们只需要先把该点用相机的外参转换到相机坐标系下刚性变换即可 由于刚性变换过程不影响对相机投影模型的讨论因此后面都假设三维点是处于相机坐标系 相机坐标系 在OpenCV中及大部分视觉处理库中相机坐标系的规定都与上述的图一致就是相机光轴往前为图像水平往右为图像垂直往下为。不过要注意的是在一些仿真渲染器或者特定任务的数据集中可能会规定图像垂直往上为前为朝左为但是这一点是无关紧要的这一点差别可以反映在相机的外参里也就是公式1-6中的只要按照OpenCV的方式规定相机坐标系总是可以找到一个外参矩阵将世界坐标系下的点变换到相机坐标系前右下。 小结 问相机是如何成像的答光束从物体表面反射经过相机镜头到达感光原件这一系列物理过程可以通过数学公式表达最终变成一个简单的矩阵操作将三维空间中的点映射到图片的一个像素。具体来说流程图如下 一般来说世界坐标系和像素坐标系通过一组物理坐标系相关联参数具体如下 * the focal length of the lens  透镜的焦距 * the size of the pixels 像素大小 * the position of the principal point 主点位置 * the position and orientation of the camera 相机的位置与姿态 2. 不同的相机投影模型 第一节介绍的是针孔投影模型但是事实上相机镜头都是多种多样的不可能都是符合针孔投影模型。本节会介绍经典的相机投影模型并从直观感受和形式化定义上介绍不同的投影模型是如何联系在一起的 什么是相机投影模型 相机投影模型用数学的方式描述了一个真实世界中的三维点到图像上像素坐标的映射关系 相机投影模型实际上就是对相机成像过程物理的数学建模。建模的目的是为了能够尽量符合真实的成像过程。不同的建模方式就对应不同的相机投影模型 经典的相机投影模型 我们回头看看公式1-3并暂时只关注轴的映射关系 上式中称为相机焦距反应了一个单位长度应该映射为几个像素单位是是相机坐标系以光轴点为原点到图像坐标系以左上角为原点这两个参数都是相机的固有参数。而上式轴刚好是点到相机光心连线与光轴角度的正切值我们记光束与光轴的夹角为并将图片原点移动到图片中心则公式1-3可以写为 上式的示意图如下图中的在只考虑轴的时候就是 在公式2-1中轴的投影坐标是的函数于是我们是否可以用不同的函数表达这个过程答案是肯定的不同的函数就对应了不同的投影模型。下图就给出了在经典投影模型中对的不同映射方式。 事实上作为相机的焦距在上图中的不同投影模型都统一出现于是我们可以舍弃焦距符号。于是上图中不同的函数关系与投影模型的对应关系如下 上面两幅图出自:Models for the various classical lens projections这篇文章比较形象地介绍各种经典的相机投影模型并给出他们的函数曲线分析。不过总体偏形象化没有引入更形式化的描述。 3. 相机投影模型的统一表达形式 上一节我们将投影关系限制在轴并且给出了较为直观的图示。目的在于两个1给读者建立更深刻的相机投影过程;2让读者对几种经典的投影模型有初步的直观了解。在这一小节中我们给出更为统一的相机投影表达方式同时为后文讨论相机的畸变 建立必要的理论基础。 我们将相机的投影过程拆分为三个过程1将空间中的点投影到单位球表面;2将单位球上的点投影到归一化平面;3将归一化平面上的点利用针孔模型投影到图像坐标系。下面详细介绍这几个过程 单位球投影 想象一下一束光束从相机光心射出经过图像中的一个像素然后往外无限延伸可以想象到这个光束经过的任何点到图像的投影都是经过的那个像素。这个简单的事实告诉我们我们可以对一个三维点进行任意的放缩其在图像上的成像点都不会改变。于是我们将三维点除以它自身的膜长将其投影到一个单位球其投影坐标为: 示意图如下 在上图中 是光束与光轴的夹角 为光束与水平轴的夹角。 两个角度有如下关系 之所以构建  和  是因为我们后续可以将投影过程建立为这两个角度的函数也就是只与光束的角度有关而与具体的点坐标无关这也是符合直观的。 另外从前面的叙述以及常识我们知道针孔成像结果是一个倒立的像为了方便叙述我们可以将相机做一个镜像如下图所示 这个单位球有时候又叫视球Viewing Sphere。 归一化平面与模型平面 将世界坐标系的点投影到单位球后我们进一步将其映射到  的平面上这个平面又叫归一化平面Normalized Plane。此时不同的投影模型会对在归一化平面上的点到原点的连线做放缩 为了后文叙述的统一性我们再拆分出一个模型平面。在归一化平面上的点只是与光心点的连线和平面的交点即 在模型平面上Model Plane对归一化平面上的点做半径放缩即: 这两个平面的变换过程如下图所示 从第二节中经典的投影模型我们发现其实不同的投影模型都没有对产生影响而是对投影点到原点的距离建立不同的函数形式。 稍后将看到为了能将所有模型都统一为针孔投影模型会将模型平面变为畸变平面用更具一般性的多项式代替前面的表达形式。因此现在模型平面上的点用下标标明表示distortion。 透视变换 得到模型平面上的坐标后我们可以用相机内参将其变换到图像平面这个步骤实际上就只是坐标的变换了。 最后我们可以得到一张完整地表达相机投影模型的示意图 将针孔投影带入上述统一模型 我们可以将针孔模型即代入上面的模型联立公式3-1-3-5,最后可以发现公式3-5的结果其实就是公式1-3也就是针孔投影模型的公式。这个过程比较简单就不再展开公式。读者自己推导一下这个过程非常有利于理解上述的过程。 不同投影模型的函数图 我们可以将不同的经典投影模型的函数画出来横轴为  纵轴为结果如下: 从上图我们应该至少要观察到一个重要的事实针孔投影模型无法对的视野成像。因为在90度的时候会趋于无穷大。实际上从上面的函数图可以看到针孔投影模型只能在大约水平140度以内的视野成像。 相机投影模型总结 到目前位置我们应该建立至少以下几个方面的认识 统一化的投影模型经过单位球投影-归一化平面-透视变换几个过程将一个三维点投影到图像上的像素 不同的经典投影模型在投影过程中不会改变光束与轴的夹角只是对像素到图像原点的距离建立不同的方程 4. 相机的畸变 针孔模型的优越性 首先描述一下我们人类直观上对于“标准的图像”这个词的一个感性认识是不是我们会觉得横平竖直真实中是直线则图像中也是直线这样的图片会比较“标准”事实上针孔投影模型就刚好具有这样的性质。这个性质也可以从其投影方程看出来。经过针孔成像的物体好像就是把整个物体缩小放在图片上因此圆是圆直线是直线。而其他投影模型就可能会呈现膨胀、紧缩的成像效果。如下图所示 定义 “畸变”这个词从词语上应该理解成由于镜头加工等因素造成镜头与投影模型的差异。但实际上相机畸变现在描述的是相机成像过程与针孔投影模型的差异a deviation from the pinhole model 也就是针孔投影畸变模型实际成像 而“去畸变”则是使用畸变模型对图像进行逆操作使得图像就像用针孔投影模型成像出来的一样。 在归一化平面插入畸变模型 为了能够利用针孔模型的性质我们在前文给出的统一相机投影模型中将模型平面用畸变平面代替。这里的核心思想是用一个更具一般性的多项式替代各个投影模型中的模型函数以此达到用一个方程表达多个投影模型的目的。 替换后的示意图如图所示 注意上图与上一节最后的统一投影模型其实是一样的不过Model Plane名字换成Distortion Plane 我们这一节采用OpenCV实现的畸变模型来讲解畸变过程 我们还是先将点投影到归一化平面得到并令其到原点的半径为:         ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​ 径向畸变Radial Distortion 所谓的径向畸变Radial Distortion就是指只对点做半径上的伸缩变化这一点其实就跟经典投影模型一样用一个函数建立半径的变化在OpenCV中标准镜头的径向畸变可以用如下方程表达 径向畸变对于环绕光轴一周的改变是一致的因此也叫做半径对称畸变Radial Symmetric Distortion或者畸变的对称部分Symmetric Part Of Distortion Model 切向畸变Tangential Distortion 真实的镜头由于加工误差和安装误差会导致镜头与感光原件的中心不是完全对齐的因此在平行的方向上会与标准的针孔成像模型有差异这种差异对于光轴不是旋转对称的也叫做切向畸变Tangential Distortion OpenCV中镜头的切向畸变方程如下 公式4-1和公式4-2中的叫做畸变参数Distortion Coefficients)。 去畸变 有了畸变模型之后我们就可以将一个三维点经过单位球投影-归一化平面投影-畸变模型-透视变换得到该点在图像中的像素位置。我们可以通过一些标定物经过求解得到上述的畸变系数进而得到畸变过程的反过程。我们将图像上的点先经过透视变换的反变换得到在畸变平面上的点再经过畸变过程的反过程再投回图像中这样我们就得到一副没有畸变的图像其看起来就像是用完全标准的针孔投影模型成像的照片。 下面的图片展示了从畸变到去畸变的图像变化 做完去畸变后整个的成像过程就像直接用针孔投影模型公式1-3成像一般就像下图一样。 提出畸变模型的文章需要给出如何标定出畸变参数同时如何计算从畸变点到非畸变点这里面主要是一些数学求解这里就不展开讨论有兴趣的可以看看wiki:Distortion 5. 全景相机Omidirectional Camera 所谓的全景相机广泛概念上指成像角度能够大于等于180度的相机他们看起来大概像是下面这样 从第二节不同的相机投影模型我们可以知道根据针孔投影模型设计出的镜头无法对大于等于90度左右的视野成像通常由于进光量等问题这类相机一般只有140度左右的成像视野。 一般的畸变模型的设计以针孔相机模型为基础通过参数模型修正真实的成像与针孔成像的差异因为在很多的应用中我们希望能够通过“去畸变”的方式将图片变成“直线还是直线Straight lines are straight在KannalaBrandt论文中是这样描述的 It is impossible to project the hemispherical field of view on a finite image plane by a perspective projection so fish-eye lenses are designed to obey some other projection model.This is the reason why the inherent distortion of a  fish-eye lens should not be considered only as a deviation from the pinhole model 于是就有很多专门针对全景相机Omidirection Camera/Fisheye Camera/Wide-Angle camera的建模研究出现。 重新理清一下我们的目的 拥有一种统一的表达方式能够尽量拟合真实的全景相机的成像过程 这种表达方式应该简洁有效 能够对模型的参数求解并将图像通过“去畸变”变成像是由针孔相机拍摄出来的横平竖直的图像 OpenCV中针对全景相机的标定和去畸变给出了两种实现 KannalaBrandt模型.对应实现OpenCV::Fisheye CMei模型. 对应实现OpenCV::Omnidir 下面简单介绍这两种模型 KannalaBrandt模型 第一步还是先将点投影到单位球模型这样我们就得出了两个角度后续的畸变模型就是关于这两个角度的函数 这里这里摘录OpenCV的描述方式OpenCV_Fisheye相比于论文在模型参数上简化了很多 KannalaBrandt模型使用一个多项式描述径向畸变畸变的对称部分 径向畸变后坐标变为 最后再进行非对称畸变 最后再经过公式3-5变换到图像坐标系。 CMei模型 CMei模型相比于其他模型有一个较大不同之处在于在从单位球投影到归一化平面时将相机光心往后移动了距离总体的投影过程如下图 上图出自引用CMei的一篇论文Design and Calibration of an Omni-RGBD Camera。 6. 代码实例 实例一针孔投影模型去畸变 # 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:yh, x:xw]# undistort image points if points2d.ndim  2:points2d  points2d[:, None, :] undistorted_points  cv2.undistortPoints(points2d, K, distortions, PK) undistorted_points  undistorted_points.reshape(-1, 2)实例二CMei模型去畸变 # undistort image if newK:K_new  np.zeros((3,3), np.float64)h,w  img.shape[:2]K_new[0, 0]  w/4K_new[0, 2]  w/2K_new[1, 1]  h/4K_new[1, 2]  h/2K_new[2, 2]  1.0 else:K_new  None undistorted_img  cv2.omnidir.undistortImage( img, K, distortions, Xi, cv2.omnidir.RECTIFY_PERSPECTIVE, KnewK_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]  c1PS:cv2::omnidir::undisortPoints的旧版本有bug参考这个issue。omnidir空间目前还没有成为opencv的正式稳定接口因此维护在opencv-contrib-python包中最新的包4.6.x已经修复了bug。一定要检查一下是不是有那个bug 实例三KannalaBrandt模型去畸变 # You should replace these 3 lines with the output in calibration step DIMXXX Knp.array(YYY) Dnp.array(ZZZ) def undistort(img_path):img  cv2.imread(img_path)h,w  img.shape[:2]map1, map2  cv2.fisheye.initUndistortRectifyMap(K, D, np.eye(3), K, DIM, cv2.CV_16SC2)undistorted_img  cv2.remap(img, map1, map2, interpolationcv2.INTER_LINEAR, borderModecv2.BORDER_CONSTANT)cv2.imshow(undistorted, undistorted_img)cv2.waitKey(0)cv2.destroyAllWindows() if __name__  __main__:for p in sys.argv[1:]:undistort(p)7. 相机标定方法 最经典的是使用张正友标定法可参考另外一篇。 8. 参考资料 OpenCV:Camera Calibration OpenCV2.4:Camera Calibration Models for the various classical lens projections Wiki:Distortion KannalaBrandt:A Generic Camera Model and Calibration Method for Conventional, Wide-Angle, and Fish-Eye Lenses CMei: Single View Point Omnidirectional Camera Calibration from Planar Grids OpenCV::Fisheye OpenCV::Omnidir
http://www.tj-hxxt.cn/news/233949.html

相关文章:

  • 网站建设费用进会计什么科目wordpress插件都是英文
  • 优秀电商网站设计做收费网站
  • 凯里信息网站高端设计
  • 网站效果网站文章百度不收录
  • 焦作焦煤电子商务网站建设做视频网站有什么
  • 袜子技术支持北京网站建设网站开发进度设计
  • 论坛型网站开发沧州市网站制作公司
  • wordpress中文表单生成腾讯云wordpress优化
  • 哪个网站有做商标高质量外链
  • 资源整合seo排名怎么样
  • 个人建设网站需要什么证件吗网络营销案例事件
  • 营销型企业网站特点weui-wordpress
  • 上海 网站建设 外包网站建好以后每年都续费么
  • 做单页网站的软件竞价关键词优化软件
  • 广东网站建设推荐网络搭建模拟软件
  • 怎样组建企业网站深圳网站建设的基
  • 用什么开发手机网站网站建设与网页设计实训报告
  • 淘宝官网网页版淘宝网关键词排名优化系统
  • 怎么注册晋江网站做的wordpress模版使用
  • 如何使用手机看建设网站wordpress默认主题修改版
  • 网站服务器租用价格多少钱一年北京王府井大街
  • 中小企业网站建设与推广wordpress 登陆验证码插件
  • 网站建设需要多少人哪些网站是jsp做的
  • jsp开发的网站牛二网站建设
  • 中国城投建设集团网站免费net网站空间
  • 古典网站建设同一个ip网站太多 seo
  • wordpress .htaccessseo指的是搜索引擎营销
  • 凡科网站建设网站个人网页制作成品 设计
  • 如何用visual做网站网站建设辶首先金手指十五
  • 网站全屏图片怎么做的网站设计开发项目书