在rgl中创建多个椭球以显示位置值的标准偏差

时间:2017-07-17 12:10:12

标签: r ellipse rgl photogrammetry

我有一个包含13个摄像头的数据集,每个摄像头位置重建了5次。我已将测量值汇总为每个与摄像机位置[X,Y,Z,Omega,Phi,Kappa]相关的6个变量的平均值和标准偏差。我想根据XYZ平均值绘制摄像机的位置,然后根据每个XYZ值的标准偏差值为每个位置创建一个椭圆体。 (就像一个误差条,这也是可以接受的,但我的第一个目标是创建彩色椭圆体,显示最大方差或误差的方向......对于这个例子,我使用的是标准偏差值。)

我使用rgl绘制每个相机的平均位置,但我不知道如何通过另一个矢量或列的值更改每个绘制点的形状。

位置数据汇总到这里的平均值

pos.mean

PhotoID           X           Y        Z
DSC_7120 -269.697307 -359.608029 2390.520
DSC_7121 -323.537075 -312.080524 2388.374
DSC_7122 -381.084880 -259.807930 2386.175
DSC_7123 -434.500687 -212.438305 2384.080
DSC_7707 -297.275547  -12.954589 2352.626
DSC_7708 -238.105775  -61.327624 2353.830
DSC_7709 -178.910977 -110.464992 2354.912
DSC_7710 -124.471751 -155.745775 2356.300
DSC_7711  -65.107734 -205.164167 2358.239
DSC_7794   -2.828331    9.167357 2308.687
DSC_7795  -61.841640   56.621020 2307.068
DSC_7796 -118.768896  104.237722 2306.107
DSC_7797 -176.829418  150.560971 2304.887

,标准偏差值为:

pos.sd

PhotoID         X         Y            Z
DSC_7120 0.1507733 0.3651178 0.0018517456
DSC_7121 0.1508845 0.3633876 0.0005815413
DSC_7122 0.1512489 0.3671259 0.0021316858
DSC_7123 0.1498382 0.3667440 0.0050629647
DSC_7707 0.1495099 0.3600409 0.0016483624
DSC_7708 0.1470677 0.3583582 0.0014911045
DSC_7709 0.1458569 0.3596208 0.0021194229
DSC_7710 0.1396953 0.3604535 0.0033336396
DSC_7711 0.1414401 0.3620422 0.0047287867
DSC_7794 0.1442061 0.3691425 0.0056096078
DSC_7795 0.1516369 0.3688717 0.0016928413
DSC_7796 0.1565440 0.3672701 0.0038089509
DSC_7797 0.1547617 0.3726132 0.0079183205

目前基本的3D绘图可以这样查看

library(rgl)
with(smry.mean, 
     plot3d(X, Y, Z,
            type="s"))

有没有办法将点更改为彩色椭圆体,其中椭圆体的尺寸和颜色是根据每个点的标准偏差值构建的?

谢谢

1 个答案:

答案 0 :(得分:0)

您可以使用ellipse3d功能执行此操作,但您必须一次绘制一个椭圆体。例如,

for (id in pos.mean$PhotoID) 
  ellipse3d(diag(pos.sd[id, c("X", "Y", "Z")])^2, centre = pos.mean[id, c("X", "Y", "Z")], col = "red", t = 10)

您希望使用该t参数来适当地设置比例:与均值范围相比,您的SD值非常小,因此t = 10可能只是无形地给出小椭圆体。如果是这样,请尝试更大的价值。

另一件事:如果你只知道SD值,你就不会得到最大方差或误差的方向"。这可能需要一个完整的协方差矩阵,而不是我构造的对角矩阵。