matlab边缘检测 Sobel、Roberts、Prewitt

  • 一、Sobel边缘检测算法
    • 1、算法简介
    • 2、matlab实现
    • 3、Sobel检测结果
  • 二、Roberts边缘检测算法
    • 1、算法简介
    • 2、matlab实现
    • 3、roberts检测结果
  • 三、Prewitt边缘检测算法
    • 1、算法简介
    • 2、matlab实现
    • 3、Prewitt检测结果

一、Sobel边缘检测算法

1、算法简介

Sobel 算子算子包含两组 3x3 的矩阵,如图所示:

对于图像而言,取 3 行 3 列的图像数据,将图像数据与对应位置的算子的值相乘再相加,得到 x 方向的 Gx ,和 y 方向的 Gy ,将得到的 Gx 和 Gy ,平方后相加,再取算术平方根,得到 Gxy ,近似值为 Gx 和 Gy 绝对值之和,将计算得到的 Gxy 与我们设定的阈值相比较,Gxy 如果大于阈值,表示该点为边界点,此点显示黑点,否则显示白点。如图所示:

2、matlab实现

clear;
sob=imread('bianyuan1.jpg');      %读取原图像
grayPic=mat2gray(sob);         %矩阵归一化
[m,n]=size(grayPic);           %获取图片大小
newGrayPic=grayPic;                %保留图像边缘一个像素
sobelNum=0;
sobelThreshold=0.5;                 %设定阈值
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;elsenewGrayPic(j,k)=0;endend
end
figure;
imshow(newGrayPic);

3、Sobel检测结果


二、Roberts边缘检测算法

1、算法简介

Roberts算子是一种斜向偏差分的梯度计算方法,梯度的大小代表边缘的强度,梯度的方向与边缘的走向垂直(正交)。
梯度算子定义为:

可以近似为:

由此,我们可得图像离散化(差分代替偏导)的对角线Roberts算子:

2、matlab实现

clear;
rob=imread('bianyuan1.jpg');        %读取原图像
gp=mat2gray(rob);           %图像矩阵归一化
[m,n]=size(gp);              %计算图像大小
newGrayPic=gp;
robertsNum=0;                        %经Roberts算子计算得到的每个像素的值
robertThreshold=0.2;                   %设定阈值
for j=1:m-1                           %进行边界提取for k=1:n-1robertsNum=abs(gp(j,k)-gp(j+1,k+1))+abs(gp(j+1,k)-gp(j,k+1));if(robertsNum > robertThreshold)newGrayPic(j,k)=255;elsenewGrayPic(j,k)=0;endend
end
figure;
imshow(newGrayPic);

3、roberts检测结果

三、Prewitt边缘检测算法

1、算法简介

Prewitt算子也是一种一阶微分算子,与Robert使用22的模板不同,Prewitt算子使用的是33的模板,利用像素点上下、左右邻点的灰度差来检测边缘,故其边缘检测结果在水平方向和垂直方向均比Robert算子更加明显。

例如,下面给出Prewitt算子的模板,在像素点P5处 x 和 y 方向上的梯度大小 g_x 和 g_y 分别计算为:

2、matlab实现

clear;
pre=imread('bianyuan1.jpg');       %读取原图像
gp=mat2gray(pre);    %图像矩阵归一化
[m,n]=size(gp);
newGrayPic=gp;           %保留图像边缘一个像素
PrewittNum=0;
PrewittThreshold=0.5;          %设定阈值
for j=2:m-1                   %进行边界提取
for k=2:n-1
PrewittNum=abs(gp(j-1,k+1)-gp(j+1,k+1)+gp(j-1,k)-gp(j+1,k)+gp(j-1,k-1)-gp(j+1,k-1))+abs(gp(j-1,k+1)+gp(j,k+1)+gp(j+1,k+1)-gp(j-1,k-1)-gp(j,k-1)-gp(j+1,k-1));if(PrewittNum > PrewittThreshold)newGrayPic(j,k)=255;elsenewGrayPic(j,k)=0;endend
end
figure;
imshow(newGrayPic);

3、Prewitt检测结果


参考:
链接: 基于Sobel算法的边缘检测简介
链接: Roberts算子边缘检测原理及实现
链接: 图像边缘检测之Prewitt算子

