2

3D 中的 B 样条可以扩展以产生三个参数的标量函数:

在此处输入图像描述

B 样条由 64 个控制点(4X4X4 体素邻域内的数据值)定义,并在由八个中心体素界定的单位立方体内进行评估,其中 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。

PS:要运行这个功能,我有 3D 的控制点和 ngrid,例如从 XY 的角度来看,我的控制点(蓝色)和网格(红色)是这样的:

在此处输入图像描述

根据以上注释,s,r 和 t 是控制点与上图中网格之间的距离值吗?

任何人都可以帮助我找出我是否通过正确的方式和理解?任何可以帮助我在 3D Bspline 中的替代方式或示例代码?

PS:我正在做图像配准(3d MRI),我的控制点是我的配准结果的运动场。我需要应用 B-Spline 以使我的注册更加顺利。

非常感谢

4

0 回答 0