【图像重建】基于先验和运动的重建 (PRIMOR)实现口腔CT图像重建附matlab代码和论文

简介: 【图像重建】基于先验和运动的重建 (PRIMOR)实现口腔CT图像重建附matlab代码和论文

1 简介

Low-dose protocols for respiratory gating in cardiothoracic small-animal imaging lead to

streak artifacts in the images reconstructed with a Feldkamp-Davis-Kress (FDK) method.

We propose a novel prior- and motion-based reconstruction (PRIMOR) method, which

improves prior-based reconstruction (PBR) by adding a penalty function that includes a

model of motion. The prior image is generated as the average of all the respiratory gates,

reconstructed with FDK. Motion between respiratory gates is estimated using a nonrigid

registration method based on hierarchical B-splines. We compare PRIMOR with an equiva

lent PBR method without motion estimation using as reference the reconstruction of high

dose data. From these data acquired with a micro-CT scanner, different scenarios were

simulated by changing photon flux and number of projections. Methods were evaluated in

terms of contrast-to-noise-ratio (CNR), mean square error (MSE), streak artefact indicator

(SAI), solution error norm (SEN), and correction of respiratory motion. Also, to evaluate the

effect of each method on lung studies quantification, we have computed the Jaccard similar

ity index of the mask obtained from segmenting each image as compared to those obtained

from the high dose reconstruction. Both iterative methods greatly improved FDK reconstruc

tion in all cases. PBR was prone to streak artifacts and presented blurring effects in bone

and lung tissues when using both a low number of projections and low dose. Adopting PBR

as a reference, PRIMOR increased CNR up to 33% and decreased MSE, SAI and SEN up

to 20%, 4% and 13%, respectively. PRIMOR also presented better compensation for respi

ratory motion and higher Jaccard similarity index. In conclusion, the new method proposed

for low-dose respiratory gating in small-animal scanners shows an improvement in image

quality and allows a reduction of dose or a reduction of the number of projections between

two and three times with respect to previous PBR approaches.

2 部分代码

