理解边缘检测,从0基础开始,数学知识是重点
2017-09-10 20:10
369 查看
0基础自学数字图像处理中的边缘检测,用了几天时间,大部分用在了学数学上。要想完成边缘检测,在程序上用不了多少代码,而恰恰是这简单代码的背后,存在着存在着诸多数学原理。为此我重学了一部分数学,在这段时间里,对数学的态度也发生了改变,由过去的觉得它枯燥,抽象,无法理解,到现在的觉得数学精巧,甚至有点习喜欢上数学。
下面就把我这几点学习的过程描述一下:
边缘检测中存在的一个重要概念是梯度。
强烈推荐一个外文网站,
http://mathinsight.org/directional_derivative_gradient_introduction
给这个网站五星好评,里面对很多数学知识讲解的那是相当透彻,里面有三维动画。相比之下。。。行,我就不吐槽中国的高数教材了。
简单的说,在有一个变量的函数中,曲线某点的斜率就等于梯度。
在有两个或两个以上变量的函数中,如z = f(x,y),由xy轴组成了一个平面,里面存在n个方向,其中x和y方向是特例,对x和y方向求导,称为偏导数,偏导数又是方向导数的特例,我们可以对处x和y方向的任意方向求导,这就是方向导数的概念,在方向导数中也存在斜率,但随着曲面上某点方向不同,斜率也不同。但在某一方向,存在一个导数最大值,其值就是梯度。
这是我看了上面那个网站的讲解后,说出的我对梯度的理解,写得比较粗糙,还是建议看上面那个网站。
偏导数,方向导数,梯度是边缘检测所需要的数学基础。
通俗的讲,梯度就是变化率,在图像中,则是某点周围的像素灰度变化程度,而边缘检测研究的就是这个,当一个点周围临近点的像素差别很大,从人眼来看,这就是一个边缘。
由于计算机求导计算量大,因此用一阶差分代替一阶偏导
梯度值等于某点在水平方向和数值方向偏导数的平方,如此计算量比较大,因此用xy方向的偏导和代替梯度值。
由于计算梯度的方法是近似得出的,因此就由不同人提出了很多近似算法,来代替梯度,计算梯度的加减乘除又可以写成矩阵形式,人们把这些矩阵称为算子。
如 Roberts算子,Prewitt算子,Sobel算子等。
至此我终于明白了这些奇怪算子的由来。
这是这几天学习的成果。
而至于如何程序实现或其他细节,网上例子很多。
下面就把我这几点学习的过程描述一下:
边缘检测中存在的一个重要概念是梯度。
强烈推荐一个外文网站,
http://mathinsight.org/directional_derivative_gradient_introduction
给这个网站五星好评,里面对很多数学知识讲解的那是相当透彻,里面有三维动画。相比之下。。。行,我就不吐槽中国的高数教材了。
简单的说,在有一个变量的函数中,曲线某点的斜率就等于梯度。
在有两个或两个以上变量的函数中,如z = f(x,y),由xy轴组成了一个平面,里面存在n个方向,其中x和y方向是特例,对x和y方向求导,称为偏导数,偏导数又是方向导数的特例,我们可以对处x和y方向的任意方向求导,这就是方向导数的概念,在方向导数中也存在斜率,但随着曲面上某点方向不同,斜率也不同。但在某一方向,存在一个导数最大值,其值就是梯度。
这是我看了上面那个网站的讲解后,说出的我对梯度的理解,写得比较粗糙,还是建议看上面那个网站。
偏导数,方向导数,梯度是边缘检测所需要的数学基础。
通俗的讲,梯度就是变化率,在图像中,则是某点周围的像素灰度变化程度,而边缘检测研究的就是这个,当一个点周围临近点的像素差别很大,从人眼来看,这就是一个边缘。
由于计算机求导计算量大,因此用一阶差分代替一阶偏导
梯度值等于某点在水平方向和数值方向偏导数的平方,如此计算量比较大,因此用xy方向的偏导和代替梯度值。
由于计算梯度的方法是近似得出的,因此就由不同人提出了很多近似算法,来代替梯度,计算梯度的加减乘除又可以写成矩阵形式,人们把这些矩阵称为算子。
如 Roberts算子,Prewitt算子,Sobel算子等。
至此我终于明白了这些奇怪算子的由来。
这是这几天学习的成果。
而至于如何程序实现或其他细节,网上例子很多。
相关文章推荐
- 图像锐化 边缘检测的一些基础知识
- Buffon投针实验 · 数学的直观理解 · 基础知识很重要
- 图像锐化 边缘检测的一些基础知识
- 【基础数学知识】带你理解泰勒展开式本质
- 图像锐化 边缘检测的一些基础知识
- 基础数学知识整理(1)
- [C# 基础知识系列]专题九: 深入理解泛型可变性
- [C# 基础知识系列]专题七: 泛型深入理解(一)
- SQL Server 索引基础知识(5)----理解newid()和newsequentialid()
- php基础知识 8,数学函数库和日期时间函数库
- 开始ITGEGE教育社区的视频录制----嵌入式基础知识讲解
- [C#基础知识系列]专题十七:深入理解动态类型 推荐
- [C#基础知识系列]专题:深入理解动态类型
- MYSQL+PHP学习,从最基础的知识开始(会话控制)
- 3D引擎的基础数学知识
- SQL Server 索引基础知识(5)----理解newid()和newsequentialid()
- 进程状态一步步理解Linux进程(1)--进程基础知识
- 网络基础知识讲座之三:理解OSI网络分层
- linux驱动基础知识(1)--总线理解
- 网络基础知识讲座之四理解数据链路层