数字图像处理实验报告(图像边缘检测)
数字图像处理实验报告——图像分割实验

实验报告课程名称数字图像处理导论专业班级_______________姓名 _______________学号_______________电气与信息学院与谐勤奋求就是创新一.实验目得1.理解图像分割得基本概念;2.理解图像边缘提取得基本概念;3.掌握进行边缘提取得基本方法;4.掌握用阈值法进行图像分割得基本方法.二。
实验内容1.分别用Roberts,Sobel与拉普拉斯高斯算子对图像进行边缘检测。
比较三种算子处理得不同之处;2.设计一个检测图1中边缘得程序,要求结果类似图2,并附原理说明。
3.任选一种阈值法进行图像分割、图1 图2三.实验具体实现1.分别用Roberts,Sobel与拉普拉斯高斯算子对图像进行边缘检测。
比较三种算子处理得不同之处;I=imread(’mri、tif');imshow(I)BW1=edge(I,’roberts’);figure ,imshow(BW1),title(’用Roberts算子’)BW2=edge(I,’sobel’);figure,imshow(BW2),title(’用Sobel算子 ')BW3=edge(I,’log’);figure,imshow(BW3),title(’用拉普拉斯高斯算子’)比较提取边缘得效果可以瞧出,sober算子就是一种微分算子,对边缘得定位较精确,但就是会漏去一些边缘细节.而Laplacian—Gaussian算子就是一种二阶边缘检测方法,它通过寻找图象灰度值中二阶过零点来检测边缘并将边缘提取出来,边缘得细节比较丰富。
通过比较可以瞧出Laplacian-Gaussian算子比sober算子边缘更完整,效果更好。
2.设计一个检测图1中边缘得程序,要求结果类似图2,并附原理说明.i=imread('m83、tif’);subplot(1,2,1);imhist(i);title('原始图像直方图');thread=130/255;subplot(1,2,2);i3=im2bw(i,thread);imshow(i3);title('分割结果’);3.任选一种阈值法进行图像分割、i=imread('trees、tif’);subplot(1,2,1);imhist(i);title('原始图像直方图’);thread=100/255;subplot(1,2,2);i3=im2bw(i,thread);imshow(i3);title('分割结果’)1、分别用Roberts,Sobel与拉普拉斯高斯算子对图像进行边缘检测。
数字图像处理实验报告--边缘检测

数字图像处理实验报告实验名称:边缘检测姓名:班级:学号:09045433专业:电子信息工程(2+2)指导教师:陈华华实验日期:2012年5月17日边缘检测一,原理本实验主要是对图像的边缘进行提取,通过对边缘的分析来分析图像的特征。
首先,了解一些术语的定义:边缘点:图像中具有坐标[i,j]且处在强度显著变化的位置上的点。
边缘段:对应于边缘点坐标[i,j]及其方位 ,边缘的方位可能是梯度角。
边缘检测器:从图像中提取边缘(边缘点和边缘段)集合的算法。
轮廓:边缘列表,或者是一条表示边缘列表的拟合曲线。
边缘连接:从无序边缘表形成有序边缘表的过程,习惯上,边缘表的表示采用顺时针方向来排序。
边缘跟踪:一个用来确定轮廓的图像(指滤波后的图像)搜索过程。
边缘就是图像中包含的对象的边界所对应的位置。
物体的边缘以图像局部特性的不连续性的形式出现的,例如,灰度值的突变,颜色的突变,纹理结构的突变等。
从本质上说,边缘就意味着一个区域的终结和另外一个区域的开始。
图像边缘信息在图像分析和人的视觉中十分重要,是图像识别中提取图像特征的一个重要属性。
边缘检测(edge detection)在图像处理和对象识别领域中都是一个重要的基本问题。
由于边缘的灰度不连续性,可以使用求导数的方法检测到。
最早的边缘检测方法都是基于像素的数值导数的运算。
本实验主要是对图像依次进行Sobel算子,Prewitt算子,Roberts算子,Laplace算子和Canny算子运算,比较处理结果。
边缘检测有三个共性准则,1,好的检测结果,或者说对边缘的误测率尽可能低,就是在图像边缘出现的地方检测结果中不应该没有;另一方面不要出现虚假的边缘。
2,对边缘的定位要准确,也就是我们标记出的边缘位置要和图像上真正边缘的中心位置充分接近。
3,对同一边缘要有尽可能低的响应次数,也就是检测响应最好是单像素的。
二,对图像进行各种算子运算本实验中主要是对图像依次进行Sobel算子,Prewitt算子,Roberts算子,Laplace 算子和Canny算子运算。
数字图像处理实验报告

数字图像处理实验报告1. 引言数字图像处理是使用计算机来处理和优化图像的一种技术。
在本实验中,我们将探索几种常见的数字图像处理方法,并使用Python编程语言和相关库来实现。
2. 实验目的本实验的主要目的是:1.了解图像的基本特性和数字图像处理的基本原理;2.熟悉Python编程语言和相关图像处理库的使用;3.实现常见的图像处理算法并进行实验验证。
3. 实验方法在本实验中,我们使用Python编程语言和以下相关库来实现图像处理算法:•OpenCV:用于图像读取、显示和保存等基本操作;•Numpy:用于图像数据的处理和算术运算;•Matplotlib:用于图像的可视化和结果展示。
以下是实验涉及到的图像处理方法和步骤:1.图像读取和显示:使用OpenCV库读取图像,使用Matplotlib库显示图像;2.图像的灰度化:将彩色图像转换为灰度图像;3.图像的二值化:将灰度图像转换为黑白二值图像;4.图像的平滑处理:使用平滑滤波器对图像进行平滑处理,如均值滤波和高斯滤波;5.图像的边缘检测:使用边缘检测算法对图像进行边缘检测,如Sobel算子和Canny算子;6.图像的直方图均衡化:对灰度图像进行直方图均衡化,增强图像的对比度。
4. 实验过程和结果4.1 图像读取和显示首先,我们使用OpenCV库读取一张图像,并使用Matplotlib库显示该图像:import cv2import matplotlib.pyplot as plt# 读取图像img = cv2.imread('image.jpg')# 显示图像plt.imshow(cv2.cvtColor(img, cv2.COLOR_BGR2RGB)) plt.axis('off')plt.show()4.2 图像的灰度化接下来,我们将彩色图像转换为灰度图像:# 灰度化图像gray_img = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) # 显示灰度图像plt.imshow(gray_img, cmap='gray')plt.axis('off')plt.show()4.3 图像的二值化然后,我们将灰度图像转换为黑白二值图像:# 二值化图像_, binary_img = cv2.threshold(gray_img, 128, 255, cv2.THRESH_BINARY)# 显示二值图像plt.imshow(binary_img, cmap='gray')plt.axis('off')plt.show()4.4 图像的平滑处理接下来,我们使用平滑滤波器对图像进行平滑处理,例如使用5x5的均值滤波器和高斯滤波器:# 均值滤波mean_img = cv2.blur(img, (5, 5))# 高斯滤波gaussian_img = cv2.GaussianBlur(img, (5, 5), 0) # 显示平滑处理后的图像plt.figure(figsize=(10, 5))plt.subplot(121)plt.imshow(cv2.cvtColor(mean_img, cv2.COLOR_BGR2R GB))plt.title('Mean Filter')plt.axis('off')plt.subplot(122)plt.imshow(cv2.cvtColor(gaussian_img, cv2.COLOR_B GR2RGB))plt.title('Gaussian Filter')plt.axis('off')plt.show()4.5 图像的边缘检测然后,我们使用边缘检测算法对图像进行边缘检测,例如使用Sobel算子和Canny算子:# 边缘检测sobel_img = cv2.Sobel(gray_img, cv2.CV_8U, 1, 1, ksize=3)canny_img = cv2.Canny(gray_img, 50, 150)# 显示边缘检测结果plt.figure(figsize=(10, 5))plt.subplot(121)plt.imshow(sobel_img, cmap='gray')plt.title('Sobel Operator')plt.axis('off')plt.subplot(122)plt.imshow(canny_img, cmap='gray')plt.title('Canny Operator')plt.axis('off')plt.show()4.6 图像的直方图均衡化最后,我们对灰度图像进行直方图均衡化,以增强图像的对比度:# 直方图均衡化equalized_img = cv2.equalizeHist(gray_img)# 显示直方图均衡化结果plt.imshow(equalized_img, cmap='gray')plt.axis('off')plt.show()5. 实验总结通过本实验,我们熟悉了数字图像处理的基本方法和步骤,并使用Python编程语言和相关库实现了图像的读取、显示、灰度化、二值化、平滑处理、边缘检测和直方图均衡化等操作。
数字图像处理实验报告(图像边缘检测)

实验报告实验名称实验三图像边缘检测课程名称数字图像处理某成绩班级学号日期地点备注:1、实验目的(1)了解并掌握使用微分算子进行图像边缘检测的基本原理;(2)编写程序使用Laplacian 算子(二阶导数算子)实现图像锐化,进一步理解图像锐化的实质;(3)掌握使用不同梯度算子(一阶导数算子)进行图像边缘检测的原理、方法,根据实验结果分析各种算子的工作效果;(4)总结实验过程(实验报告,左侧装订):方案、编程、调试、结果、分析、结论。
2、实验环境(1)Windows XP/7(2)Matlab 7.1/7.143、实验方法本次实验要求对256×256大小,256级灰度的数字图像lena.img进行处理。
(1)对该图像进行锐化处理,要求采用Laplacian算子进行锐化,分α=1和α=2两种情况,按如下不同情况进行处理:①g1(m,n)=f(m,n)-α∇f②g2(m,n)=4αf(m,n)-α[f(m-1,n)+f(m+1,n)+f(m,n-1)+f(m,n+1)]I、要对图像进行处理,要先读取该图像,实验代码如下:close all;clear all;fid=fopen('lena.img','r');image=fread(fid,[256,256],'uint8');fclose(fid);II、读取图像后,对该图像的每一像素(不考虑图像的边界部分)进行遍历,根据公式①(公式①相当于做差分)对每一灰度进行计算,将所得的结果存入一矩阵g1中(矩阵g1初始化为该图像的矩阵),代码如下(仅以ɑ=1为例):g1=image;a=1;[x,y]=size(image);for i=2:(x-1)for j=2:(y-1) g1(i,j)=(1+4*a)*image(i,j)-a*(image(i+1,j)+image(i-1,j)+image(i,j+1)+image(i,j-1));endendIII、根据公式②对图像的每一个像素(不考虑图像的边界部分)进行计算,将所得之存入矩阵g2中(g2初始化值为该图像的矩阵值),具体方法与上一步类似,代码如下(仅以ɑ=1为例):g2=image;a=1;[x,y]=size(image);for i=2:(x-1)for j=2:(y-1)g2(i,j)=4*a*image(i,j)-a*(image(i+1,j)+image(i-1,j)+image(i,j+1)+image(i,j-1));endend(2)分别利用Roberts、Prewitt 和Sobel 边缘检测算子,对原图像进行边缘检测,显示处理前、后图像。
数字图像处理实验报告

数字图像处理实验报告数字图像处理实验报告1一. 实验内容:主要是图像的几何变换的编程实现,具体包括图像的读取、改写,图像平移,图像的镜像,图像的转置,比例缩放,旋转变换等.具体要求如下:1.编程实现图像平移,要求平移后的图像大小不变;2.编程实现图像的镜像;3.编程实现图像的转置;4.编程实现图像的比例缩放,要求分别用双线性插值和最近邻插值两种方法来实现,并比较两种方法的缩放效果;5.编程实现以任意角度对图像进行旋转变换,要求分别用双线性插值和最近邻插值两种方法来实现,并比较两种方法的旋转效果.二.实验目的和意义:本实验的目的是使学生熟悉并掌握图像处理编程环境,掌握图像平移、镜像、转置和旋转等几何变换的方法,并能通过程序设计实现图像文件的读、写操作,及图像平移、镜像、转置和旋转等几何变换的程序实现.三.实验原理与主要框架:3.1 实验所用编程环境:Visual C++(简称VC)是微软公司提供的基于C/C++的应用程序集成开发工具.VC拥有丰富的功能和大量的扩展库,使用它能有效的创建高性能的Windows应用程序和Web应用程序.VC除了提供高效的C/C++编译器外,还提供了大量的可重用类和组件,包括著名的微软基础类库(MFC)和活动模板类库(ATL),因此它是软件开发人员不可多得的开发工具.VC丰富的功能和大量的扩展库,类的重用特性以及它对函数库、DLL库的支持能使程序更好的模块化,并且通过向导程序大大简化了库资源的使用和应用程序的开发,正由于VC具有明显的优势,因而我选择了它来作为数字图像几何变换的开发工具.在本程序的开发过程中,VC的核心知识、消息映射机制、对话框控件编程等都得到了生动的体现和灵活的应用.3.2 实验处理的对象:256色的BMP(BIT MAP )格式图像BMP(BIT MAP )位图的文件结构:具体组成图: BITMAPFILEHEADER位图文件头(只用于BMP文件) bfType=”BM” bfSize bfReserved1bfReserved2bfOffBitsbiSizebiWidthbiHeightbiPlanesbiBitCountbiCompressionbiSizeImagebiXPelsPerMeterbiYPelsPerMeterbiClrUsedbiClrImportant单色DIB有2个表项16色DIB有16个表项或更少256色DIB有256个表项或更少真彩色DIB没有调色板每个表项长度为4字节(32位)像素按照每行每列的顺序排列每一行的字节数必须是4的整数倍BITMAPINFOHEADER 位图信息头 Palette 调色板 DIB Pixels DIB图像数据1. BMP文件组成BMP文件由文件头、位图信息头、颜色信息和图形数据四部分组成.2. BMP文件头BMP文件头数据结构含有BMP文件的类型(必须为BMP)、文件大小(以字节为单位)、位图文件保留字(必须为0)和位图起始位置(以相对于位图文件头的偏移量表示)等信息.3. 位图信息头BMP位图信息头数据用于说明位图的尺寸(宽度,高度等都是以像素为单位,大小以字节为单位, 水平和垂直分辨率以每米像素数为单位) ,目标设备的级别,每个像素所需的位数, 位图压缩类型(必须是 0)等信息.4. 颜色表颜色表用于说明位图中的颜色,它有若干个表项,每一个表项是一个RGBQUAD类型的结构,定义一种颜色.具体包含蓝色、红色、绿色的亮度(值范围为0-255)位图信息头和颜色表组成位图信息5. 位图数据位图数据记录了位图的每一个像素值,记录顺序是在扫描行内是从左到右,扫描行之间是从下到上.Windows规定一个扫描行所占的字节数必须是4的倍数(即以long为单位),不足的以0填充.3.3 BMP(BIT MAP )位图的显示:①一般显示方法:1. 申请内存空间用于存放位图文件2. 位图文件读入所申请内存空间中3. 在函数中用创建显示用位图, 用函数创建兼容DC,用函数选择显示删除位图但以上方法的缺点是: 1)显示速度慢; 2) 内存占用大; 3) 位图在缩小显示时图形失真大,(可通过安装字体平滑软件来解决); 4) 在低颜色位数的设备上(如256显示模式)显示高颜色位数的图形(如真彩色)图形失真严重.②BMP位图缩放显示 :用视频函数来显示位图,内存占用少,速度快,而且还可以对图形进行淡化(Dithering )处理.淡化处理是一种图形算法,可以用来在一个支持比图像所用颜色要少的设备上显示彩色图像.BMP位图显示方法如下:1. 打开视频函数,一般放在在构造函数中2. 申请内存空间用于存放位图文件3. 位图文件读入所申请内存空间中4. 在函数中显示位图5. 关闭视频函数 ,一般放在在析构函数中以上方法的优点是: 1)显示速度快; 2) 内存占用少; 3) 缩放显示时图形失真小,4) 在低颜色位数的设备上显示高颜色位数的图形图形时失真小; 5) 通过直接处理位图数据,可以制作简单动画.3.4 程序中用到的访问函数Windows支持一些重要的DIB访问函数,但是这些函数都还没有被封装到MFC中,这些函数主要有:1. SetDIBitsToDevice函数:该函数可以直接在显示器或打印机上显示DIB. 在显示时不进行缩放处理.2. StretchDIBits函数:该函数可以缩放显示DIB于显示器和打印机上.3. GetDIBits函数:还函数利用申请到的内存,由GDI位图来构造DIB.通过该函数,可以对DIB的格式进行控制,可以指定每个像素颜色的位数,而且可以指定是否进行压缩.4. CreateDIBitmap函数:利用该函数可以从DIB出发来创建GDI 位图.5. CreateDIBSection函数:该函数能创建一种特殊的DIB,称为DIB项,然后返回一个GDI位图句柄.6. LoadImage函数:该函数可以直接从磁盘文件中读入一个位图,并返回一个DIB句柄.7. DrawDibDraw函数:Windows提供了窗口视频(VFW)组件,Visual C++支持该组件.VFW中的DrawDibDraw函数是一个可以替代StretchDIBits 的函数.它的最主要的优点是可以使用抖动颜色,并且提高显示DIB的速度,缺点是必须将VFW代码连接到进程中.3.5 图像的几何变换图像的几何变换,通常包括图像的平移、图像的镜像变换、图像的转置、图像的缩放和图像的旋转等.数字图像处理实验报告2一、实验的目的和意义实验目的:本实验内容旨在让学生通过用VC等高级语言编写数字图像处理的一些基本算法程序,来巩固和掌握图像处理技术的基本技能,提高实际动手能力,并通过实际编程了解图像处理软件的实现的基本原理。
数字图像处理实验报告-图像边缘检测和特征提取