%% The following lines provides the parameters used to generate the matrix% operator, G, using IRT:% n_m         = 1;% numPerProj  = 350;% N           = [350 350];% n_x         = N(1);% numProj     = [360]% totalAngle  = [360];% binning     = 4;% n_ang = numProj;% det_z_count = 1; detector_count= n_x; pixel_count=n_x*n_x;% ds          = 50e-4*binning; % pixel sixe= min pixel*binning% dx          = ds/1.6;% cg          = sino_geom('fan','nb',n_x, 'na', n_ang, ...%     'ds',ds, 'orbit',-totalAngle, ...%     'offset_s', 0.0, ...%     'dsd', 35.2, 'dod', 13.2, 'dfs', inf);% ig          = image_geom('nx', n_x, 'ny', n_x,'dx', dx);% G           = Gtomo2_dscmex(cg, ig);% geom        = fbp2(cg, ig);% FORWARD OPERATORif 0    % It requires IRT software    % Load Forward Operator precomputed in Linux system. If it does not    % work, run the code above     load('G_linux','geom','G');                                         end% READ SIMULATED DATA %% HIGH DOSE DATA (ideal data). % Target image acquired from a high dose protocol (dosis four times% the dosis used for static imaging)load('image_HighDose','uTarget');N           = size(uTarget);% Display four respiratory gatesfigure;for it = 1:4    imagesc(uTarget(:,:,it)); colormap gray; axis image; colorbar;    title(['High dose, gate ' num2str(it)]);    pause(0.3);end% STANDARD DOSE DATA: Standard dose for static imaging leads to irregularly% distributed % Data for different scenarios can be found at http://dx.doi.org/10.5281/zenodo.15685nameData    = 'data_I0By6_120p';         % Dose reduction by 6load(nameData,'dataAll');Nd          = size(dataAll);% Undersampling patternRAll        = dataAll>0;% -------------------------------------------------------------------------% PRIOR image%% Prior image as the average imageRsum        = sum(RAll,3);dataAllAv   = sum(dataAll,3);dataAllAv(Rsum>0) = dataAllAv(Rsum>0)./Rsum(Rsum>0);if 0     % To compute the reference image download the IRT code and run this    % part    uref     = fbp2(dataAllAv, geom); uref(uref<0) = 0;    gaussianFilter = fspecial('gaussian', [5, 5], 3); % [7 7], 5 stronger filter if the prior edges is a problem    uref_aux = imfilter(uref, gaussianFilter, 'symmetric', 'conv');    uref        = uref_aux;    else    % Load precomputed prior image    load('RefImage_I0By6_120p','uref');end% -------------------------------------------------------------------------% FBP reconstruction using IRT softwareframeThis   = 1;if 0     % FDK reconstruction, it requires IRT code     im          = fbp2(dataAll(:,:,frameThis), geom); im(im<0) = 0;else    % Load precomputed FDK reconstruction        load('FDK_I0By6_120p','im');endfigure;subplot(2,2,1);imagesc(uTarget(:,:,frameThis)); title('Target gate 1 (high dose image)'); colorbar;subplot(2,2,2);imagesc(dataAll(:,:,frameThis)); title('Low dose data (120 proj., dose by 6)'); colorbar;subplot(2,2,3);imagesc(im*prod(Nd(1:2))/nnz(RAll(:,:,frameThis))); title('FDK reconstruction'); colorbar; axis image;subplot(2,2,4);imagesc(uref(:,:,frameThis)); title('Prior image: sum of four gates'); colorbar; colormap gray;% -------------------------------------------------------------------------% Create the support (circle)[n_x_u,n_y_u,n_z_u] = size(uTarget);[X,Y]       = meshgrid(linspace(1,n_x_u,n_x_u),linspace(1,n_x_u,n_x_u));X           = X-n_x_u/2;Y           = Y-n_x_u/2;indCir      = find(sqrt(X.^2+Y.^2)<=n_x_u/2);mask        = zeros(N(1:2));mask(indCir)= 1;% Apply mask to the prior imageuref        = uref.*mask;% -------------------------------------------------------------------------% PBR methodif 0    % To run PBR method, run this part    matlabpool(4); % comment if matlabpool not available    mu          = 2;    lambda      = 1;    nBreg       = 25;    alpha       = 0.4;    beta        = 0.2;    [uPbr,errPbr] = PBR_CT(G,dataAll,RAll,N,uref,mu,lambda,alpha,beta,nBreg,uTarget);        matlabpool close; else    % Load PBR result already computed    load('PBR_Rec_I0By6_120p','uPbr','errPbr');end% -------------------------------------------------------------------------% PRIMOR method% Registration stepif 0    % To compute the registration, download the FFD registration software    % and run this part (it takes ~2min)        % Compute the registration step    matlabpool(8); % comment if matlabpool not available        % Parameters for the registration step    Options.Penalty     = 1e-4;    Options.Registration= 'NonRigid';    Options.MaxRef      = 3;    Options.Similarity  = 'sd';        % Estimate the temporal operator, computed by the registration of    % consecutive gates from previous reconstruction (we used PBR)    u0          = uPbr;    [GridAll,SpacingAll,GridDAll,SpacingDAll] = ComputeSplineRegTwoDirectionsPoolDouble(u0,Options);    TParameters.GridAll         = GridAll;    TParameters.SpacingAll      = SpacingAll;    TParameters.GridDAll        = GridDAll;    TParameters.SpacingDAll     = SpacingDAll;    matlabpool close; else    % Load registration result already computed    load('TParameters_I0By6_120p','TParameters');end% Reconstruction stepmu          = 2;lambda      = 1;alpha       = 0.4;beta        = 0.2;gamma       = 0.5;nBreg       = 50;if 0    % To run PRIMOR method download FFD registration software and IRT    % software and execute this part  (it takes ~ 1h 20min)        matlabpool(4); % comment if matlabpool not available                   [uPrimor,errPrimor] = PRIMOR_CT(TParameters,G,dataAll,RAll,N,uref,mu,lambda,gamma,alpha,beta,nBreg,uTarget);    % Reconstructed image and auxiliary variables are displayed for TV and    % prior terms, for some iteration numbers. The number of nonzero    % coefficients on the respective transformed domains are given as a    % precentage    matlabpool close;else    % Load PRIMOR result already computed   load('PRIMOR_Rec_I0By6_120p','uPrimor','errPrimor');end% -------------------------------------------------------------------------% Images for ideal image (high dose) and respiratory gated data with% six-fold dose reduction reconstructed with FDK, PBR and PRIMOR methodsfigure;subplot(2,2,1);imagesc(uTarget(:,:,frameThis)); axis image; axis off; colormap gray;title('FDK, high dose');ca = caxis;subplot(2,2,2);imagesc(im*prod(Nd(1:2))/nnz(RAll(:,:,frameThis))); axis image; axis off; colormap gray;caxis(ca); title('FDK, low dose');subplot(2,2,3);imagesc(uPbr(:,:,frameThis)); axis image; axis off; colormap gray;caxis(ca); title('PBR, low dose');subplot(2,2,4);imagesc(uPrimor(:,:,frameThis)); axis image; axis off; colormap gray;caxis(ca); title('PRIMOR, low dose');% Zoom imagexZoom        = 120:280;yZoom        = 70:240;figure;subplot(2,2,1);imagesc(uTarget(xZoom,yZoom,frameThis)); axis image; axis off; colormap gray;title('FDK, high dose');ca = caxis;subplot(2,2,2);imagesc(im(xZoom,yZoom,1)*prod(Nd(1:2))/nnz(RAll(:,:,frameThis))); axis image; axis off; colormap gray;caxis(ca); title('FDK, low dose');subplot(2,2,3);imagesc(uPbr(xZoom,yZoom,frameThis)); axis image; axis off; colormap gray;caxis(ca); title('PBR, low dose');subplot(2,2,4);imagesc(uPrimor(xZoom,yZoom,frameThis)); axis image; axis off; colormap gray;caxis(ca); title('PRIMOR, low dose');% Convergence: solution error vs iteration numberfigure; plot(mean(errPbr,2));hold on; plot(mean(errPrimor,2),'r');legend('PBR','PRIMOR'); xlabel('Iteration number'); ylabel('Solution error');% -------------------------------------------------------------------------%

