Анализ прокрустов с выбранными ориентирами - PullRequest
0 голосов
/ 27 декабря 2018

Фон

Я хочу выровнять набор фигур, представленных ориентирами (3D-точки), относительно средней формы (также 3D).

Среднееформа имеет размеры 10x3, где 10 - это число ориентиров в форме, а 3 - размеры.

Если я хочу использовать все 10 ориентиров для определения жесткого преобразования, я могу использовать функцию Matlab [d,Z,transform] = procrustes(X,Y), и онаработает нормально.

Однако я не хочу использовать все 10 ориентиров для определения преобразования, поскольку они нестабильны (то есть я не хочу, чтобы unstable определял преобразование).

Вопрос : Я хочу использовать ориентиры 1-2 и 5-10 для определения преобразования, но не знаю, как настроить это с помощью функции procrustes.

Я не хочу, чтобы ориентиры 3 и 4 использовались для определения преобразования.

Вот то, что я пробовал.Код основан на демонстрации функции procrustes, заданной Matlab

% X and Y are 10x3 matrices, where X = reference shape and Y = Target shape. | is the transformed shape
rng('default')
n = 10;  
X = normrnd(0,1,[n 3]); % Reference
S = [0.5 -sqrt(3)/2; sqrt(3)/2 0.5];
Y = normrnd(0.5*X*S+2,0.05,n,3); % Target
[d,Z1,transform] = procrustes(X,Y);

% My first solution (???) is to keep 3rd and 4th rows of the matrix as zero, since these are unstable points for me.

X_red = X;
X_red(3:4,:) = 0; % New reference
[d,Z2,New_transform] = procrustes(X_red,Y);
New_Transformed = transform.b*Y*transform.T + transform.c;

Не могли бы вы пролить свет на то, имеет ли это смысл для вас? Я просто делаю ненужные ориентиры равными нулю- но я думаю, что это может испортить трансформацию.

Альтернатива Я могу сделать ориентиры 3 и 4 равными нулю и для Y, просто для шага определения трансформации, что имеет для меня больше смысла.

Обратите вниманиечто после определения преобразования я хочу применить преобразование ко всем 10 ориентирам (включая 2 ориентира, которые я не использовал для определения трансформации).

Буду признателен за обсуждение

...