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

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

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:COL
23         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     end
27 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 Filter
37 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-1
44     for c = 2:COL-1
45         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     end
55 end
56 
57 figure;
58 imshow(Median_Img);
59 
60 %Sobel_Edge_Detect
61 
62 Median_Img = double(Median_Img);
63 Sobel_Threshold = 150;
64 Sobel_Img = zeros(ROW,COL);
65 for r = 2:ROW-1
66     for c = 2:COL-1
67         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         else
74             Sobel_Img(r,c)=255;
75         end
76     end
77 end
78 
79 figure;
80 imshow(Sobel_Img);

处理后的图片效果

中值滤波后的lena

Sobel边沿检测后的lena

    为了使图像边缘更加明朗,可以在Sobel的基础上再进行腐蚀膨胀处理,腐蚀膨胀处理,下一篇继续分享。

 

转载请注明出处:NingHeChuan(宁河川)

个人微信订阅号:开源FPGA

如果你想及时收到个人撰写的博文推送,可以扫描左边二维码(或者长按识别二维码)关注个人微信订阅号

知乎ID:NingHeChuan

微博ID:NingHeChuan

原文地址:https://www.cnblogs.com/ninghechuan/p/9529936.html 

转载于:https://www.cnblogs.com/ninghechuan/p/9529936.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/485253.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

一文读懂人工智能产业最新发展趋势

来源:世界物联网博览会作者:赛迪智库人工智能产业形势分析课题组当前,以新一代人工智能为代表的科技和产业革命正在孕育兴起。数字化、网络化、智能化的信息基础设施加速构建,以信息通信、生命、材料科学等交叉融合为特征的集成化…

半导体的过去、现在和未来

文章来源:中科院半导体所01半导体是信息化的基础上个世纪半导体大规模集成电路、半导体激光器、以及各种半导体器件的发明,对现代信息技术革命起了至关重要的作用,引发了一场新的全球性产业革命。信息化是当今世界经济和社会发展的大趋势&…

计算机网络——奈氏准则(奈奎斯特定理)

奈奎斯特定理——奈氏准则(理想状态) 奈氏准则:在理想低通(没有噪声、带宽有限)的信道中,为了避免码间串扰,极限码元传输率为2WBaud。其中W是理想低通信道的带宽,单位为Hz。若用V表…

计算机网络——CSMA/CD最小帧长相关题目

计算机网络——CSMA/CD最小帧长问题 本篇博客主要讲解有关CSMA/CD最小帧长求解相关例题,关于CSMA/CD详细详解请参考博客:CSMA/CD协议分析笔记 例题一、假定1km长的CSMA/CD网络的数据率为1Gbit/s。设信号在网络上的传输速率为200000km/s。求能够使用此协…

AI式剥削:数据标注人员日薪低至51块钱

来源:AI前线编译:核子可乐、钰莹最新论文指出,AI 行业正在残酷压榨刚刚兴起的全球零工经济体系。现代人工智能依赖各种算法处理规模达数百万的示例、图像或文本素材。但在此之前,首先需要由工作人员在图片数据集中手动标记出对象&…

SpringCloud03 Ribbon知识点、 Feign知识点、利用RestTemplate+Ribbon调用远程服务提供的资源、利用feign调用远程服务提供的资源、熔断...

1 远程服务资源的调用 1.1 古老的套路 在微服务出现之前,所有的远程服务资源必须通过RestTemplate或者HttpClient进行;但是这两者仅仅实现了远程服务资源的调用,并未提供负载均衡实现,所以程序员必须自己实现负载均衡功能&#xf…

一个没有意义的宇宙我们很难想象

© Pixabay来源:利维坦利维坦按:按照人择理论,“被观测的宇宙环境,必须允许观测者的存在”,我们似乎有理由相信,宇宙之存在有赖于观测者,不过,这个观测者一定是我们人类吗&#…

SpringCloud(二) 服务注册与发现Eureka

1.eureka是干什么的? 上篇说了,微服务之间需要互相之间通信,那么通信就需要各种网络信息,我们可以通过使用硬编码的方式来进行通信,但是这种方式显然不合适,不可能说一个微服务的地址发生变动,那…

Java打印三角形(双层for循环)

Java打印三角形(双层for循环) 1.第一个三角形&#xff1a; 打印样式&#xff1a; 外层for循环控制行数&#xff0c;内层for循环控制“*”的个数 public static void demo01(){//行数&#xff1a;4行for(int i1;i<4;i){/*找规律&#xff1a;第一行&#xff1a;1个*第二行…

