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

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

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

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

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

矩阵的卷积公式如下。

ecbd6ab6756bc432e9451fd65234015d.png

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

003c9530639d2a66da7c381e72be03a4.png

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

e51bae7eda6bb01d20bddf91071ff15a.png

Sobel卷积因子

其中A代表原始图像。

1316d75cafeb7958ca586328683dc170.png

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

93db41ba89cbb8e1d7650c251b8e43c7.png

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

f7b2b46a159ead6dacf6eedd8e52a184.png

将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实现

SobelEdgeDetect

1%RGB_YCbCr2clc;3clearall;4closeall;56RGB_data=imread('lena.jpg');%78R_data=RGB_data(:,:,1);9G_data=RGB_data(:,:,2);10B_data=RGB_data(:,:,3);1112%imshow(RGB_data);1314[ROW,COL,DIM]=size(RGB_data);1516Y_data=zeros(ROW,COL);17Cb_data=zeros(ROW,COL);18Cr_data=zeros(ROW,COL);19Gray_data=RGB_data;2021forr=1:ROW22forc=1:COL23Y_data(r,c)=0.299*R_data(r,c)+0.587*G_data(r,c)+0.114*B_data(r,c);24Cb_data(r,c)=-0.172*R_data(r,c)-0.339*G_data(r,c)+0.511*B_data(r,c)+128;25Cr_data(r,c)=0.511*R_data(r,c)-0.428*G_data(r,c)-0.083*B_data(r,c)+128;26end27end2829Gray_data(:,:,1)=Y_data;30Gray_data(:,:,2)=Y_data;31Gray_data(:,:,3)=Y_data;3233figure;34imshow(Gray_data);3536%MedianFilter37imgn=imnoise(Gray_data,'salt&pepper',0.02);3839figure;40imshow(imgn);4142Median_Img=Gray_data;43forr=2:ROW-144forc=2:COL-145median3x3=[imgn(r-1,c-1)imgn(r-1,c)imgn(r-1,c+1)46imgn(r,c-1)imgn(r,c)imgn(r,c+1)47imgn(r+1,c-1)imgn(r+1,c)imgn(r+1,c+1)];48sort1=sort(median3x3,2,'descend');49sort2=sort([sort1(1),sort1(4),sort1(7)],'descend');50sort3=sort([sort1(2),sort1(5),sort1(8)],'descend');51sort4=sort([sort1(3),sort1(6),sort1(9)],'descend');52mid_num=sort([sort2(3),sort3(2),sort4(1)],'descend');53Median_Img(r,c)=mid_num(2);54end55end5657figure;58imshow(Median_Img);5960%Sobel_Edge_Detect6162Median_Img=double(Median_Img);63Sobel_Threshold=150;64Sobel_Img=zeros(ROW,COL);65forr=2:ROW-166forc=2:COL-167Sobel_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);68Sobel_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);69Sobel_Num=abs(Sobel_x)+abs(Sobel_y);70%Sobel_Num=sqrt(Sobel_x^2+Sobel_y^2);71if(Sobel_Num>Sobel_Threshold)72Sobel_Img(r,c)=0;73else74Sobel_Img(r,c)=255;75end76end77end7879figure;80imshow(Sobel_Img);

处理后的图片效果

df8b5e2245210a0f3d4e95098abb5bf1.png

中值滤波后的lena

356d9c2d6bc5146723bc3f2a45638d6a.png

Sobel边沿检测后的lena

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

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值