0

我有一堆图像(大约 180 张),每张图像上都有 2 颗星(只是基本注释)。因此,最初提供了两颗星的位置 (x,y)。所有这些图像的尺寸都是固定不变的。

图像之间的“距离”约为 1 o,原点是每个 2D 图像的中心(宽度/2,高度/2)。请注意,如果将其绘制出来并很好地插值,星星实际上会形成一个不规则形状 的环。

在此处输入图像描述

红色虚线圆圈和紫色虚线圆圈赋予 3D 空间更强烈的气味和 2D 图像的排列(像扇子一样)。它还表明每个切片相距约 1 o

  1. 使用 2D 图像中提供的 (x,y),知道每个图像相距约 1 o ,如何在 3d 空间中获得对应的 (x,y,z) ?

  2. 我知道 MATLAB 具有 3D 绘图功能,我应该如何实现上述场景的解决方案?(不幸的是,我很少有使用 MATLAB 绘制 3D 的经验)

解决方案

根据接受的答案,我进一步查找:球坐标系。基于 phi、rho 和 theta 的计算,我可以毫无问题地重建环。希望这可以帮助任何有类似问题的人。

我还在这里记录了解决方案。我希望它也可以帮助那里的人: http: //gray-suit.blogspot.com/2011/07/spherical-coordinate-system.html

4

4 回答 4

1

给定二维坐标 (x,y),只需添加角度 A 作为第三个坐标:(x,y,A)。然后你有3D。

如果您想让注释在 3D 中在半径为 r 的圆上移动,您可以计算:您可以使用 (r*cos(phi),r*sin(phi),0) 在 XY 平面中绘制一个圆并使用 3x3 旋转矩阵将其旋转到您需要的方向。

于 2011-07-06T08:42:53.600 回答
1

我相信 y 坐标在 3D 中保持不变,因此我们可以将其视为在自上而下查看时将 2D x 和图像角度转换为 x 和 z。

2D x 坐标是与 3D 空间中原点的距离(自上而下查看)。图像角度是该点相对于 3D 空间中的 x 轴的角度(自上而下查看)。因此,x 坐标(与原点的距离)和图像角度(自上而下查看的角度)构成了 3D 空间中的 x 和 z 坐标(如果自上而下查看,则为 x 和 y)。

那是极坐标。阅读如何将极坐标转换为笛卡尔坐标以获得 3D x 和 z 坐标。

我的数学也不是很好,这就是我的目标:

3D coords = (2Dx * cos(imageangle), 2Dy, 2Dx * sin(imageangle))

于 2011-07-06T08:54:50.503 回答
1

您不清楚您的旋转是围绕哪个轴进行的。但是,我的回答适用于一般旋转轴。

首先,将您的点放在 XY 平面上的 3D 空间中。这意味着这些点的 z 坐标为 0。然后,围绕所需轴应用所需角度的 3D 旋转 - 在您的示例中,它是 1 度旋转。您可以自己计算变换矩阵(应该不会太难,谷歌“3D旋转矩阵”或类似的关键字)。但是,MATLAB 使用该viewmtx函数使其变得更容易,它为您提供 4x4 旋转矩阵。额外的(第四个)维度取决于您指定的投影(它就像一个比例系数),但为了简单起见,我会让 MATLAB 使用其默认投影 - 您可以在 MATLAB 文档中阅读它。

因此,为了使情节更清晰,我假设四个点是位于 xy 平面上的正方形的顶点 ( A(1,1), B(1,-1), C(-1,-1), D(1,-1))。

az = 0;     % Angle (degrees) of rotation around the z axis, measured from -y axis.
el = 90;    % Angle (degrees) of rotation around the y' axis (the ' indicates axes after the first rotation).
x = [1,-1, -1, 1,1]; y = [1, 1, -1, -1,1]; z = [0,0, 0, 0,0];     % A square lying on the X-Y plane.
[m,n] = size(x);
x4d = [x(:),y(:),z(:),ones(m*n,1)]';    % The 4D version of the points.
figure
for el = 90 : -1 :0 % Start from 90 for viewing directly above the X-Y plane.
    T = viewmtx(az, el);
    x2d = T * x4d;                            % Rotated version of points.
    plot3 (x2d(1,:), x2d(2,:),x2d(3,:),'-*'); % Plot the rotated points in 3D space.
    grid
    xlim ([-2,2]);
    ylim ([-2,2]);
    zlim([-2,2]);
    pause(0.1)
end
于 2011-07-06T09:06:35.603 回答
0

如果您可以使用模型描述您对真实物理系统(如双星系统)的观察,则可以使用粒子过滤器。

当只有一个观测方向可用时,这些过滤器被开发用于定位海上的一艘船。一个跟踪船并估计它在哪里以及它移动的速度,跟踪的时间越长,估计就越好。

于 2011-07-06T08:29:01.693 回答