3D中的B样条可以扩展为产生三个参数的标量函数:
B样条由64个控制点(4X4X4体素邻域内的数据值)定义,并在由8个中心体素限定的单位立方体内进行评估,其中t,s和r表示x,y中的距离和z方向分别。
根据以上说明,我在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
如果我的功能是真的,我该如何调用我的功能呢?我不知道如何计算r,s和t。
P.S:运行此功能,我有3D控制点和ngrid,例如从X-Y的角度来看,我的控制点(蓝色)和网格(红色)是这样的:
根据以上说明,s,r和t是上图中控制点和网格之间的距离值?
任何人都可以帮助我找出我正确的方式和理解吗?任何替代方式或示例代码可以帮助我在3D Bspline?
P.S:我正在进行图像配准(3D MRI),我的控制点是我的注册结果的运动场。我需要应用B-Spline来使我的注册更加流畅。非常感谢