深度学习后,图灵奖得主Bengio研究核心是什么?因果表示学习

机器之心报道编辑&#xff1a;魔王、杜伟在近日发表的一篇论文中&#xff0c;图灵奖得主 Yoshua Bengio 等详细介绍了其团队当前的研究重心&#xff1a;将机器学习与因果推理相结合的因果表示学习。研究者不仅全面回顾了因果推理的基础概念&#xff0c;并阐释了其与机器学习的融…

WPF使用Canvas绘制可变矩形

WPF使用Canvas绘制可变矩形 原文:WPF使用Canvas绘制可变矩形版权声明&#xff1a;本文为博主原创文章&#xff0c;未经博主允许不得转载。 https://blog.csdn.net/WANGYAN9110/article/details/38130661 1、问题以及解决办法 最近因为项目需要&#xff0c;需要实现一个位置校对…

Java中关于自增自减

Java中关于自增和自减 关于自增和自减&#xff0c;一直困扰着我&#xff0c;总是学完了当时明白&#xff0c;过了没多长时间又忘了&#xff0c;学的也不牢固。经过老师这一次的讲解&#xff0c;总结的这篇博客&#xff0c;如有错误还请指正。 第一题&#xff1a; 加上括号好看…

《麻省理工科技评论》发布2021年“全球十大突破性技术”

全文共计8398字&#xff0c;预计阅读时间10分钟来源 | DeepTech深科技&#xff08;转载请注明来源&#xff09;编辑 | 蒲蒲正如比尔盖茨所说&#xff0c;看过这些突破性技术之后&#xff0c;你会觉得 “美好的未来&#xff0c;值得我们为之奋斗”。日前&#xff0c;《麻省理工科…

@Valid的坑

Valid 只能用来验证 RequestBody 标注的参数&#xff0c;并且要写在 RequestBody 之前 转载于:https://www.cnblogs.com/jichen/p/9561622.html

Java——String类的方法

Java——String类的方法 String str1 “abc” 与String str2 new String(“abc”)有什么区别&#xff1f; 字符串常量存储在字符串常量池&#xff0c;目的是共享字符串非常量对象存储在堆中 String的常用方法 常用方法1&#xff1a; int length()&#xff1a;返回字符串的…

OpenAI魔法模型DALL-E论文、代码公布!

来源&#xff1a;AI科技评论编译&#xff1a;AI科技评论OpenAI在1月5日公布DALL-E模型以来&#xff0c;人们都惊艳于模型的语言想象力是如此丰富和细致。如今&#xff0c;我们终于等到了论文的公布&#xff0c;从而得以了解DALL-E天马行空创造力背后的奥秘。值得一提的是&#…

Maven项目无法加载jdbc.properties

Maven项目无法加载jdbc.properties(java.sql.SQLException: The server time zone value ‘&#xfffd;й&#xfffd;&#xfffd;&#xfffd;׼ʱ&#xfffd;&#xfffd;’ is unrecog) 1.JdbcUtils.java package com.zxm.utils;import java.io.InputStream; import ja…

Hinton:我终于想明白大脑怎么工作了!神经学家花三十年,寻找反向传播的生物机制...

来源&#xff1a;智源社区作者&#xff1a;Anil Ananthaswamy编译&#xff1a;梦佳「有一天晚上&#xff0c;我回家吃饭&#xff0c;激动地说『我终于想明白大脑是怎么工作的了&#xff01;』我15岁的女儿对我说&#xff0c;怎么又来了&#xff0c;老爸。」 …

Mybatis学习笔记(一)——项目搭建、导入依赖、相关配置

Mybatis学习笔记&#xff08;一&#xff09;——项目搭建、导入依赖、相关配置 传送门&#xff1a;Mybatis中文网&#xff08;入门手册&#xff09;Mybatis中文网 一、新建项目 在项目中新建模块&#xff1a; 二、学习Mybatis常用的依赖&#xff1a; <dependencies…

数学与工业革命

来源&#xff1a;中科院数学与系统科学研究院作者&#xff1a;黄雷&#xff0c;中科院数学与系统科学研究院数学&#xff0c;无时无刻不散发着它独特的魅力。上到宇宙飞船遨游外太空&#xff0c;下至小商小贩行走菜市间&#xff0c;这门与每个人生活都息息相关的学科一直在默默…