💥💥💞💞欢迎来到本博客❤️❤️💥💥
🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。
⛳️座右铭:行百里者,半于九十。
📋📋📋本文目录如下:🎁🎁🎁
目录
💥1 概述
文献来源:
使用FORECAST进行MRI模拟:基于傅立叶的共振偏差估算在稳态下的估算。FORECAST是模拟稳态MRI中共振偏差效应的快速替代方法,用于模拟稳态脉冲序列,通过使用多个快速傅立叶变换来评估信号方程,目前可以包括质子密度、T2和共振偏差效应。目前,该模拟仅限于笛卡尔脉冲序列,但我们计划增加对非笛卡尔脉冲序列的支持。
包括的示例:
- 模拟空气和金属周围的敏感性伪影。
- 水脂位移的模拟(即化学位移)。
- 模拟包括T1、T2、敏感性和水脂位移的brainweb数据集(需要Matlab R2015A或更高版本才能自动下载数据集)。
FORECAST是模拟稳态MRI中共振偏差效应的快速替代方法,用于模拟稳态脉冲序列,通过使用多个快速傅立叶变换来评估信号方程,目前可以包括质子密度、T2和共振偏差效应。目前,该模拟仅限于笛卡尔脉冲序列,但我们计划增加对非笛卡尔脉冲序列的支持。
包括的示例:
- 模拟空气和金属周围的敏感性伪影。
- 水脂位移的模拟(即化学位移)。
- 模拟包括T1、T2、敏感性和水脂位移的brainweb数据集(需要Matlab R2015A或更高版本才能自动下载数据集)
目的:通过使用快速傅里叶变换来加速稳态梯度回波MRI中离共振伪影的模拟,并展示其在金属物体定位中的适用性。
理论和方法:通过利用稳态脉冲序列的重复特性,可以使用快速傅里叶变换来计算MR信号。基于这一原理,设计了一种快速模拟离共振伪影的方法。该方法经过对布洛赫模拟和MRI扫描的验证。通过将其应用于基于模板匹配的金属物体定位,如钛制圆柱体、氧化锆膝关节植入物和金标记,展示了其临床相关性。
结果:快速模拟与实际MRI扫描的结果相当准确。快速模拟与布洛赫模拟之间的差异很小,而加速度与相位编码线的数量成线性关系。该物体定位方法能够准确定位各种金属物体。
结论:提出的模拟方法能够以较低的计算复杂性提供准确的离共振伪影的3D模拟,而不同于布洛赫模拟。模拟的速度为以前由于计算限制而不可行的涉及离共振现象的图像重建打开了可能性,如金属物体定位所示。
📚2 运行结果
部分代码:
% Allocate matrix from intermediate result after DFT
kSimulation = zeros([model.size(2) model.size(1) nReadout]); % YXZ
% Perform frequency encoding
for I=1:nReadout
t_B0 = acquisition.kspaceSamplingTimesRefocused(1,1,I);
t_T2 = acquisition.kspaceSamplingTimes(1,1,I);
if (options.verbose)
fprintf('Simulating time %d / %d: %f ms / %f ms\n', I, nReadout, t_B0, t_T2);
end
% Analytical description of transverse magnetization without encoding at time t
Mtrans = model.protonDensity .* exp(-2i * pi * gm * model.deltaB0 * (t_B0/1000) - t_T2 ./ model.T2);
% Single frequency DFT in Z
readEncoding = exp(-2i * pi * readoutCoeff * (I-fftCenter(nReadout)));
kSimulation(:,:,I) = sum(Mtrans .* repmat(readEncoding, [model.size(2) model.size(1) 1]),3);
end
% Perform phase encoding with FFTs
kSimulation = fft1c(fft1c(kSimulation,[],1),[],2);
% Crop k-space to lower the resolution to the scan resolution
kspaceData = crop(kSimulation, [round(model.size(2)*scale(2)) round(model.size(1)*scale(1)) nReadout]);
% Correct intensity
intensityScale = length(readEncoding) / sqrt(nReadout) * sqrt(size(kSimulation,1) / round(model.size(2)*scale(2))) * sqrt(size(kSimulation,2) / round(model.size(1)*scale(1)));
kspaceData = kspaceData / intensityScale;
% Correct field of view by either cropping or zero-padding in image-space
kspaceData = fftc(zeroPadOrCrop(ifftc(kspaceData), acquisition.size([2 1 3])));
return
end
%% Generalized Cartesian simulation
if (options.verbose)
fprintf('Using generalized Cartesian simulation\n');
end
timeTuples = [acquisition.kspaceSamplingTimesRefocused(:) acquisition.kspaceSamplingTimes(:)];
[Ts,~,Tsind] = unique(timeTuples, 'rows');
kspaceData = zeros(acquisition.size([2 1 3]));
for I=1:size(Ts,1)
t_B0 = Ts(I,1);
t_T2 = Ts(I,2);
if (options.verbose)
fprintf('Simulating time %d / %d: %f ms / %f ms\n', I, size(Ts,1), t_B0, t_T2);
end
% Analytical description of transverse magnetization without encoding at time t
Mtrans = model.protonDensity .* exp(-2i * pi * gm * model.deltaB0 * (t_B0/1000) - t_T2 ./ model.T2);
% Spatially encode in all dimensions
kSimulation = fftc(Mtrans);
% Crop k-space to match scan resolution
k = crop(kSimulation, round(model.size([2 1 3]) .* scale([2 1 3])));
% Correct intensity
k = k / prod(sqrt(size3(kSimulation) ./ round(model.size([2 1 3]) .* scale([2 1 3]))));
% Correct field of view by either cropping or zero-padding in image-space
k = fftc(zeroPadOrCrop(ifftc(k), acquisition.size([2 1 3])));
% Select elements from k-space that were encoded at time t and save
% them in the final simulated k-space
kspaceData(Tsind==I) = k(Tsind==I);
🎉3 参考文献
文章中一些内容引自网络,会注明出处或引用为参考文献,难免有未尽之处,如有不妥,请随时联系删除。