3D の B スプラインを拡張して、3 つのパラメーターのスカラー関数を生成できます。
B スプラインは 64 のコントロール ポイント (4X4X4 ボクセル近傍内のデータ値) によって定義され、t、s、r が x、y、z 方向の距離を表す 8 つの中央ボクセルによって囲まれた単位立方体の内部で評価されます。それぞれ。
上記のメモに基づいて、Matlab で関数を作成しました。
function [TO]=bspline_matrixform(I,valr,vals,valt,i,j,k)
% I : Input
% i : Index of grid point in x direction
% j : Index of grid point in y direction
% k : Index of grid point in z direction
r = valr; % Val r value in the grid
s = vals; % Val s value in the grid
t = valt; % Val t value in the grid
M = 1/6*[-1 3 -3 1;3 -6 3 0;-3 0 3 0;1 4 1 0];
R = [ r^3 r^2 r 1]; % 0<=r<=1
S = [ s^3 s^2 s 1]; % 0<=s<=1
T = [ t^3 t^2 t 1]; % 0<=w<=1
index = 1;
QK = zeros(4,1);
for ki= k-1:k+2
Q = QCalculation(I,i,j,ki);
QK(index) = S*M*Q*M'*T';
index = index+1;
end
TO = R*M*[QK(1) QK(2) QK(3) QK(4)]';
end
function Q = QCalculation (I,i,j,k)
Q = [I(i-1,j-1,k) I(i,j-1,k) I(i+1,j-1,k) I(i+2,j-1,k)
I(i-1,j,k) I(i,j,k) I(i+1,j,k) I(i+2,j,k)
I(i-1,j+1,k) I(i,j+1,k) I(i+1,j+1,k) I(i+2,j+1,k)
I(i-1,j+2,k) I(i,j+2,k) I(i+1,j+2,k) I(i+2,j+2,k)];
end
関数が true の場合、関数をどのように呼び出す必要がありますか? r、s、tの計算方法がわかりません。
PS: この関数を実行するには、3D にコントロール ポイントと ngrid があります。たとえば、XY の視点から見ると、コントロール ポイント (青) とグリッド (赤) は次のようになります。
上記のメモに基づいて、s、r、および t は、上の図のコントロール ポイントとグリッド間の距離値ですか?
誰かが私が正しい道を進んで理解しているかどうかを知るのを手伝ってくれますか? 3D Bspline で役立つ別の方法やサンプル コードはありますか?
PS: 画像レジストレーション (3d MRI) を行っています。コントロール ポイントは、レジストレーション結果のモーション フィールドです。登録をよりスムーズにするために B-Spline を適用する必要があります。
どうもありがとう