三点法线向量

mat*_*sta 9 math vector plane projective-geometry

嘿,数学极客,我有一个问题,一直困扰我一段时间.这是个人项目.

我有三个点:红色,绿色和蓝色.它们位于纸板条上,红点位于左下方(0,0),蓝点位于右下方(1,0),绿点位于左上方.想象一下,退一步从一个角度拍摄卡片.如果你要找到图片中每个点的中心(假设单位是像素),你会如何找到图片中卡片面部的法线向量(相对于相机)?

现在我已经了解了一些关于这个问题的事情:

  1. 点(在"现实生活中")总是直角.在图片中,如果相机沿着"轴"围绕红点旋转,则它们只是成直角(轴是由红色和蓝色或红色和绿色点创建的线).
  2. 卡片的一侧只有一些点.因此,你知道你永远不会看到它的背面.
  3. 卡与相机的距离无关紧要.如果我知道每个点的深度,这将更容易(只是一个简单的交叉产品,没有?).
  4. 卡的旋转与我正在寻找的无关.在我试图弄清楚这一点的修修补补中,最后可以借助法线向量找到旋转.我不知道旋转是否是寻找法向量的一部分(或产生).

希望有人可以做到这一点,或者是数学天才.我有两个朋友在这里帮助我,我们 - 到目前为止 - 都没有成功.

Ian*_*oyd 14

我在我的旧版MathCAD中解决了这个问题:

alt text http://i47.tinypic.com/4fjhs.jpg

编辑:MathCAD屏幕截图中的措辞错误:"已知:gb彼此垂直 "

在MathCAD中,我忘记了执行交叉产品的最后一步,我将从之前的答案中复制粘贴:

现在我们已经解决了翻译的g和b点的XYZ,你的原始问题想要平面的法线.

如果交叉g x b,我们将得到两个向量的向量:

        | u1  u2  u3 |
g x b = | g1  g2  g3 |
        | b1  b2  b3 |  

      = (g2b3 - b2g3)u1 + (b1g3 - b3g1)u2 + (g1b2 - b1g2)u3
Run Code Online (Sandbox Code Playgroud)

所有的值都是已知的,插入它们(我不会写出g3和b3取代的版本,因为它太长而且难看有用.

但实际上,我认为你必须用数字来解决它,调整g zb z以便最符合条件:

g · b = 0

| g | = | b |

因为像素不是代数完美的.

使用阿波罗13号宇航员的照片装配一个命令模块的方形氢氧化锂罐在LEM中工作,我找到了角落:

替代文字http://i48.tinypic.com/2heahit.jpg

使用它们作为XY平面的基础:

alt text http://i47.tinypic.com/wj9zsx.jpg

我使用Photoshop记录像素位置,右边是正X,正面是Y(以保持Z的右手规则" 进入 "图片):

g =(79.5,-48.5,g z)

b =(-110.8,-62.8,b z)

将两个起始公式打孔到Excel中,并使用分析工具包通过调整g zb z来" 最小化 "错误,它提出了两个Z值:

g =(79.5,-48.5,102.5)

b =(-110.8,-62.8,56.2)

然后让我计算其他有趣的值.

gb的长度(以像素为单位):

| g | = 138.5

| b | = 139.2

法线向量:

g x b =(3710,-15827,-10366)

单位法线(长度1):

N =(0.1925,-0.8209,-0.5377)

将法线缩放到与gb相同的长度(以像素为单位)(138.9):

正常=(26.7,-114.0,-74.7)

现在我有与gb相同长度的法线,我将它们绘制在同一张图片上:

替代文字http://i47.tinypic.com/2qjzp0i.jpg

我想你会遇到一个新问题:相机镜头引入的失真.三个点不能完美地投射到二维摄影平面上.有一个球形失真,使直线不再是直线,使相等的长度不再相等,并使法线略微偏离正常.

微软研究有一个算法来弄清楚如何纠正相机的失真:

一种灵活的摄像机标定新技术

但它超越了我:

我们提出了一种灵活的新技术,可以轻松校准相机.它非常适合在没有3D几何或计算机视觉的专业知识的情况下使用.该技术仅需要相机观察以几个(至少两个)不同方向示出的平面图案.可以自由移动相机或平面图案.不必知道动议.对径向透镜畸变进行建模.建议的程序包括一个封闭形式的解决方案,然后是基于最大似然准则的非线性改进.计算机模拟和实际数据都已用于测试所提出的技术,并且已经获得了非常好的结果.与使用昂贵设备(如两个或三个正交平面)的传统技术相比,所提出的技术易于使用且灵活.它将3D计算机视觉从实验室环境一步推进到现实世界.

他们有一个示例图像,您可以在其中看到失真:

替代文字

注意

  • 你不知道你是看到纸板的"顶部"还是"底部",所以法线可以垂直镜像(即z = -z)

更新

Guy在派生的代数公式中发现了一个错误.修复它会导致我不认为具有简单封闭形式的公式.这不是太糟糕,因为它无论如何都无法解决; 但数字上.

这是Excel的截图,我从两个知识规则开始:

g · b = 0

| g | = | b |

将第二个作为差异("错误"数量)写入,然后可以将两者都加起来并将该值用作数字以使excel的求解器最小化:

替代文字

这意味着您必须编写自己的数值迭代求解器.我正盯着我的大学工程师数值方法课本; 我知道它包含解决递归方程的算法,没有简单的封闭形式.