求图像重建反投影、滤波反投影matlab仿真程序 50
用radon获得sheep-logan图像的投影图,然后对投影图进行重建。求算法代码!谢谢了!!!!!...
用radon获得sheep-logan图像的投影图,然后对投影图进行重建。求算法代码!谢谢了!!!!!
展开
3个回答
2017-06-15
展开全部
%用phantom函数可以获得仿体图像;
%用randon可获得不同角度的一维投影;
clear all;
P = phantom('Modified Shepp-Logan',256);
R=radon(P);
figure;imshow(R,[]);
figure;
imshow(P,[]);title('仿体图');
%直接反投影法
l = pow2(nextpow2(size(R,1))-1);%重构图像的大小
P_1 = zeros(l,l);%用于存放重构后的图像
for i=1 : size(R,2)
tmp = imrotate( repmat(R(:,i),1,size(R,1)),i-1,'bilinear' );
tmp = tmp(floor(size(tmp,1)/2-l/2)+1:floor(size(tmp,1)/2+l/2),floor(size(tmp,2)/2-l/2)+1:floor(size(tmp,2)/2+l/2));
P_1=P_1+tmp;
end
P_1=P_1/size(R,2);
P_1=rot90(P_1);
figure;imshow(P_1,[]);title('直接反投影法');
%滤波反投影法
N=180;
%滤波
H=size(R,1);
h=zeros((H*2-1),1);
for i=0:H-1
if i==0
h(H-i)=1/4;
elseif rem(i,2)==0
h(H-i)=0;
h(H+i)=0;
else
h(H-i)=-1/(i*pi)^2;
h(H+i)=-1/(i*pi)^2;
end
end
x=zeros(H,N);
for i=1:N
s=R(:,i);
xx=conv(s',h');
x(:,i)=xx(H:2*H-1);
end
%反投影
P_3=zeros(l,l);
for i=1:l
for j=1:l
for k=1:180
theta=k/180*pi;
t=(j-l/2-0.5)*cos(theta)+(l/2+0.5-i)*sin(theta)+(H+1)/2;
t1=floor(t);
t2=floor(t+1);
P_3(i,j)=P_3(i,j)+(t2-t)*x(t1,k)+(t-t1)*x(t2,k);
end
end
end
P_3=pi/N*P_3;
figure;imshow(P_3,[]);title('滤波反投影法');
展开全部
P=reshape(p,1,I);
P=P';
F=ones(676,1)*0.2;
for k=0:J
i_k=mod(k,I)+1;
for j=1:676
if W(i_k,:)*F~=0
F(j)=F(j)*(P(i_k)/(W(i_k,:)*F))^(W(i_k,j)*7);%松弛因子在6—8之间合适
end
end
end
%--滤波
for j=1:676
if F(j)<0
F(j)=0;
end
end
%--重建图像
F=reshape(F,26,26);
F=F';
x=-0.5:0.04:0.5;
y=-0.5:0.04:0.5;
[X,Y]=meshgrid(x,y);
figure;
mesh(X,Y,F)
P=P';
F=ones(676,1)*0.2;
for k=0:J
i_k=mod(k,I)+1;
for j=1:676
if W(i_k,:)*F~=0
F(j)=F(j)*(P(i_k)/(W(i_k,:)*F))^(W(i_k,j)*7);%松弛因子在6—8之间合适
end
end
end
%--滤波
for j=1:676
if F(j)<0
F(j)=0;
end
end
%--重建图像
F=reshape(F,26,26);
F=F';
x=-0.5:0.04:0.5;
y=-0.5:0.04:0.5;
[X,Y]=meshgrid(x,y);
figure;
mesh(X,Y,F)
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询