1.软件版本
matlab2013b
2.本算法理论知识
3.部分源码
clc;
clear;
close all;
warning off;
pack;
addpath 'func\'
%Pixel Size
Pix_Size = 32;
[I,E] = phantom(Pix_Size);
figure;
imshow(I);
[rays,sino] = siddon(I);
ind = find(sum(rays,2));
A = rays(ind,:);
b = sino(:);
b = b(ind);
%calculate the singular value of A
s = svds(A,size(A,2));
%plot loglog figure
figure;
subplot(121);
plot(s,'b-o');
axis([0,size(A,2),0,60]);
grid on;
axis square;
subplot(122);
loglog(s,'b-o');
axis([0,size(A,2),0,60]);
grid on;
axis square;
%Delete rows from the matrix and comment on the effect of this on the singular values
%Delete 500 rows
A2 = A;
A2(1:500,:) = [];
s2 = svds(A2,size(A2,2));
%Delete 1000 rows
A3 = A;
A3(1:1000,:)= [];
s3 = svds(A3,size(A3,2));
%Delete 2000 rows
A4 = A;
A4(1:2000,:) = [];
s4 = svds(A4,size(A4,2));
figure;
plot(s,'b');
hold on;
plot(s2,'r');
hold on;
plot(s3,'k');
hold on;
plot(s4,'g');
hold off;
axis([0,size(A,2),0,60]);
grid on;
legend('Initial singular values','singular values after delete 500 rows','singular values after delete 1000 rows','singular values after delete 2000 rows');
4.仿真结论
课题中,这里开始说明本课题的研究工作, 我们首先需要一个SLP32*32的图片作为测试图片,这个图片可以使用MATLAB指令phantom产生。
这个部分,我们产生了测试使用的32*32像素的图像:
然后根据这个图像,产生后面课题所要求的A和b矩阵和向量。
通过这段代码,我们可以通过图像得到对应的稀疏矩阵A和向量b。
main1.m
绘制奇异值曲线,用loglog坐标系来画矩阵A的奇异值图,然后计算矩阵的rank然后分析奇异值的衰减情况,将矩阵中的行删除,然后分析这个情况对奇异值的影响。
然后,我们按要求,删除A中的行,然后再绘制奇异值曲线图。
从仿真结果可知,当删除rows的时候,奇异值会衰减的更快。
main2.m
使用matlab的backslash操作来重建图像,然后分析一下结果是怎么变化的,当加入b一个随机的误差的时候。
首先,重建效果如下所示:
所以重建图像为I2 = A\B;
然后,我们为了分析重建效果,这里我们将计算原图像和重建图像之间的PSNR值来分析重建质量。
仿真效果如下所示:
PSNR = 795.3637;
加入error到b,这里我们加入三个不同大小的error到b上。
这三个图的PSNR分布为216.7857,173.3244,124.4959,由此可见,当err逐渐增加的时候,图像的质量逐渐降低。
main3\main3.m
这里就是设计一个用户操作界面,分析使用Tikhonov算法,改变数据的误差然后分析对Tikhonov算法得到的结果产生的影响。
运行main3.m,我们可以得到如下的界面:
上面三个参数,分别表示的是初始图片的大小,误差大小以及算法中参数alpha的值。
5.参考文献
[1]刘喜武, 刘洪, 李幼铭. 高分辨率Radon变换方法及其在地震信号处理中的应用[J]. 地球物理学进展, 2004, 19(1):8-15.A28-07