zoukankan      html  css  js  c++  java
  • 三维重建

    来自多个图像的3D重建是从一组图像创建三维模型。这是从3D场景获取2D图像的相反过程。

    图像的本质是从3D场景到2D平面的投影,在此过程中深度丢失。对应于特定图像点的3D点被约束在视线上。从单个图像中,不可能确定该线上的哪个点对应于图像点。如果有两个图像可用,则可以找到3D点的位置作为两个投影光线的交点。该过程称为三角测量。这个过程的关键是多个视图之间的关系,这些视图传达相应的点集必须包含某些结构的信息,并且该结构与相机的姿势和校准有关。

    近几十年来,对计算机图形虚拟现实和通信的3D内容存在重要需求,引发了对要求的重点改变。用于构建3D模型的许多现有系统围绕专用硬件(例如立体设备)构建,导致高成本,这不能满足其新应用的要求。这种差距刺激了数字成像设备(如相机)的使用。摩尔定律还告诉我们,可以在软件方面做更多的工作。Tomasi和Kanade提出了一种早期的方法。[2]他们使用仿射分解方法从图像序列中提取3D。然而,正投影的假设是该系统的重要限制。

    内容

    处理[ 编辑]

     

    可视外壳可以从一个对象的多个轮廓被重构。[3]

    将多个2D图像转换为3D模型的任务包括一系列处理步骤:

    摄像机校准由内部和外部参数组成,没有这些参数,在某种程度上没有算法安排可以工作。校准和深度确定之间的虚线表示通常需要相机校准来确定深度。

    深度确定是整个过程中最具挑战性的程序代写接单群733065427部分,因为它可以计算任何给定图像中缺失的3D成分 - 深度。该对应性问题,找出两幅图像间的匹配,因此匹配元素的位置,就可以在三维空间中三角是这里的关键问题。

    一旦有了多个深度贴图,就必须将它们组合起来,通过计算深度并从摄像机投射出来来创建最终网格 - 注册。相机校准将用于识别深度图创建的多个网格可以组合在一起以形成更大的网格,从而提供多个观察视图。

    材质应用阶段,你有一个完整的3D网格,这可能是最终目标,但通常你会想要将原始照片的颜色应用到网格。这可以通过将图像随机地投影到网格上,通过组合纹理以获得超分辨率并最终通过材料分割网格(例如镜面反射和漫反射属性)来实现。

    重建的数学描述[ 编辑]

    给定一组由N个摄像机和矩阵观看的3D点 { displaystyle {P ^ {i} } _ {i = 1 ldots N}}。限定{ displaystyle m_ {j} ^ {i} simeq P ^ {i} w_ {j}} 是投影的齐次坐标 { displaystyle j ^ {th}} 指向 { displaystyle i ^ {th}}相机。重建问题可以改为:给定像素坐标组{ displaystyle {m_ {j} ^ {i} }},找到相应的相机矩阵集 { displaystyle {P ^ {i} }} 和场景结构 { displaystyle {w_ {j} }} 这样的

    { displaystyle m_ {j} ^ {i} simeq P ^ {i} w_ {j}} (1)

    通常,在没有进一步限制的情况下,我们将获得投影重建。[4] [5]如果{ displaystyle {P ^ {i} }} 和 { displaystyle {w_ {j} }} 满足(1), { displaystyle {P ^ {i} T }} 和 { displaystyle {T ^ { - 1} w_ {j} }}将满足(1)与任何4×4非奇异矩阵Ť

    投影重建可以仅通过点对应来计算,而没有任何先验信息。

    自动校准[ 编辑]

    自动校准或自校准是经典的方法,其中,摄像机运动和参数第一回收,使用刚性,则结构是容易计算的。实现这一想法的两种方法如下:

    Kruppa方程编辑]

    通过至少三个位移,我们可以使用Kruppa [6]的多项式方程组来获得相机的内部参数,这些方程是从刚度约束的几何解释得出的。[7] [8]

    矩阵 { displaystyle K = AA ^ { top}}在Kruppa方程中未知,称为Kruppa系数矩阵。使用K和Cholesky分解方法,可以轻松获得内在参数:

    { displaystyle K = { begin {bmatrix} k_ {1}&k_ {2}&k_ {3} \ k_ {2}&k_ {4}&k_ {5} \ k_ {3}&k_ {5}&1 \ {端bmatrix}}}

    最近Hartley [9]提出了一种更简单的形式。让{ displaystyle F} 写成 { displaystyle F = DUV ^ { top}},哪里

    然后重写Kruppa方程(推导可以在[9]中找到)

    MendonçaCipolla 编辑]

    该方法基于刚度约束的使用。设计成本函数,将内在参数视为参数,将基本矩阵视为参数。{ displaystyle {F} _ {i} j} 被定义为基本矩阵, { displaystyle {A} _ {i}}和 { displaystyle {A} _ {j}} 作为内在参数矩阵。

    分层[ 编辑]

    最近,已经提出了基于分层概念的新方法。[10]从投射结构开始,只能通过对应计算,通过利用所有可用的约束,将这种投影重建升级为欧几里德重建。有了这个想法,问题可以分为不同的部分:根据可用的约束数量,可以在不同的层面进行分析,投射,仿射或欧几里德。

    三维几何的分层编辑]

    通常,世界被视为3D 欧几里德空间。在某些情况下,不可能使用3D空间的完整欧几里德结构。最简单的是投射,然后是形成中间层的仿射几何,最后是欧几里德几何。分层的概念与几何实体的一系列变换密切相关:在投射层中是一系列投射变换(单应性),在仿射层中是一系列仿射变换,而在欧几里得层是一系列的欧几里德变换。

    假设两个或多个透视摄像机捕获固定场景,并且已经给出了不同图像中可见点之间的对应关系。然而,在实践中,匹配是计算机视觉中必不可少且极具挑战性的问题。在这里,我们假设{ displaystyle n} 3D点 { displaystyle A_ {i}} 通过观察 { displaystyle m}具有投影矩阵的相机 { displaystyle P_ {j},j = 1, ldots,m。}既不知道点的位置也不知道相机的投影。只有预测{ displaystyle a_ {ij}} 的 { displaystyle i ^ {th}} 指向 { displaystyle j ^ {th}} 图像是已知的。

    投影重建编辑]

    简单的计数表明我们有 { displaystyle 2nm} 独立测量和唯一 { displaystyle 11m + 3n}未知,所以问题应该是可以用足够的点和图像来解决的。均匀坐标中的方程可以表示为:

    { displaystyle a_ {ij} sim P_ {j} A_ {i} qquad i = 1, ldots n,~~ j = 1, ldots m} (2)

    因此,我们可以将非奇异的4×4变换H应用于投影{ displaystyle P_ {j}}{ displaystyle P_ {j} H ^ { - 1}} 和世界点 { displaystyle A_ {i}}{ displaystyle HA_ {i}}。因此,没有进一步的约束,重建只是3D世界的未知投射变形。

    仿射重建编辑]

    有关计算无限远平面位置的更多详细信息,请参阅仿射空间{ displaystyle { Pi} _ { infty}} 最简单的方法是利用先验知识,例如场景中的线条平行或者点是其他两个点之间的三分之一的信息。

    我们还可以使用先前的相机运动约束。通过分析相同点的不同图像可以获得运动方向上的线。几条线的交点是运动方向上无穷远处的点,以及仿射结构上的一个约束。

    欧几里德重建编辑]

    通过将投影重建映射到满足一组冗余欧几里德约束的投影重建,我们可以在等式(2)中找到投影变换H.这些方程是高度非线性的,并且需要对结构进行良好的初始猜测。这可以通过假设线性投影 - 平行投影来获得,这也允许通过SVD分解容易地重建。[2]

    代数与几何误差[ 编辑]

    不可避免地,测量数据(即图像或世界点位置)是嘈杂的,并且噪声来自许多来源。为了减少噪声的影响,我们通常使用比必要更多的方程,并用最小二乘法求解。

    例如,在典型的零空间问题公式Ax = 0(如DLT算法)中,残差的平方|| Ax || 用最小二乘法最小化。

    通常,如果|| Ax || 可以认为是几何实体(点,线,平面等)之间的距离,那么最小化的是几何误差,否则(当误差缺乏良好的几何解释时)它被称为代数误差

    因此,与代数误差相比,我们倾向于最小化几何误差,原因如下:

    1. 最小化的数量具有意义。
    2. 解决方案更稳定。
    3. 欧几里德变换下的解是恒定的。

    到目前为止,我们已经看到的所有线性算法(DLT和其他算法)都使代数误差最小化。实际上,除了易于实现之外,没有理由将代数误差最小化,因为它会导致线性问题。几何误差的最小化通常是非线性问题,其仅允许迭代解决方案并且需要起点。

    通常,基于代数残差的线性解决方案充当几何成本函数的非线性最小化的起点,这为解决方案提供了最终的“抛光”。[11]

    医学图像的三维重建[ 编辑]

    动机与应用编辑]

    2-D成像具有解剖学上彼此重叠的问题,并且没有公开异常。3-D成像可用于诊断和治疗目的。

    三维模型用于规划操作,形态测量研究并且在整形外科中具有更高的可靠性。

     

    在两台相机上投影P.

    问题陈述和基础编辑]

    从多个角度的相机拍摄的二维图像重建三维图像。诸如CT扫描和MRI之类的医学成像技术是昂贵的,并且尽管CT扫描是准确的,但它们可以诱导高辐射剂量,这对于患有某些疾病的患者是一种风险。基于MRI的方法不准确。由于我们在MRI扫描期间暴露于强大的磁场,因此该方法不适用于具有铁磁金属植入物的患者。这两种方法只有在骨骼的整体结构发生变化的平躺位置才能完成。因此,我们讨论了以下可以在站立时进行并且需要低辐射剂量的方法。

    虽然这些技术是三维成像,但感兴趣的区域仅限于切片; 获取数据以形成时间序列。

    1)基于立体对应点的技术编辑]

    该方法简单并且通过在多视图射线照片中手动识别点来实现。第一步是提取两个X射线图像中的对应点,第二步是使用离散线性变换等算法进行三维重建。[12]使用DLT,重建只在有SCP的地方进行。通过增加点数,结果得到改善[13]但是耗时。由于再现性和时间消耗低,该方法的准确度低。该方法取决于操作员的技能。该方法不适用于连续形状的骨结构。该方法通常用作其他方法的初始解决方案。[14]

    2)非立体声对应轮廓法(NCSS编辑]

    该方法使用X射线图像进行3D重建,并开发在承重位置具有低剂量辐射的3D模型。

    在NSCC算法中,初步步骤是计算初始解。首先定义来自通用对象的解剖区域。其次,执行射线照片上的手动2D轮廓识别。从每个射线照片中使用3D初始解决方案对象生成2D轮廓。初始物体表面的3D轮廓投影到其相关的射线照片上。[14]这2个设定点之间进行的2D关联基于点至点的距离和轮廓推导显影二维轮廓和3D轮廓之间的对应关系。下一步是优化初始解决方案。最后,通过将Kriging算法应用于优化解决方案来完成优化解决方案的变形。[15] 最后,通过迭代最后一步直到两个设定点之间的距离优于给定的精度值,获得重建的对象。

    这种方法的优点是它可以用于具有连续形状的骨结构,并且还减少了人为干预但是它们是耗时的。

    3)表面渲染技术编辑]

    表面渲染技术将3D对象可视化为一组称为等表面的表面。每个表面都有相同强度的点(称为iso-value)。当我们想要看到分离的结构时使用它,例如头部切片的头骨,来自身体切片的血管系统等。该技术主要用于高对比度数据。重建的两种主要方法是:

    • 基于轮廓的重建:等高线附着在等表面上[16]
    • 基于体素的重建:具有相同强度值的体素用于形成等值面。一种流行的算法是Marching Cubes。[16]可以考虑一些类似于Marching Thedrahedron,Dividing Cubes [16]的算法。

    其他提出或开发的技术包括基于统计形状模型的方法,参数方法,混合方法。

  • 相关阅读:
    嵌入式根文件系统的制作和挂载【转】
    嵌入式Linux内核制作【转】
    Linux按键驱动程序设计--从简单到不简单【转】
    Linux设备驱动工程师之路——内核链表的使用【转】
    linux设备驱动归纳总结(十三):1.触摸屏与ADC时钟【转】
    linux设备驱动归纳总结(十二):简单的数码相框【转】
    linux设备驱动归纳总结(十一):写个简单的看门狗驱动【转】
    linux设备驱动归纳总结(十):1.udev&misc【转】
    linux设备驱动归纳总结(九):1.platform总线的设备和驱动【转】
    linux设备驱动归纳总结(八):4.总线热插拔【转】
  • 原文地址:https://www.cnblogs.com/chenbocheng/p/10887213.html
Copyright © 2011-2022 走看看