求图像重建反投影、滤波反投影matlab仿真程序

求图像重建反投影、滤波反投影matlab仿真程序,第1张

%用phantom函数可以获得仿体图像

%用randon可获得不同角度的一维投影;

clear all

P = phantom('Modified Shepp-Logan',256)

R=radon(P)

figureimshow(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)

figureimshow(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

figureimshow(P_3,[])title('滤波反投迅扮影法')

好多人回答啊!

图像求反两种方法都可以

>> g1=imgdjust(f,[0 1],[1 0])%f为输入图像,此为第一种方法

>> g2=imcomplement(f)%f同样为输入图像,此为第二种方郑迅法

至于邻域均值嘛,主要肢丛激用 fspecial和imfilter 两个函数,具体可以看一下帮助 ^_^

下面的两个例子分别用正方形和圆形的模板进行邻域均值。

>>w1=fspecial('average') %产生一个3x3大小的方形平均滤波模板w1

>>g1=imfilter(f,w1,'replicate') % g1为处理后的图像。'replicate'指卷积填充边缘时用复制边界历袜的值来扩展。

>>w2=fspecial('disk') %产生一个半径为5的圆形平均滤波模板w2

>>g2=imfilter(f,w2,'replicate') % 同样,g2为处理后的图像,'replicate'指卷积填充边缘时用复制边界的值来扩展。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/12568208.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-26
下一篇 2023-05-26

发表评论

登录后才能评论

评论列表(0条)

保存