OpenCV数学基础知识

5 阅读3分钟

差分

一阶差分

对于一维连续或离散函数f(x)f(x),在点xx处的差分定义为

Δf(x)=f(x+Δx)f(x)\Delta f(x)=f(x+\Delta x)-f(x)

对于二维连续或离散函数f(x,y)f(x,y),差分定义为

Δfx(x,y)=f(x+Δx,y)f(x,y) Δfy(x,y)=f(x,y+Δy)f(x,y)\begin{aligned} \Delta f_x(x,y)&=f(x+\Delta x,y)-f(x,y)\ \Delta f_y(x,y)&=f(x,y+\Delta y)-f(x,y) \end{aligned}

二阶差分

二阶差分定义为对一阶差分的差分。 对于一维连续或离散函数f(x)f(x),在点xx处的二阶差分定义为

Δ2f(x)=Δ(Δf(x)) =Δf(x+Δx)Δf(x) =(f(x+Δx+Δx)f(x+Δx))(f(x+Δx)f(x)) =f(x+2Δx)2f(x+Δx)+f(x)\begin{aligned} \Delta^2f(x)&=\Delta(\Delta f(x))\ &=\Delta f(x+\Delta x)-\Delta f(x)\ &=(f(x+\Delta x+\Delta x)-f(x+\Delta x))-(f(x+\Delta x)-f(x))\ &=f(x+2\Delta x)-2f(x+\Delta x)+f(x) \end{aligned}

同理,对于二维连续或离散函数f(x,y)f(x,y),二阶差分定义为

Δ2fx(x,y)=f(x+2Δx,y)2f(x+Δx,y)+f(x,y) Δ2fy(x,y)=f(x,y+2Δy)2f(x,y+Δy)+f(x,y)\begin{aligned} \Delta^2f_x(x,y)&=f(x+2\Delta x,y)-2f(x+\Delta x,y)+f(x,y)\ \Delta^2f_y(x,y)&=f(x,y+2\Delta y)-2f(x,y+\Delta y)+f(x,y) \end{aligned}

高阶差分

对于任意阶差分,其系数满足杨辉三角的系数,只需将偶数列取负值即可。

微分

微分是差分的点差趋近于0的特殊形式。 对于一维连续函数f(x)f(x),在点xx处的微分定义为

df(x)=limΔx0f(x+Δx)f(x)df(x)=\lim_{\Delta x\rightarrow0}f(x+\Delta x)-f(x)

二阶微分为

d2f(x)=limΔx0f(x+2Δx)2f(x+Δx)+f(x)d^2f(x)=\lim_{\Delta x\rightarrow0}f(x+2\Delta x)-2f(x+\Delta x)+f(x)

在离散情况下,由于关于x,yx,y的差分Δx,Δy\Delta x, \Delta y无法趋近于0,因此一般用Δx=Δy=1\Delta x=\Delta y=1,也就是距离为1的差分来近似表示微分。 对于一维离散函数f(x)f(x),在点xx处的微分定义为

df(x)f(x+1)f(x)df(x)\approx f(x+1)-f(x)

二阶微分为

d2f(x)f(x+2)2f(x+1)+f(x)d^2f(x)\approx f(x+2)-2f(x+1)+f(x)

导数

对于一维连续函数f(x)f(x),在点xx处的导数定义为f(x)f(x)的差分与xx的差分在Δx0\Delta x\rightarrow0时的极限值:

f(x)=df(x)dx=limΔx0f(x+Δx)f(x)Δxf'(x)=\frac{df(x)}{dx}=\lim_{\Delta x\rightarrow0}\frac{f(x+\Delta x)-f(x)}{\Delta x}

二阶导数为

f(x)=d2f(x)dx2=limΔx0f(x+2Δx)2f(x+Δx)+f(x)(Δx)2f''(x)=\frac{d^2f(x)}{dx^2}=\lim_{\Delta x\rightarrow0}\frac{f(x+2\Delta x)-2f(x+\Delta x)+f(x)}{(\Delta x)^2}

在OpenCV的离散情况下,由于关于x,yx,y的差分Δx,Δy\Delta x, \Delta y无法趋近于0,因此一般用Δx=Δy=1\Delta x=\Delta y=1,也就是微分来近似计算导数。 即对于一维离散函数f(x)f(x),导数定义为

