图像边缘检测经典算子及MATLAB实现
2017-09-28 08:07
1086 查看
一、边缘检测
边缘是图象最基本的特征. 边缘检测在计算机视觉、图象分析等应用中起着重要的作用,是图象分析与识别的重要环节,这是因为子图象的边缘包含了用于识别的有用信息. 所以边缘检测是图像分析和模式识别的主要特征提取手段。所谓边缘是指其周围像素灰度后阶变化或屋顶状变化的那些像素的集合,它存在于目标与背景、目标与目标、区域与区域,基元与基元之间。 因此它是图象分割所依赖的重要的特征,也是纹理特征的重要信息源和形状特征的基础;而图象的纹理形状特征的提取又常常依赖于图象分割。 图象的边缘提取也是图象匹配的基础,因为它是位置的标志,对灰度的变化不敏感,它可作为匹配的特征点。
二、边缘检测经典算子及实现
目前常用的边缘检测方法有:Roberts边缘检测算子、Sobel边缘检测算子、Prewitt边缘检测算子、Laplace边缘检测算子等等。1、Roberts边缘检测算子
Roberts边缘检测算子根据任意一对互相垂直方向上的差分可用来计算梯度的原理,采用对角线方向相邻两像素之差。
MATLAB实验代码如下:
clear; sourcePic=imread('lena.jpg'); %读取原图像 grayPic=mat2gray(sourcePic); %实现图像矩阵的归一化操作 [m,n]=size(grayPic); newGrayPic=grayPic;%为保留图像的边缘一个像素 robertsNum=0; %经roberts算子计算得到的每个像素的值 robertThreshold=0.2; %设定阈值 for j=1:m-1 %进行边界提取 for k=1:n-1 robertsNum = abs(grayPic(j,k)-grayPic(j+1,k+1)) + abs(grayPic(j+1,k)-grayPic(j,k+1)); if(robertsNum > robertThreshold) newGrayPic(j,k)=255; else newGrayPic(j,k)=0; end end end figure,imshow(newGrayPic); title('roberts算子的处理结果')1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
实验结果:
2、Sobel边缘检测算子
对数字图像的每个像素,考察它上、下、左、右邻点灰度的加权差,与之接近的邻点的权大。
MATLAB实验代码如下:
clear; sourcePic=imread('lena.jpg');%读取原图像 grayPic=mat2gray(sourcePic);%实现图像矩阵的归一化操作 [m,n]=size(grayPic); newGrayPic=grayPic;%为保留图像的边缘一个像素 sobelNum=0;%经sobel算子计算得到的每个像素的值 sobelThreshold=0.8;%设定阈值 for j=2:m-1 %进行边界提取 for k=2:n-1 sobelNum=abs(grayPic(j-1,k+1)+2*grayPic(j,k+1)+grayPic(j+1,k+1)-grayPic(j-1,k-1)-2*grayPic(j,k-1)-grayPic(j+1,k-1))+abs(grayPic(j-1,k-1)+2*grayPic(j-1,k)+grayPic(j-1,k+1)-grayPic(j+1,k-1)-2*grayPic(j+1,k)-grayPic(j+1,k+1)); if(sobelNum > sobelThreshold) newGrayPic(j,k)=255; else newGrayPic(j,k)=0; end end end figure,imshow(newGrayPic); title('Sobel算子的处理结果')1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
实验结果:
3、Prewitt边缘检测算子
Prewitt算子是一种边缘样板算子。这些算子样板由理想的边缘子图像构成。依次用边缘样板去检测图像,与被检测区域最为相似的样板给出最大值。
MATLAB实验代码
clear; sourcePic=imread('lena.jpg');%读取原图像 grayPic=mat2gray(sourcePic);%实现图像矩阵的归一化操作 [m,n]=size(grayPic); newGrayPic=grayPic;%为保留图像的边缘一个像素 PrewittNum=0;%经Prewitt算子计算得到的每个像素的值 PrewittThreshold=0.5;%设定阈值 for j=2:m-1 %进行边界提取 for k=2:n-1 PrewittNum=abs(grayPic(j-1,k+1)-grayPic(j+1,k+1)+grayPic(j-1,k)-grayPic(j+1,k)+grayPic(j-1,k-1)-grayPic(j+1,k-1))+abs(grayPic(j-1,k+1)+grayPic(j,k+1)+grayPic(j+1,k+1)-grayPic(j-1,k-1)-grayPic(j,k-1)-grayPic(j+1,k-1)); if(PrewittNum > PrewittThreshold) newGrayPic(j,k)=255; else newGrayPic(j,k)=0; end end end figure,imshow(newGrayPic); title('Prewitt算子的处理结果')1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
实验结果
4、Laplace边缘检测算子
Laplacian 算子是n维欧几里德空间中的一个二阶微分算子。
MATLAB实验代码
clear; sourcePic=imread('lena.jpg');%读取原图像 grayPic=mat2gray(sourcePic);%实现图像矩阵的归一化操作 [m,n]=size(grayPic); newGrayPic=grayPic;%为保留图像的边缘一个像素 LaplacianNum=0;%经Laplacian算子计算得到的每个像素的值 LaplacianThreshold=0.2;%设定阈值 for j=2:m-1 %进行边界提取 for k=2:n-1 LaplacianNum=abs(4*grayPic(j,k)-grayPic(j-1,k)-grayPic(j+1,k)-grayPic(j,k+1)-grayPic(j,k-1)); if(LaplacianNum > LaplacianThreshold) newGrayPic(j,k)=255; else newGrayPic(j,k)=0; end end end figure,imshow(newGrayPic); title('Laplacian算子的处理结果')1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
实验结果
相关文章推荐
- 图像边缘检测经典算子及MATLAB实现
- 图像边缘检测经典算子及MATLAB实现
- 图像边缘检测——二阶微分算子(上)Laplace算子、LOG算子、DOG算子(Matlab实现)
- 图像边缘检测——几种图像边缘检测算子的学习及python 实现
- canny 算子实现图像边缘检测(详细过程附源码)
- 基于MATLAB边缘检测算子的实现
- 简述:MATLAB中使用Laplace算子对彩色图像进行边缘检测的方法
- 常用图像边缘检测、增强MATLAB实现
- 图像边缘检测——二阶微分算子(下)Canny算子(Matlab实现)
- canny 算子实现图像边缘检测(详细过程附源码)
- Canny 边缘检测算子 MATLAB实现
- OpenCV之imgproc 模块. 图像处理(2)实现自己的线性滤波器 给图像添加边界 Sobel 导数 Laplace 算子 Canny 边缘检测
- 转载:数字图像处理——边缘检测算子(MATLAB)
- MATLAB实现五种边缘检测
- 图像处理常用边缘检测算子总结(转)
- 边缘检测算子的MATLAB代码
- VC编程实现数字图像的边缘检测
- 经典数字图像处理(matlab 实现)
- 图像直方图及直方图均衡总结(一)经典方法(附matlab和opencv端算法实现)
- 图像边缘检测之拉普拉斯(Laplacian)C++实现