gpt4 book ai didi

python - 给定等边三角形的 2D 角坐标的 3D 法线向量

转载 作者:行者123 更新时间:2023-12-02 17:17:50 25 4
gpt4 key购买 nike

我有兴趣在给定等边三角形角的 3 个 2D 投影/像素坐标的情况下找到平面的法线向量。
我必须修改我的实际用例,因为我不允许分享细节:在我的用例中,我有一个等边三角形的海报钉在墙上。我可以检测像素坐标中的 3 个角,并想计算直接从墙上出来的三角形的法线向量。
我的直觉是应该有一个分析解决方案,我发现了类似的问题,但未能将它们应用于我的用例。以下是我的一些想法:

  • 我考虑通过添加一个填充为零的第三维将 2D 像素坐标置于 XY 平面上,从而将 2D 像素坐标变为 3D。对边长为 1 的引用三角形做同样的事情给了我找到它们的单应性的来源和目的地。但是因为所有 6 个 z 值都是 0,所以我认为这行不通。
  • 我知道所有 3 个点之间的距离在 3D 中是相同的,我想将其用作解决问题的约束。
  • 通过取三角形两条边的叉积,可以在 3D 中计算法线
  • 使用 openCV 的 findHomography() 函数需要至少 4 个 3D 点来求解,我不相信我可以只取像素空间中 3 个点的平均坐标来找到中心(也就是第 4 个点),对吗?

  • openCV 还带有一个 getAffineTransform() 函数,可以处理 3 对 2D 点。我试着像这样使用它:
    # equilateral reference triangle
    tri_ref = np.array([
    [0.0,0.0],
    [0.5,0.866],
    [1.0,0.0]
    ], dtype=np.float32)

    # detected corners in pixel space
    tri_pixel = np.array([
    [0.397,0.317],
    [0.441,0.848],
    [0.698,0.324]
    ], dtype=np.float32)

    A = cv2.getAffineTransform(tri_pixel, tri_ref)

    img2 = cv2.warpAffine(img1, A, (400,300))
    但是,转换看起来完全错误,我仍然需要知道如何从转换矩阵计算法线。

    最佳答案

    您无法真正从三个 2D 点获得 100% 正确的 3D 法线向量。

    例如,让我们考虑一个针孔相机系统,从一个点到相机画一条线,然后在我们画的线上随机选取另一个点,你仍然会得到与选取的点相同的图像。
    如果我们加上三个点之间的距离相同的条件,你可能仍然有最多4个可能的向量答案(成像两个固定点,最后一个点的可能位置与两个固定点的距离相同)点将是一个圆,从相机开始画一条线来连接圆,如果你穿过圆比最后一个点有两个可能的位置,唯一的条件只有一个位置是真的是这条线是圆的切线,但大多数情况下不会发生这种情况,请更改固定点,这样我们最多可以有 4 个可能的三个点位置)

    您不能仅通过取 3 个点的平均坐标来添加第 4 个点,因为您不知道质心投影到图像平面的实际位置。

    关于python - 给定等边三角形的 2D 角坐标的 3D 法线向量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63831702/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com