背景
我要相对于平均形状(也是3D)对齐由地标(3D点)表示的一组形状。
平均形状的尺寸为10x3,其中10是形状中的界标数量,而3是尺寸。
如果要使用所有10个界标来确定刚性变换,则可以使用Matlab的[d,Z,transform] = procrustes(X,Y)
函数,它可以正常工作。
但是,我不想使用所有10个界标来确定转换,因为这些不稳定因素(即我不希望不稳定确定转换)。
问题:我想使用地标1-2和5-10来确定转换,但是不知道如何使用procrustes
函数进行设置。
我不希望使用地标3和4来确定转换。
这是我尝试过的。该代码以Matlab提供的procrustes
函数的演示为基础
% 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;
您能说明一下这是否对您有意义吗?我只是将不需要的界标设为零-但我认为这可能会使转换变得混乱。
替代我也可以使Y的界标3和4等于零,仅用于确定转换的步骤,这对我来说更有意义。
请注意,确定变换后,我想将变换应用于所有10个界标(包括我未用于确定变换的2个界标)。
不胜感激的讨论