梯度算子

永兴的笔记-OpenCV-6图像梯度和边缘检测

。_饼干妹妹 提交于 2020-01-01 15:15:48
一、什么是图像梯度: 图像的梯度就是描述图像中灰度的变化,微积分就是求函数的变化率,即导数(梯度)。图像的梯度相当于2个相邻像素之间的差值。 图像梯度可以把图像看成二维离散函数,图像梯度其实就是这个二维离散函数的求导: 在x方向,选取某个像素,假设其像素值是100,沿x方向的相邻像素分别是90,90,90,则根据上面的计算其x方向梯度分别是10,0,0。这里只取变化率的绝对值,表明变化的大小即可。 灰度值100和90之间亮度相差10,并不是很明显,与一大群90的连续灰度值在一起,轮廓必然是模糊的。我们注意到,如果相邻像素灰度值有变化,那么梯度就有值,如果相邻像素灰度值没有变化,那么梯度就为0。如果我们把梯度值与对应的像素相加,那么灰度值没有变化的,像素值不变,而有梯度值的,灰度值变大了,那么图像的边缘更加明显。 二、OpenCV中的图像梯度应用(检测边缘): OpenCV提供三种类型的梯度滤波器或高通滤波器,Sobel,Scharr和Laplacian. 高通滤波器(英语:High-pass filter)是容许高频信号通过、但减弱(或减少)频率低于截止频率信号通过的滤波器。对于不同滤波器而言,每个频率的信号的减弱程度不同。它有时被称为低频剪切滤波器; 1、Sober 算子 Sober 算子是离散微分算子(discrete differentiation operator)

彻底理解数字图像处理中的卷积-以Sobel算子为例

回眸只為那壹抹淺笑 提交于 2019-12-26 09:04:55
彻底理解数字图像处理中的卷积-以Sobel算子为例 作者:FreeBlues 修订记录 - 2016.08.04 初稿完成 概述 卷积 在信号处理领域有极其广泛的应用, 也有严格的物理和数学定义. 本文只讨论卷积在数字图像处理中的应用. 在数字图像处理中, 有一种基本的处理方法: 线性滤波 . 待处理的平面数字图像可被看做一个大矩阵, 图像的每个像素对应着矩阵的每个元素, 假设我们平面的分辨率是 1024*768 , 那么对应的大矩阵的 行数 = 1024 , 列数 = 768 . 用于滤波的是一个滤波器小矩阵(也叫 卷积核 ), 滤波器小矩阵一般是个方阵, 也就是 行数 和 列数 相同, 比如常见的用于边缘检测的 Sobel 算子 就是两个 3*3 的小矩阵. 进行滤波就是对于大矩阵中的每个像素, 计算它周围像素和滤波器矩阵对应位置元素的乘积, 然后把结果相加到一起, 最终得到的值就作为该像素的新值, 这样就完成了一次滤波. 上面的处理过程可以参考这个示意图: 图像卷积计算示意图: 对图像大矩阵和滤波小矩阵对应位置元素相乘再求和的操作就叫 卷积 ( Convolution )或 协相关 ( Correlation ). 协相关 ( Correlation )和 卷积 ( Convolution )很类似, 两者唯一的差别就是 卷积 在计算前需要翻转 卷积核 , 而 协相关

OpenCV边缘检测算子原理总结及实现

