theta=pi/4; geo=defaultGeometry(); numProjs=90; angles=[linspace(0,2*pi,numProjs)]; CLFDK=FDK(projections(:,:,1:2:180),geo,angles);
load ProjectionTransformation.mat
alpha=pi/2-abs(theta); geo1=geo; geo1.DSD = geo.DSD*tan(theta); geo1.DSO = geo.DSO*tan(theta);
geo1.nDetector=[293;259]; geo1.sDetector=[293*0.8;259*0.8]; geo1.dDetector=geo1.sDetector./geo1.nDetector; geo1.nVoxel=[256;256;256]; geo1.sVoxel=[128;128;128]; geo1.dVoxel=geo1.sVoxel./geo1.nVoxel;
CTFDK=FDK(CTProjections(:,:,1:2:180),geo1,linspace(0,2*pi,numProjs));
epsilon=im3Dnorm(Ax(FDK(CTProjections,geo1,linspace(0,2*pi,numProjs)),geo1,linspace(0,2*pi,numProjs))-CTProjections,'L2')*0.15; alpha=0.002; ng=25; lambda=1; lambdared=0.9999; alpha_red=0.95; ratio=0.94; qualmeas={'RMSE'}; verb=true; targetGpuName = 'NVIDIA GeForce RTX 3080'; gpuids = GpuIds(targetGpuName);
[CTASDPOCS,qualMeasOut]=ASD_POCS(CTProjections,geo1,linspace(0,2*pi,numProjs),50,... 'TViter',ng,'maxL2err',epsilon,'alpha',alpha,... 'lambda',lambda,'lambda_red',lambdared,'Ratio',ratio,'Verbose',verb,'gpuids', gpuids,'QualMeas',qualmeas); save CTASDPOCS.mat CTASDPOCS plotImg(CTASDPOCS,'Dim','Z')
[CTPTARPOCS,qualMeasOut]=ASD_POCS(CTProjections,geo1,linspace(0,2*pi,numProjs),50,... 'TViter',ng,'maxL2err',epsilon,'alpha',alpha,... 'lambda',lambda,'lambda_red',lambdared,'Ratio',ratio,'Verbose',verb,'gpuids', gpuids,'QualMeas',qualmeas); save CTPTARPOCS.mat CTPTARPOCS plotImg(CLFDK,'Dim','Z')
[CLPTARPOCS,qualMeasOut]=ASD_POCS(projections,geo,angles,50,... 'TViter',ng,'maxL2err',epsilon,'alpha',alpha,... 'lambda',lambda,'lambda_red',lambdared,'Ratio',ratio,'Verbose',verb,'gpuids', gpuids,'QualMeas',qualmeas); save CLPTARPOCS.mat CLPTARPOCS
shepp_type='Modified Shepp-Logan'; shepp=sheppLogan3D([256,256,256],shepp_type); CLFDKMeasossart=Measure_Quality(shepp(:,:,128),CLFDK(:,:,128),{'RMSE','MSSIM','CC','UQI','error_norm'}); CTFDKMeasossart=Measure_Quality(shepp(:,:,128),CTFDK(:,:,128),{'RMSE','MSSIM','CC','UQI','error_norm'}); CTASDPOCSMeasossart=Measure_Quality(shepp(:,:,128),CTASDPOCS(:,:,128),{'RMSE','MSSIM','CC','UQI','error_norm'}); CTPTARPOCSMeasossart=Measure_Quality(shepp(:,:,128),CTPTARPOCS(:,:,128),{'RMSE','MSSIM','CC','UQI','error_norm'}); CLPTARPOCSSMeasossart=Measure_Quality(shepp(:,:,128),CLPTARPOCS(:,:,128),{'RMSE','MSSIM','CC','UQI','error_norm'}); Measossart=[CLFDKMeasossart;CTFDKMeasossart;CTASDPOCSMeasossart;CTPTARPOCSMeasossart;CLPTARPOCSSMeasossart];
CTMax=max(CTFDK,[],'all'); CTMin=min(CTFDK,[],'all'); imwrite(uint16((CTFDK(:,:,1)-CTMin)./(CTMax-CTMin)*65535),'CTFDK.tif') for i=2:256 imwrite(uint16((CTFDK(:,:,i)-CTMin)./(CTMax-CTMin)*65535),'CTFDK.tif','WriteMode','append'); end
|