我需要以编程方式解决C,Objective C或(如果需要)C++中的线性方程组.
这是方程的一个例子:
-44.3940 = a * 50.0 + b * 37.0 + tx
-45.3049 = a * 43.0 + b * 39.0 + tx
-44.9594 = a * 52.0 + b * 41.0 + tx
Run Code Online (Sandbox Code Playgroud)
由此,我想获得最好的逼近a,b以及tx.
更新:我已经修改了Optimize,Eigen和Solve方法来反映变化.所有现在都返回"相同"向量,允许机器精度. 我仍然对Eigen方法感到困惑.具体如何/为什么我选择特征向量切片没有意义.这只是试验和错误,直到正常情况与其他解决方案相匹配.如果有人能够纠正/解释我真正应该做的事情,或者为什么我做了什么工作我会很感激..
感谢 亚历山大克莱默解释为什么我采取切片,只能选择一个正确的答案
我有一个深度图像.我想计算深度图像中像素的粗糙表面法线.我考虑周围像素,在最简单的情况下是3x3矩阵,并将平面拟合到这些点,并计算该平面的法向单位矢量.
听起来很简单,但最好先考虑平面拟合算法.搜索SO和其他各种网站,我看到使用最小二乘法,单值分解,特征向量/值等的方法.
虽然我不完全理解数学,但我已经能够使各种片段/示例起作用.我遇到的问题是,我对每种方法都有不同的答案.我期待各种答案是相似的(不完全),但它们似乎有很大的不同.也许有些方法不适合我的数据,但不确定为什么我会得到不同的结果.有什么想法吗?
这是代码的更新输出:
LTSQ: [ -8.10792259e-17 7.07106781e-01 -7.07106781e-01]
SVD: [ 0. 0.70710678 -0.70710678]
Eigen: [ 0. 0.70710678 -0.70710678]
Solve: [ 0. 0.70710678 0.70710678]
Optim: [ -1.56069661e-09 7.07106781e-01 7.07106782e-01]
Run Code Online (Sandbox Code Playgroud)
以下代码实现了五种不同的方法来计算平面的曲面法线.算法/代码来自互联网上的各种论坛.
import numpy as np
import scipy.optimize
def fitPLaneLTSQ(XYZ):
# Fits a plane to a point cloud,
# Where Z = aX + bY + c ----Eqn #1
# Rearanging Eqn1: aX + bY -Z +c =0
# Gives normal (a,b,-1)
# …Run Code Online (Sandbox Code Playgroud) 我有一组从表面网格获得的点(形式为x1,y1,z1 ... xn,yn,zn).我想通过最小化正交距离找到最适合这些点的3D平面.x,y,z坐标是独立的,即我想获得平面方程Ax + By + Cz + D = 0的系数A,B,C,D.
获得A,B,C,D的算法是什么?
我试图将一架飞机安装到一组点云上.我尝试使用Point Cloud Library(PCL)并且效果很好.我需要知道的是如何获得拟合平面的系数a,b,c(ax + by + cz + 1 = 0).有任何直截了当的方式吗?我从这里得到了一些见解:3D最小二乘平面