WedX - журнал о программировании и компьютерных науках

Как создать трехмерный линейный объект в MatLab из координат xyz, чтобы его можно было использовать в анализе Прокруста?

У меня есть набор данных, состоящий из координат x, y и z, которые я рисую для создания трехмерной линии. Я хочу выполнить анализ Прокруста, чтобы найти сходство между формой этой трехмерной линии и другой формой по умолчанию. Когда я пытаюсь использовать какие-либо функции анализа формы или функции Procrustes, это дает мне недопустимую ошибку дескриптора на вводе 3D-графика, который я создал для его хранения, то есть «myLine». Как я могу преобразовать этот трехмерный график координат в пригодный для использования объект для Прокруста или какой-либо другой функции?

Трехмерная линия, созданная из координат в коде ниже.

myLine = plot3(GPS(:,8),GPS(:,9),GPS(:,10))

Ниже приведена функция анализа формы, с которой я пытаюсь работать.

function [f,g]=ShapeAnalysis(f,g)
% SHAPEANALYSIS(F,G) Plots the parameterised curves before and after
% each stage of translating, scaling and aligning. Outputs are
% parameterised curves ready for Procustes shape analysis.

LW = 'LineWidth'; FS = 'FontSize';
% Plot orignal
subplot(2,2,1)
plot(f,'r',LW,2), hold on, axis equal, plot(g,'k',LW,2)
title('Orignal',FS,16)

% Translate mean to 0.
f = f-mean(f); g = g-mean(g);
subplot(2,2,2)
plot(f,'r',LW,2), hold on, axis equal, plot(g,'k',LW,2)
title('After translation',FS,16)

% Scale so RMSD is 1.
f = f/norm(f); g = g/norm(g);
subplot(2,2,3)
plot(f,'r',LW,2), hold on, axis equal, plot(g,'k',LW,2)
title('After scaling',FS,16)

% Align major axis.
subplot(2,2,4)
% Find argument of major axis.
[~,fxmax]=max(abs(f)); [~,gxmax]=max(abs(g));
rotf=angle(f(fxmax)); rotg=angle(g(gxmax));
% Rotate both so major axis lies on the +ve real axis.
x = chebfun('x',[0,2*pi]);
f = exp(-1i*rotf)*f(mod(x+fxmax,2*pi));
g = exp(-1i*rotg)*g(mod(x+gxmax,2*pi));
plot(f,'r',LW,2), hold on, axis equal, plot(g,'k',LW,2)
title('After aligning',FS,16), hold off

end

редактировать: я думаю, проще сказать, как я могу ссылаться на линию, созданную с одной переменной, так что, если я написал «сюжет (myLine)», где myLine = линия, созданная plot3 (GPS (:, 8), ...), он создаст ту же строку. Таким образом, я могу передать одну переменную функции сравнения. (чтобы было ясно, у меня нет проблем с построением графика линии, я только манипулирую ею только со ссылкой на координаты и без уравнения линии)

edit: я пытаюсь передать myLine в анализ формы, а также, скажем, уравнение для круга, чтобы сравнить, насколько близко myLine находится ко второй записи. Итак, я ввожу:

>>myLine = plot3(GPS(:,8),GPS(:,9),GPS(:,10))
>>ShapeAnalysis(myLine,circle(0,0,1))

После ввода этого я получаю следующую ошибку:

Error using plot
Invalid handle.

Error in ShapeAnalysis (line 9)
    plot(f,'r',LW,2), hold on, axis equal, plot(g,'k',LW,2)

Надеюсь, это немного прояснит мой вопрос.


Ответы:


1

Вы почти ответили на свой вопрос: "Как я могу преобразовать этот трехмерный график координат в пригодный для использования объект...?" Как и любой объект, вам нужна ссылка на него для манипуляции:

myLine = plot3(GPS(:,8),GPS(:,9),GPS(:,10))

Теперь вы можете обойти myLine и посмотреть, что вы можете с ней сделать.

