数字图像处理实验指导书前言数字图像处理技术的研究内容涉及工程学、计算机科学、信息科学、统计学、物理学、生物医学工程和社会科学等领域�它已成为高等理工院校电子信息工程、通信工程、生物医学工程、信号与信息处理等学科的一门重要的专业技术课。作为人类获取信息的重要来源及利用信息的重要手段�数字图像处理技术被广泛应用于工业、农业、交通、气象、生物医学、军事、公安、机器人视觉、导航、多媒体信息网络通信等领域�给人类带来了巨大的经济和社会效益。考虑到实际需要,在注重理论与实践的前提下,编写了这本实验指导资料。本书以实践为基础,利用MATLAB图像处理工具箱在数学运算和算法验证上的优势,结合教学实际,安排了熟悉matlab编程环境和图像基本操、图像变换、图像增强和滤波增强、图像滤波恢复、图像的压缩编码、图像的边缘检测和分割、图像分割后的目标对象的参数测量以及伪彩色图像处理等部分的相关实验8个。通过具体的上机实践,激发同学们的学习激情在学习和实践中充分体验数字图像处理的内涵和它的魅力。实验一熟悉matlab编程环境和图像基本操作一、实验目的及要求1.熟悉MATLAB编程环境2.熟悉图像的基本操作方法:读取、显示、保存、3.熟悉简单二值图像的创建以及图像的像素平移变换二、实验任务1.从电脑中读取一幅图片并显示,然后保存到一个制定路径2.创建一幅二值灰度图像,背景灰度级为0,图像中间矩形框的灰度级为2553.对二值图像中矩形框的像素进行平移变换三、示例代码[iname,ipath]=uigetfile({'*.jpg';'*.bmp';'*.tif';'*.*'},'loadimage','');%读取图片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;%定义像素平移量R=[1,0,shiftdis;0,1,shiftdis;0,0,1];%定义平移矩阵temp=[0,0,1]'resultimage=zeros(M,N,'uint8');fori=100:156%平移转换forj=100:156temp(1)=i;temp(2)=j;transdot=R*temp;resultimage(transdot(1),transdot(2))=bwimage(i,j);endendfigure;imshow(resultimage);实验二图像变换(傅里叶、离散余弦)一、实验目的及要求1.熟悉傅里叶变换和离散余弦变换的原理2.掌握傅里叶变换和离散余弦变换的算法和应用二、实验任务1.从电脑中读取一幅图片并显示2.将读取的彩色图片转换为灰度图3.对灰度图分别进行傅里叶变换和离散余弦变换三、示例代码[iname,ipath]=uigetfile({'*.jpg';'*.bmp';'*.tif';'*.*'},'loadimage','');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;Y=fftshift(X);%将低频点移动到中心Y=abs(Y);imshow(log(Y),[]);figure;imagecos=dct2(igray);%离散余弦变换imshow(log(abs(imagecos)))实验三图像的空域增强和滤波增强一、实验目的及要求1.熟悉图像的直方图计算方法和直方图均衡化原理2.熟悉图像的巴特沃斯滤波和理想低通滤波原理2.掌握图像的直方图计算的实现和直方图均衡化算法、图像的巴特沃斯滤波和理想低通滤波算法和应用二、实验任务1.从电脑中读取一幅图片并显示2.将读取的彩色图片转换为灰度图3.计算灰度图的统计直方图并进行直方图均衡化以增强图像4.对灰度图进行维纳滤波三、示例代码[iname,ipath]=uigetfile({'*.jpg';'*.bmp';'*.tif';'*.*'},'loadimage','');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);%巴特沃斯滤波和理想低通滤波[iname,ipath]=uigetfile({'*.jpg';'*.bmp';'*.tif';'*.*'},'loadimage','');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);n2=fix(N2/2);fori=1:N1forj=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));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,1:2*d+1)=1/(2*d);%设定函数h[iname,ipath]=uigetfile({'*.jpg';'*.bmp';'*.tif';'*.*'},'loadimage','');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*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.熟悉图像的压缩编码的基本原理和方法2.在MATLAB实现用离散余弦变换(DCT)对图像进行压缩编码2.在MATLAB实现用行程编码(RLE)对图像进行压缩编码二、实验任务1.从电脑中读取一幅图片2.利用DCT对图像进行压缩编码3.利用RLE对图像进行压缩编码三、示例代码%%DCT图像压缩编码[iname,ipath]=uigetfile({'*.jpg';'*.bmp';'*.tif';'*.*'},'loadimage','');IPATH=[ipath,iname];I=imread(IPATH);I=rgb2gray(I);I=im2double(I);%将原图像转换为双精度数据类型T=dctmtx(8);%产生二维DCT变换矩阵B=blkproc(I,[88],'P1*x*P2',T,T');%计算二维DCT矩阵T,转置T’(函数p1*x*p2的参数)mask=[1111000011100000110000001000000000000000000000000000000000000000];%二值掩膜,用来压缩DCT系数,只保留DCT系数中左上角的10个B2=blkproc(B,[88],'P1.*x',mask);%只保留DCT变换的10个系数I2=blkproc(B2,[8,8],'P1*x*P2',T',T);%逆DCT,重构图像imshow(I);title('原图像');%显示原图figure;imshow(I2);title('DCT压缩图像');%显示压缩后的图像。对比原始图像和压缩后图像,虽然舍弃了部分信息,但图像仍然清晰%%RLE图像压缩编码[iname,ipath]=uigetfile({'*.jpg';'*.bmp';'*.tif';'*.*'},'loadimage','');IPATH=[ipath,iname];I=imread(IPATH);I=rgb2gray(I);[mn]=size(I);tu2=reshape(I,1,m*n);%将原始图像转换为一维数据tu3=reshape(tu2,m,n);%重建二维数组图像figure,imshow(tu3)title('原始图像');X=tu3(:);%将tu3转换为一维数据Xj=1;tu4(1)=1;forz=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;form=1:tu4lengthforn=1:1:tu4(m);rec_tu(l)=data(m);l=l+1;endendrec2_tu=reshape(rec_tu,256,256);%将一维数据转换为二维图像数据figure;imshow(rec2_tu);title('解压恢复后图像');实验六图像的边缘检测和分割一、实验目