影像變形MLSD2DTransform---matlab自帶的函式,其中內嵌的子函式PrecomputeWeights預先計算了權重,對三維資料可以使用

lixiaohu0524發表於2020-12-03

clear all;
mesh_source = ‘C:\Users\lixiaohu\Desktop\101028\101028_l\TOOTH_0.obj’;
[v,F] = load_mesh(mesh_source);
v=v(1:16,:)
v=v’
size(v,1)

p = [-1.0843 -1.2803 -1.5304 -1.4777 ;
-3.1908 -3.1335 -3.0674 -3.0253;
-3.1908 -3.1335 -3.0674 -3.0253];
repmat(p(:,1),[1,size(v,2)])-v

w=PrecomputeWeights(p,v,2)
%
% repmat(p(:,1),[1,size(v,1)])-v’

Pstar = PrecomputeWCentroids(p,w);

M1 = v - Pstar;

a = zeros(1,size(Pstar,2));
b = a;
d = a;

Phat = cell(1,size(p,2));
for i=1:size(p,2)
Phat{i} = repmat(p(:,i),[1,size(Pstar,2)])-Pstar;
a = a + w(i,:).*Phat{i}(1,:).^2;
b = b + w(i,:).*Phat{i}(1,:).*Phat{i}(2,:)
d = d + w(i,:).*Phat{i}(2,:).^2
end


執行結果
Pstar = PrecomputeWCentroids(p,w)

Pstar =

  -1.3445      -1.3447      -1.3442       -1.344      -1.3444      -1.3447      -1.3449      -1.3457      -1.3458      -1.3461      -1.3454      -1.3446      -1.3441      -1.3436      -1.3438      -1.3435
  -3.1034      -3.1033      -3.1035      -3.1036      -3.1034      -3.1033      -3.1033       -3.103      -3.1029      -3.1029      -3.1031      -3.1033      -3.1035      -3.1037      -3.1036      -3.1037
  -3.1034      -3.1033      -3.1035      -3.1036      -3.1034      -3.1033      -3.1033       -3.103      -3.1029      -3.1029      -3.1031      -3.1033      -3.1035      -3.1037      -3.1036      -3.1037

M1 = v - Pstar

M1 =

   2.3105       2.2425       2.3533       2.4221       2.3424       2.2746       2.2249        2.038       2.0007       1.9343       2.0629       2.2246       2.3421       2.4737       2.4552       2.5385
   3.9956       4.0692       3.9985       3.9137       3.9273       3.9565       4.0432       4.1844       4.2351        4.283       4.1876       4.0763       4.0164        3.955       3.9367       3.8959
   3.8089       3.7174       3.6999       3.8551       3.9683       4.0005       3.8981       4.0514       3.9442       3.8814       3.6956       3.5969       3.5901       3.6063       3.7114       3.7918

repmat(p(:,i),[1,size(Pstar,1)])

ans =

  -1.0843      -1.0843      -1.0843
  -3.1908      -3.1908      -3.1908
  -3.1908      -3.1908      -3.1908

Phat{i} = repmat(p(:,i),[1,size(Pstar,2)])-Pstar

Phat =是一個結構體,用來承載與P*這個重心的距離差,即去重心化後的座標。

1×4 cell 陣列

{3×16 double}    {0×0 double}    {0×0 double}    {0×0 double}

a = a + w(i,:).*Phat{i}(1,:).^2

a =

5.2061e-05 5.3246e-05 5.3843e-05 5.1402e-05 4.9685e-05 4.9209e-05 5.0118e-05 4.6011e-05 4.7441e-05 4.8313e-05 5.3087e-05 5.6067e-05 5.6078e-05 5.5263e-05 5.3602e-05 5.1548e-05

b = b + w(i,:).*Phat{i}(1,:).*Phat{i}(2,:)

b =

-1.7489e-05 -1.7888e-05 -1.8088e-05 -1.7267e-05 -1.669e-05 -1.6531e-05 -1.6837e-05 -1.5457e-05 -1.5938e-05 -1.6232e-05 -1.7836e-05 -1.8837e-05 -1.884e-05 -1.8564e-05 -1.8006e-05 -1.7315e-05

相關文章