╄→гoц情女王★ 提交于 2019-12-06 01:06:17
1. 拉普拉斯算子 原理:是一种基于图像导数运算的高通线性滤波器。它通过二阶导数来度量图像函数的曲率。 拉普拉斯算子是最简单的各向同性微分算子,它具有旋转不变性。一个二维图像函数的拉普拉斯变换是各向同性的二阶导数,定义为: 用更加形象的图像来解释,假设我们有一张一维图形。下图(a)中灰度值的”跃升”表示边缘的存在.如果使用一阶微分求导我们可以更加清晰的看到边缘”跃升”的存在(这里显示为高峰值)图(b); 如果在边缘部分求二阶导数会出现什么情况?,图(c)所示。(其图片和定义公式来源于 http://www.opencv.org.cn/opencvdoc/2.3.2/html/doc/tutorials/imgproc/imgtrans/laplace_operator/laplace_operator.html )。 (a) (b) (c) 你会发现在一阶导数的极值位置,二阶导数为0。所以我们也可以用这个特点来作为检测图像边缘的方法。 但是, 二阶导数的0值不仅仅出现在边缘(它们也可能出现在无意义的位置),但是我们可以过滤掉这些点。 为了更适合于数字图像处理,将该方程表示为离散形式: 另外,拉普拉斯算子还可以表示成模板的形式,以便更好编程需要。如图1所示。 图1(a)表示离散拉普拉斯算子的模板,图1(b)表示其扩展模板,图1(c)则分别表示其他两种拉普拉斯的实现模板

OpenCV(四)之图像梯度处理

匿名 (未验证) 提交于 2019-12-03 00:01:01
OpenCV(四)之图像梯度处理 Gradient processing系列 Gradient processing-Sobel算子 Gradient processing-Scharr算子 Gradient processing-Laplacian算子 Gradient processing-计算梯度计算的对比 Gradient processing系列 在这一节中,我分析了关于图像梯度处理的几个方法,分析原理,代码实现,并观察有何差异。 Gradient processing-Sobel算子 对于 x -导数,或对 y -导数进行转置。 该函数通过将图像与适当的内核进行卷积来计算图像导数: Sobel 算子结合了高斯平滑和微分,因此结果或多或少地抵抗噪声。 大多数情况下,使用( xorder = 1 , yorder = 0 , ksize = 3 )或( xorder = 0 , yorder = 1 , ksize = 3 ), 调用函数以计算第一个 x 或 y 图像导数。 第一种情况对应于以下内核: 第二种情况对应于以下内核: 参数 SRC 输入图像。 DST 输出与 src 相同大小和相同通道数的图像。 ddepth 输出图像深度,见# combinations ; 在 8 位输入图像的情况下,它将导致截断的导数。 DX 导数 x 的顺序。 DY 导数 y 的顺序。

Sobel算子

匿名 (未验证) 提交于 2019-12-02 23:57:01
#include <opencv2/opencv.hpp> #include <iostream> #include <math.h> using namespace cv; int main(int argc, char** argv) { Mat src, dst; int ksize = 0; src = imread("L:/5.jpg"); if (!src.data) { printf("could not load image...\n"); return -1; } char INPUT_WIN[] = "input image"; char OUTPUT_WIN[] = "sobel-demo"; namedWindow(INPUT_WIN, CV_WINDOW_AUTOSIZE); namedWindow(OUTPUT_WIN, CV_WINDOW_AUTOSIZE); imshow(INPUT_WIN, src); GaussianBlur(src, dst, Size(3, 3), 0, 0); //高斯平滑,高斯滤波 Mat gray_src; cvtColor(dst, gray_src,CV_BGR2GRAY); imshow("gray image", gray_src); Mat xgrad, ygrad; Sobel(gray_src,

(转)自动微分(Automatic Differentiation)简介——tensorflow核心原理

谁说我不能喝 提交于 2019-12-02 11:10:51
现代深度学习系统中(比如MXNet, TensorFlow等)都用到了一种技术——自动微分。在此之前,机器学习社区中很少发挥这个利器,一般都是用Backpropagation进行梯度求解,然后进行SGD等进行优化更新。手动实现过backprop算法的同学应该可以体会到其中的复杂性和易错性,一个好的框架应该可以很好地将这部分难点隐藏于用户视角,而自动微分技术恰好可以优雅解决这个问题。接下来我们将一起学习这个优雅的技术:-)。本文主要来源于陈天奇在华盛顿任教的课程 CSE599G1: Deep Learning System 和《 Automatic differentiation in machine learning: a survey 》。 什么是自动微分 微分求解大致可以分为4种方式: 手动求解法(Manual Differentiation) 数值微分法(Numerical Differentiation) 符号微分法(Symbolic Differentiation) 自动微分法(Automatic Differentiation) 为了讲明白什么是自动微分,我们有必要了解其他方法,做到有区分有对比,从而更加深入理解自动微分技术。 手动求解法 手动求解其实就对应我们传统的backprop算法,我们求解出梯度公式,然后编写代码,代入实际数值,得出真实的梯度。在这样的方式下

图像特征点及特征描述子总结

别来无恙 提交于 2019-11-29 19:16:52
参考博客 https://blog.csdn.net/qq_28193895/article/details/80845803 https://blog.csdn.net/u013989576/article/details/49226611 https://blog.csdn.net/tostq/article/details/49314017 https://www.cnblogs.com/zyly/p/9542164.html https://www.cnblogs.com/gfgwxw/p/9440785.html https://www.cnblogs.com/wyuzl/p/7838103.html https://www.cnblogs.com/sonicmlj/p/9564182.html https://blog.csdn.net/dreamguard/article/details/83988814 https://blog.csdn.net/yangying1992/article/details/100809629 https://www.cnblogs.com/jiahenhe2/p/7930802.html https://blog.csdn.net/jiaoyangwm/article/details/79986729 1.Susan 原理

