《图像复原实验(5页).doc》由会员分享,可在线阅读,更多相关《图像复原实验(5页).doc(5页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、-图像复原实验-第 5 页数字图像处理实验报告1 - 图像复原学生姓名: 学号: 实验时间: 地点: 指导教师: 一、实验目的 运用理论知识,在MATLAB环境下对图像复原技术进行实验验证,学习算法实现的科学方法,增强对算法及其效果的感性认识。(1) 对图像进行复原处理。调用MATLAB中的图像复原函数,编写MATLAB程序,实现对图像的复原。(2) C+编程,利用双线性插值将照片放大。二、实验内容要求:以下实验采用学生本人的照片作为处理对象。(1) 利用MATLAB做图像复原实验。实验方法和步骤如下: 选择一幅完好的照片,进行退化处理,然后对退化后的图像进行复原,并对不同参数的复原结果进行比
2、较。(2) 用VC+编写程序,采用邻近差值和双线性插值两种方法,将图像放大到原来的倍, 并存储为res0.yuv 和。三、实验结果(1)先对图像进行模糊处理,用matlab中fspecial函数产生motion滤波器,然后对灰度图像进行滤波即可得到。再用deconvwnr函数对图像进行维纳滤波可的如下结果(程序代码详见附录):由此可见滤波效果并不是很明显,其中一个原因就是要取合适的len、theta参数是很困难的,所以导致模糊效果不是很好。先对图像进行模糊处理,用matlab中fspecial函数产生motion滤波器,然后对灰度图像进行滤波即可得到。在对图像加高斯噪声,用imnoise函数。
3、再用deconvwnr函数对图像进行维纳滤波可见不同参数情况下的滤波情况如下(程序代码详见附录):由此可见,平滑滤波不一定总是能带来很好的效果,如果图像过于模糊,平滑滤波就会导致图像过于平滑,就会使得图像高频分量也就是边缘轮廓十分的不明显。先对图像进行模糊处理,用matlab中fspecial函数产生motion滤波器,然后对灰度图像进行滤波即可得到。在对图像加高斯噪声,用imnoise函数。再用deconvblind函数对图像进行盲滤波可见不同参数情况下的滤波情况如下(程序代码详见附录1.3):(2)采用双线性插值法对所给图像实现长和宽分别倍的放大。首先,创建C+source文件,编写相关程
4、序,先从C盘根目录下读取文件。分别定义两个一维数组和两个二维数组,分别用来存放原图像和放大后的图像。用FILE函数将文件读取到一位数组中,二维数组的作用是为了方便双线性插值算法的操作而准备的,因为双线性插值是通过目标像素周围最近的四个像素点来进行加权平均得到的插值点。inovij=(int)(1-a)*(1-b)*org(int)x1(int)y1+a*(1-b)*org(int)x1+1(int)y1+(1-a)*b*org(int)x1(int)y1+a*b*org(int)x1+1(int)y1+1)可以得到插值后的点了。再将放大后的图像存入到文件中去。实验结果如下(程序详见附录2.1)
5、:四、实验小结本次实验可谓是收货颇多,我不仅学会了用matlab简单的处理数字图像,还会用c语言创建exe软件了并且能自己做一些简单的图像处理并把它做成想要的软件,如果再加以学习,就可以成功的编出像Photoshop一样的软件,在这高速发展的社会能掌握这样的技能还是非常不错的。在进行插值前先将边界点判断出来并不改变,然后对于非边界点进行双线性插值,通过公式五、附录%=读出图像finley.jpg=%i=imread(E:电力数字图像处理实验实验三finley.jpg);i=rgb2gray(i); %转成灰度图像len=28; theta=14;psf=fspecial(motion,len,
6、theta);blurred=imfilter(i,psf,circular,conv);figure(1) ,imshow(blurred);wnr1=deconvwnr(blurred,psf);figure(2),imshow(wnr1)subplot(131);imshow(i);title(原始图像);subplot(132);imshow(blurred);title(模糊图像);subplot(133);imshow(wnr1);title(维纳滤波后图像);%=读出图像finley.jpg=%i=imread(E:电力数字图像处理实验实验三finley.jpg);i=rgb2g
7、ray(i); %转成灰度图像%对图像进行模糊处理len=28; theta=14;psf=fspecial(motion,len,theta);blurred=imfilter(i,psf,circular,conv);%对图像加噪声noisy=imnoise(blurred,gaussian,0,0.02);imshow(noisy);title(模糊加噪声图像);figure;%测量噪声强度np=0.02*prod(size(i);%对图像预处理,消除不连续边界edged=edgetaper(noisy,psf);j,LA=deconvreg(edged,psf,np);figure ,
8、subplot(221) ;imshow(j);title(低噪声情况)j2=deconvreg(edged,psf,np*1.2);subplot(222); imshow(j2);title(大噪声情况)j3=deconvreg(edged,psf, ,LA);subplot(223);imshow(j3);title(小范围搜索)j4=deconvreg(edged,psf, ,50*LA);subplot(224),imshow(j4);title(大范围搜索)re=1 -2 1;j5=deconvreg(edged,psf, ,LA,re);figure(2),imshow(j4);
9、title(平滑约束复原)%=读出图像finley.jpg=%i=imread(E:电力数字图像处理实验实验三finley.jpg);i=rgb2gray(i); %转成灰度图像%对图像进行模糊处理len1=28; theta1=14;psf1=fspecial(motion,len1,theta1);blurred=imfilter(i,psf1,circular,conv);%对图像加噪声noisy=imnoise(blurred,gaussian,0,0.02);subplot(221);imshow(noisy);title(模糊噪声图像);len2=9;theta2=12;psf2=
10、fspecial(gaussian,len2,theta2); %一个高斯滤波器%用较小的高斯滤波器进行盲滤波并成像underpsf=ones(size(psf2)-4);j1, p1=deconvblind(noisy,underpsf);subplot(222);imshow(j1);title(小高斯滤波器)%用较大的高斯滤波器进行盲滤波并成像overpsf=padarray(underpsf,4,4,replicate,both);j2, p2=deconvblind(noisy,overpsf);subplot(223);imshow(j2);title(大高斯滤波器)%initps
11、f=padarry(underpsf,2,2,replicate,both);j3,p3=deconvblind(noisy,psf2);subplot(224);imshow(j3);title(真实高斯滤波器);2.1#include#include#include#include#includevoid main()unsigned char buf101376,buf2228096;int w=352,h=288,i,j,k=0,n=0;double p=1.5,x1,y1,a,b;int s=w*h;double w2=p*w,h2=p*h;int inov528432,org355
12、288;FILE *fp=fopen(finley.yuv,rb);fread(buf,1,s,fp);fclose(fp);for(i=0;iw;i+)for(j=0;jh;j+,n+,k=n)orgij=bufk;for(i=0;iw2;i+)for(j=0;jw)x1=w;if(y1=0)y1=0;if(y1h)y1=h;inovij=(int)(1-a)*(1-b)*org(int)x1(int)y1+a*(1-b)*org(int)x1+1(int)y1+(1-a)*b*org(int)x1(int)y1+a*b*org(int)x1+1(int)y1+1);n=0;for(i=0;iw2;i+)for(j=0;jh2;j+,n+,k=n)buf2k=inovij;FILE *fp2=fopen(finley_copy.yuv,rb);fwrite(buf2,1,w2*h2,fp);fclose(fp);