华南师范大学实验报告一、实验目的1、.掌握边缘检测的Matlab实现方法2、了解Matlab区域操作函数的使用方法3、了解图像分析和理解的基本方法4、了解纹理特征提取的matlab实现方法二、实验平台计算机和Matlab软件环境三、实验内容1、图像边缘检测2、图像纹理特征提取四、实验原理1、图像边缘检测图像理解是图像处理的一个重要分支,它研究的是为完成某一任务需要从图像中提取哪些有用的信息,以及如何利用这些信息解释图像。
边缘检测技术对于处理数字图像非常重要,因为边缘是所要提取目标和背景的分界线,提取出边缘才能将目标和背景区分开来。
在图像中,边界表明一个特征区域的终结和另一个特征区域的开始,边界所分开区域的内部特征或属性是一致的,而不同的区域内部的特征或属性是不同的,边缘检测正是利用物体和背景在某种图像特性上的差异来实现的,这些差异包括灰度,颜色或者纹理特征。
边缘检测实际上就是检测图像特征发生变化的位置。
由于噪声和模糊的存在,检测到的边界可能会变宽或在某些点处发生间断,因此,边界检测包括两个基本内容:首先抽取出反映灰度变化的边缘点,然后剔除某些边界点或填补边界间断点,并将这些边缘连接成完整的线。
边缘检测的方法大多数是基于方向导数掩模求卷积的方法。
导数算子具有突出灰度变化的作用,对图像运用导数算子,灰度变化较大的点处算得的值比较高,因此可将这些导数值作为相应点的边界强度,通过设置门限的方法,提取边界点集。
一阶导数fx∂∂与fy∂∂是最简单的导数算子,它们分别求出了灰度在x和y方向上的变化率,而方向α上的灰度变化率可以用下面式子计算:cos sin (cos sin )f f f G i j x yααααα∂∂∂=+=+∂∂∂ 对于数字图像,应该采用差分运算代替求导,相对应的一阶差分为:(,)(,)(1,)(,)(,)(,1)x y f i j f i j f i j f i j f i j f i j ∆=--∆=--方向差分为: (,)(,)cos (,)sin x y f i j f i j f i j ααα∆=∆+∆函数f 在某点的方向导数取得最大值的方向是1tan /f f y x α-⎡⎤∂∂=⎢⎥∂∂⎣⎦,方向导数的最大值是1222f f G x y ⎡⎤⎛⎫∂∂⎛⎫=+⎢⎥ ⎪ ⎪∂∂⎝⎭⎢⎥⎝⎭⎣⎦称为梯度模。
数字图像处理实验报告