sobel算子原理与实现

拜拜、爱过 提交于 2019-11-29 18:37:59
一、原理: 首先介绍背景知识: 1)边缘:灰度或结构等信息的突变处,边缘是一个区域的结束,也是另一个区域的开始,利用该特征可以分割图像。 2)边缘点:图像中具有坐标[x,y],且处在强度显著变化的位置上的点。 3)边缘段:对应于边缘点坐标[x,y]及其方位 ,边缘的方位可能是梯度角。 索贝尔算子(Sobeloperator)主要用作边缘检测,在技术上,它是一离散性差分算子,用来运算图像亮度函数的灰度之近似值。在图像的任何一点使用此算子,将会产生对应的灰度矢量或是其法矢量。 为了节省时间,我就直接截图了,原理都这样。 套用公式就如下, Sobel算子根据像素点上下、左右邻点灰度加权差,在边缘处达到极值这一现象检测边缘。对噪声具有平滑作用,提供较为精确的边缘方向信息,边缘定位精度不够高。当对精度要求不是很高时,是一种较为常用的边缘检测方法。 如果求整体x和y方向的So被浏览梯度,只需要将Gx和Gy想家即可。 二、C++代码实现 我查过很多资料,都没有发现这个Sobel在C++上到底 是怎么实现的,以为就是没有代码,思索良久,在同学的提示下,终于写出来了,不过可能有不少瑕疵。 #include<opencv2/opencv.hpp> #include<iostream> using namespace std; using namespace cv; int main() { Mat m

【数字图像处理】边缘检测与图像分割

馋奶兔 提交于 2019-11-29 16:47:56
原文链接: 边缘检测与图像分割 作者: HUSTLX 1图像分割原理 图像分割的研究多年来一直受到人们的高度重视,至今提出了各种类型的分割算法。Pal把图像分割算法分成了6类:阈值分割,像素分割、深度图像分割、彩色图像分割,边缘检测和基于模糊集的方法。但是,该方法中,各个类别的内容是有重叠的。为了涵盖不断涌现的新方法,有的研究者将图像分割算法分为以下六类:并行边界分割技术、串行边界分割技术、并行区域分割技术、串行区域分割技术、结合特定理论工具的分割技术和特殊图像分割技术。而在较近的一篇综述中,更有学者将图像分割简单的分割数据驱动的分割和模型驱动的分割两类。下面将图像分割方法主要分以下几类:基于阈值的分割方法、基于区域的分割方法、基于边缘的分割方法、基于数学形态的分割方法以及基于特定理论的分割方法等,对其中主要的分别进行简要介绍。 1.1灰度阈值分割法 是一种最常用的并行区域技术,它是图像分割中应用数量最多的一类。阈值分割方法实际上是输入图像f到输出图像g的如下变换: 其中,T为阈值,对于物体的图像元素g(i,j)=l,对于背景的图像元素g(i,j)=0。 由此可见,阈值分割算法的关键是确定阈值,如果能确定一个合适的阈值就可准确地将图像分割开来。如果阈值选取过高,则过多的目标区域将被划分为背景,相反如果阈值选取过低,则过多的背景将被划分到目标区 [7] 。阈值确定后

OpenCV第九讲:图像变换之边缘检测(Laplacian +Scharr 算子)

北城以北 提交于 2019-11-28 18:45:18
1. Laplacian 算子 Laplacian 算子(拉普拉斯), 是n维欧几里德空间中的一个二阶微分算子,定义为梯度的散度(参考: 一阶为梯度,二阶为散度 )。 拉普拉斯算子的定义: Laplace ( f ) = ∂ 2 f ∂ x 2 + ∂ 2 f ∂ y 2 (f)=\frac{\partial^{2} f}{\partial x^{2}}+\frac{\partial^{2} f}{\partial y^{2}} ( f ) = ∂ x 2 ∂ 2 f ​ + ∂ y 2 ∂ 2 f ​ 注意: 拉普拉斯算子使用了图像梯度,它的内部代码调用了 Sobel算子 , 且如果让 一幅图像减去它的Laplacian算子可以增强对比度 。 源代码剖析 /************************************************************ * void Laplacian( InputArray src, OutputArray dst, int ddepth, int ksize = 1, double scale = 1, double delta = 0, int borderType = BORDER_DEFAULT ); * * ksize = 1, 内核大小为3*3 * * src: image 8-bit input image