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: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的基础上再进行腐蚀膨胀处理,腐蚀膨胀处理

边缘人工智能有助于物联网的优势
C语言过程中遇到问题如何解决
铜铝激光焊接工艺的特点
展会邀请 | 虹科诚邀您8月26日参加武汉机器视觉技术及工业应用研讨会
什么时候才可以完成2G/3G的退网
MATLAB的Sobel图像边缘灰度值检测算法的详细公式和实现资料概述
浅析嵌入式存储系统设计方法
美国FCC开始着手统计有关使用华为与中兴设备的信息 美国偏远地区有望继续采用
华为在VR/AR领域发力 开发者应该如何把握机会
西方国家习惯于模拟电视而少用网络电视
联想展示5G笔记本电脑的原型机 Z6青春版正式开启发售
静电火灾的基本条件_防静电火灾的措施
WiFi 6能够为5G网络提供强有力的支撑
buck芯片下电瞬间输出震荡案例
人脸识别测温一体机功能介绍
AX58100+STM32F303RE MCU 马达控制参考设计指南
投影机的无PC移动演示
决战南昌 东南赛区总决赛即将开启
华虹半导体上市,中国芯片代工的另类突围
苹果供应商纬创资通寻求重启其印度南部工厂的运营