3 仿真结果

4 参考文献

[1] Abascal J ,  Monica A ,  Eugenio M , et al. A Novel Prior- and Motion-Based Compressed Sensing Method for Small-Animal Respiratory Gated CT[J]. Plos One, 2016, 11(3):e0149841.

博主简介:擅长智能优化算法、神经网络预测、信号处理、元胞自动机、图像处理、路径规划、无人机等多种领域的Matlab仿真,相关matlab代码问题可私信交流。

部分理论引用网络文献,若有侵权联系博主删除。

相关文章
|
20天前
|
算法 数据安全/隐私保护 计算机视觉
基于FPGA的图像双线性插值算法verilog实现,包括tb测试文件和MATLAB辅助验证
本项目展示了256×256图像通过双线性插值放大至512×512的效果,无水印展示。使用Matlab 2022a和Vivado 2019.2开发,提供完整代码及详细中文注释、操作视频。核心程序实现图像缩放,并在Matlab中验证效果。双线性插值算法通过FPGA高效实现图像缩放,确保质量。
|
2月前
|
算法 数据安全/隐私保护 计算机视觉
基于Retinex算法的图像去雾matlab仿真
本项目展示了基于Retinex算法的图像去雾技术。完整程序运行效果无水印,使用Matlab2022a开发。核心代码包含详细中文注释和操作步骤视频。Retinex理论由Edwin Land提出,旨在分离图像的光照和反射分量,增强图像对比度、颜色和细节,尤其在雾天条件下表现优异,有效解决图像去雾问题。
|
3天前
|
算法 机器人 数据安全/隐私保护
四自由度SCARA机器人的运动学和动力学matlab建模与仿真
本课题深入研究SCARA机器人系统,提出其动力学与运动学模型,并基于MATLAB Robotics Toolbox建立四自由度SCARA机器人仿真对象。通过理论结合仿真实验,实现了运动学正解、逆解及轨迹规划等功能,完成系统实验和算法验证。SCARA机器人以其平面关节结构实现快速定位与装配,在自动生产线中广泛应用,尤其在电子和汽车行业表现优异。使用D-H参数法进行结构建模,推导末端执行器的位姿,建立了机器人的运动学方程。
|
9天前
|
算法 数据安全/隐私保护
基于信息论的高动态范围图像评价算法matlab仿真
本项目基于信息论开发了一种高动态范围(HDR)图像评价算法,并通过MATLAB 2022A进行仿真。该算法利用自然图像的概率模型,研究图像熵与成像动态范围的关系,提出了理想成像动态范围的计算公式。核心程序实现了图像裁剪处理、熵计算等功能,展示了图像熵与动态范围之间的关系。测试结果显示,在[μ-3σ, μ+3σ]区间内图像熵趋于稳定,表明系统动态范围足以对景物成像。此外,还探讨了HDR图像亮度和对比度对图像质量的影响,为HDR图像评价提供了理论基础。
|
12天前
|
传感器 算法 算法框架/工具
基于一阶梯度的图像亚像素位移matlab仿真,带GUI界面
本项目提供图像亚像素位移估计算法,使用Matlab2022a开发。完整程序无水印运行效果佳,附带详细中文注释代码和操作视频。该算法通过一阶梯度信息和泰勒级数展开,实现比像素更精细的位置变化测量,广泛应用于医学影像、遥感图像、视频监控、精密测量等领域,显著提升图像配准和分析精度。
|
14天前
|
传感器 算法 数据安全/隐私保护
基于Affine-Sift算法的图像配准matlab仿真
本项目展示了Affine-SIFT算法的运行效果(无水印),适用于图像配准任务,能够处理旋转、缩放、平移及仿射变换。程序基于MATLAB2022A开发,包含完整代码与操作视频。核心步骤为:先用SIFT提取特征点,再通过仿射变换实现高精度对准。
|
7天前
|
监控 算法 自动驾驶
基于图像形态学处理的移动物体目标跟踪和质心提取matlab仿真,带GUI界面
本项目展示了一种基于图像形态学处理的移动物体目标跟踪和质心提取算法。完整程序运行效果无水印,使用Matlab2022a开发。核心代码包含详细中文注释及操作视频。算法通过多帧图像像素值求平均、中值法或高斯混合模型估计背景,结合形态学处理(开闭运算、阈值处理)去除噪声并优化目标检测,提高准确性。颜色直方图匹配用于目标跟踪,结构元素膨胀操作扩大搜索范围,增强鲁棒性。
|
2月前
|
算法 人机交互 数据安全/隐私保护
基于图像形态学处理和凸包分析法的指尖检测matlab仿真
本项目基于Matlab2022a实现手势识别中的指尖检测算法。测试样本展示无水印运行效果,完整代码含中文注释及操作视频。算法通过图像形态学处理和凸包检测(如Graham扫描法)来确定指尖位置,但对背景复杂度敏感,需调整参数PARA1和PARA2以优化不同手型的检测精度。
|
5月前
|
监控 算法 数据安全/隐私保护
基于三帧差算法的运动目标检测系统FPGA实现,包含testbench和MATLAB辅助验证程序
本项目展示了基于FPGA与MATLAB实现的三帧差算法运动目标检测。使用Vivado 2019.2和MATLAB 2022a开发环境,通过对比连续三帧图像的像素值变化,有效识别运动区域。项目包括完整无水印的运行效果预览、详细中文注释的代码及操作步骤视频,适合学习和研究。
|
7月前
|
安全
【2023高教社杯】D题 圈养湖羊的空间利用率 问题分析、数学模型及MATLAB代码
本文介绍了2023年高教社杯数学建模竞赛D题的圈养湖羊空间利用率问题,包括问题分析、数学模型建立和MATLAB代码实现,旨在优化养殖场的生产计划和空间利用效率。
284 6
【2023高教社杯】D题 圈养湖羊的空间利用率 问题分析、数学模型及MATLAB代码

热门文章

最新文章