11037 丁园图像退化与复原的系统设计和边缘检测.docx
《11037 丁园图像退化与复原的系统设计和边缘检测.docx》由会员分享,可在线阅读,更多相关《11037 丁园图像退化与复原的系统设计和边缘检测.docx(23页珍藏版)》请在冰豆网上搜索。
11037丁园图像退化与复原的系统设计和边缘检测
课程设计报告
课程名称:
图形图像处理
学期:
2013-2014学年第2学期
学时学分:
32学分2学时
专业班级:
信科1101班
学 号:
110320017
姓 名:
丁园
指导老师:
陈荣元
提交日期:
2014年6月21日
一、数字图像退化与复原系统设计···································2
1、实验内容···························································2
2、实验原理···························································2
3、具体实验过程及结果············································5
二、边缘检测······························································12
1、实验内容···························································12
2、实验原理···························································12
3、具体实验过程及结果············································13
三、实验总结与体会·····················································18
参考文献····································································19
一、数字图像退化与复原系统设计
1、实验内容
(1)设计图形用户界面,能对图像文件(bmp、jpg、tiff、gif等)进行打开、保存、另存、打印、退出等功能操作;
(2)数字图像的统计信息功能:
包括图像的行数和列数,附加信息,直方图的统计及绘制等;
(3)图像退化与复原
a.能对图像加入各种噪声,生成退化图像;
b.给定图像,能估计噪声参数和噪声类型;
c.并通过几种滤波算法(维纳滤波,最小二乘方滤波)实现去噪并显示结果。
比较去噪效果。
2、实验原理
(1)图像的退化
数字图像在获取过程中,由于光学系统的像差、光学成像衍射、成像系统的非线性畸变、成像过程的相对运动、环境随机噪声等原因,图像会产生一定程度的退化。
(2)图像的复原
图像复原是利用图像退化现象的某种先验知识,建立退化现象的数学模型,再根据模型进行反向的推演运算,以恢复原来的景物图像。
因而图像复原可以理解为图像降质过程的反向过程。
(3)估计噪声参数和噪声类型
噪声的类型可以通过设备来确定,也可以从图像信息中提取,从图像中提取一个平滑的子图像,画出直方图,分辨噪声类型。
通过传感器的合成像设备技术参数来估计噪声参数。
(4)图像降质的数学模型
图像复原处理的关键问题在于建立退化模型。
输入图像f(x,y)经过某个退化系统后输出的是一幅退化的图像。
为了讨论方便,把噪声引起的退化即噪声对图像的影响一般作为加性噪声考虑。
原始图像f(x,y)经过一个退化算子或退化系统H(x,y)的作用,再和噪声n(x,y)进行叠加,形成退化后的图像g(x,y)。
图1表示退化过程的输入和输出关系,其中H(x,y)概括了退化系统的物理过程,就是要寻找的退化数学模型。
g(x,y)
图1图像的退化模型
数字图像的图像恢复问题可以看作是:
根据退化图像g(x,y)和退化算子H(x,y)的形式,沿着反向过程去求解原始图像f(x,y)。
图像退化的过程可以用数学表达式写成如下形式:
g(x,y)=H[f(x,y)]+n(x,y)
(1)
在这里,n(x,y)是一种统计性质的信息。
在实际应用中,往往假设噪声是白噪声,即它的频谱密度为常熟,并且与图像不相关。
在对退化系统进行了线性系统和空间不变系统的近似之后,连续函数的退化模型在空域中可以写成:
g(x,y)=f(x,y)*h(x,y)+n(x,y)
(2)
在频域中可以写成:
G(u,v)=F(u,v)H(u,v)+N(u,v)(3)
其中,G(u,v)、F(u,v)、N(u,v)分别是退化图像g(x,y)、原图像f(x,y)、噪声信号n(x,y)的傅立叶变换;H(u,v)是系统的点冲击响应函数h(x,y)的傅立叶变换,称为系统在频率域上的传递函数。
可见,图像复原实际上就是已知g(x,y)求f(x,y)的问题或已知G(u,v)求F(u,v)的问题,它们的不同之处在于一个是空域,一个是频域。
(5)维纳滤波
维纳滤波是最小二乘类约束复原的一种。
在最小二乘类约束复原中,要设法寻找一个最有估计
,使得形式为
的函数最小化。
求这类问题的最小化,常采用拉格朗日乘子算法。
也就是说,要寻找一个
,使得准则函数
(10)
为最小。
求解
得到
(11)
式中,
。
如果用图像f和噪声的相关矩阵Rf和Rn表示Q,就可以得到维纳滤波复原方法。
具体维纳滤波复原方法的原理请参考相关图书。
(6)比较维纳滤波与最小二乘方滤波的去噪效果
当图像只存在噪声复原是,需要用不同的空间滤波,不同的滤波对不同的噪声去除有不同的效果,需要比较各均值滤波和统计滤波来来分析其适用场景,找到各种噪声去除的最好滤波器。
不同的滤波其都是通过噪声与像素的融合来去除噪声,由于融合的方法不同,其去噪结果也不同,在图片上显示的内容也不一样,可以比较去噪后的图片,来确定不同滤波器的好坏。
3、具体实验过程及结果
(3)加入噪声,生成退化图像;
a.加入噪声生成退化图像
I=imread('lena.jpg');%读取Lena.jsp图像
imshow(I);%显示
如图1:
图1
加入高斯模糊噪声生成退化或降质图像并显示,如图2:
图2
b.估计给定图像的噪声类型和参数
实现代码:
clc
clear
I=imread('C:
\tu\camana.jpg');
[m,n]=size(I);
K1=imnoise(I,'gaussian',0.02);
subplot(2,3,1),imshow(K1);
K2=imnoise(I,'salt&pepper',0.02);
subplot(2,3,2),imshow(K2);
K3=imnoise(I,'speckle',0.02);
subplot(2,3,3),imshow(K3);
GP=zeros(1,256);
K1=double(K1);
fori=1:
254
GP1(i)=0;
GP2(i)=0;
GP3(i)=0;
foru=1:
m
forv=1:
n
ifK1(u,v)==i;
GP1(i)=GP1(i)+1;
end
ifK2(u,v)==i;
GP2(i)=GP2(i)+1;
end
ifK3(u,v)==i;
GP3(i)=GP3(i)+1;
end
end
end
GP1(i)=GP1(i)/(m*n);
GP2(i)=GP2(i)/(m*n);
GP3(i)=GP3(i)/(m*n);
end
subplot(2,3,4);
bar(GP1)
title('高斯')
subplot(2,3,5)
bar(GP2);
title('椒盐');
subplot(2,3,6)
bar(GP3);
title('均匀')
figure(3)
fori=1:
254
GP11(i)=0;
GP22(i)=0;
GP33(i)=0;
foru=1:
150
forv=1:
40
ifK1(u,v)==i;
GP11(i)=GP11(i)+1;
end
ifK2(u,v)==i;
GP22(i)=GP22(i)+1;
end
ifK3(u,v)==i;
GP33(i)=GP33(i)+1;
end
end
end
GP11(i)=GP11(i)/(m*n);
GP22(i)=GP22(i)/(m*n);
GP33(i)=GP33(i)/(m*n);
end
subplot(1,3,1);
bar(GP11)
title('高斯参数的估计')
subplot(1,3,2)
bar(GP22);
title('椒盐参数的估计');
subplot(1,3,3)
bar(GP33);
title('均匀参数的估计')
clc
clear
f=imread('C:
\tu\camana.jpg');
[m,n]=size(f);
fori=1:
m
forj=1:
n
F(i,j)=(-1)^(i+j)*f(i,j);
end
end
F=fftshift(fft2(F));
R=real(F);I=imag(F);
G=zeros(m,n);
foru=1:
m
forv=1:
n
G(u,v)=(R(u,v)^2+I(u,v)^2)^(1/2);
end
end
figure
(2);
G=mat2gray(G);
实验结果(图3、图4):
图3
图4
结果分析:
数字图像中,噪声主要来源于图像的获取和传输过程,不同噪声所对应的直方图不同,可以从直方图判断图像砸噪声的种类,噪声参数的估计需要选取图像的一个垂直条带,画出其直方图,可以确定其参数。
c.分别采用维纳滤波和约束最小二乘方滤波实现去噪并比较
实现代码:
I=imread('C:
\tu\rice1.tif');
figure;
subplot(2,2,1);imshow(I);title('原图像');
[m,n]=size(I);
F=fftshift(fft2(I));
k=0.0025;%取不同的值0.00025
foru=1:
m
forv=1:
n
H(u,v)=exp((-k)*(((u-m/2)^2+(v-n/2)^2)^(5/6)));
end
end
G=F.*H;
I0=real(ifft2(fftshift(G)));
I1=imnoise(uint8(I0),'gaussian',0,0.001)
subplot(2,2,2);imshow(uint8(I1));title('模糊退化且添加高斯噪声的图像');
F0=fftshift(fft2(I1));
F1=F0./H;
I2=ifft2(fftshift(F1));
subplot(2,2,3);imshow(uint8(I2));title('全逆滤波复原图');
K=0.1;
foru=1:
m
forv=1:
n
H(u,v)=exp(-k*(((u-m/2)^2+(v-n/2)^2)^(5/6)));
H0(u,v)=(abs(H(u,v)))^2;
H1(u,v)=H0(u,v)/(H(u,v)*(H0(u,v)+K));
end
end
F2=H1.*F0;
I3=ifft2(fftshift(F2));
subplot(2,2,4);imshow(uint8(I3));title('维纳滤波复原图');
p=[0-10;-14-1;0-10];
fori=1:
m
forj=1:
n
if(i<=3&&j<=3)
g(i,j)=p(i,j);
else
g(i,j)=0;
end
end
end
P=fft2(fftshift(g));
r=50;
foru=1:
m
forv=1:
n
H(u,v)=exp(-k*(((u-m/2)^2+(v-n/2)^2)^(5/6)));
H0(u,v)=(abs(H(u,v)))^2;
H2(u,v)=conj(H(u,v))/(H0(u,v)+r*P(u,v)^2);
end
end
F3=H2*F0;
subplot(2,2,4)
I4=ifft2(fftshift(F3));
imshow(uint8(I3));title('约束最小二乘法复原图')
实验结果:
k=0.0025,r=50,详见图5、图6;
图5
图6
结果分析:
在不同的k,r选取下,约束最小二乘方复原效果比较好。
二、边缘检测
1、实验内容
使用Roberts算子、Prewitt算子、Sobel算子对于噪声条件下进行边界检测,自己编程实现所有算法,不得直接运用matlab函数,并与matlab函数所提供的函数进行效果比较。
2、实验原理
边缘检测是利用物体和背景在某种图像特性上的差异来实现的,这些差异包括灰度,颜色或者纹理特征。
边缘检测实际上就是检测图像特征发生变化的位置。
图像边缘检测必须满足两个条件:
一能有效地抑制噪声;二必须尽量精确确定边缘的位置
由于噪声和模糊的存在,检测到的边界可能会变宽或在某些点处发生间断,因此,边界检测包括两个基本内容:
首先抽取出反映灰度变化的边缘点,然后剔除某些边界点或填补边界间断点,并将这些边缘连接成完整的线。
边缘检测的方法大多数是基于方向导数掩模求卷积的方法。
导数算子具有突出灰度变化的作用,对图像运用导数算子,灰度变化较大的点处算得的值比较高,因此可将这些导数值作为相应点的边界强度,通过设置门限的方法,提取边界点集。
一阶导数与是最简单的导数算子,它们分别求出了灰度在x和y方向上的变化率,而方向α上的灰度变化率可以用相应公式进行计算;对于数字图像,应该采用差分运算代替求导。
一幅数字图像的一阶导数是基于各种二维梯度的近似值。
图像f(x,y)在位置(x,y)的梯度定义为下列向量:
(3-4)
在边缘检测中,一般用这个向量的大小,用
表示
(3-5)
函数f在某点的方向导数取得最大值的方向是,方向导数的最大值是称为梯度模。
利用梯度模算子来检测边缘是一种很好的方法,它不仅具有位移不变性,还具有各向同性。
为了运算简便,实际中采用梯度模的近似形式。
或者
传统的边缘检测算法通过梯度算子来实现的,在求边缘的梯度时,需要对每个象素位置计算。
在实际中常用小区域模板卷积来近似快速计算,简单有效,即梯度算子一般采用滤波算子的形式来完成,因此应用很广泛。
模板是N*N的权值方阵,经典的梯度算子模板有:
Sobel模板、Prewitt模板、Roberts模板、Laplacian模板等。
3、具体实验过程及结果
MATLAB函数实现代码:
I=imread('fabric.png');%读取图像
K=rgb2gray(I);
BW1=edge(K,'roberts',0.08);
%进行Roberts算子边缘检测,门限值采用默认值
BW2=edge(K,'prewitt',0.05);
%进行Prewitt算子边缘检测,门限值采用默认值
BW3=edge(K,'sobel',0.04);
%进行Sobel算子边缘检测,门限值采用默认值
figure,imshow(BW1,[]),title('Roberts算子图像');
figure,imshow(BW2,[]),title('Prewitt算子图像');
figure,imshow(BW3,[]),title('Sobel算子图像');
结果示例(图7、图8、图9,见下图比较)
Roberts算子实现代码:
sourcePic=imread('D:
\Lena.jpg');%读取原图象
grayPic=rgb2gray(sourcePic);%转换成灰度图象
newGrayPic=grayPic;
[m,n]=size(grayPic);
robertsNum=0;%roberts算子的计算值
threshold=15;%阈值
fori=1:
m-1%进行边界提取
forj=1:
n-1
robertsNum=abs(grayPic(i,j)-grayPic(i+1,j+1))
+abs(grayPic(i+1,j)-graic(i,j+1));
if(robertsNum>threshold)
newGrayPic(i,j)=255;
else
newGrayPic(i,j)=0;
end
end
end
figure,imshow(newGrayPic);
结果示例(图10):
图7Roberts算子图像
图10Roberts算子图像
Prewitt算子实现代码:
sourcePic=imread('glenna.bmp');%读取原图像
grayPic=mat2gray(sourcePic);%转换成灰度图像
[m,n]=size(grayPic);
newGrayPic=grayPic;%为保留图像的边缘一个像素
PrewittNum=0;%经Prewitt算子计算得到的每个像素的值
PrewittThreshold=0.5;%设定阈值
forj=2:
m-1%进行边界提取
fork=2:
n-1
PrewittNum=abs(grayPic(j-1,k+1)-grayPic(j+1,k+1)+grayPic(j-1,k)-grayPic(j+1,k)+grayPic(j-1,k-1)-grayPic(j
+1,k-1))+abs(grayPic(j-1,k+1)+grayPic(j,k+1)+grayPic(j+1,k+1)-grayPic(j-1,k-1)-grayPic(j,k-1)-grayPic(j+1,k-1));
if(PrewittNum>PrewittThreshold)
newGrayPic(j,k)=255;
else
newGrayPic(j,k)=0;
end
end
end
figure,imshow(newGrayPic);
title('Prewitt算子的处理结果')
结果示例(图11)
图8Prewitt算子图像
图11Prewitt算子图像
Sobel算子实现代码:
sourcePic=imread('glenna.bmp');%读取原图像
grayPic=mat2gray(sourcePic);%转换成灰度图像
[m,n]=size(grayPic);
newGrayPic=grayPic;%为保留图像的边缘一个像素
sobelNum=0;%经sobel算子计算得到的每个像素的值
sobelThreshold=0.8;%设定阈值
forj=2:
m-1%进行边界提取
fork=2:
n-1
sobelNum=abs(grayPic(j-1,k+1)+2*grayPic(j,k+1)+grayPic(j+1,k+1)-grayPic(j-1,k-1)-2*grayPic(j,k-1)-grayPic
(j+1,k-1))+abs(grayPic(j-1,k-1)+2*grayPic(j-1,k)+grayPic(j-1,k+1)-grayPic(j+1,k-1)-2*grayPic(j+1,k)-grayPic(j+1,k
+1));
if(sobelNum>sobelThreshold)
newGrayPic(j,k)=255;
else
newGrayPic(j,k)=0;
end
end
end
figure,imshow(newGrayPic);
title('Sobel算子的处理结果')
结果示例(图12):
图9Sobel算子图像
图12Sobel算子图像
结果分析:
图像局部特征的不连续性(相邻区域的交界)称为边缘。
边缘位置的微分特性是幅度和方向性(沿边缘方向灰度缓变,垂直方向突变)。
边缘位置和导数(微分)间具有一定对应关系,可通过微分进行边缘检测。
无噪声时,可用Roberts算子;Prewitt和Sobel算子同时具有平均,即抑制噪声作用;对阶跃状边缘,Roberts得到的边缘宽度≥1个像素,Prewitt和Sobel算子得到的边缘宽度≥2个像素。
由实验的效果图像可以知道,在利用edge函数进行相应的算子边缘检测的时候,各算子的差别非常微小,不过由相应的参数,三个算子分别为0.08、0.05、0.04可以知道,Sobel算子在边缘检测中最为敏感,及在同一条件下它的处理效果应该最好。
在后面实验部分中,利用“手动”的模版算子进行边缘检测,我们很容易可以看到,Sobel算子的处理效果最好。
三、实验总结与体会
首先,通过这次的实验课题,我掌握了MATLAB的一些最基本的图像的存取与显示方法。
同时,我了解了图像退化与复原的基本原理,理解了数字图像运动模糊、高斯模糊以及其他噪声引起模糊的物理本质,学会了降质图像的逆滤波复原和维纳滤波复原方法。
并能够通过书本及在网上查找资料完成图像退化与复原的系统设计。
在这一过程中,我学习到了很多原本不知道或者不太熟悉的命令。
比如通过设置不同的参数达到所需要的要求和结果。
而且还可以在不同的窗口建立不同的函数而达到相同的效果。
当然,我自己掌握的知识还是非常有限的,但是老师在课堂上给我们提出来的一些方法和技巧是非常有效的,也因此帮助我顺利完成此次课程论文。
最后还有个很深的感受:
MATLAB是个非常强大而且有用的工具,以后有机会一定要进行深入的学习。
参考文献
[1](美)BruceEcker著明文华译.《运动模糊图像复原算法》.北京:
机械工业出版社2007/6
[2]陈天河.《图像的退化与复原》.北京电子工业出版社2005
[3]《边缘检测算法研究》(第5版)/张海藩编著—北京:
清华大学出版社,2008.2
[4]《图像复原的应用》(第4版)(PMBOK指南)/(美)项目管理协会 编著,王勇,张斌译.—北京:
电子工业出版社,2009.8
优秀
良好
中等
及格
不及格
报
告
文
档
1.完全按照课程设计文档规范要求
2.内容充实、设计合理
1.完全按照课程设计文档规范要求
2内容较充实、设计较合理
1.基本按照课程设计文档规范要求
2.内容较充实、设计较合理
1.基本按照课程设计文档规范要求
2.内容欠充实、设计欠合理
1.没有按照课程设计文档规范要求
2.内容不充实、设计不合理
算
法
分
析
1.算法正确。
2.算法分析很全面。
3.算法描述很清晰。
1.算法正确。
2.算法分析全面。
3.算法描述清晰。
1.算法正确。
2.算法分析较全面。
3.算法描述较清晰。
1.算法基本正确。
2.算法分析欠全面。
3.算法描述欠清晰。
1.算法不正确。
2.算法分析不全面。
3.算法描述不清晰。
算
法
实
现
1.程序设计思路很清晰。
2.程序代码编写很完整。
3.程序运行正确。
1.程序设计思路清晰。
2.程序代码编写完整。
3.程序运行正确。
1.程序设计思路较清晰。
2.程序代码编写较完整。
3.程序运行正确。
1.程序设计思路欠清晰。
2.程序代码编写欠完整。
3.