数字图像处理实验报告——彩色图像边缘的提取概述图像的边缘包含了图像最重要的信息。
什么是边缘?一般是指图像灰度变化率最大的位置。
图像边缘检测是图像处理与计算机视觉共同的基本课题,1960年以来,相继发展了一系列采用梯度算子和拉普拉斯算子的边缘检测技术;为了降低图像噪声对边缘检测算法的干扰,1980年以来,又建立了高斯低通滤波与拉普拉斯算子复合的过零点检测Marr-Hildreth 理论;在另一个方向上,1980年代初期,Canny 从信号处理的角度出发,使边缘检测算法更具有实用性。
由于课程学习的限制,本次实验参考的是课件第七章中的算法内容,其实验原理如下。
实验目的1.通过实验体会一些主要的分割算子对彩色图像边缘的提取的效果;2.使用MatLab 软件进行彩色图像的边缘的检测;了解分割算子对彩色图像边缘的检测的原理;4.完成规定彩色图像的边缘检测并要求正确评价处理结果,能够从理论上作出合理的解释。
实验原理:b x f g x f r x f u B G R ∂∂+∂∂+∂∂=byf g y f r y f v B G R∂∂+∂∂+∂∂=222xf x f x f u u u ug B G RT xx∂∂+∂∂+∂∂=∙=∙= 222y f y f y fv v v v g BG R T yy ∂∂+∂∂+∂∂=∙=∙= yf x f yf x f yf x f v u v ug BB G G R R T xy ∂∂∂∂+∂∂∂∂+∂∂∂∂=∙=∙= ]2arctan[21),(yyxx xy g g g y x -=θ2/1]2sin 22cos )()[(21),(⎭⎬⎫⎩⎨⎧+-++=θθθxy yy xx yy xx g g g g g y x F实验程序:f=imread('D:\bmp.bmp');bw1=[-1,0,1;-1,0,1;-1,0,1];bw2=[-1,-1,-1;0,0,0;1,1,1];a=f(:,:,1);b=f(:,:,2);c=f(:,:,3);%figure,imshow(f);%figure,imshow(a);%figure,imshow(b);%figure,imshow(c);%l1=filter(bw1,a);l1=filter2(bw1,a);l2=filter2(bw1,b);l3=filter2(bw1,c);m1=filter2(bw2,a);m2=filter2(bw2,b);m3=filter2(bw2,c);%[m1 m2 m3]=filter2(bw2,f);p1=l1.*l1+l2.*l2+l3.*l3;p2=m1.*m1+m2.*m2+m3.*m3;p3=l1.*m1+l2.*m2+l3.*m3;h=2*p3./((p1-p2)+exp(-50));r=0.5*atan(h);w=real(sqrt(0.5*((p1+p2)+(p1-p2).*cos(2*r)+2*p3.*sin(2*r)))); w=mat2gray(w);imshow(w);figure,imshow(f);试验结果:实验小结通过这么多次的数字图像处理实验我学习到了很多,首先是对matlab软件的更加熟练的运用,然后通过一些验证性试验使我对课本上数字图像处理的一些原理有了更加深刻的理解,在实际的操作中学会了图像的一些基本的处理,总体来说还不错。
详细的图像分割之边缘检测实验报告

边缘检测实验报告一、实验目的通过课堂的学习,已经对图像分割的相关理论知识已经有了全面的了解,知道了许多图像分割的算法及算子,了解到不同的算子算法有着不同的优缺点,为了更好更直观地对图像分割进行深入理解,达到理论联系实际的目的,特制定如下的实验。
二、实验原理:图像处理有两大类目的:1.改善像质(增强、恢复);2.图像分析:对图像内容作出描述;其一般的图像处理过程如下:图像分割的算法有:(1)阈值分割原理:(,)(,)(,)EBLf x y Tg x y L f x y T≥⎧=⎨<⎩(2)边缘检测:梯度对应一阶导数,对于一个连续图像函数f(x,y):梯度矢量定义:梯度的幅度:梯度的方向:a) Roberts 算子b) Sobel 算子Roberts 算子[]TTyxy f x f G G y x f ⎦⎤⎢⎣⎡∂∂∂∂==∇),(122)()),((),(y x G G y x f mag y x f +=∇=∇)arctan(),(x y G y x =φ()()()[]()()[]{}21221,,11,1,,+-++++-=j i f j i f j i f j i f j i gc) Prewitt 算子d) Kirsch 算子由K 0~K 7八个方向模板组成,将K0~K7的模板算法分别与图像中的3×3区域乘,选最大一个值,作为中央像素的边缘强度(3)区域分割1 区域生长法 算法描述先对每个需要分割的区域找一个种子像素作为生长的起点,然后将种子像素周围邻域中与种子像素有相似性质的像素合并到种子像素所在的区域中。
将这些新像素当作新的种子像素继续进行上面的过程,直到再没有满足条件的像素可被包括进来。
2 分裂合并法实际中常先把图像分成任意大小且不重叠的区域,然后再合并或分裂这些区域以满足分割的要求,即分裂合并法.一致性测度可以选择基于灰度统计特征(如同质区域中的方差),假设阈值为T ,则算法步骤为:① 对于任一Ri ,如果 ,则将其分裂成互不重叠的四等分; ② 对相邻区域Ri 和Rj ,如果 ,则将二者合并; ③ 如果进一步的分裂或合并都不可能了,则终止算法。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验报告实验名称实验三图像边缘检测课程名称数字图像处理某成绩班级学号日期地点备注:1、实验目的(1)了解并掌握使用微分算子进行图像边缘检测的基本原理;(2)编写程序使用Laplacian 算子(二阶导数算子)实现图像锐化,进一步理解图像锐化的实质;(3)掌握使用不同梯度算子(一阶导数算子)进行图像边缘检测的原理、方法,根据实验结果分析各种算子的工作效果;(4)总结实验过程(实验报告,左侧装订):方案、编程、调试、结果、分析、结论。
2、实验环境(1)Windows XP/7(2)Matlab 7.1/7.143、实验方法本次实验要求对256×256大小,256级灰度的数字图像lena.img进行处理。
(1)对该图像进行锐化处理,要求采用Laplacian算子进行锐化,分α=1和α=2两种情况,按如下不同情况进行处理:①g1(m,n)=f(m,n)-α∇f②g2(m,n)=4αf(m,n)-α[f(m-1,n)+f(m+1,n)+f(m,n-1)+f(m,n+1)]I、要对图像进行处理,要先读取该图像,实验代码如下:close all;clear all;fid=fopen('lena.img','r');image=fread(fid,[256,256],'uint8');fclose(fid);II、读取图像后,对该图像的每一像素(不考虑图像的边界部分)进行遍历,根据公式①(公式①相当于做差分)对每一灰度进行计算,将所得的结果存入一矩阵g1中(矩阵g1初始化为该图像的矩阵),代码如下(仅以ɑ=1为例):g1=image;a=1;[x,y]=size(image);for i=2:(x-1)for j=2:(y-1) g1(i,j)=(1+4*a)*image(i,j)-a*(image(i+1,j)+image(i-1,j)+image(i,j+1)+image(i,j-1));endendIII、根据公式②对图像的每一个像素(不考虑图像的边界部分)进行计算,将所得之存入矩阵g2中(g2初始化值为该图像的矩阵值),具体方法与上一步类似,代码如下(仅以ɑ=1为例):g2=image;a=1;[x,y]=size(image);for i=2:(x-1)for j=2:(y-1)g2(i,j)=4*a*image(i,j)-a*(image(i+1,j)+image(i-1,j)+image(i,j+1)+image(i,j-1));endend(2)分别利用Roberts、Prewitt 和Sobel 边缘检测算子,对原图像进行边缘检测,显示处理前、后图像。
I、同(1)中I,不再赘述。
II、对图像进行边缘检测,要对图像的每一像素(不考虑图像的边界部分)的灰度进行遍历,分别用公式对图像的水平和垂直方向的边缘进行检测,并分别存储,在进行合成。
采用不同的算子时,变换的公式有所不同。
在合成时可以采用三种算法(街区法、棋盘法、欧式几何法),本次实验中均又采用,所以得到三层图像。
代码如下(仅以街区法的Roberts 算子为例):[x,y]=size(image);g1=image;gh1=image;gv1=image;for i=2:(x-1)for j=2:(y-1)gh1(i,j)=image(i,j)-image(i-1,j-1);gv1(i,j)=image(i,j-1)-image(i-1,j);g1(i,j)=abs(gh1(i,j))+abs(gv1(i,j));endend4、实验结果分析(1)、图像锐化图像锐化结果如图a和图b(注:图a为情况①结果;图b为情况②结果):图a图b由图a和图b对比可知,图像的锐化实质就是原图像与梯度信息进行叠加,相对于原图像而言,图像的边缘信息得到了加强。
由图b中不同ɑ值所得图像对比可知,ɑ越大,边界越清晰,同时对比图a中不同ɑ值所得图像可知,ɑ的大小决定梯度信息与原图像叠加时所占的比例。
(2)、图像边缘检测街区法、棋盘法、欧式距离法的不同检测算子结果分别入图c、图d和图e:图c图d图e由图c、图d和图e对比可知,采用街区法所得的边界清晰度最高,欧式几何法其次,棋盘法最差。
对比同一X图中的不同子图可知,Sobel算子的性能更好,Prewitt算子其次,Roberts算子最差。
5、实验结论本次实验是对图像进行锐化和边缘检测,通过这次实验,我对数字图像处理中图像的锐化和边缘检测有了更加深刻的了解。
加深了图像锐化和边缘检测的原理,掌握了图像边缘检测的不同方法。
学会了使用Laplacian算子(二阶导数算子)实现图像锐化的程序编写;掌握了使用不同梯度算子(一阶导数算子)进行图像边缘检测的原理、方法。
6、源代码(1)图像锐化(g1)close all;clear all;fid=fopen('lena.img','r');image=fread(fid,[256,256],'uint8');fclose(fid);subplot(221);imshow(uint8(image),[]);title('原图像');%采用拉普拉斯算子g1=image;a=1;[x,y]=size(image);for i=2:(x-1)for j=2:(y-1)g1(i,j)=(1+4*a)*image(i,j)-a*(image(i+1,j)+image(i-1,j)+image(i,j+1)+image(i,j-1));endendsubplot(222);imshow(uint8(g1),[]);title('a=1时g1的图像');g1=image;a=2;[x,y]=size(image);for i=2:(x-1)for j=2:(y-1)g1(i,j)=(1+4*a)*image(i,j)-a*(image(i+1,j)+image(i-1,j)+image(i,j+1)+image(i,j-1));endendsubplot(223);imshow(uint8(g1),[]);title('a=2时g1的图像');(2)图像锐化(g2)close all;clear all;fid=fopen('lena.img','r');image=fread(fid,[256,256],'uint8');fclose(fid);subplot(221);imshow(uint8(image),[]);title('原图像');%采用拉普拉斯算子g2=image;a=1;[x,y]=size(image);for i=2:(x-1)for j=2:(y-1)g2(i,j)=4*a*image(i,j)-a*(image(i+1,j)+image(i-1,j)+image(i,j+1)+image(i,j-1));endendsubplot(222);imshow(uint8(g2),[]);title('a=1时g2的图像');g2=image;a=2;[x,y]=size(image);for i=2:(x-1)for j=2:(y-1)g2(i,j)=4*a*image(i,j)-a*(image(i+1,j)+image(i-1,j)+image(i,j+1)+image(i,j-1));endendsubplot(223);imshow(uint8(g2),[]);title('a=2时g2的图像');(3)边缘检测close all;clear all;fid=fopen('lena.img','r');image=fread(fid,[256,256],'uint8');fclose(fid);figure('Name','街区法','NumberTitle','off');subplot(221);imshow(uint8(image),[]);title('原图像');[x,y]=size(image);g1=image;gh1=image;gv1=image;for i=2:(x-1)for j=2:(y-1)gh1(i,j)=image(i,j)-image(i-1,j-1);gv1(i,j)=image(i,j-1)-image(i-1,j);g1(i,j)=abs(gh1(i,j))+abs(gv1(i,j));endendsubplot(222);imshow(uint8(g1),[]);title('Roberts算子');g2=image;gh2=image;gv2=image;for i=2:(x-1)for j=2:(y-1)gh2(i,j)=((image(i+1,j-1)+image(i+1,j)+image(i+1,j+1))/3)-((image(i-1,j-1)+image(i-1,j)+im age(i-1,j+1))/3);gv2(i,j)=((image(i-1,j+1)+image(i,j+1)+image(i+1,j+1))/3)-((image(i-1,j-1)+image(i,j-1)+im age(i+1,j-1))/3);g2(i,j)=abs(gh2(i,j))+abs(gv2(i,j));endendsubplot(223);imshow(uint8(g2),[]);title('Prewitt算子');g3=image;gh3=image;gv3=image;for i=2:(x-1)for j=2:(y-1)gh3(i,j)=(image(i+1,j-1)+2*image(i+1,j)+image(i+1,j+1)-image(i-1,j-1)-2*image(i-1,j)-imag e(i-1,j+1))/4;gv3(i,j)=(image(i-1,j+1)+2*image(i,j+1)+image(i+1,j+1)-image(i-1,j-1)-2*image(i,j-1)-imag e(i+1,j-1))/4;g3(i,j)=abs(gh3(i,j))+abs(gv3(i,j));% g3(i,j)=max(gh3(i,j),gv3(i,j));% g3(i,j)=sqrt(gh3(i,j)*gh3(i,j)+gv3(i,j)*gv3(i,j));endendsubplot(224);imshow(uint8(g3),[]);title('Sobel算子');% subplot(235)% imshow(uint8(gh3),[]);% title('检测水平边界');% subplot(236);% imshow(uint8(gv3),[]);% title('检测竖直边界');figure('Name','棋盘法','NumberTitle','off');subplot(221);imshow(uint8(image),[]);title('原图像');[x,y]=size(image);g1=image;gh1=image;gv1=image;for i=2:(x-1)for j=2:(y-1)gh1(i,j)=image(i,j)-image(i-1,j-1);gv1(i,j)=image(i,j-1)-image(i-1,j);% g1(i,j)=abs(gh1(i,j))+abs(gv1(i,j));g1(i,j)=max(gh1(i,j),gv1(i,j));endendsubplot(222);imshow(uint8(g1),[]);title('Roberts算子');g2=image;gh2=image;gv2=image;for i=2:(x-1)for j=2:(y-1)gh2(i,j)=((image(i+1,j-1)+image(i+1,j)+image(i+1,j+1))/3)-((image(i-1,j-1)+image(i-1,j)+im age(i-1,j+1))/3);gv2(i,j)=((image(i-1,j+1)+image(i,j+1)+image(i+1,j+1))/3)-((image(i-1,j-1)+image(i,j-1)+im age(i+1,j-1))/3);% g2(i,j)=abs(gh2(i,j))+abs(gv2(i,j));g2(i,j)=max(gh2(i,j),gv2(i,j));endendsubplot(223);imshow(uint8(g2),[]);title('Prewitt算子');g3=image;gh3=image;gv3=image;for i=2:(x-1)for j=2:(y-1)gh3(i,j)=(image(i+1,j-1)+2*image(i+1,j)+image(i+1,j+1)-image(i-1,j-1)-2*image(i-1,j)-imag e(i-1,j+1))/4;gv3(i,j)=(image(i-1,j+1)+2*image(i,j+1)+image(i+1,j+1)-image(i-1,j-1)-2*image(i,j-1)-imag e(i+1,j-1))/4;g3(i,j)=abs(gh3(i,j))+abs(gv3(i,j));g3(i,j)=max(gh3(i,j),gv3(i,j));% g3(i,j)=sqrt(gh3(i,j)*gh3(i,j)+gv3(i,j)*gv3(i,j));endendsubplot(224);imshow(uint8(g3),[]);title('Sobel算子');figure('Name','欧式几何法','NumberTitle','off');subplot(221);imshow(uint8(image),[]);title('原图像');[x,y]=size(image);g1=image;gh1=image;gv1=image;for i=2:(x-1)for j=2:(y-1)gh1(i,j)=image(i,j)-image(i-1,j-1);gv1(i,j)=image(i,j-1)-image(i-1,j);% g1(i,j)=abs(gh1(i,j))+abs(gv1(i,j));% g1(i,j)=max(gh1(i,j),gv1(i,j));g1(i,j)=sqrt(gh1(i,j)*gh1(i,j)+gv1(i,j)*gv1(i,j));endendsubplot(222);imshow(uint8(g1),[]);title('Roberts算子');g2=image;gh2=image;gv2=image;for i=2:(x-1)for j=2:(y-1)gh2(i,j)=((image(i+1,j-1)+image(i+1,j)+image(i+1,j+1))/3)-((image(i-1,j-1)+image(i-1,j)+im age(i-1,j+1))/3);gv2(i,j)=((image(i-1,j+1)+image(i,j+1)+image(i+1,j+1))/3)-((image(i-1,j-1)+image(i,j-1)+im age(i+1,j-1))/3);% g2(i,j)=abs(gh2(i,j))+abs(gv2(i,j));% g2(i,j)=max(gh2(i,j),gv2(i,j));g2(i,j)=sqrt(gh2(i,j)*gh2(i,j)+gv2(i,j)*gv2(i,j));endendsubplot(223);imshow(uint8(g2),[]);title('Prewitt算子');g3=image;gh3=image;gv3=image;for i=2:(x-1)for j=2:(y-1)gh3(i,j)=(image(i+1,j-1)+2*image(i+1,j)+image(i+1,j+1)-image(i-1,j-1)-2*image(i-1,j)-imag e(i-1,j+1))/4;gv3(i,j)=(image(i-1,j+1)+2*image(i,j+1)+image(i+1,j+1)-image(i-1,j-1)-2*image(i,j-1)-imag e(i+1,j-1))/4;% g3(i,j)=abs(gh3(i,j))+abs(gv3(i,j));% g3(i,j)=max(gh3(i,j),gv3(i,j));g3(i,j)=sqrt(gh3(i,j)*gh3(i,j)+gv3(i,j)*gv3(i,j));endendsubplot(224);imshow(uint8(g3),[]);title('Sobel算子');。