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

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

基于MATLAB的Sobel边缘检测算法实现相关推荐

  1. 基于matlab的数字图像边缘检测算法研究,基于MATLAB数字图像边缘检测算法的研究与对比分析...

    ·161· 居 舍 研究探讨 2017年10月(中) 1 绪论 图像边缘中通常包含着重要的边界信息,这些边界信息便于分析和研究图像.另外,边缘检测可以大大降低图像处 理的工作量,将提高图像分析的效率. ...

  2. matlab差分算子的灰度图像边缘检测,灰度图像的 Sobel 边缘检测算法的 HDL实现(一)...

    1.1 边缘检测算法介绍 所谓边缘是指其周围像素灰度急剧变化的那些象素的集合,它是图像最基本的特征.边缘存在于目标.背景和区域之间,所以,它是图像分割所依赖的最重要的依据.由于边缘是位置的标志,对灰度 ...

  3. 基于fpga的sobel边缘检测

    基于fpga的sobel边缘检测,部分的代码参考的是野火正点原子的代码和视频.通过matlab将图片转成txt文件,并编写verilog代码将处理好的数据再转成txt文件,同时通过matlab将txt ...

  4. 【Matlab 图像】边缘检测算法及效果演示

    [Matlab 图像]边缘检测算法及效果演示 边缘检测 检测图像中的边缘 Matlab 代码 代码效果如下 边缘算法:robert 边缘算法:sobel prewitt 边缘算法:laplacian ...

  5. matlab的车牌照识别,基于MatLab车牌号码识别算法研究与

    <基于MatLab车牌号码识别算法研究与>由会员分享,可在线阅读,更多相关<基于MatLab车牌号码识别算法研究与(15页珍藏版)>请在人人文库网上搜索. 1.基于,MatLa ...

  6. Sobel边缘检测算法verilog实现及仿真

    实验verilog语言对sobel边缘检测算法进行设计 实验modelsim仿真工具进行仿真,程序和仿真截图如下图所示: 1.程序截图: 2.仿真截图: module edge_judge ( clk ...

  7. java数字图像处理开题报告,基于MATLAB的数字图像处理算法研究与仿真开题报告...

    基于MATLAB的数字图像处理算法研究与仿真开题报告 毕 业 设 计 (2013 届) 题 目基于 MATLAB 的数字图像 处理算法研究与仿真 学 院 物理电气信息学院 专 业 通信工程 年 级 0 ...

  8. 【APF三维路径规划】基于matlab人工势场算法无人机三维路径规划【含Matlab源码 168期】

    一.获取代码方式 获取代码方式1: 通过订阅紫极神光博客付费专栏,凭支付凭证,私信博主,可获得此代码. 获取代码方式2: 完整代码已上传我的资源:[三维路径规划]基于matlab人工势场算法无人机三维 ...

  9. Python:实现sobel边缘检测算法(附完整源码)

    Python:实现sobel边缘检测算法 # coding=gbk import cv2 img = cv2.imread("1.jpg", 0) x = cv2.Sobel(im ...

最新文章

  1. 大神教你如何给脚本写一个守护进程
  2. MATLAB中unzip出错,node.js里unzip出错的处理
  3. 连接mysql的机制_安装成功后mysql 8.0不能连接navicat的解决方法
  4. vue项目,cli-3.0项目部署运行报错:Uncaught SyntaxError: Unexpected token
  5. presto .vs impala .vs HAWQ query engine
  6. 语音识别介绍(下篇)
  7. cmder添加到系统变量中_Cmder配置
  8. 政府推荐:房屋租赁合同电子版模板出租房个人住房商业租房Word协议书范本
  9. 游戏辅助原理与制作02-植物大战僵尸03-冷却时间基址
  10. 多重集合的排列与组合
  11. PS像素,分辨率的概念
  12. kail linux双系统win7,一步一步教你在Win7环境下安装Win7和Kali双系统
  13. mysql 分组查询最新
  14. BFS——1253 胜利大逃亡
  15. 机器学习笔记04:逻辑回归(Logistic regression)、分类(Classification)
  16. pycharm连接服务器方法
  17. 今晚19:00,淘宝自研标准化协议库XQUIC开源直播!
  18. codevs[3145]汉诺塔游戏
  19. 联想计算机如何设置用户名和密码忘了,联想(Lenovo)路由器无线wifi密码忘记了怎么办啊?...
  20. 【转载】Win10/11 更改 WSL Docker Desktop 存储路径

热门文章

  1. linux 特定用户ssh,linux - 如何在登录后将SSH用户限制为一组预定义的命令?
  2. make 命令_make考点总结(建议中、高考学生收藏)
  3. 【Pytorch神经网络基础理论篇】 04 线性代数
  4. numpy中两个array数值比较,在IDE中显示完全相同,但是bool判断两个array是否相等却返回False
  5. 使用socket.io搭建一个实时聊天机器人
  6. ZooKeeper 保证数据一致性
  7. mysql系统自带示例数据库_MySQL系统自带的数据库information schema
  8. 从内置函数看 Python 的设计思想:len(x) 是否击败 x.len(),
  9. html5支持多线程,html5 多线程
  10. 腾讯天衍实验室招聘科研实习生