1、苏州大学数字图像Matlab上机实验要点数字图像处理与分析实验报告专业 计算机科学与技术 年级 10级 姓名 学号 任课老师 龚声蓉 指导老师 蒋德茂 实验室 理工楼243机房 学期 2013(春) 苏州大学计算机科学与技术学院统一印制二零一三年六月实验一:空域及频域增强一 实验目的(1) 了解图像变换的意义和手段;(2) 熟悉傅里叶变换的基本性质; (3) 通过本实验掌握利用MATLAB编程实现数字图像的傅立叶变换及滤波锐化和复原处理;(4) 了解平滑处理的算法和用途,学习使用均值滤波、中值滤波和拉普拉斯锐化进行图像增强处理的程序设计方法。二 实验内容Matlab编程:实现Butterwor
2、th低通滤波和Butterworth高通滤波。提示:预设Butterworth的阶等于2,d0=10。使用cameraman.tif作为原图像。要求:使用subplot函数按3行2列分别显示(1)原始图(2)傅里叶频谱(3)Butterworth低通滤波(4)低通滤波图(5)Butterworth高通滤波(6)高通滤波图 三 实验分析(1) Roberts算子用来实现消除图像模糊地增强的方法,即“锐化”。此处理加强图像的边界和细节。Roberts算子提出的是在2*2的邻域上计算对角导数产生的偏导数在图像处理中心点上用均值或是绝对值求和的形式结合起来。但是此算法增强噪声的缺陷也在图像中体现了。(
3、2) 巴特沃思滤波器去的频率和通过的频率之间没有明显的不连续性,图像的模糊程度降低,而且也没有振铃效应,这是由于在低频和高频之间,滤波器平滑过渡的缘故。四 程序及实验结果 程序代码:clc,clear all;I=imread(cameraman.tif);I=im2double(I);subplot(3,2,1);imshow(I,);%在一张图里依次显示,三行两列title(原始图); F=fft2(I); G=fftshift(F); subplot(3,2,2);imshow(log(1+abs(G),);title(傅里叶频谱); m,n=size(G); c1=floor(m/2)
4、; %中心行坐标c2=floor(n/2); %中心列坐标 d0=10;for i=1:m for j=1:n d=sqrt(i-c1)2+(j-c2)2); h=1/(1+(d/d0)4); A(i,j)=h*G(i,j); endendsubplot(3,2,3);imshow(log(1+abs(A),);title(Butterworth低通滤波); d0=10;for i=1:m for j=1:n d=sqrt(i-c1)2+(j-c2)2); h=1/(1+(d/d0)4); A(i,j)=h*G(i,j); endendf=ifftshift(A);i=real(ifft2(f
5、);subplot(3,2,4);imshow(i,);title(低通滤波图); d0=10;for i=1:m for j=1:n d=sqrt(i-c1)2+(j-c2)2); h=1/(1+(d0/d)4); A(i,j)=h*G(i,j); endendsubplot(3,2,5);imshow(log(1+abs(A),);title(Butterworth高通滤波); d0=40;for i=1:m for j=1:n d=sqrt(i-c1)2+(j-c2)2); h=1/(1+(d0/d)4); B(i,j)=h*G(i,j); endendf=ifftshift(B);i=
6、real(ifft2(f);subplot(3,2,6);imshow(i,);title(高通滤波图); 实验结果:实验二:图像编码与压缩一实验目的(1) 了解图像编码与压缩过程;(2) 实践算数编码及解码的Matlab编程实现;二实验内容Matlab编程:算术编码及解码。提示:已知字符事件出现的概率如下表表:数据出现的概率和取值范围字符概率范围a0.40.0, 0.4)b0.40.4, 0.8)c0.20.8, 1.0)要求:(1) 对输入的字符序列(如aabbc)进行算术编码。(2) 对得到的编码进行解码。 三实验分析(1)算术编码方法是将被编码的一则消息或符号串(序列)表示成0和1之间
7、的一个间隔(Interval),即对一串符号直接编码成0,1区间上的一个浮点小数。(2)解码是编码的逆过程。四程序及实验结果程序代码:clcclear allclose allstring_s=input(请按要求输入字符串:);j,k=size(string_s);pa=0.4;pb=0.4;pc=0.2; disp(输入的字符串是:,string_s) format long for i=1:k if i=1 switch 1 case string_s(i)=a a1=0; a2=0+pa; case string_s(i)=b a1=pa; a2=pa+pb; case string_
8、s(i)=c a1=pa+pb; a2=1; end l=a2-a1; end if (i=2)&(i=1&inum switch 1 case ym1(i)=a bm0=(bm0-0)/pa; case ym1(i)=b bm0=(bm0-pa)/pb; case ym1(i)=c bm0=(bm0-pa-pb)/pc; end i=i+1; ym1(i)=YM(bm0);enddisp(-)disp(译码结果是:,ym1)disp(-)function ym=YM(A)pa=0.4;pb=0.4;pc=0.2; switch 1 case 0=A&Apa ym=a; case pa=A&A
9、pa+pb ym=b; case pa+pb=A&A=1|A0 yuzhi=i endend q=im2bw(I,yuzhi/255);subplot(2,2,4),imshow(q);试验结果:实验4:利用Hough变换检测直线一实验目的Matlab也提供了几个Hough变换的函数:hough、houghpeaks、houghlines,这些函数大大简化了编程复杂度。请使用这几个函数来编程实现对下图直线划痕的检测。要求程序的每一句都必须加注释说明。二实验内容1读入图像 选取有较多直线及部分曲线以作对比的图像作为实验素材。 3实现Houg变换,检测出图像中的直线 Hough变换是一种利用图像的
10、全局特征将特定形状的边缘连接起来,形成连续平滑边缘的一种方法。它通过将源图像上的点影射到用于累加的参数空间,实现对已知解析式曲线的识别。先前对边缘图像进行二值化处理,然后再用hough变换提取直线,最后用颜色标记之。三实验分析四程序实验结果实验代码clear,clc; %清屏I = imread(划痕2.png); subplot(2,2,1); %显示原来的图像imshow(I); title(原图像); %原图像名字 Img = edge(I,prewitt); %利用prewitt算子提取边缘subplot(2,2,2); Imshow(Img); title(提取边缘后); %显示提取
11、边缘的图片 H, T, R = hough(Img); %hough变换subplot(2,2,3); imshow(sqrt(H), ); title(hough变换); %显示hough变换的结果P = houghpeaks(H, 15, threshold, ceil(0.3*max(H(:); %寻找最大点lines = houghlines(Img, T, R, P,FillGap,10,MinLength,20 ); %返回找到的直线subplot(2,2,4); imshow(I);title(最终结果); %显示标出划痕后的图像hold on;max_len = 0;for k = 1:length(lines) xy = lines(k).point1; lines(k).point2; plot(xy(:,1),xy(:,2),LineWidth,2,Color,green); plot(xy(1,1),xy(1,2),x,LineWidth,2,Color,yellow); plot(xy(2,1),xy(2,2),x,LineWidth,2,Color,red); %用不同的颜色显示end实验结果:
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1