f(x)df(x)=f(x+1)f(x)f'(x)\approx df(x)=f(x+1)-f(x)

二阶导数为

f(x)d2f(x)=f(x+2)2f(x+1)+f(x)f''(x)\approx d^2f(x)=f(x+2)-2f(x+1)+f(x)

偏导数

对于二维连续或离散函数f(x,y)f(x,y),偏导数定义为f(x,y)f(x,y)的在xx方向或yy方向的差分与xxyy的差分在Δx0\Delta x\rightarrow0Δy0\Delta y\rightarrow0时的极限值:

Gx(x,y)=f(x,y)x=limΔx0f(x+Δx,y)f(x,y)Δx Gy(x,y)=f(x,y)y=limΔy0f(x,y+Δy)f(x,y)Δy\begin{aligned} G_x(x,y)&=\frac{\partial f(x,y)}{\partial x}=\lim_{\Delta x\rightarrow0}\frac{f(x+\Delta x,y)-f(x,y)}{\Delta x}\ G_y(x,y)&=\frac{\partial f(x,y)}{\partial y}=\lim_{\Delta y\rightarrow0}\frac{f(x,y+\Delta y)-f(x,y)}{\Delta y} \end{aligned}

二阶偏导数为

2f(x,y)x2=limΔx0f(x+2Δx,y)2f(x+Δx,y)+f(x,y)(Δx)2 2f(x,y)y2=limΔy0f(x,y+2Δy)2f(x,y+Δy)+f(x,y)(Δy)2\begin{aligned} \frac{\partial^2f(x,y)}{\partial x^2}&=\lim_{\Delta x\rightarrow0}\frac{f(x+2\Delta x,y)-2f(x+\Delta x,y)+f(x,y)}{(\Delta x)^2}\ \frac{\partial^2f(x,y)}{\partial y^2}&=\lim_{\Delta y\rightarrow0}\frac{f(x,y+2\Delta y)-2f(x,y+\Delta y)+f(x,y)}{(\Delta y)^2} \end{aligned}

除此之外,还有二阶混合偏导数,计算遵循从右到左的顺序:

2f(x,y)xy=x(f(x,y)y) =x(limΔy0f(x,y+Δy)f(x,y)Δy) =limΔx0limΔy0f(x+Δx,y+Δy)f(x+Δx,y)Δyf(x,y+Δy)f(x,y)ΔyΔx =limΔx0limΔy0f(x+Δx,y+Δy)f(x+Δx,y)f(x,y+Δy)+f(x,y)ΔxΔy 2f(x,y)yx=limΔy0limΔx0f(x+Δx,y+Δy)f(x+Δx,y)f(x,y+Δy)+f(x,y)ΔxΔy\begin{aligned} \frac{\partial^2f(x,y)}{\partial x\partial y}&=\frac{\partial}{\partial x}(\frac{\partial f(x,y)}{\partial y})\ &=\frac{\partial}{\partial x}(\lim_{\Delta y\rightarrow0}\frac{f(x,y+\Delta y)-f(x,y)}{\Delta y})\ &=\lim_{\Delta x\rightarrow0}\frac{\lim_{\Delta y\rightarrow0}\frac{f(x+\Delta x,y+\Delta y)-f(x+\Delta x,y)}{\Delta y}-\frac{f(x,y+\Delta y)-f(x,y)}{\Delta y}}{\Delta x}\ &=\lim_{\Delta x\rightarrow0}\lim_{\Delta y\rightarrow0}\frac{f(x+\Delta x,y+\Delta y)-f(x+\Delta x,y)-f(x,y+\Delta y)+f(x,y)}{\Delta x\Delta y}\ \frac{\partial^2f(x,y)}{\partial y\partial x}&=\lim_{\Delta y\rightarrow0}\lim_{\Delta x\rightarrow0}\frac{f(x+\Delta x,y+\Delta y)-f(x+\Delta x,y)-f(x,y+\Delta y)+f(x,y)}{\Delta x\Delta y} \end{aligned}

上式中的区别为取极限的顺序,一个是先对Δx\Delta x取极限,另一个是先对Δy\Delta y取极限。

对于二维离散函数f(x,y)f(x,y),偏导数定义为

