对滤波反投影重建算法的研究以phantom图为例,构建滤波器,重建图像
%%%%%%%%%projection.m%%%%%%%%%%%%
clear;
clear all;
M=256;
N=256;
I = phantom(M,N);
figure(1);
imshow(I);
nDetectors=512;
nViews=360;
projection=zeros(nViews,nDetectors);
length=20;
weight=20;
phyRatoDig=M/length;
stepBeam = 2 * pi/nViews; %旋转步进的角度
focalDistance_phy=40;
detecDistance_phy=40;
focalDistance_dig=focalDistance_phy*phyRatoDig;
detecDistance_dig=detecDistance_phy*phyRatoDig;
diameter=sqrt(M*N+M*N);
detecLength=41.3;
detecLength_dig=detecLength*phyRatoDig;
detecResolution=512;
unitDis=detecLength/(detecResolution-1);
yDetector=([1:detecResolution]-1)*unitDis-detecLength/2;
gamma= atan(yDetector/(focalDistance_phy+detecDistance_phy));
sample=0.5; %沿射线进行步进的步长,即采样的间隔
sample_times=floor(sqrt((detecDistance_dig+focalDistance_dig)^2+(detecLength_dig/2)^2)/sample);
disp('projection')
for fanNum=1:nViews;
if(rem(fanNum,10)==0)
disp('Current Sample')
fanNum
end
beta=(fanNum-1)*stepBeam;
sourceX = focalDistance_dig * cos(pi/2 + beta); %在极坐标情况下计算射线源的坐标(可包含负值)
sourceY = focalDistance_dig * sin(pi/2 + beta);
for raynum=1: nDetectors
deltaX=0;
deltaY=0;
value=0;
gamaTemp =gamma(1,raynum);
full_angle=beta+gamaTemp;
if(full_angle<0)
full_angle=full_angle+2*pi;
end
if(full_angle>2*pi)
full_angle=full_angle-2*pi;
end
if(full_angle >= 0 && full_angle < pi/2)
flagX = 1;
flagY = -1;
else
if(full_angle >= pi/2 && full_angle < pi)
flagX = 1;
flagY = 1;
else
if(full_angle >= pi && full_angle < 3 * pi/2)
flagX = -1;
flagY = 1;
else
if(full_angle >= 3 * pi/2 && full_angle < 2 * pi)
flagX = -1;
flagY = -1;
end
end
end
end
x_delta=abs(sin(full_angle));
y_delta=abs(cos(full_angle));
deltaX=flagX*x_delta; %综合求得x和y方向的增长情况
deltaY=flagY*y_delta;
for k=1:sample_times
pixel = 0; %该射线路径上的一点投影值
x=sourceX+k*deltaX*sample+N/2;
y=sourceY+k*deltaY*sample+N/2;
if (x>=1&&x<=M&&y>=1&&y<=N)
ix = floor(x);
x = x - ix;
iy = floor(y);
y = y - iy;
if((ix + 1 + (iy + 1) * N) >= (M * N))
pixel = I(iy,ix);
else
pixel=x*(I(iy,ix+1)-I(iy,ix))+y*(I(iy + 1,ix)-I(iy,ix))+(I(iy + 1,ix + 1)+I(iy,ix) -I(iy + 1,ix ) -I(iy + 1,ix + 1 ))*x*y+I(iy,ix);
end
end
value=value+pixel;
end
projection(fanNum,raynum)=value;
end
end
showimge(projection,360,512,min(min(projection)),max(max(projection)));
D-022
相关文章
- C#数据Encrypt加密Encrypt解密的算法使用
- Java实现 蓝桥杯 算法提高 队列操作
- 兔子生宝宝算法
- DataScience:基于GiveMeSomeCredit数据集利用特征工程处理、逻辑回归LoR算法实现构建风控中的金融评分卡模型
- ML之回归预测:利用Lasso、ElasticNet、GBDT等算法构建集成学习算法AvgModelsR对国内某平台上海2020年6月份房价数据集【12+1】进行回归预测(模型评估、模型推理)
- MATLB|基于粒子群优化算法的智能微电网调度(含风、光、微型燃气轮机、电网输入微网、储能)
- 对滤波反投影重建算法的研究以phantom图进行matlab仿真,构建滤波器,重建图像
- 基于蜣螂算法的极限学习机(ELM)分类算法-附代码
- JavaScript 数据结构与算法之美 - 归并排序、快速排序、希尔排序、堆排序
- 组合算法
- 大数据分析案例-基于朴素贝叶斯算法构建电信客户流失分析预警模型
- 基于TF-IDF+KMeans聚类算法构建中文文本分类模型(附案例实战)
- Java构建DFA算法模型进行敏感词过滤
- 【YOLOv7/YOLOv5系列算法改进NO.48】构建新的轻量网络—Slim-neck by GSConv(2022CVPR)
- 【C++】算法集锦(7)滑动窗口