《数字图像处理-实验指导书.docx》由会员分享,可在线阅读,更多相关《数字图像处理-实验指导书.docx(16页珍藏版)》请在得力文库 - 分享文档赚钱的网站上搜索。
1、数字图像处理实验指导书前 言数字图像处理技术的研究内容涉及工程学、计算机科学、信息科学、统计学、物理学、生物医学工程和社会科学等领域 它已成为高等理工院校电子信息工程、通信工程、生物医学工程、信号与信息处理等学科的一门重要的专业技术课。作为人类获取信息的重要来源及利用信息的重要手段 数字图像处理技术被广泛应用于工业、农业、交通、气象、生物医学、军事、公安、机器人视觉、导航、多媒体信息网络通信等领域 给人类带来了巨大的经济和社会效益。考虑到实际需要,在注重理论与实践的前提下,编写了这本实验指导资料。本书以实践为基础,利用MATLAB 图像处理工具箱在数学运算和算法验证上的优势,结合教学实际,安排
2、了熟悉matlab编程环境和图像基本操、图像变换、图像增强和滤波增强、图像滤波恢复、图像的压缩编码、图像的边缘检测和分割、图像分割后的目标对象的参数测量以及伪彩色图像处理等部分的相关实验8个。通过具体的上机实践,激发同学们的学习激情在学习和实践中充分体验数字图像处理的内涵和它的魅力。实验一实验一熟悉熟悉matlab编程环境和图像基本操作编程环境和图像基本操作一、实验目的及要求1.熟悉MATLAB编程环境2.熟悉图像的基本操作方法:读取、显示、保存、3.熟悉简单二值图像的创建以及图像的像素平移变换二、实验任务1从电脑中读取一幅图片并显示,然后保存到一个制定路径2创建一幅二值灰度图像,背景灰度级为
3、0,图像中间矩形框的灰度级为2553对二值图像中矩形框的像素进行平移变换三、示例代码iname,ipath=uigetfile(*.jpg;*.bmp;*.tif;*.*,load image,);%读取图片I=ipath,iname;image=imread(I);imshow(image);%显示图片imwrite(image,picture.jpg);%保存图片bwimage=zeros(256,256,uint8);%创建二值图像bwimage(100:156,100:156)=255;imshow(bwimage);M,N=size(bwimage);shiftdis=80;%定义像
4、素平移量R=1,0,shiftdis;0,1,shiftdis;0,0,1;%定义平移矩阵temp=0,0,1resultimage=zeros(M,N,uint8);for i=100:156%平移转换for j=100:156temp(1)=i;temp(2)=j;transdot=R*temp;resultimage(transdot(1),transdot(2)=bwimage(i,j);endendfigure;imshow(resultimage);实验二实验二图像变换(傅里叶、离散余弦)图像变换(傅里叶、离散余弦)一、实验目的及要求1.熟悉傅里叶变换和离散余弦变换的原理2.掌握傅
5、里叶变换和离散余弦变换的算法和应用二、实验任务1从电脑中读取一幅图片并显示2将读取的彩色图片转换为灰度图3对灰度图分别进行傅里叶变换和离散余弦变换三、示例代码iname,ipath=uigetfile(*.jpg;*.bmp;*.tif;*.*,load image,);I=ipath,iname;image=imread(I);imshow(image);figure;igray=rgb2gray(image);%将彩色图转换为灰度图imshow(igray,);figure;X=fft2(igray);%二维傅里叶变换X2=abs(X.2);imshow(log(X2),);figure;
6、Y=fftshift(X);%将低频点移动到中心Y=abs(Y);imshow(log(Y),);figure;imagecos=dct2(igray);%离散余弦变换imshow(log(abs(imagecos)实验三实验三图像的空域增强和滤波增强图像的空域增强和滤波增强一、实验目的及要求1.熟悉图像的直方图计算方法和直方图均衡化原理2.熟悉图像的巴特沃斯滤波和理想低通滤波原理2.掌握图像的直方图计算的实现和直方图均衡化算法、图像的巴特沃斯滤波和理想低通滤波算法和应用二、实验任务1从电脑中读取一幅图片并显示2将读取的彩色图片转换为灰度图3计算灰度图的统计直方图并进行直方图均衡化以增强图像4
7、.对灰度图进行维纳滤波三、示例代码iname,ipath=uigetfile(*.jpg;*.bmp;*.tif;*.*,load image,);I=ipath,iname;image=imread(I);imshow(image);figure;igray=rgb2gray(image);%彩色图转换为灰度图imshow(igray,);figure;imhist(igray);%计算灰度图的统计直方图figure;eq_igray=histeq(igray);%灰度统计直方图均衡化imshow(eq_igray);figure;%显示均衡化化后的直方图imhist(eq_igray);%
8、巴特沃斯滤波和理想低通滤波iname,ipath=uigetfile(*.jpg;*.bmp;*.tif;*.*,load image,);I=ipath,iname;I1=imread(I);imshow(I1);title(原始图像);I1=rgb2gray(I1);figure;imshow(I1);I2=imnoise(I1,salt&pepper);figure;imshow(I2);title(噪声图像);f=double(I2);g=fft2(f);%二维傅里叶变换g=fftshift(g);%转换数据矩阵N1,N2=size(g);n=2;d0=50;n1=fix(N1/2);
9、n2=fix(N2/2);for i=1:N1for j=2:N2d=sqrt(i-n1)2+(j-n2)2);h=1/(1+0.414*(d/d0)(2*n);%计算巴特沃斯低通滤波转换函数result1(i,j)=h*g(i,j);if(g(i,j)50)%进行理想低通滤波result2(i,j)=0;elseresult2(i,j)=g(i,j);endendendresult1=ifftshift(result1);%巴特沃斯低通滤波后反变换result2=ifftshift(result2);%理想低通滤波后反变换X2=ifft2(result1);X3=uint8(real(X2)
10、;figure;imshow(X3);title(Butterworth 滤波图像);X4=ifft2(result2);X5=uint8(real(X4);figure;imshow(X5);title(理想低通滤波器);实验四实验四图像的滤波恢复图像的滤波恢复一、实验目的及要求1.熟悉图像恢复的基本原理2.熟悉图像的维纳滤波恢复原理2.掌握图像的维纳滤波恢复算法和应用二、实验任务1从电脑中读取一幅图片并显示2将读取的彩色图片转换为灰度图3人为对灰度图增加噪声4利用维纳滤波算法对噪声图像进行恢复以提高显示质量三、示例代码d=15;%设定长度h=zeros(2*d+1,2*d+1);h(d+1
11、,1:2*d+1)=1/(2*d);%设定函数hiname,ipath=uigetfile(*.jpg;*.bmp;*.tif;*.*,load image,);I=ipath,iname;f=imread(I);imshow(f);f=rgb2gray(f);figure;imshow(f);m,n=size(f);%计算图像大小(尺寸)fe=zeros(m+2*d,n+2*d);%扩增ffe(1:m,1:n)=f;he=zeros(m+2*d,n+2*d);he(1:2*d+1,1:2*d+1)=h;%扩增hF=fft2(fe);H=fft2(he);ns=5*rand(m+2*d,n+2
12、*d);%产生噪声g=ifft2(F.*H)+ns;%产生噪声且加载噪声的图像G=fft2(g);K=0;%设定K值F_est=(H.2)./(H.2+K).*G./H;%维纳滤波f_est=real(ifft2(F_est);%恢复后的图像imshow(f);显示原始图像figure;imshow(g(d+1:m+d,d+1:n+d),min(g(:)max(g(:);%、显示模糊后加噪声的图像figure;imshow(f_est(1:m,1:n),min(f_est(:)max(f_est(:);%显示恢复后的图像实验五实验五图像的压缩编码图像的压缩编码一、实验目的及要求1.熟悉图像的压
13、缩编码的基本原理和方法2.在MATLAB实现用离散余弦变换(DCT)对图像进行压缩编码2.在MATLAB实现用行程编码(RLE)对图像进行压缩编码二、实验任务1从电脑中读取一幅图片2利用DCT对图像进行压缩编码3利用RLE对图像进行压缩编码三、示例代码%DCT图像压缩编码iname,ipath=uigetfile(*.jpg;*.bmp;*.tif;*.*,load image,);IPATH=ipath,iname;I=imread(IPATH);I=rgb2gray(I);I=im2double(I);%将原图像转换为双精度数据类型T=dctmtx(8);%产生二维DCT变换矩阵B=blk
14、proc(I,8 8,P1*x*P2,T,T);%计算二维DCT 矩阵T,转置T(函数p1*x*p2的参数)mask=1 1 1 1 0 0 0 01 1 1 0 0 0 0 01 1 0 0 0 0 0 01 0 0 0 0 0 0 00 0 0 0 0 0 0 00 0 0 0 0 0 0 00 0 0 0 0 0 0 00 0 0 0 0 0 0 0;%二值掩膜,用来压缩DCT系数,只保留DCT系数中左上角的10个B2=blkproc(B,8 8,P1.*x,mask);%只保留DCT变换的10个系数I2=blkproc(B2,8,8,P1*x*P2,T,T);%逆DCT,重构图像ims
15、how(I);title(原图像);%显示原图figure;imshow(I2);title(DCT压缩图像);%显示压缩后的图像。对比原始图像和压缩后图像,虽然舍弃了部分信息,但图像仍然清晰%RLE图像压缩编码iname,ipath=uigetfile(*.jpg;*.bmp;*.tif;*.*,load image,);IPATH=ipath,iname;I=imread(IPATH);I=rgb2gray(I);m n=size(I);tu2=reshape(I,1,m*n);%将原始图像转换为一维数据tu3=reshape(tu2,m,n);%重建二维数组图像figure,imshow
16、(tu3)title(原始图像);X=tu3(:);%将tu3转换为一维数据Xj=1;tu4(1)=1;for z=1:1:(length(X)-1)%行程编码ifX(z)=X(z+1)tu4(j)=tu4(j)+1;elsedata(j)=X(z);j=j+1;tu4(j)=1;endenddata(j)=X(length(X);%datatu4length=length(tu4);%计算图像经行程编码后的数据量%行程解码l=1;for m=1:tu4lengthfor n=1:1:tu4(m);rec_tu(l)=data(m);l=l+1;endendrec2_tu=reshape(re
17、c_tu,256,256);%将一维数据转换为二维图像数据figure;imshow(rec2_tu);title(解压恢复后图像);实验六实验六图像的边缘检测和分割图像的边缘检测和分割一、实验目的及要求1.熟悉图像的边缘检测和分割的基本原理和方法2.在MATLAB实现基于各种算子(Roberts算子、Prewitt算子、Sobel算子和拉普拉斯算子)的边缘检测方法2.在MATLAB中利用分水岭变换方法对图像进行分割二、实验任务1从电脑中读取一幅图片2利用Roberts算子、Prewitt算子、Sobel算子和拉普拉斯算子检测图像的边缘3利用分水岭变换方法分割图像三、示例代码%边缘检测inam
18、e,ipath=uigetfile(*.jpg;*.bmp;*.tif;*.*,load image,);IPATH=ipath,iname;I=imread(IPATH);imshow(I);title(原图像);ps=rgb2gray(I);m,n=size(ps);%进行sobel微分算子边缘检测pa=edge(ps,sobel);pb=edge(ps,roberts);%进行Roberts算子边缘检测,门限值采用MATLAB默认值pc=edge(ps,prewitt);%进行prewitt算子边缘检测,门限值采用MATLAB默认值pd=edge(ps,log);%进行拉普拉斯算子边缘检
19、测,门限值采用MATLAB默认值figure;imshow(pa);title(sobel算子边缘检测得到的图像);figure;imshow(pb);title(roberts算子边缘检测得到的图像);figure;imshow(pc);title(prewitt算子边缘检测得到的图像);figure;imshow(pd);title(拉普拉斯算子边缘检测得到的图像);%分水岭变换方法图像分割iname,ipath=uigetfile(*.jpg;*.bmp;*.tif;*.*,load image,);IPATH=ipath,iname;f=imread(IPATH);f=rgb2gray
20、(f);imshow(f);g=im2bw(f,graythresh(f);%对图像进行二值化figure,imshow(g);gc=g;D=bwdist(gc);L=watershed(-D);w=L=0;g2=g&w;figure;imshow(g2);实验实验七七图像分割后的目标对象的参数测量图像分割后的目标对象的参数测量一、实验目的及要求1.熟悉图像的边缘检测和分割的基本原理和方法2掌握利用MATLAB库函数计算分割后图像中对象的面积、欧拉数的方法3掌握利用MATLAB库函数标记分割后图像中对象的周长二、实验任务1读取一幅图像,利用实验六中的方法图像进行分割;2计算分割后图像中对象的面
21、积和欧拉数;3标记分割后图像中对象的周长。三、示例代码iname,ipath=uigetfile(*.jpg;*.bmp;*.tif;*.*,loadimage,);IPATH=ipath,iname;f=imread(IPATH);imshow(f);g=im2bw(f,graythresh(f);%对图像进行二值化figure,imshow(g);gc=g;D=bwdist(gc);L=watershed(-D);%分水岭分割方法w=L=0;g2=g&w;figure;imshow(g2);%参数测量和周长标记total=bwarea(g2);%求面积stotal=sprintf(tota
22、l=%f,total);disp(stotal);eul=bweuler(g2);%求欧拉数seul=sprintf(eul=%f,eul);disp(seul);lengthBW=bwperim(g2,8);%标记周长figure;imshow(lengthBW);实验实验八八伪彩色图像处理伪彩色图像处理一、实验目的及要求1.掌握图像伪彩色处理的原理(伪彩色处理是把灰度图像的各个不同灰度按照线性或非线性的映射函数变换成不同的彩色,也可以将原来不是图像的数据表示成灰度图像,再转换成彩色图像达到增强的目的)2.掌握伪彩色图像处理增强的方法3掌握空域伪彩色图像处理的方法二、实验任务1读取一幅图片2
23、将彩色图像转换为灰度图2实现利用变换法的伪彩色处理的方法三、示例代码iname,ipath=uigetfile(*.jpg;*.bmp;*.tif;*.*,load image,);IPATH=ipath,iname;I=imread(IPATH);I=rgb2gray(I);imshow(I);I=double(I);M,N=size(I);L=256;for i=1:Mfor j=1:Nif I(i,j)=L/4R(i,j)=0;G(i,j)=4*I(i,j);B(i,j)=L;elseif I(i,j)=L/2R(i,j)=0;G(i,j)=L;B(i,j)=-4*I(i,j)+2*L;elseif I(i,j)=3*L/4R(i,j)=4*I(i,j)-2*L;G(i,j)=L;B(i,j)=0;elseR(i,j)=L;G(i,j)=-4*I(i,j)+4*L;B(i,j)=0;endendendfor i=1:Mfor j=1:NOUT(i,j,1)=R(i,j);OUT(i,j,2)=G(i,j);OUT(i,j,3)=B(i,j);endendOUT=OUT/256;figure;imshow(OUT);
限制150内