基于matlab的sobel边缘检测算法实现(代码片段)

NingHeChuan NingHeChuan     2022-11-22     281

关键词:

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

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 

基于fpga的sobel边缘检测的实现

...直接是灰度图像,后面我们在此基础上修改,从而实现,基于FPGA的动态图片的Sobel边缘检测、中值滤波、Canny算子边缘检测、腐蚀和膨胀等。那么这篇文章我们将来实现基于FPGA的Sobel边缘检测。图像边缘:简言之,边缘就是图像... 查看详情

图像边缘检测基于matlab自适应阈值的八方向和四方向sobel图像边缘检测含matlab源码2058期

...大小的矢量[8],即:式中,i、j分别为x、y方向的单位矢量。基于梯度的算子都建立在这一 查看详情

图像边缘检测基于matlab自适应阈值的八方向和四方向sobel图像边缘检测含matlab源码2058期

一、八方向Sobel算子的边缘检测算法简介1引言随着数字图像的广泛应用,对图像精度的要求也逐步提高。边缘是目标图像与背景图像的分界,是图像最基本的特征之一。图像边缘蕴含了图像丰富的内在信息(如方向、阶跃性质与形状... 查看详情

边缘检测matlab算法汇总

边缘检测matlab算法汇总1.      基于一阶微分算子检测边缘图像一阶微分边缘算子又称梯度边缘算子,它是利用图像在边缘处的阶跃性,及图像梯度在边缘去得极大值得特征性进行边缘检测。Sobel算子:image=ed... 查看详情

opencv——sobel边缘检测(代码片段)

...43;代码三、python代码四、结果展示1、灰度图2、X方向一阶边缘2、Y方向一阶边缘3、整幅图像的一阶边缘五、相关链接一、Sobel算法1、算法概述  Sobel边缘检测算法比较简单,实际应用中效率比canny边缘检测效率要高,但... 查看详情

用matlab如何通过图像分割来检测边界

...多有用的图像处理函数,做图像分割方法有很多,例如:基于阈值的方法,基于边缘的方法,基于区域的方法,基于凸轮的方法以及基于能量泛函的方法。其中matlab里面有很多做边缘检测的算法,最常用的是sobel,prewitte算法,... 查看详情

5.2基本边缘检测算子—sobel(代码片段)

...用于图像处理中的边缘检测,计算图像灰度的近似梯度。基于图像卷积来实现在水平方向和垂直方向检测对应方向上的边缘。对于源图像与奇数Sobel水平核Gx、垂直核Gy进行卷积可计算水平与垂直变换。Sobel算子在进行边缘检测时... 查看详情

canny边缘检测算法的实现

...通一阶差分,Robert算子(交叉差分),Sobel算子等等,是基于寻找梯度强度。拉普拉斯算子(二阶差分)是基于过零点检 查看详情

canny边缘检测算法的实现

...通一阶差分,Robert算子(交叉差分),Sobel算子等等,是基于寻找梯度强度。拉普拉斯算子(二阶差分)是基于过零点检 查看详情

matlab图像处理之边缘检测基础算法

一、Roberts边缘检测算子(代码在最下边)    Roberts边缘检测算子根据任意一对互相垂直方向上的差分可用来计算梯度的原理,采用对角线方向相邻两像素之差;Roberts检测器较为简单,但具有一些功能上的限... 查看详情

毕设题目:matlab图像边缘检测

...实现原理并对比验证了不同算法的优缺点,分析了近年来基于深度学习的主要检测方法中的关键技术,并对边缘检测技术的发展方向进行了展望。2现成案例(代码+参考文献)1【边缘检测】基于matlab蚁群算法图像边缘检... 查看详情

图像的亚像素边缘检测matlab代码

...程序,只要是亚像素边缘检测的都可以。帮帮忙!我这有基于小波的,谁能给改成基于小波的图像亚像素边缘检测,发我邮箱:410756340@qq.com%装载并显示原始图像loadbust;%加入含噪init=2055615866;randn('seed',init);X1=X+20*randn(size(X));... 查看详情

基于zynq的ov5640摄像头的sobel算子边缘检测(代码片段)

最近鸽了挺久的,因为最近要做课设,再加上被这个工程的调试给难到了。在做该工程的时候,有一个良好的项目管理习惯会让开发的时候不会让人那么的高血压。特别要注意的是,异步FIFO的读写时钟的速率匹配问题,这个问... 查看详情

sobel算子取代:基于特定点方向的canny边缘检测(代码片段)

前言:      Canny边缘检测使用了Sobel算子,计算dx和dy两个方向,对于特定方向的边缘检测,可以作少量修改。代码:计算特定方向上的边缘 voidCannyOrient( cv::Mat&_src,cv::Mat&_dst, cv::Point2f&seed, doubl... 查看详情

opencv--边缘检测(代码片段)

...c;保留图像重要的结构属性,它大幅可以分为两类1>基于搜索:通过寻找图像一阶导数中最大值来检测边界利用计算结果估计边缘局部方向,通常采用梯度方向,利用此方向找到局部梯度模最大值,代表算法... 查看详情

图像边缘检测算法的研究与实现的开题报告

...kj008.com/web2/mj09b11171.html就像这个网站上的!这个摘要针对基于PC实现的图像边缘检测普遍存在的执行速度慢、不能满足实时应用需求等缺点,本文借助于TI公司的TMS320DM642图像处理芯片作为数字图像处理硬件平台,DSP/BIOS为实时操... 查看详情

sobel边缘检测-matlab(代码片段)

Sobel边缘检测(2)-matlab clcclearclearallcloseall%%%对图像做均值滤波处理img=imread(‘1.png‘);figure(1)subplot(1,2,1),imshow(img),title(‘原始图像‘)%%%将彩色图像转灰度图像img_gray=rgb2gray(img);subplot(1,2,2),imshow(img_gray),t 查看详情

sobel算子的算子描述

...的主体与背景严格地区分开来,换言之就是Sobel算子没有基于图像灰度进行处理,由于Sobel算子没有严格地模拟人的视觉生理特征,所以提取的图像轮廓有时并不能令人满意。在观测一幅图像的时候,我们往往首先注意的是图像... 查看详情