图像梯度(opencv-c++)

Posted H-w-H

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了图像梯度(opencv-c++)相关的知识,希望对你有一定的参考价值。

文章目录

图像梯度

梯度

梯度的本意是一个向量(矢量),表示某一函数在该点处的方向导数沿着该方向取得最大值,即函数在该点处沿着该方向(此梯度的方向)变化最快,变化率最大(为该梯度的模)

设二元函数 z = f ( x , y ) z=f(x,y) z=f(x,y)在平面区域D上具有一阶连续偏导数,则对于每一个点P(x,y)都可定出一个向量

∂ f ∂ x , ∂ f ∂ x = f x ( x , y ) i ˉ + f y ( x , y ) j ˉ \\\\frac \\partial f\\partial x,\\frac \\partial f\\partial x\\=f_x(x,y)\\bar i+f_y(x,y)\\bar j xf,xf=fx(x,y)iˉ+fy(x,y)jˉ,该函数就称为函数 z = f ( x , y ) z=f(x,y) z=f(x,y)在点P(x,y)的梯度,记作gradf(x,y)或 ▽ f ( x , y ) \\triangledown f(x,y) f(x,y)

g r a d f ( x , y ) = ▽ f ( x , y ) = ∂ f ∂ x , ∂ f ∂ x = f x ( x , y ) i ˉ + f y ( x , y ) j ˉ gradf(x,y)=\\triangledown f(x,y)=\\\\frac \\partial f\\partial x,\\frac \\partial f\\partial x\\=f_x(x,y)\\bar i+f_y(x,y)\\bar j gradf(x,y)=f(x,y)=xf,xf=fx(x,y)iˉ+fy(x,y)jˉ
其中 ▽ = ∂ ∂ x i ˉ + ∂ ∂ x j ˉ \\triangledown =\\frac \\partial \\partial x\\bar i+\\frac \\partial \\partial x\\bar j =xiˉ+xjˉ 称为(二维的)向量微分算子或Nabla算子

视频讲解

图像梯度推导

在微积分中,一维函数的一阶微分的基本定义是这样的:
d f d x = lim ⁡ ϵ → 0 f ( x + ϵ ) − f ( x ) ϵ \\frac dfdx = \\lim_\\epsilon\\rightarrow0\\frac f(x+\\epsilon)-f(x)\\epsilon dxdf=ϵ0limϵf(x+ϵ)f(x)
而图像是一个二维函数f(x,y),其微分当然就是偏微分。因此有:
∂ f ( x , y ) ∂ x = lim ⁡ ϵ → 0 f ( x + ϵ , y ) − f ( x , y ) ϵ ∂ f ( x , y ) ∂ y = lim ⁡ ϵ → 0 f ( x , y + ϵ ) − f ( x , y ) ϵ \\frac \\partial f(x,y)\\partial x = \\lim_\\epsilon\\rightarrow0\\frac f(x+\\epsilon, y)-f(x, y)\\epsilon\\\\ \\frac \\partial f(x,y)\\partial y = \\lim_\\epsilon\\rightarrow0\\frac f(x, y+\\epsilon)-f(x, y)\\epsilon xf(x,y)=ϵ0limϵf(x+ϵ,y)f(x,y)yf(x,y)=ϵ0limϵf(x,y+ϵ)f(x,y)
因为图像是一个离散的二维函数, ϵ \\epsilon ϵ不能无限小,我们的图像是按照像素来离散的,最小的 ϵ \\epsilon ϵ就是1像素。因此,上面的图像微分又变成了如下的形式( ϵ = 1 \\epsilon=1 ϵ=1):
∂ f ( x , y ) ∂ x = f ( x + 1 , y ) − f ( x , y ) = g x ∂ f ( x , y ) ∂ y = f ( x , y + 1 ) − f ( x , y ) = g y \\frac \\partial f(x,y)\\partial x = f(x+1,y)-f(x,y)=gx\\\\ \\frac \\partial f(x,y)\\partial y = f(x,y+1)-f(x,y)=gy xf(x,y)=f(x+1,y)f(x,y)=gxyf(x,y)=f(x,y+1)f(x,y)=gy
这分别是图像在(x, y)点处x方向和y方向上的梯度,从上面的表达式可以看出来,图像的梯度相当于2个相邻像素之间的差值。

梯度算法(opencv)

梯度简单来说就是求导。OpenCV 提供了三种不同的梯度滤波器,或者说高通滤波器: S o b e l Sobel Sobel S c h a r r Scharr Scharr L a p l a c i a n 。 Laplacian。 Laplacian什么叫高通呢?其实就是和图像模糊相反。图像模糊是让低频通过,阻挡高频,这样就可以去除噪点,让锐利的边缘变平滑。高通滤波器就是让高频通过,阻挡低频,可以让边缘更加明显,增强图像。

Sobel算子

G x = [ − 1 0 + 1 − 2 0 + 2 − 1 0 + 1 ] ∗ A a n d G y = [ − 1 − 2 − 1 0 0 0 + 1 + 2 + 1 ] ∗ A G_x = \\beginbmatrix -1 & 0 & +1 \\\\ -2 & 0 & +2 \\\\ -1 & 0 & +1 \\endbmatrix*A \\qquad and \\qquad G_y = \\beginbmatrix-1 & -2 & -1 \\\\ 0 & 0 & 0 \\\\ +1 & +2 & +1\\endbmatrix*A Gx= 121000+1+2+1 AandG以上是关于图像梯度(opencv-c++)的主要内容,如果未能解决你的问题,请参考以下文章

图像梯度(opencv-c++)

OpenCV之图像梯度 – 拉普拉斯算子(二阶导数算子)

OpenCV之图像梯度 – 拉普拉斯算子(二阶导数算子)

opencv python:图像梯度

opencv 画出各种滤波器模板图像 证明拉普拉斯滤波器是一个高通滤波器

5.1 边缘检测基础