Как вы сопоставляете точку (x, y) на 2D-изображении с 3D-пространством? (иллюстрация предоставлена)

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

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

Введите здесь описание изображения

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

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

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

РЕШЕНИЕ

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

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


person Gary Tsui    schedule 06.07.2011    source источник
comment
Вопрос не ясен. Это видео двух звезд в небе?   -  person whoplisp    schedule 06.07.2011
comment
нет, звезды - это просто основные аннотации.   -  person Gary Tsui    schedule 06.07.2011
comment
Я все еще не понимаю. Может быть, объясните, чего вы пытаетесь достичь.   -  person whoplisp    schedule 06.07.2011
comment
Могу я узнать, какую часть вы не понимаете, я сделаю все возможное, чтобы объяснить вам это. В принципе, я хочу построить аннотации на 2D-изображении в 3D.   -  person Gary Tsui    schedule 06.07.2011
comment
Возможно, это лучше подходит для математической области обмена стеками (хотя и не уверен). Как я представляю проблему, у вас есть 3D-объект (выглядит как неправильное кольцо). У вас есть много изображений с точками, определяющими, где на изображении было бы это кольцо, если бы изображение было поперечным сечением кольца. Изображения, просматриваемые сверху вниз, нарезают объект так же, как вы разрезаете пиццу, если вам нужно разделить ее между примерно 360 людьми.   -  person George Duckett    schedule 06.07.2011
comment
@ Джордж Дакетт, правильно, в поперечном сечении это было бы похоже на кольцо в 2D.   -  person Gary Tsui    schedule 06.07.2011


Ответы (4)


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

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

Это полярная координата. Узнайте, как преобразовать полярные координаты в декартовы, чтобы получить трехмерные координаты x и z.

Я тоже не силен в математике, вот что я делаю:

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

person George Duckett    schedule 06.07.2011
comment
спасибо за ответ, вы правы насчет полярных координат. чтобы найти точку на сфере, это x = r sin (theta) cos (phi), y = r sin (theta) sin (phi) и z = r cos (theta). Тем не менее, мне трудно соединить их вместе, как вы уже можете сказать, я очень слаб в математике. - person Gary Tsui; 06.07.2011

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

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

person whoplisp    schedule 06.07.2011
comment
будет ли это косинусом? синус? и как мне получить это А из всей данной информации, которую я дал в исходном сообщении? - person Gary Tsui; 06.07.2011
comment
Вы должны тщательно пересмотреть свой вопрос. - person whoplisp; 06.07.2011
comment
Могу ли я узнать, какую часть вы не понимаете, пожалуйста, дайте мне знать, какую часть вы хотите, чтобы я пересмотрел, и я сделаю все возможное, чтобы сделать ее лучше. Благодарю. - person Gary Tsui; 06.07.2011
comment
привет, whoplisp, спасибо за ваши усилия, но в своем вопросе я уже говорил, что у меня есть стопка изображений, выровненных и упорядоченных, как показано, и для каждого изображения есть две аннотации. Каждое изображение находится на расстоянии около 1 градуса друг от друга. Теперь я хочу только сопоставить их с трехмерным пространством. - person Gary Tsui; 06.07.2011
comment
Когда вы говорите «стек», я думаю, что вы переместили z (потому что у меня есть опыт работы с микроскопией). Затем вы говорите, что повернули изображение. Вы можете просто сказать, что угол, который вы повернули, эквивалентен движению по z для ваших целей построения графика и нанести две точки аннотации на трехмерный график с углом, являющимся координатой z. Пожалуйста, поймите, что это трудно понять из вашего вопроса. Я оглянулся на вашу историю, и похоже, что вы сейчас пытаетесь построить точки моста. - person whoplisp; 06.07.2011

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

Сначала поместите свои точки в трехмерное пространство, лежащее в плоскости X-Y. Это означает, что точки имеют координату z 0. Затем примените 3D-поворот на нужный угол вокруг нужной оси — в вашем примере это поворот на один градус. Вы можете рассчитать матрицу преобразования самостоятельно (это не должно быть слишком сложно, погуглите «3D-матрица вращения» или аналогичные ключевые слова). Однако MATLAB упрощает задачу, используя функцию viewmtx, которая дает вам матрицу вращения 4x4. Дополнительное (четвертое) измерение зависит от указанной вами проекции (оно действует как коэффициент масштабирования), но для простоты я позволю MATLAB использовать проекцию по умолчанию — вы можете прочитать об этом в документации MATLAB.

Итак, чтобы сделать график более ясным, я предполагаю четыре точки, которые являются вершинами квадрата, лежащего на плоскости x-y (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
person Itamar Katz    schedule 06.07.2011

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

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

person whoplisp    schedule 06.07.2011
comment
звезда - это просто базовый образец аннотации - person Gary Tsui; 06.07.2011
comment
спасибо за идею, но в моем сценарии я хочу нанести аннотацию (изначально в 2D-пространстве) только в 3D-пространстве. - person Gary Tsui; 06.07.2011