Как сопоставить точку (x, y) на двухмерном изображении с трехмерным пространством?(иллюстрация предоставлена) - PullRequest
0 голосов
/ 06 июля 2011

У меня есть стопка изображений (их около 180), и на каждом изображении 2 звезды (только основные аннотации) .Следовательно, положение (x, y) двух звезд предоставляется изначально.Размеры всех этих изображений фиксированы и постоянны.

«Расстояние» между изображениями составляет около 1 o с началом координат в центре (ширина / 2, высота / 2)каждого отдельного 2D-изображения.Обратите внимание, что, если это будет правильно построено и интерполировано, звезды фактически сформируют кольцо неправильной формы.

Enter image description here

Пунктирный красный круг и пунктирный фиолетовый круг предназначены для того, чтобы придать более сильный запах трехмерному пространству и расположению 2D-изображений (например, вентилятора).Это также указывает на то, что каждый срез составляет приблизительно 1 o друг от друга .

  1. С предоставленными (x, y), которые появились в 2D изображении, какВы получаете соответствующие (x, y, z) в трехмерном пространстве, зная, что каждое изображение находится на расстоянии 1 o друг от друга?

  2. Я знаю, что в MATLAB было трехмерное построениевозможности, как я должен идти о реализации решения вышеупомянутого сценария?(К сожалению, у меня очень мало опыта в построении 3D с помощью MATLAB)

SOLUTION

Основываясь на принятом ответе, я посмотрел немного дальшесферическая система координат.Основываясь на вычислении phi, rho и theta, я смог восстановить кольцо без проблем.Надеюсь, это поможет любому с подобными проблемами.

Я также задокументировал решение здесь.Я надеюсь, что это тоже кому-то поможет: http://gray -suit.blogspot.com / 2011/07 / spherical-координат-system.html

Ответы [ 4 ]

1 голос
/ 06 июля 2011

Из вашего вопроса не ясно, вокруг какой оси происходит ваше вращение.Однако мой ответ верен для общей оси вращения.

Сначала поместите ваши точки в трехмерное пространство, лежащее на плоскости XY.Это означает, что точки имеют координату 0 z.Затем примените трехмерное вращение нужного угла вокруг желаемой оси - в вашем примере это вращение на один градус.Вы можете рассчитать матрицу преобразования самостоятельно (не должно быть слишком сложно, Google "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
1 голос
/ 06 июля 2011

Учитывая 2D координаты (x, y), просто добавьте угол A в качестве третьей координаты: (x, y, A).Тогда у вас есть 3D.

Если вы хотите, чтобы аннотации двигались по кругу радиуса r в 3D, вы можете просто рассчитать: вы можете использовать (r * cos (phi), r * sin (phi),0), который рисует круг в плоскости XY и поворачивает его с матрицей вращения 3x3 в нужную вам ориентацию.

1 голос
/ 06 июля 2011

Я полагаю, что координата y остается неизменной для 3D, поэтому мы можем рассматривать это как преобразование 2D x и угла изображения в x и z при просмотре сверху вниз.

2D координата x - это расстояние от начала координат в трехмерном пространстве (если смотреть сверху вниз). Угол изображения - это угол, который точка делает относительно оси x в трехмерном пространстве (если смотреть сверху вниз). Таким образом, координата x (расстояние от orign) и угол изображения (угол при просмотре сверху вниз) составляют координаты x и z в трехмерном пространстве (или x и y, если смотреть сверху вниз).

Это полярная координата . Прочтите, как преобразовать полярные в декартовы координаты, чтобы получить 3D-координаты x и z.

Я тоже не очень разбираюсь в математике, вот мой путь:

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

0 голосов
/ 06 июля 2011

Если вы можете описать свои наблюдения реальной физической системы (например, двойной звездной системы) с помощью модели, вы можете использовать фильтры частиц.

Эти фильтры были разработаны для определения местоположения корабля в море, когда было доступно только одно направление наблюдения. Каждый отслеживает корабль и оценивает, где он находится и как быстро он движется, чем дольше он следует, тем лучше становятся оценки.

...