【图像处理】基于matlab边缘检测 Sobel、Roberts、Prewitt相关推荐

  1. 基于matlab的运动模糊图像处理,基于matlab运动模糊图像处理

    基于matlab运动模糊图像处理 基于 MATLAB 的运动模糊图像处 理 提醒: 我参考了文献里的书目和网上的一些代码而完成的,所以误差会比较大,目前 对于从网上下载的模糊图片的处理效果很不好, 这 ...

  2. 基于MATLAB的Sobel边缘检测算法实现

    图像边缘就是图像灰度值突变的地方,也就是图像在该部分的像素值变化速度非常之快,就比如在坐标轴上一条曲线有刚开始的平滑突然来个大转弯,在变化出的导数非常大. Sobel算子主要用作边缘检测,它是一离散型 ...

  3. (七)图像处理中常用算子Laplacian\Sobel\Roberts\Prewitt\Kirsch

    1.拉普拉斯(Laplacian)算子 1.1基础介绍 最简单的各向同性导数算子是拉普赖斯算子,其具有旋转不变性,对于两个变量的函数f(x,y)f(x,y)f(x,y),其定义为 ▽2f=∂2f∂x2 ...

  4. 基于matlab的gui图像处理,基于matlab GUI的数字图像处理系统毕业论文+开题报告+程序+设计文献...

    摘  要 数字图像处理(Digital Image Processing)又称为计算机图像处理,它是指将图像信号转换成数字信号并利用计算机对其进行处理的过程.在数字图像处理过程中,输入的是质量低的图像 ...

  5. matlab 数字图像滤波,数字图像处理 (基于Matlab) 滤波

    <数字图像处理> 实验报告 一.实验目的(不少于200字) 一.第一个实验用的是各种空间域的方式来滤波,也就是直接把图像和空间滤波器的模板做卷积,当 然图像处理很重要的一个部分还有频域的处 ...

  6. matlab线性构造,基于MATLAB的线性构造信息提取研究

    遥感影像上的线性体是指那些连续的或是不连续的以地貌和色调异常显示的非人工的线性影像或弧形影像.其大部分是以各种方式传递到地表的深部构造信息的反映[1].本文基于Matlab所具有的强大的矩阵运算能力, ...

  7. sobel、prewitt、Isotropic算子处理加噪图片

    #Isotropic算子 import cv2 import numpy as np from PIL import Image import math import matplotlib.pyplo ...

  8. 基于MATLAB的三种边缘检测数字图像处理(sobel、Marr-Hildreth、Canny)

    资源下载地址:https://download.csdn.net/download/sheziqiong/85683013 资源下载地址:https://download.csdn.net/downl ...

  9. 图像处理中各种边缘检测的微分算子简单比较(Sobel,Robert, Prewitt,Laplacian,Canny)

    图像处理中各种边缘检测的微分算子简单比较(Sobel,Robert, Prewitt,Laplacian,Canny) 不同图像灰度不同,边界处一般会有明显边缘,利用此特征可以分割图像.需要说明的是: ...

最新文章

  1. Struts2 原理
  2. gitlab修改项目的url
  3. html2canvas文字重叠(手机端)
  4. lwip iperf 方法进行性能测试
  5. MongoDB基本管理命令
  6. 微软开源软件特征源码分析工具 Application Inspector
  7. Java实现websocket
  8. php curl 伪造IP来源的代码分享
  9. Intellij IDEA 导入Maven项目
  10. VC++键盘钩子demo
  11. 彻底解决--“未能加载文件或程序集“xxx.dll”或它的某一个依赖项”
  12. Node.js 环境性能监控探究
  13. 时间 java 时间段_Java 如何判断当前时间是否在指定时间段内
  14. 魔兽插件是用php吗,GitHub - robinmo/wow_addons_private_use: World Of Warcraft Addons private use 魔兽世界自用插件...
  15. Python collections模块之Counter()详解
  16. Linux基础学习笔记(持续更新)
  17. Error starting ApplicationContext.
  18. Mission-Pumpkin v1.0: PumpkinGarden(南瓜花园)靶机的渗透测试
  19. docker-compose安装kafka
  20. html前端学习基础入门教程之HTML代码的优化 关键词密度

热门文章

  1. Docker怎么样拉取镜像?怎样删除镜像?
  2. 链家数据分析(社招),骗局???
  3. 菜鸟关于SpringBoot配置MinIo的一些疑惑问题的记录
  4. getElementById 用法的一个技巧
  5. Android监听程序进入后台,或者恢复到前台
  6. 前台传数据到后台的HelloWorld程序
  7. MANTIS新手操作教程
  8. 软件项目管理案例:假设50万的资金准备开设一间咖啡馆,请按照WBS原理将开设咖啡馆过程中所可能涉及的工作进行分解。
  9. 在安卓手机上安装FTP客户端应用,实现通过手机访问计算机FTP服务器。
  10. 潮汕古韵之都,这次目的地——潮州