0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

MATLAB的Sobel图像边缘灰度值检测算法的详细公式和实现资料概述

电子工程师 来源:未知 作者:易水寒 2018-08-26 09:47 次阅读

图像边缘就是图像灰度值突变的地方,也就是图像在该部分的像素值变化速度非常之快,就比如在坐标轴上一条曲线有刚开始的平滑突然来个大转弯,在变化出的导数非常大。

Sobel算子主要用作边缘检测,它是一离散型差分算子,用来计算图像亮度函数灰度之近似值。

边缘是指其周围像素灰度急剧变化的那些像素的集合。边缘存在于目标、背景和区域之间,所以,边缘是图像分割所依赖的最重要的依据。由于边缘是位置的标志,对灰度的变化不敏感,因此,边缘也是图像匹配的重要的特征。

Sobel边缘检测的核心在于像素矩阵的卷积,卷积对于数字图像处理非常重要,很多图像处理算法都是做卷积来实现的。卷积运算的本质就是对指定的图像区域的像素值进行加权求和的过程,其计算过程为图像区域中的每个像素值分别与卷积模板的每个元素对应相乘,将卷积的结果作求和运算,运算到的和就是卷积运算的结果。

矩阵的卷积公式如下。

3x3的窗口M与卷积模板C的卷积运算如下。

Gx和Gy是sobel的卷积因子,将这两个因子和原始图像做如下卷积。

Sobel卷积因子

其中A代表原始图像。

得到图像中的每一个点的横向纵向灰度值Gx、Gy。最后通过如下公式来计算改变灰度的大小。

但是通常为了提高效率,使用不开平方的近似值,虽然这样做会损失精度,,

将Sobel算子的实现划分为五个步骤:

(1) 计算Gx与Gy与模板每行的乘积。

(2) 两个3x3矩阵的卷积即将每一行每一列对应相乘然后相加。

(3) 求得3*3模板运算后的Gx、Gy。

(4) 求Gx^2 + Gy^2的平方根或者直接对Gx和Gy取绝对值后求和。

(5)设置一个阈值,运算后的像素值大于该阈值输出为全1,小于该阈值输出为全0。

平方根和绝对值函数

sqrt(x) 计算平方根abs(x) 取数值的绝对值和复数的幅值

在对图像数据进行运算时最好将图像数据转化成double类型的,避免精度损失。

Sobel边缘检测MATLAB实现

Sobel Edge Detect

1 %RGB_YCbCr 2 clc; 3 clear all; 4 close all; 5 6 RGB_data = imread('lena.jpg');% 7 8 R_data = RGB_data(:,:,1); 9 G_data = RGB_data(:,:,2);10 B_data = RGB_data(:,:,3);11 12 %imshow(RGB_data);13 14 [ROW,COL, DIM] = size(RGB_data); 15 16 Y_data = zeros(ROW,COL);17 Cb_data = zeros(ROW,COL);18 Cr_data = zeros(ROW,COL);19 Gray_data = RGB_data;20 21 for r = 1:ROW 22 for c = 1:COL23 Y_data(r, c) = 0.299*R_data(r, c) + 0.587*G_data(r, c) + 0.114*B_data(r, c);24 Cb_data(r, c) = -0.172*R_data(r, c) - 0.339*G_data(r, c) + 0.511*B_data(r, c) + 128;25 Cr_data(r, c) = 0.511*R_data(r, c) - 0.428*G_data(r, c) - 0.083*B_data(r, c) + 128;26 end27 end 28 29 Gray_data(:,:,1)=Y_data;30 Gray_data(:,:,2)=Y_data;31 Gray_data(:,:,3)=Y_data;32 33 figure;34 imshow(Gray_data);35 36 %Median Filter37 imgn = imnoise(Gray_data,'salt & pepper',0.02); 38 39 figure;40 imshow(imgn);41 42 Median_Img = Gray_data;43 for r = 2:ROW-144 for c = 2:COL-145 median3x3 =[imgn(r-1,c-1) imgn(r-1,c) imgn(r-1,c+1)46 imgn(r,c-1) imgn(r,c) imgn(r,c+1)47 imgn(r+1,c-1) imgn(r+1,c) imgn(r+1,c+1)];48 sort1 = sort(median3x3, 2, 'descend');49 sort2 = sort([sort1(1), sort1(4), sort1(7)], 'descend');50 sort3 = sort([sort1(2), sort1(5), sort1(8)], 'descend');51 sort4 = sort([sort1(3), sort1(6), sort1(9)], 'descend');52 mid_num = sort([sort2(3), sort3(2), sort4(1)], 'descend');53 Median_Img(r,c) = mid_num(2);54 end55 end56 57 figure;58 imshow(Median_Img);59 60 %Sobel_Edge_Detect61 62 Median_Img = double(Median_Img);63 Sobel_Threshold = 150;64 Sobel_Img = zeros(ROW,COL);65 for r = 2:ROW-166 for c = 2:COL-167 Sobel_x = Median_Img(r-1,c+1) + 2*Median_Img(r,c+1) + Median_Img(r+1,c+1) - Median_Img(r-1,c-1) - 2*Median_Img(r,c-1) - Median_Img(r+1,c-1);68 Sobel_y = Median_Img(r-1,c-1) + 2*Median_Img(r-1,c) + Median_Img(r-1,c+1) - Median_Img(r+1,c-1) - 2*Median_Img(r+1,c) - Median_Img(r+1,c+1);69 Sobel_Num = abs(Sobel_x) + abs(Sobel_y);70 %Sobel_Num = sqrt(Sobel_x^2 + Sobel_y^2);71 if(Sobel_Num > Sobel_Threshold)72 Sobel_Img(r,c)=0;73 else74 Sobel_Img(r,c)=255;75 end76 end77 end78 79 figure;80 imshow(Sobel_Img);