Gx=f(x,y)xdfx(x,y)=f(x+1,y)f(x,y) Gy=f(x,y)ydfy(x,y)=f(x,y+1)f(x,y)\begin{aligned} G_x=\frac{\partial f(x,y)}{\partial x}&\approx df_x(x,y)=f(x+1,y)-f(x,y)\ G_y=\frac{\partial f(x,y)}{\partial y}&\approx df_y(x,y)=f(x,y+1)-f(x,y) \end{aligned}

二阶偏导数为

2f(x,y)x2d2fx(x,y)=f(x+2,y)2f(x+1,y)+f(x,y) 2f(x,y)y2d2fy(x,y)=f(x,y+2)2f(x,y+1)+f(x,y) 2f(x,y)xy2f(x,y)yxf(x+1,y+1)f(x+1,y)f(x,y+1)+f(x,y) \begin{aligned} \frac{\partial^2f(x,y)}{\partial x^2}&\approx d^2f_x(x,y)=f(x+2,y)-2f(x+1,y)+f(x,y)\ \frac{\partial^2f(x,y)}{\partial y^2}&\approx d^2f_y(x,y)=f(x,y+2)-2f(x,y+1)+f(x,y)\ \frac{\partial^2f(x,y)}{\partial x\partial y}\approx\frac{\partial^2f(x,y)}{\partial y\partial x}&\approx f(x+1,y+1)-f(x+1,y)-f(x,y+1)+f(x,y)\ \end{aligned}

梯度

一阶梯度

在二维图像f(x,y)f(x,y)上,一阶导数由f(x,y)f(x,y)xx方向和yy方向的偏导数计算出的梯度来表示。梯度f\nabla f是关于ff的向量函数:

G(x,y)=f(x,y)=[fxfy]=[GxGy]G(x,y)=\nabla f(x,y)=\begin{bmatrix} \frac{\partial f}{\partial x} & \frac{\partial f}{\partial y} \end{bmatrix}=\begin{bmatrix} G_x & G_y \end{bmatrix}

梯度的幅值为

mag(G(x,y))=(fx)2+(fy)2=Gx2+Gy2mag(G(x,y))=\sqrt{(\frac{\partial f}{\partial x})^2+(\frac{\partial f}{\partial y})^2}=\sqrt{G_x^2+G_y^2}

为方便计算,也常用近似公式

mag(G(x,y))fx+fy=Gx+Gymag(G(x,y))\approx|\frac{\partial f}{\partial x}|+|\frac{\partial f}{\partial y}|=|G_x|+|G_y|

梯度的方向为

ϕ(G(x,y))=arctanGyGx\phi(G(x,y))=\arctan|\frac{G_y}{G_x}|

二阶梯度

二维空间中的二阶梯度是一个2×22\times2矩阵,称为海森矩阵(Hessian matrix),定义为:

Δ2f(x,y)=[2fx22fxy 2fyx2fy2]\Delta^2f(x,y)=\begin{bmatrix} \frac{\partial^2f}{\partial x^2} & \frac{\partial^2f}{\partial x\partial y}\ \frac{\partial^2f}{\partial y\partial x} & \frac{\partial^2f}{\partial y^2} \end{bmatrix}

卷积

对于一维连续可积函数f(x),g(x)f(x),g(x),在实数域RR上的卷积为

(fg)(x)=f(τ)g(xτ)dτ(f\cdot g)(x)=\int_{-\infty}^{\infty}f(\tau)g(x-\tau)d\tau

合理推广,对于二维连续可积函数f(x,y),g(x,y)f(x,y),g(x,y),在实数域R2R^2上的卷积为

(fg)(x,y)=f(τx,τy)g(xτx,yτy)dτxdτy(f\cdot g)(x,y)=\int_{-\infty}^{\infty}\int_{-\infty}^{\infty}f(\tau_x,\tau_y)g(x-\tau_x,y-\tau_y)d\tau_xd\tau_y

在离散有界情况下,对于一维离散函数f(x),g(x)f(x),g(x),卷积定义为

(fg)(x)=x0=abf(x0)g(xx0)(f\cdot g)(x)=\sum_{x_0=a}^bf(x_0)g(x-x_0)

对于二维离散函数f(x,y),g(x,y)f(x,y),g(x,y),卷积定义为

(fg)(x,y)=x0=aby0=cdf(x0,y0)g(xx0,yy0)(f\cdot g)(x,y)=\sum_{x_0=a}^b\sum_{y_0=c}^d f(x_0,y_0)g(x-x_0,y-y_0)