3d 计算机视觉:生成表面上液滴的三维模型

3d 计算机视觉:生成表面上液滴的三维模型,3d,computer-vision,geometry,3d,Computer Vision,Geometry,考虑一滴液体在水平面上。我需要通过从不同角度拍摄图像来生成液滴的3D模型 假设: 液滴围绕垂直轴对称 理想情况下,表面平整光滑 查询: 我需要多少这样的图像才能处理3D模型 我应该选择相机的哪个方向 我如何实现这一点 编辑:这是使用DropSnake插件拍摄的图像,该插件用于测量液滴的接触角。然而,有人告诉我,校准需要花费大量的时间和精力,否则可能会出现错误。大部分时间用于实现完美对齐,误差是由于阴影干扰和水滴弯曲光线造成的 我的方法是:我们可以放置多个摄像头,从各个角度拍摄许多雾滴照片,而无

考虑一滴液体在水平面上。我需要通过从不同角度拍摄图像来生成液滴的3D模型

假设:

  • 液滴围绕垂直轴对称

  • 理想情况下,表面平整光滑

  • 查询:

  • 我需要多少这样的图像才能处理3D模型

  • 我应该选择相机的哪个方向

  • 我如何实现这一点

  • 编辑:这是使用DropSnake插件拍摄的图像,该插件用于测量液滴的接触角。然而,有人告诉我,校准需要花费大量的时间和精力,否则可能会出现错误。大部分时间用于实现完美对齐,误差是由于阴影干扰和水滴弯曲光线造成的

    我的方法是:我们可以放置多个摄像头,从各个角度拍摄许多雾滴照片,而无需校准。然后,如果需要,通过创建三维模型来提取有关接触角的信息


    DropSnake提供的精度为0.001度,因此即使是0.01度也可以。

    我担心液滴边缘附近没有可锁定的功能,因此立体成像是不可能的。这意味着您必须仅使用一张图像,相机与液滴垂直,如下所示:

    你也应该在地板上放一些记号笔,或者把相机放在离水滴已知的距离内,以缓解这种情况。那么现在该怎么办:

  • 提取液滴2D边缘像素

    与图像中的红色或蓝色点完全相同。所以只需提取所有边点,理想情况下按角度对它们进行排序,以便它们形成多段线轮廓。。。如果相机视图垂直于我们的液滴,那么轮廓将平行于相机焦平面,因此其所有点处于相同的垂直距离。。。这对于仅从单个图像转换为3D至关重要

  • 相对于相机将轮廓转换为3D

    这是一个简单的数学问题,所以如果你看上面的图片,左边是上部的概述,右边是拍摄的图片。让我们从捕获的图像中考虑2D品红点<代码>(x,y)< /代码>。假设三维坐标系中的点
    (0,0,0)
    是焦平面(图像中心)的中间,Z是距焦点的距离,
    x,y
    方向与图像匹配

    因此2D
    (x,y)
    我们可以通过使用三角形相似性转换为3D:

    (x - xs/2) / focal_length = X/distance
    (y - ys/2) / focal_length = Y/distance
    
    因此,3D位置将为:

    X = (x - xs/2) * distance / focal_length
    Y = (y - ys/2) * distance / focal_length
    Z =              distance
    
  • 创建网格

    由于液滴是对称的,所以只需使用轮廓的一半,并简单地围绕液滴中心轴旋转3D轮廓,然后将生成的点重新排序为形成3D液滴表面的某些网格拓扑。或者,只需计算每个轮廓点到轴的垂直距离,并将其用作参数化圆方程的半径,然后将网格计算为一组圆,每个
    y
    切片一个圆

  • 精度由摄像机视场、分辨率和到水滴的距离决定。因此,如果这还不够,您可以:

    • 将相机靠近水滴
    • 使用更高分辨率的相机(或插值)
    • 提取轮廓时使用亚像素精度

    对于您的问题,示例图像是必须的,因为它的内容将向我们展示您处理的内容以及要使用的图像的算法和数量。。。您想要水滴或曲面或两个网格?什么精度?@Spektre我已经编辑了这个问题,请看一看。我有一些疑问。“xs-1”和“ys-1”是什么意思?(在右边的图像中)如果原点是右边图像的中心,为什么在图像的左上角会写一个零?@SunitGautam
    xs,ys
    是相机/图像分辨率,在图像上是角点的像素位置(以像素为单位)。对于2D图像和光栅gfx输出,零是左上角(对于OpenGL是左下角)是常见的,因为我显示图像存储在内存或文件或其他任何地方。您所指的原点是3D(不同的坐标系),原点位置应该在相机的焦点或其投影平面上。。。但仍然放在焦点轴上。。。否则,以后无法将像素位置正确转换为角度和三维坐标。。。