处理后的图片效果

中值滤波后的lena

Sobel边沿检测后的lena

为了使图像边缘更加明朗,可以在Sobel的基础上再进行腐蚀膨胀处理,腐蚀膨胀处理

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • matlab
    +关注

    关注

    175

    文章

    2917

    浏览量

    228408
  • 卷积
    +关注

    关注

    0

    文章

    95

    浏览量

    18408
  • 图像边缘
    +关注

    关注

    0

    文章

    10

    浏览量

    7309

原文标题:基于MATLAB的Sobel边缘检测算法实现

文章出处:【微信号:Open_FPGA,微信公众号:OpenFPGA】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    算法系列:基于 FPGA 的图像边缘检测系统设计(sobel算法

    [8:3]; 五、sobel 边缘检测 边缘检测的原理 该算子包含两组 3x3 的矩阵,分别为横向及纵向,将之与
    发表于 03-26 16:40

    Matlab图像自编边缘检测算法

    Matlab图像自编边缘检测算法,多谢了
    发表于 12-03 20:58

    【Z-turn Board试用体验】+ 基于Z-turn的图像边缘检测系统(三)

    Library视频库替换,实现读取功能,将其送入到加速模块中,进行边缘检测算法处理。处理后结果利用HLS OpenCV Library库函数进行写入。算法流程框图如所示。接下来分模块
    发表于 07-07 20:41

    【Banana Pi M1+申请】阈值自适应视频边缘检测算法的嵌入式快速实现

    申请理由:本人已经成功完成阈值自适应视频边缘检测算法的FPGA快速实现,但FPGA也有很多局限性,所以想将硬件平台从FPGA换成香蕉派。相信会有全新的体验,和更加快捷的开发途径。项目描述:在香蕉派上
    发表于 06-20 15:55

    基于FPGA的Sobel边缘检测实现

    就是图像灰度突变的地方,亦即图像在该部分的像素变化速度非常之快,这就好比在坐标轴上一条曲线有刚开始的平滑突然来个大转弯,在变化出的导数非
    发表于 08-29 15:41

    基于FPGA的边缘检测Sobel算法

    转帖摘要: 针对嵌入式软件无法满足数字图像实时处理速度问题,提出用硬件加速器的思想,通过FPGA实现Sobel边缘检测算法。通过乒乓操作、并
    发表于 11-29 08:57

    图像边缘检测算法体验步骤(Photoshop,Matlab

    图像边缘检测算法体验步骤(Photoshop,Matlab)1. 确定你的电脑上已经安装了Photoshop和Matlab2. 使用手机或其
    发表于 03-06 10:51

    基于Qualcomm FastCv的边缘检测算法详解

    、物质属性变化和场景照明变化等等。 边缘检测图像处理和计算机视觉中,尤其是特征提取中的一个研究领域。一.算法原理:所谓边缘是指其周围像素
    发表于 09-21 11:45

    基于视觉图像的微小零件边缘检测算法研究

    实现亚像素细分。  2 扩展的Sobel细化算子  2.1 扩展的两个模板  图像目标的边缘灰度不连续性的反映,其种类可粗略区分为:阶跃性
    发表于 11-15 16:23

    源码交流=图像处理 实现图像去噪、滤波、锐化、边缘检测

    之后的图像NO.7:Sobel边缘检测之后的图像【改进分析】暂无【源码下载】https://www.lanzous.com/iajjk5i密
    发表于 04-01 19:03

    【正点原子FPGA连载第二十八章V7725摄像头Sobel边缘检测-领航者 ZYNQ 之嵌入式开发指南

    平面卷积,即可分别得出横向及纵向的亮度差分近似。如果以 A 代表原始图像, Gx 及 Gy 分别代表经横向及纵向边缘检测图像
    发表于 09-07 15:48

    Labview图像处理——边缘检测

    边缘灰度过度较为明显,梯度算子可以得到较好的边缘检测结果。边缘提取其实也是一种滤波,不同的算
    发表于 12-01 12:16

    迅为iTOP-RK3568开发板Sobel 算子边缘检测

    (索贝尔)算子是计算机视觉领域的一种重要处理方法。主要用于获得数字图像的一阶梯度,常见的应用和物理意义是边缘检测。 索贝尔算子把图像中每个像素的上下左右四领域的
    发表于 09-18 10:27

    基于改进Canny的图像边缘检测算法

    图像边缘是计算机理解图像的重要特征之一。在数字图像中,边缘就是相邻的具有显著不同特征区域间的分界线。在机器视觉领域,对
    发表于 11-02 15:15 19次下载
    基于改进Canny的<b class='flag-5'>图像</b><b class='flag-5'>边缘</b><b class='flag-5'>检测算法</b>

    FPGA图像处理的Sobel边缘检测

    差分近似值。如果以A代表原始图像,Gx及Gy分别代表经横向及纵向边缘检测图像灰度值,其公式如下
    的头像 发表于 03-22 09:45 2642次阅读
    FPGA<b class='flag-5'>图像</b>处理的<b class='flag-5'>Sobel</b><b class='flag-5'>边缘</b><b class='flag-5'>检测</b>