图像边缘检测经典算子及MATLAB实现
来源:互联网 发布:mac怎么下载qq 编辑:程序博客网 时间:2024/06/07 09:50
一、边缘检测
边缘是图象最基本的特征. 边缘检测在计算机视觉、图象分析等应用中起着重要的作用,是图象分析与识别的重要环节,这是因为子图象的边缘包含了用于识别的有用信息. 所以边缘检测是图像分析和模式识别的主要特征提取手段。所谓边缘是指其周围像素灰度后阶变化或屋顶状变化的那些像素的集合,它存在于目标与背景、目标与目标、区域与区域,基元与基元之间。 因此它是图象分割所依赖的重要的特征,也是纹理特征的重要信息源和形状特征的基础;而图象的纹理形状特征的提取又常常依赖于图象分割。 图象的边缘提取也是图象匹配的基础,因为它是位置的标志,对灰度的变化不敏感,它可作为匹配的特征点。
二、边缘检测经典算子及实现
目前常用的边缘检测方法有: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 endendfigure,imshow(newGrayPic);title('roberts算子的处理结果')
实验结果:
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 endendfigure,imshow(newGrayPic);title('Sobel算子的处理结果')
实验结果:
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 endendfigure,imshow(newGrayPic);title('Prewitt算子的处理结果')
实验结果
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 endendfigure,imshow(newGrayPic);title('Laplacian算子的处理结果')
实验结果
2 0
- 图像边缘检测经典算子及MATLAB实现
- 图像边缘检测经典算子及MATLAB实现
- 图像边缘检测经典算子及MATLAB实现
- 图像边缘检测——二阶微分算子(上)Laplace算子、LOG算子、DOG算子(Matlab实现)
- 图像边缘检测——二阶微分算子(下)Canny算子(Matlab实现)
- Canny 边缘检测算子 MATLAB实现
- 基于MATLAB边缘检测算子的实现
- 图像边缘检测——一阶微分算子 Roberts、Sobel、Prewitt、Kirsch、Robinson(Matlab实现)
- Matlab图像边缘检测Roberts\Sobel\Prewitt\Canny算子
- sobel算子实现边缘检测及其c++实现及与matlab效果对比
- 图像边缘及matlab实现
- 图像边缘检测-Sobel算子
- 常用图像边缘检测、增强MATLAB实现
- Sobel算子边缘检测Matlab实现(转)
- 图像变换-用canny算子实现边缘检测
- matlab图像边缘检测
- 图像学习 -- Sobel算子检测图像边缘
- 边缘检测 Snake 算子实现
- 二---JNI入门 - NDK从入门到精通(2)
- hive实例讲解实现in和not in子句
- 装载器-ELF文件分析【1】
- Oracle Forms之动态List Item Value
- App开发日报 2015-05-13 Swifter:100个Swift开发必备Tip
- 图像边缘检测经典算子及MATLAB实现
- MYSQL表的线性转换
- 超轻量级缓存技术——EhCache
- TJOI2015 Day2解题报告
- 201402 一种新的遥感影像角点提取方法
- jquery动态title和文字缩略显示
- android获取SD卡剩余空间及注意事项
- PHP 左旋字符串的两种方法
- HDU 3999 The order of a Tree 二叉树