Sobel边缘检测算子数学原理再学习
Sobel边缘检测算子数学原理再学习
一.Sobel数学原理分析
参考《History and Definition of the so-called "Sobel Operator",more appropriately named the Sobel-Feldman Operator》,《Expansion and Implementation of a 3x3 Sobel and Prewitt Edge Detection Filter to a 5x5 Dimension Filter》,并结合之前彭真明老师的博客,再一次学习了Sobel边缘检测算子的数学原理,并结合上述两篇参考文献所阐述的思路自己动手计算了5*5 Kernel所对应的Sobel算子系数,结果发现彭真明老师博客(Sobel算子的数学基础)所阐述的原理解析存在一定错误。
彭老师博文中提到Soble算子具有严格的数学基础,主要的关键点在于:
- 笛卡尔网格
- 前向差分
- 距离方向的四方向对梯度加权
- 城市距离
对比文献2中的一段话:
“To be more specific, we will refer here to the image function as a "density" function. (It could just as well be an "intensity" function - the difference depends on the physical
nature of the image source.) For a 3x3 neighborhood each simple central gradient estimate is a vector sum of a pair of orthogonal vectors. Each orthogonal vector is a directional
derivative estimate multiplied by a unit vector specifying the derivative's direction. The vector sum of these 4 simple gradient estimates amounts to a vector sum of the 8 directional derivative vectors”。
Thus for a point on a Cartesian grid and its eight neighbors
having density values as shown
a | b | c |
d | e | f |
g | h | i |
we define the magnitude of the directional derivative estimate
vector 'g' for a given neighbor as
|g| = <density difference>/<distance to neighbor>
上述英文大体意思为:对于3*3邻域中心梯度可以通过一系列正交向量之和求得。每一个正交向量是一个的方向导数,可以通过其导数(对于图像而言可用中心差表示)乘以表示导数方向的单位向量所确定。
并定义其方向导数的幅值为:
即方向导数幅值|g| =<灰度差>/<相邻像素之间的距离>
那么,在e点的梯度可以通过邻域内方向导数的幅值乘以对应的单位向量所对应的向量求和求的。
而我们知道函数中某一点的梯度是一个这样的向量,它的方向与取得最大方向导数的方向一致,它的模为方向导数的最大值。梯度即函数在某一点最大的方向导数,梯度沿着方向导数有最大的变化率。
Sobel表示的数学公式也与函数的梯度类似。由于是正交向量相加减,最后的结果肯定会指向最大方向导数的方向。图像边缘也是沿着某一方向具有最大变化,其导数幅值最大,根据公式求出该点的梯度正好符合边缘灰度值的变化趋势。因此,Sobel能够检测各种方向边缘。我们常见的都是水平和竖直边缘,当然也可以检测45°、135°斜边边缘,不过其模板需要重新再计算。
由以上分析可知,至少彭老师所阐述的第二点、第三点、第四点存在错误。
更正确的表述为:
- 笛卡尔网格
- 中心差分
- 由导数和对应的单位向量所定义的方向导数所构成的正交向量求和
- 欧氏距离
二.3*3 kernel Sobel算子计算
根据上述原理的分析,我们来重新计算其Sobel算子模板参数。我们定义笛卡尔网格为:
a | b | c |
d | e | f |
g | h | i |
字母表示其灰度值,对应所表示的笛卡尔坐标坐标值为:
我们根据坐标的向量知识以及像素距离知识可知,计算其e点的梯度为:
由于我们是以X轴为横向基向量,Y轴为纵向基向量,故其x方向梯度和y方向梯度可以表示为:
经过验证,其计算出来的结果与Sobel算子一致。
三.5*5 Kernel Sobel算子计算
理解了3*3 Kernel Sobel算子构建的基本原理,那么我们很容易构建出5*5 Kernel Sobel算子模板各参数。让我们开始吧!
点对(3,3)(1,1)构成的向量[2,2]和点对(1,3)(3,1)构成的向量[-2,2],其点积为0,互为正交向量;即ir 向量和gt向量互为正交向量
点对(1,4)(3,0)构成的向量[-2,4]和点对(4,3)(0,1)构成的向量[4,2],其点积为0,互为正交向量;即by向量和jp向量互为正交向量;
点对(3,4)(1,0)构成的向量[2,4]和点对(0,3)(4,1)构成的向量[-4,2],其点积为0,互为正交向量;即dw向量和fu向量互为正交向量;
同理可得:
ok向量和cx向量互为正交向量;
ev向量和az向量互为正交向量;
hs向量和nl向量互为正交向量;
如下图所示:
按照3*3 Sobel算子计算方法,我们可以计算的到其5*5 Sobel算子参数为:
因此,5*5 Sobel算子按照X,Y方向可以写成:
- 3*3 Sobel算子和5*5 Kernel Sobel算子边缘检测结果比较
参考文献:
Expansion and Implementation of a 3x3 Sobel and Prewitt Edge Detection Filter to a 5x5 Dimension Filter
An Isotropic 3x3 Image Gradient Operator
Sobel边缘检测算子数学原理再学习相关推荐
- 【opencv】19.图像边缘检测算子数学原理、像素一二阶导数的意义
1.像素一二阶导数的意义 下面导数是数学中的定义 一阶导数定义: { f ′ ( x ) = lim Δ x → 0 f ( x + Δ x ) − f ( x ) Δ x f ′ ( x ) = ...
- 模拟上帝之手的对抗博弈——GAN背后的数学原理
模拟上帝之手的对抗博弈--GAN背后的数学原理 深度学习 人工智能 机器学习 神经网络 神经网络与机器学习-英文版 阅读1984 作者:李乐 CSDN专栏作家 简介 深度学习的潜在优势就在于可以利用 ...
- 小波变换 边缘检测 matlab,边缘检测算子和小波变换提取图像边缘【matlab】
Roberts边缘检测算子:根据一对互相垂直方向上的差分可用来计算梯度的原理,采用对角线方向相邻两像素之差. 小波变换的方法比较适用于展现夹带在正常信号中的瞬间反常现象,具有方向敏感性.所以可以边缘检 ...
- opencv边缘检测算子
实验三 边缘检测算子 一. 实验目的 利用opencv或其他工具编写实现下图的sobel算子和robert算子边缘检测 二. 实验过程 利用opencv python实现sobel算子和robert算 ...
- 姿态解算(用于飞行器或ROV等)的基本思路和数学原理
文章目录 (一)前言 (二)方向余弦矩阵DCM (三)四元数 (四)求四元数 更新四元数 误差消除 (五)总结 (一)前言 数学是算法的门槛 我们就用数学的角度去探寻姿态解算,不谈代码 主要是 ...
- 几种边缘检测算子的比较Roberts,Sobel,Prewitt,LOG,Canny
from:https://blog.csdn.net/gdut2015go/article/details/46779251 边缘检测是图像处理和计算机视觉中的基本问题,边缘检测的目的是标识数字图像中 ...
- 图像边缘检测-Canny,Sobel等算子
一.前言 首先我们先来简单了解一下什么是数字图像处理(Digital Image Processing),先看一下数字图像主要的两个应用领域: 1.改善图示信息以便人们解释: 2.为存储.传输和表示而 ...
- OpenCV_08 边缘检测:Sobel检测算子+Laplacian算子+Canny边缘检测
1 原理 边缘检测是图像处理和计算机视觉中的基本问题,边缘检测的目的是标识数字图像中亮度变化明显的点.图像属性中的显著变化通常反映了属性的重要事件和变化.边缘的表现形式如下图所示: 图像边缘检测大幅度 ...
- Roberts、Prewitt、Sobel、Laplacian、LoG 和 Canny 边缘检测算子(MATLAB自写函数实现)
文章目录 Roberts.Prewitt.Sobel.Laplacian.LoG 和 Canny 边缘检测算子(MATLAB自写函数实现) 1理论 1.1 知识引入 1.1.1 图像边缘边缘[1] 1 ...
- matlab实现sobel边缘检测图像,基于Sobel算子图像边缘检测的MATLAB实现
<基于Sobel算子图像边缘检测的MATLAB实现>由会员分享,可在线阅读,更多相关<基于Sobel算子图像边缘检测的MATLAB实现(3页珍藏版)>请在人人文库网上搜索. 1 ...
最新文章
- 重磅直播|结构光方法新应用
- 常用浏览器内核驱动下载地址
- 一天一点linux(9):ubuntu下如何搭建LAMP开发环境?
- linux ssh 登陆后欢迎界面 banner 设置
- log4net日志文件的应用
- Docker JFrog Artifactory 7.27.10 maven私服(搭建篇)
- IE下单单只设置背景透明度的解决方案
- pptx打不开,未安装该文件类型的文本转换程序~[解决方案]
- js 获取中括号里面字符串_西门子SCL编程入门教程连载(18)——字符串
- Linux命令解释之chmod
- 一行代码打印python之禅
- windows传文件到linux
- 云智慧悄然“变身”业务运维,到底发生了什么?
- cvThreshold() 阈值化
- log4j 日志输出级别
- NXP TJA1040, TJA1042, TJA1050 TJA1051, TJA1057, TJA1044, TJA1055区别
- 从GTK、GLib到GObject与GType历史梳理
- 为什么受伤的总是我,赢的总是她?
- 谷歌浏览器开发者工具鼠标箭头变成小圆点了
- Enhanced ShockBurst (ESB)原文翻译
热门文章
- VS2005 执行控制台程序的时候,窗口一闪就没了的问题
- 免费体验手机版MSN2.0
- Python处理僵尸进程
- java update 卸载不了_javaupdate可以卸载吗
- 基于tensorflow的RNN中文自动写诗程序
- waves效果器_学会EQ效果器,浑厚亮嗓又大气
- 显示屏色温调节 影响 测试软件,Twilight屏幕色温调节软件
- 泛泰android phone下载,这里泛泰手机全系列驱动和刷机临时RECVOVERY下载,自测全部好用...
- Win10下如何清理优化C盘
- 金蝶系统安装后怎么连服务器,金蝶安装在云服务器上怎么连接