Фон
Я хочу выровнять набор фигур, представленных ориентирами (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 ориентира, которые я не использовал для определения трансформации).
Буду признателен за обсуждение