- 510.50 KB
- 2022-08-13 发布
- 1、本文档由用户上传,淘文库整理发布,可阅读全部内容。
- 2、本文档内容版权归属内容提供方,所产生的收益全部归内容提供方所有。如果您对本文有版权争议,请立即联系网站客服。
- 3、本文档由用户上传,本站不保证质量和数量令人满意,可能有诸多瑕疵,付费之前,请仔细阅读内容确认后进行付费下载。
- 网站客服QQ:403074932
实验二形态算子一、实验目的与要求目的:学习常见的数学形态学运算基本方法,了解腐蚀、膨胀、开运算、闭运算取得的效果,培养处理实际图像的能力。要求:上机运行,调试通过。二、实验设备:计算机、Matlab软件、VC++或C语言软件三、实验内容:利用VC++/C或MatLab工具箱中关于数学形态学运算的函数,对二值图像进行膨胀、腐蚀和开运算、闭运算处理。四、实验原理:膨胀:腐蚀:开运算:闭运算:五、实验报告内容(1)描述实验的基本步骤,用数据和图片给出各个步骤中取得的实验结果,并进行必要的讨论,必须包括原始图像及其计算/处理后的图像。(2)结合实验内容,评价腐蚀、膨胀以及开运算、闭运算的效果,并说明它们各自适用条件。%对二值图像做腐蚀、膨胀以及开运算和闭运算closeall;clc;clear;I=imread('C:\DocumentsandSettings\Owner\My\nDocuments\MATLAB\road3.jpg');I2=im2bw(I);%对读入图像做二值化处理[m,n]=size(I2);subplot(2,3,1),imshow(I)title('原始图像');subplot(2,3,2),imshow(I2)title('二值图像');s=[11;10];%腐蚀膨胀算子%腐蚀运算fori=1:m-1forj=1:n-1if(I2(i,j)==1)&&(I2(i+1,j)==1)&&(I2(i,j+1)==1)I3(i,j)=1;endendendsubplot(2,3,3),imshow(I3)title('图像腐蚀1次');%膨胀运算fori=1:m-1forj=1:n-1if(I2(i,j)==1)||(I2(i+1,j)==1)||(I2(i,j+1)==1)I4(i,j)=1;endendendsubplot(2,3,4),imshow(I4)title('图像膨胀1次');\n%开运算fori=1:m-2forj=1:n-2if(I3(i,j)==1)||(I3(i+1,j)==1)||(I3(i,j+1)==1)I5(i,j)=1;endendendsubplot(2,3,5),imshow(I5)title('开运算');%闭运算fori=1:m-2forj=1:n-2if(I4(i,j)==1)&&(I4(i+1,j)==1)&&(I4(i,j+1)==1)I6(i,j)=1;endendendsubplot(2,3,6),imshow(I6)title('闭运算');\n由上图易知,原图像经1次腐蚀后,图像中的一些不连续点或线被腐蚀掉;而原图像经1次膨胀后,图像中的一些不连续点或线被连接在一起或膨胀。原图像经开运算(先腐蚀后膨胀),图像原先那些不完全连续部分,边缘孤点等被去掉,主体部分得以加强,因而图像特征明显,且清晰。原图像经闭运算(先膨胀后腐蚀),图像原先那些不完全连续部分,大部分被去掉,只保留最基本特征部分,因而图像特征被明显削弱。实验三边缘检测一、实验目的与要求目的:熟悉采用Roberts算子、Sobel算子、Prewitt算子、Laplacian算子和LOG算子检测数字图像的边缘。要求:上机运行,调试通过。二、实验设备:计算机、Matlab软件、VC++或C语言软件三、实验内容利用VC++/C或MatLab中关于边缘检测的函数,分别采用Roberts算子、Sobel算子、Prewitt算子、Laplacian算子和LOG算子\n检测数字图像的边缘。四、实验原理两个具有不同灰度值的相邻区域之间总存在边缘,边缘是灰度值不连续的结果,这种不连续性通常可以利用求导数的方法方便地检测到。常用的边缘检测算子有Roberts算子、Sobel算子、Prewitt算子、LOG算子和Laplacian算子。Roberts算子是一种利用局部差分算子寻找边缘的算子,其模板如图:Sobel算子的两个卷积计算核如图:Prewitt算子的两个卷积计算核如图:LOG算子=高斯滤波+拉普拉斯边缘检测。Laplacian算子是二阶导数的二维等效式,卷积核如图:五、实验报告内容(1)描述实验的基本步骤,给出各个算子取得的实验。(2)结合实验内容,简述各个算子的效果、特点和适用范围。ps=('C:\DocumentsandSettings\Owner\MyDocuments\MATLAB\road3.jpg');%读取图像subplot(1,3,1)imshow(ps);\ntitle('原图像');ps=rgb2gray(ps);[m,n]=size(ps);%用Sobel微分算子进行边缘检测pa=edge(ps,'sobel');subplot(1,3,2);imshow(pa);title('sobel边缘检测得到的图像');ps=('C:\DocumentsandSettings\Owner\MyDocuments\MATLAB\road3.jpg');%读取图像subplot(1,3,1)imshow(ps);title('原图像');ps=rgb2gray(ps);[m,n]=size(ps);%用Roberts微分算子进行边缘检测pa=edge(ps,'Roberts');subplot(1,3,2);imshow(pa);title('Roberts边缘检测得到的图像');\nps=('C:\DocumentsandSettings\Owner\MyDocuments\MATLAB\road3.jpg');%读取图像subplot(1,3,1)imshow(ps);title('原图像');ps=rgb2gray(ps);[m,n]=size(ps);%用Prewitt微分算子进行边缘检测pa=edge(ps,'Prewitt');subplot(1,3,2);imshow(pa);title('Prewitt边缘检测得到的图像');ps=('C:\DocumentsandSettings\Owner\MyDocuments\MATLAB\road3.jpg');%读取图像subplot(1,3,1)\nimshow(ps);title('原图像');ps=rgb2gray(ps);[m,n]=size(ps);%用Sobel微分算子进行边缘检测pa=edge(ps,'LOG');subplot(1,3,2);imshow(pa);title('LOG边缘检测得到的图像');实验四边缘检测一、实验目的与要求目的:加深对Canny边缘检测的原理的理解。要求:上机运行,调试通过。二、实验设备:计算机、Matlab软件、VC++或C语言软件三、实验内容用Matlab语言(或C语言),编写Canny边缘检测器的Matlab(或C语言)函数;利用上述函数,对一副图像进行边缘检测;利用Matlab自带的Canny边缘检测函数对同一副图像进行边缘检测;比较上述两个结果。四、实验步骤\n步1.图像与高斯平滑滤波器卷积:步2.使用一阶有限差分计算偏导数阵列P与Q:步3.计算梯度幅值与方向角:步4.非极大值抑制(NMS):去掉幅值局部变化非极大的点.*将梯度角离散为圆周的四个扇区之一,以便用3×3的窗口作抑制运算*方向角离散化:*抑制,得到新幅值图:步5.阈值化取高低两个阈值作用于幅值图N[i,j],得到两个边缘图:高阈值和低阈值边缘图。连接高阈值边缘图,出现断点时,在低阈值边缘图中的8邻点域搜寻边缘点。五、实验报告内容\n(1)描述实验的基本步骤,给出实验程序代码及必要说明。ps=imread('C:\DocumentsandSettings\Owner\MyDocuments\MATLAB\road3.jpg');%读取图像subplot(1,3,1)imshow(ps);title('原图像');ps=rgb2gray(ps);[m,n]=size(ps);pa=edge(ps,'canny');subplot(1,3,2);imshow(pa);title('canny边缘检测得到的图像');(2)结合实验内容,给出实验结果的分析和总结。