资源描述
图像处理课程设计报告
设计题目:图像111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111 图像复原
专业班级:
学生姓名:
学 号:
目录
图像处理课程设计报告 1
一、 设计目的、任务与要求 3
1、 设计目的 3
2、 任务与要求 3
二、总体方案设计 3
三、 各功能模块的主要实现程序 3
四、 测试和调试 3
五、 结论与心得 3
六、 参考文献 3
图像复原研究
图像摘要
图像复原就是在研究图象退化原因的基础上,以退化图像为依据,根据一定的先验知识设计一种算法,从而估计出理想场景的操作。一般得到一幅数字化图像后都会先使用图像复原技术进项处理,然后再做增强处理。由于不同应用领域的图像有不同的退化原因,所以对同一幅退化图像,不同应用领域采用不同的复原方法。图像复原可以看成是图像复原的逆过程,对退化复原的一般可采用两种方法:一种方法适用于图像缺乏先验知识的情况下,此时可对退化过程(噪声和模糊)建立模型,进行描述。并寻找一种去除和消弱其影响的过程,从而改善图像质量。另一方面若对于原始图像有足够的先验知识,则对原始图像简历一个数学模型,并根据它对退化图像进行拟合,将其转化为一个检验问题。但大多数情况下退化过程是不可知的,由于图像模糊的同时,噪声和干扰也会同时存在,这也为复原过程带来困难和不确定性。本文针对当前主流的图像复原算法进行分析,并归纳和总结,并进行Matlab的仿真实验,为人们的不同应用场合及不同的图像数据条件下选择不同的复原算法提供了一定依据。
一、 设计目的、任务与要求
1、 设计目的
1) 提高分析问题、解决问题的能力,进一步巩固数字图像处理系统中的基本原理与方法。
2) 熟悉掌握一门计算机语言,可以进行数字图像的应用处理的开发设计。
2、 任务与要求
1)自选黑白图像,并参考P.96获得失真图像。
2)对失真图像进行FFT,并从频谱上研究如何获得失真参数。
3) 用获得的参数对失真图像加以恢复(参考P.99)。
4) 编制程序并调试。(最好能通过程序自动从频谱中获取失真参数)。
二、总体方案设计
1、系统具体构架
频域上图像退化与复原过程的方框图如下:
G(u,v)
(u,v)
H(u,v)
F(u,v)
N(u,v)
2、功能模块划分及运行环境
本次实验是在MATLAB6.5的环境下实验运行的,可将程序分成获得失真图像模块、对失真图像进行FFT、对退化图像频谱进行分析建立退化函数、计算复原图像的傅里叶变换、对计算得到的傅里叶变换进行傅里叶逆变换这几部分。
3、基本原理
图像复原是试图利用退化过程的先验知识使已退化的图像恢复本来面目,即根据退化的原因,分析引起退化的环境因素,建立相应的数学模型,并沿着使图像降质的逆过程恢复图像.目的在于消除或减轻在图像获取以及传输过程中造成的图像品质下降,恢复图像的本来面目.因此,复原技术就是把退化模型化,并采用相反的过程进行处理,以便复原出原图像.
退化过程中可以被模型化为一个退化函数和一个加噪声项,处理一副输入图像f(x,y)产生一副退化图像g(x,y),给定g(x,y)和关于退化图像H的一些知识以及外加噪声项η(x,y),图像恢复的目的是获得关于原始图像的近似估计。
若系统H是线性的、位置不变性的过程,则空间域的退化图像:
g(x,y)= h(x,y)* f(x,y)+ η(x,y)
其频域下的描述为: G(x,y)=H(x,y)F(x,y)+ N(x,y)
综上来说,图象恢复力求保持图象的本来面目,以保真原则为前提,从而找出图象降质的原因,描述其物理过程,提出数学模型。恢复的过程是沿着质量降质的逆过程来重现原始图象的。
三、 各功能模块的主要实现程序
1、源程序
Main:
%获得失真图像
C=imread('pout.tif')
subplot(1,2,1);
imshow(C); %显示原始图像
LEN1=30; %设置运动移位为30个像素
THETA1=45; %设置运动角度为45度
PSF=fspecial('motion',LEN1,THETA1); %建立二维仿真线性运动滤波器PSF
MF=imfilter(C,PSF,'circular','conv'); %用PSF产生模糊图像
subplot(1,2,2);imshow(MF); %显示模糊图像
imwrite(MF,'pout-MF.tif'); %保存模糊图像备用
%对失真图进行FFT
I=imread('pout-MF.tif'); %读入失真图像
fftI=fft2(I); %二维离散傅立叶变换
sfftI=fftshift(fftI); %直流分量移到频谱中心
RR=real(sfftI); %取傅立叶变换的实部
II=imag(sfftI); %取傅立叶变换的虚部
A=sqrt(RR.^2+II.^2); %计算频谱幅值
A=(A-min(min(A)))/(max(max(A))-min(min(A)))*225; %归一化
figure(2); imshow(A); %显示失真图像的频谱
%设置参数
ifbl=I; %把失真图像赋给函数EstAngle的参数
ifbl=double(ifbl); %转换成双精度
THETA = EstAngle(ifbl); %调用定义函数EstAngle寻找失真角度
LEN = EstLen(ifbl, THETA); %调用定义函数EstLen寻找失真长度
%失真图像恢复
[MF,map]=imread('pout-MF.tif'); %读入失真图像
figure(3);
imshow(MF); %显示失真图像
INITPSF=fspecial('motion',LEN,THETA); %建立复原点扩散函数
[J,P]=deconvblind(MF,INITPSF,30); %去卷积
figure(4);imshow(J); %显示恢复图像
定义寻找失真参数的函数:
定义寻找失真长度函数:
function THETA = EstAngle(ifbl) %定义函数EstAngle返回失真角度
ifbl = medfilt2(abs(ifbl)); %对二维矩阵均匀滤波
lgifbl = log(1+abs(ifbl)); %采用高斯方法把图像边缘化
BW = edge(lgifbl); %把模糊图像变边缘化
H = hough(BW); %运用Hough变换检测边缘
for i=1:90 %利用循环找到边缘点的最大和最小梯值
for j=1:size(H, 1)
temp = H(j, i);
H(j, i) = H(j, 90+i);
H(j, 90+i) = temp;
end
end
maxi = max(max(H));
mini = min(min(H));
sizeofH = size(H); %找到图H矩阵的行和列数
thresh=(maxi - mini)/2; %将最大最小梯度角进行平均
for i=1:sizeofH(2), %将图像H进行二值化
for j=1:sizeofH(1),
if H(j, i)>=thresh
H(j, i) = 1;
else
H(j, i) = 0;
end
end
end
sizeofH = size(H); %找到H阵大小
for i=1:sizeofH(2), %将H所有列求和
ColsofH(i) = 0;
for j=1:sizeofH(1),
ColsofH(i) = ColsofH(i) + H(j, i);
end
end
[maximum, THETA] = max(ColsofH); %找失真角度
定义寻找失真角度函数:
function LEN = EstLen(ifbl, THETA) %寻找失真参数长度
ifbl = medfilt2(abs(ifbl)); %对二维矩阵均匀滤波
fin = fft2(ifbl); %对失真图像进行fft
lgfin = abs(log(1 + abs(fin))); %进行对数变换
cin = ifft2(lgfin); %进行傅里叶反变换
cinrot = imrotate(cin, -THETA); %将得到图以-THETA角进行旋转
for i=1:size(cinrot, 2) %求所有列的平均值
avg(i) = 0;
for j=1:size(cinrot, 1)
avg(i) = avg(i) + cinrot(j, i);
end
avg(i) = avg(i)/size(cinrot, 1);
end
avgr = real(avg); %取所有列均值的实部
index = 0; %运用avg列的第一个负值计算失真参数长度
for i = 1:round(size(avg,2)),
if real(avg(i))<0,
index = i;
break;
end
end
if index~=0, %如果index不为0则其即为失真长度
LEN = index;
else
%If Zero Crossing not found then find the lowest peak
%Calculating the blur length using Lowest Peak
index = 1; %如果没有找到不为0的index,则
用avg的最小值寻找失真长度
startval = avg(index);
for i = 1 : round(size(avg, 2)/2),
if startval>avg(i),
startval = avg(i);
index = i;
end
end
LEN = index;
end
2、程序运行结果
四、 测试和调试
1、 对多副图像调试结果
2、调示过程中发现的问题
1) 调试过程中出现了ifbl的未定义的错误,经检查是在引用函数是未将ifbl这个参数赋值。
2) 在调试过程中由于改变了文件路径,导致不能正确出图。
3) 刚开始函数不正确不能较好恢复出失真图像。
4) 在引用库中图片时,图片格式弄错导致不能输出图像。
五、 结论与心得
1、问题的解决:在调试过程中由于改变文件路径导致的错误,只要正确选对其路径即可更正这种错误。
函数不正确导致不能较好的复原图像,则只有通过修正函数以得到复原图像。在引用库中图片时,由于输入图片格式的才错误,通过修改为其原格式来正确调用。
2、心得体会:这次课设让我深刻体会了图像处理这门课程,使我掌握了基本图像处理方法,使我对图像处理的基本原理与方法有了更深一层认识。图像复原所用到的一些图像处理的基本方法在这次课设中得到了锻炼,使我对图像处理这门课程及其应用技术产生了浓厚的兴趣。
参考文献
[1] 姚敏. 数字图像处理 机械工业出版社.2010
[2] 陈怀深 吴大正等著 MATLAB及在电子信息课中的应用 电子工业出版社.2009
[3] 《运动失真或噪声干扰的图像恢复/修复》
展开阅读全文