03.05.2017
  • К сожалению, это не работает для меня. Это дает мне недопустимую ошибку дескриптора, когда я пытаюсь использовать этот метод. Это ошибка с моей стороны? Я использую функцию, которую я предоставил, и передаю ей «myLine» вместе с другой строкой, но это дает ошибку дескриптора, о которой я упоминал в вопросе. 04.05.2017
  • На основе вашего редактирования. Когда вы хотите перестроить свою линию, вы должны придать ей свойства, которые вы ищете. Например, myLine имеет XData, YData и ZData, которые вы хотели бы построить. В зависимости от того, с какой версией Matlab вы работаете, когда вы хотите воспроизвести график, используйте либо: plot3(myLine.XData, myLine.YData, myLine.ZData), либо plot3(get(myLine, 'XData'), get(myLine, 'YData '), получить(myLine, 'ZData')). Загляните в ООП, если вас это смущает. (mathworks.com/help/matlab/object-Oriented-programming.html ) 04.05.2017
  • Я могу отлично воспроизвести прямо сейчас, мне просто нужно выяснить, как получить объект, который примет вышеуказанная функция. Нужно ли мне преобразовать его в уравнение прямой? 04.05.2017
  • Было бы полезно для вас опубликовать ошибки, которые вы получаете. Кроме того, если вы приведете конкретные (код) примеры того, что вы пробовали при размещении здесь вопросов, это поможет ответить на ваш вопрос. Если вы пытаетесь передать myLine в ShapeAnalysis, вам просто нужно обновить аргументы, которые он принимает, и передать их в обычном режиме. (Не уверен, что это ваш вопрос). 04.05.2017
  • Извините, добавлена ​​правка. Да, я пытаюсь передать эту 3D-линию вместе с другой линией для сравнения в приведенной выше функции анализа формы. 04.05.2017
  • Хорошо plot3() создает трехмерный линейный объект. plot() также является встроенной функцией, которая создает объект 2D-линии, поэтому бессмысленно передавать объект 3D-линии. Даже если бы myLine был 2D-объектом, plot() принимает данные X и Y, а не дескриптор объекта. Если вы просто хотите сравнить данные X и Y (исключая данные Z), вы должны передать plot(get(f, 'XData'), get(f, 'YData')). Почему бы вам снова не использовать plot3()? Я думаю, что было бы в ваших интересах поставить точку останова на этой строке. Посмотрите, что держит 'f'. Он будет иметь все данные объекта 3D-линии. 04.05.2017
  • Вот страница документа с этими свойствами mathworks.com/help/matlab/ ref/chartline-properties.html 04.05.2017
  • ваша строка 9 будет выглядеть так для случая 3D: plot3(get(f, 'XData'), get(f, 'YData'), get(f, 'ZData'), 'r', LW, 2) 04.05.2017
  • Новые материалы

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

    Работа с цепями Маркова, часть 4 (Машинное обучение)
    Нелинейные цепи Маркова с агрегатором и их приложения (arXiv) Автор : Бар Лайт Аннотация: Изучаются свойства подкласса случайных процессов, называемых дискретными нелинейными цепями Маркова..

    Crazy Laravel Livewire упростил мне создание электронной коммерции (панель администратора и API) [Часть 3]
    Как вы сегодня, ребята? В этой части мы создадим CRUD для данных о продукте. Думаю, в этой части я не буду слишком много делиться теорией, но чаще буду делиться своим кодом. Потому что..

    Использование машинного обучения и Python для классификации 1000 сезонов новичков MLB Hitter
    Чему может научиться машина, глядя на сезоны новичков 1000 игроков MLB? Это то, что исследует это приложение. В этом процессе мы будем использовать неконтролируемое обучение, чтобы..

    Учебные заметки: создание моего первого пакета Node.js
    Это мои обучающие заметки, когда я научился создавать свой самый первый пакет Node.js, распространяемый через npm. Оглавление Глоссарий I. Новый пакет 1.1 советы по инициализации..

    Забудьте о Matplotlib: улучшите визуализацию данных с помощью умопомрачительных функций Seaborn!
    Примечание. Эта запись в блоге предполагает базовое знакомство с Python и концепциями анализа данных. Привет, энтузиасты данных! Добро пожаловать в мой блог, где я расскажу о невероятных..

    ИИ в аэрокосмической отрасли
    Каждый полет – это шаг вперед к великой мечте. Чтобы это происходило в их собственном темпе, необходима команда астронавтов для погони за космосом и команда технического обслуживания..


    Для любых предложений по сайту: [email protected]