北航数字图象处理实验报告.docx
- 文档编号:8683864
- 上传时间:2023-02-01
- 格式:DOCX
- 页数:15
- 大小:18.67KB
北航数字图象处理实验报告.docx
《北航数字图象处理实验报告.docx》由会员分享,可在线阅读,更多相关《北航数字图象处理实验报告.docx(15页珍藏版)》请在冰豆网上搜索。
北航数字图象处理实验报告
数字图像处理实验报告
实验二图像变换实验
1.实验目的
学会对图像进行傅立叶等变换,在频谱上对图像进行分析,增进对图像频域上的感性认识,并用图像变换进行压缩。
2.实验内容
对Lena或cameraman图像进行傅立叶、离散余弦、哈达玛变换。
在频域,对比他们的变换后系数矩阵的频谱情况,进一步,通过逆变换观察不同变换下的图像重建质量情况。
3.实验要求
实验采用获取的图像,为灰度图像,该图像每象素由8比特表示。
具体要求如下:
(1)输入图像采用实验1所获取的图像(Lena、Cameraman);
(2)对图像进行傅立叶变换、获得变换后的系数矩阵;
(3)将傅立叶变换后系数矩阵的频谱用图像输出,观察频谱;
(4)通过设定门限,将系数矩阵中95%的(小值)系数置为0,对图像进行反变换,获得逆变换后图像;
(5)观察逆变换后图像质量,并比较原始图像与逆变后的峰值信噪比(PSNR)。
(6)对输入图像进行离散余弦、哈达玛变换,重复步骤1-5;
(7)比较三种变换的频谱情况、以及逆变换后图像的质量(PSNR)。
4.实验结果
1.DFT的源程序及结果
J=imread('.bmp');
P=fft2(J);
fori=0:
size(P,1)-1
forj=1:
size(P,2)
G(i*size(P,2)+j)=P(i+1,j);
end
end
Q=sort(G);
fori=1:
size(Q,2)
if(i
t=Q(i);
end
end
G(abs(G) forn=0: size(P,1)-1 form=1: size(P,2) W(n+1,m)=G(n*size(P,2)+m); end end f2=ifft2(W); f3=uint8(f2); axes; imshow(f3) axes; imshow(J) psnr1=psnr(J,f3); set,'string',psnr1); 2.DCT的源程序及结果 J=imread('.bmp'); P=dct2(J); fori=0: size(P,1)-1 forj=1: size(P,2) G(i*size(P,2)+j)=P(i+1,j); end end Q=sort(G); fori=1: size(Q,2) if(i t=Q(i); end end G(abs(G) forn=0: size(P,1)-1 form=1: size(P,2) W(n+1,m)=G(n*size(P,2)+m); end end f2=idct2(W); f3=uint8(f2); axes; imshow(f3) axes; imshow(J) psnr1=psnr(J,f3); set,'string',psnr1); 3.哈达玛变换的源程序及结果 J=imread(''); J=rgb2gray(J); P=hadamard(512)*(im2double(J))*hadamard(512); fori=0: size(P,1)-1 forj=1: size(P,2) G(i*size(P,2)+j)=P(i+1,j); end end Q=sort(G); fori=1: size(Q,2) if(i t=Q(i); end end G(abs(G) forn=0: size(P,1)-1 form=1: size(P,2) W(n+1,m)=G(n*size(P,2)+m); end end f2=inv(hadamard(512))*W*inv(hadamard(512)); mm1=max(max(f2));mn1=min(min(f2)); f2=255+255/(mm1-mn1)*(f2-mm1); f3=uint8(f2); axes; imshow(f3) axes; imshow(J) psnr1=psnr(J,f3); set,'string',psnr1);3 实验三图像复原实验 1.实验目的 利用反向滤波和维纳滤波进行降质图像复原,比较不同参数选择对复原结果的影响。 2.实验内容 (1)利用反向滤波方法进行图像复原; (2)利用维纳滤波方法进行图像复原。 3.实验要求 (1)输入图像采用实验1所获取的图像,对输入图像采用运动降质模型,如下式所示 与降值图像相关的参数是: ; (2)对每一种方法通过计算复原出来的图像的峰值信噪比,进行最优参数的选择,包括反向滤波方法中进行复原的区域半径、维纳方法中的噪声对信号的频谱密度比值K; (3)将降质图像和利用最优参数恢复后的图像同时显示出来,以便比较。 4.实验结果 1.运动降质的源代码及结果 I=imread('.bmp'); %I=rgb2gray(I); F=fft2(I); F=fftshift(F); form=-((size(F,1)+1)/2): (size(F,1)+1)/2 forn=-size(F,2)/2: size(F,2)/2 H(m+((size(F,1)+1)/2)+1,n+size(F,2)/2+1)=5*sin(pi*(m+n))*exp(-sqrt(-1)*pi*(m+n))/(pi*(m+n)); end end form=1: size(F,1) forn=1: size(F,2) if(isnan(real(H(m,n)))) G(m,n)=F(m,n); H(m,n)=1; else G(m,n)=F(m,n)*H(m,n); end end end g=ifft2(G); t1=abs(g); mm=max(max(t1));mn=min(min(t1)); t1=255+255/(mm-mn)*(t1-mm); t=uint8(t1); axes; imshow(t) 2.逆滤波的源代码及结果 I=imread('.bmp'); F=fft2(I); F=fftshift(F); form=-((size(F,1)+1)/2): (size(F,1)+1)/2 forn=-size(F,2)/2: size(F,2)/2 H(m+((size(F,1)+1)/2)+1,n+size(F,2)/2+1)=5*sin(pi*(m+n))*exp(-sqrt(-1)*pi*(m+n))/(pi*(m+n)); end end form=1: size(F,1) forn=1: size(F,2) if(isnan(real(H(m,n)))) G(m,n)=F(m,n); H(m,n)=1; else G(m,n)=F(m,n)*H(m,n); end end end form=1: size(F,1) forn=1: size(F,2) if(m^2+n^2<200000) F1(m,n)=G(m,n)/H(m,n); else F1(m,n)=G(m,n); end end end f1=ifft2(F1); f2=abs(f1); mm=max(max(f2));mn=min(min(f2)); f2=255+255/(mm-mn)*(f2-mm); f2=uint8(f2); psnr1=psnr(f2,I); set,'string',psnr1); axes; imshow(f2) 3.维纳滤波的源代码及结果 I=imread('.bmp'); F=fft2(I); F=fftshift(F); form=-((size(F,1)+1)/2): (size(F,1)+1)/2 forn=-size(F,2)/2: size(F,2)/2 H(m+((size(F,1)+1)/2)+1,n+size(F,2)/2+1)=5*sin(pi*(m+n))*exp(-sqrt(-1)*pi*(m+n))/(pi*(m+n)); end end form=1: size(F,1) forn=1: size(F,2) if(isnan(real(H(m,n)))) G(m,n)=F(m,n); H(m,n)=1; else G(m,n)=F(m,n)*H(m,n); end end end fori=1: size(F,1) forj=1: size(F,2) ff2(i,j)=G(i,j)/H(i,j)*(abs(H(i,j))^2)/(abs(H(i,j))^2+10^-38); end end f3=ifft2(ff2); f4=abs(f3); mm1=max(max(f4));mn1=min(min(f4)); f4=255+255/(mm1-mn1)*(f4-mm1); f4=uint8(f4); psnr2=psnr(f4,I); set,'string',psnr2); axes; imshow(f4) 实验四图像分割处理实验 1.实验目的 (1)了解图像分割的基本原理,并利用图像分割算法进行图像分割处理; (2)掌握数学形态学的基本运算。 2.实验内容 (1)利用类间方差阈值算法实现图像的分割处理; (2)利用形态学处理进行处理结果修正。 3.实验要求 (1)实验用图如图所示; 图原始图像 (2)对输入图像进行平滑处理,以减小噪声对分割处理的影响; (3)利用类间方差阈值算法对滤波处理后图像进行分割处理,获取分割图像; (4)利用数学形态学中的腐蚀和膨胀运算处理,剔除分割处理结果中的一些细小的残余误分割点,在进行腐蚀和膨胀运算时可采用半径为r的圆形结构元素,注意比较选取不同r值时的处理结果。 4.实验结果 实验源代码及结果 tu2=imread('图像'); tu2=rgb2gray(tu2); max2=0;min2=255; [m,n]=size(tu2); axes; imshow(tu2); tu3=zeros(m,n); %-----------平滑处理--------------- fork=2: m-1 fors=2: n-1 max4=max(tu2(k-1,s),tu2(k,s-1));max5=max(tu2(k+1,s),tu2(k,s+1)); min4=min(tu2(k-1,s),tu2(k,s-1));min5=min(tu2(k+1,s),tu2(k,s+1)); tu2(k,s)=(max(max4,max5)+min(min4,min5))/2; end end axes; imshow(tu2); %-----------平滑处理中点滤波--------------- fork=1: m max1=max(tu2(k,: )); if(max1==255)max2=max1;break;end if(max2 end%找出最大灰度值max2 fork=1: n min1=min(tu2(k,: )); if(min1==0)min2=min1;break; elseif(min2>min1)min2=min1;end end%找出最小灰度值min2 max2=double(max2); min2=double(min2);%数据类型转换! ! ! ! ni=zeros(1,max2-min2+1); fork=1: m fors=1: n temp=double(tu2(k,s))-min2+1; ni(1,temp)=ni(1,temp)+1; end end%统计各灰度值出现次数 %---------------------------找阈值---------------------- w0=0;ut=0;u0=0;max3=0;sum=m*n; fort=0: size(ni,2)-1 ut=ut+t*ni(t+1)/sum; end fort=0: size(ni,2)-1 w0=w0+ni(t+1)/sum; w1=1-w0; u0=u0+t*ni(t+1)/sum; u1=(ut-w0*u0)/w1; temp=w0*w1*(u1-u0)*(u1-u0); if(max3 max3=temp; tmax=t; end end fork=1: m fors=1: n if(tu2(k,s)>=tmax) tu3(k,s)=255; end end end axes; imshow(tu3); %-----------------------类间方差阈值分割-------------- %-----------------------腐蚀和膨胀------------------- se=strel('disk',2); tu4=imerode(tu3,se); axes; imshow(tu4); tu4=imdilate(tu4,se); axes; imshow(tu4); 实验五用Hough变换进行曲线的参数提取 1.实验目的 (1)了解边缘检测算子的原理,并利用边缘算子对图像进行检测; (2)掌握Hough变换的基本原理。 2.实验内容 (1)分别将原始图像及加高斯噪声、椒盐噪声后的图像中圆形边缘检测出来; (2)用Hough变换对边缘进行参数提取。 3.实验要求 (1)实验用图像文件: 原始图像()、加高斯噪声后图像()和加椒盐噪声后图像(); 图原始图像 (2)在含有噪声的背景下,先对图像中值滤波,再进行边缘检测; (3)将目标的边界提取出来。 边缘检测算子可利用matlab自带函数实现,使用Robert、Sobel和Laplacian算子; (4)利用Hough变换提取的参数绘制曲线,并叠加在噪声图像上。 4.实验要点 (1)利用算子进行边缘检测: 可先将加噪以后的图像进行平滑滤波,如采用9*9的掩膜模板进行中值滤波;为了对图像中图形边缘进行线性提取,可通过设置阈值将图像变为二值图像,再利用三种不同的算子(Robert、Sobel和Laplacian)来完成边缘的检测; (2)Hough变换进行曲线参数提取: 在使用三种算子对加噪后图像进行边缘检测以后,使用Hough变换对检测后图像进行参数提取,并在提取成功以后,使用提取获得的参数进行图像的重建,最后将重建图像叠加到加噪图像中。 注意在进行Hough变换时,对比观察获得图像与使用算子进行边缘检测获得图像之间的区别。 5.实验结果 1.原图 利用Robert算子进行边缘检测 I=imread(''); I=rgb2gray(I); BW=edge(I,'roberts'); axes; imshow(BW) 利用Sobel算子进行边缘检测 I=imread(''); I=rgb2gray(I); BW=edge(I,'sobel'); axes; imshow(BW) 利用Laplacian算子进行边缘检测 I=imread(''); I=rgb2gray(I); BW=edge(I,'log'); axes; imshow(BW) Hough变换 I=imread(''); I=rgb2gray(I); BW=edge(I,'sobel'); r_max=100; r_min=40; step_r=1; step_angle=pi/20; p=; [m,n]=size(BW); size_r=round((r_max-r_min)/step_r)+1; size_angle=round(2*pi/step_angle); hough_space=zeros(m,n,size_r); [rows,cols]=find(BW); ecount=size(rows); %Hough变换 %将图像空间(x,y)对应到参数空间(a,b,r) %a=x-r*cos(angle) %b=y-r*sin(angle) fori=1: ecount forr=1: size_r fork=1: size_angle a=round(rows(i)-(r_min+(r-1)*step_r)*cos(k*step_angle)); b=round(cols(i)-(r_min+(r-1)*step_r)*sin(k*step_angle)); if(a>0&a<=m&b>0&b<=n) hough_space(a,b,r)=hough_space(a,b,r)+1; end end end end %搜索超过阈值的聚集点 max_para=max(max(max(hough_space))); index=find(hough_space>=max_para*p); length=size(index); hough_circle=false(m,n); fori=1: ecount fork=1: length par3=floor(index(k)/(m*n))+1; par2=floor((index(k)-(par3-1)*(m*n))/m)+1; par1=index(k)-(par3-1)*(m*n)-(par2-1)*m; if((rows(i)-par1)^2+(cols(i)-par2)^2<(r_min+(par3-1)*step_r)^2+5&... (rows(i)-par1)^2+(cols(i)-par2)^2>(r_min+(par3-1)*step_r)^2-5) hough_circle(rows(i),cols(i))=true; end end end %打印检测结果 fork=1: length par3=floor(index(k)/(m*n))+1; par2=floor((index(k)-(par3-1)*(m*n))/m)+1; par1=index(k)-(par3-1)*(m*n)-(par2-1)*m; par3=r_min+(par3-1)*step_r; fprintf(1,'Center%d%dradius%d\n',par1,par2,par3); para(: k)=[par1,par2,par3]; end axes; imshow(I),holdon viscircles([par2par1],par3); 2.加高斯噪声源代码及结果 I=imread(''); I=rgb2gray(I); I=imnoise(I,'gaussian'); axes; imshow(I) imwrite(I,''); 利用Robert算子进行边缘检测 利用Sobel算子进行边缘检测 利用Laplacian算子进行边缘检测 Hough变换 3.加椒盐噪声源代码及结果 I=imread(''); I=rgb2gray(I); I=imnoise(I,'salt&pepper'); axes; imshow(I) imwrite(I,'') 利用Robert算子进行边缘检测 利用Sobel算子进行边缘检测 利用Laplacian算子进行边缘检测 Hough变换
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 北航 数字图象处理 实验 报告