从二元函数的泰勒展开到应用Hessian矩阵检测边缘

    科技2022-08-05  97

    一、二元函数的泰勒展开

    二元函数 f ( x , y ) f(x,y) f(x,y)在某一点 ( x 0 , y 0 ) (x_0,y_0) (x0,y0)的泰勒展开可以理解为 f ( x , y ) f(x,y) f(x,y)在这一点的函数值 f ( x 0 , y 0 ) f(x_0,y_0) f(x0,y0)加上 ( x 0 , y 0 ) (x_0,y_0) (x0,y0)点的全微分 d f df df,再加上一个无穷小 o ( ρ ) o(\rho) o(ρ) f ( x , y ) = f ( x 0 , y 0 ) + d f + o ( ρ ) f(x,y)=f(x_0,y_0)+df+o(\rho) f(x,y)=f(x0,y0)+df+o(ρ) 其中 d f + o ( ρ ) = f x d x + f y d y + 1 2 f x x d x 2 + 1 2 f x y d x d y + 1 2 f y x d x d y + 1 2 f y y d y 2 + ⋯ df+o(\rho)=f_x dx + f_y dy + \frac{1}{2}f_{xx} dx^2 + \frac{1}{2}f_{xy} dx dy + \frac{1}{2}f_{yx} dx dy + \frac{1}{2}f_{yy} dy^2 + \cdots df+o(ρ)=fxdx+fydy+21fxxdx2+21fxydxdy+21fyxdxdy+21fyydy2+ f ( x , y ) = f ( x 0 , y 0 ) + f x d x + f y d y + 1 2 f x x d x 2 + 1 2 f x y d x d y + 1 2 f y x d x d y + 1 2 f y y d y 2 + ⋯ f(x,y)=f(x_0,y_0)+f_x dx + f_y dy + \frac{1}{2}f_{xx} dx^2 + \frac{1}{2}f_{xy} dx dy + \frac{1}{2}f_{yx} dx dy + \frac{1}{2}f_{yy} dy^2 + \cdots f(x,y)=f(x0,y0)+fxdx+fydy+21fxxdx2+21fxydxdy+21fyxdxdy+21fyydy2+ f ( x , y ) f(x,y) f(x,y) ( x 0 , y 0 ) (x_0,y_0) (x0,y0)的泰勒展开。

    二、Hessian 矩阵

    上面展开式中的二阶偏导函数可以组合成为一个矩阵,如下 H f ( x , y ) = [ f x x ( x , y ) f y x ( x , y ) f x y ( x , y ) f y y ( x , y ) ] Hf(x,y)=\begin{bmatrix}f_{xx}(x,y)&f_{yx}(x,y)\\f_{xy}(x,y)&f_{yy}(x,y)\\ \end{bmatrix} Hf(x,y)=[fxx(x,y)fxy(x,y)fyx(x,y)fyy(x,y)] H f ( x , y ) Hf(x,y) Hf(x,y)被称之为Hessian 矩阵, 它并不是一个普通的矩阵,而是一个由偏导函数构成的矩阵。也就是说, H f Hf Hf的具体取值只有在给定变量值 ( x , y ) (x,y) (x,y)时才能得到。 那么构造这个矩阵的意义何在呢? 这个矩阵其实代表了这个二元函数的二阶导数,几何意义上代表了二元函数的曲率。 怎么理解二阶导数代表二元函数的曲率呢?降维到一元函数来理解就好了。 一元函数的一阶导数衡量梯度,二阶导数衡量曲率。 例如,当 f ′ ′ ( x ) < 0 f^{′′}(x)<0 f(x)<0 f ( x ) f(x) f(x) 往上弯曲;当 f ′ ′ ( x ) > 0 f^{′′}(x)>0 f(x)>0时, f ( x ) f(x) f(x) 往下弯曲, f ′ ′ ( x ) f^{′′}(x) f(x)的绝对值越大,弯曲程度也就越大,故可以用来衡量曲线的曲率。 一个单变量函数的二阶导数如下图所示。

    三、Hessian 矩阵的特征值

    在几何上,二次元函数其实代表了一个曲面,而曲面的主曲率又包含最大曲率和最小曲率,那么Hessian 矩阵又是怎样表示这两个曲率的呢? 答案就是通过它的特征值和特征向量。最大特征值和其对应的特征向量对应其邻域二维曲线最大曲率的强度和方向,即山坡陡的那面;最小特征值对应其邻域二维曲线最小曲率的强度和方向,即平缓的方向。 (关于特征值和特征向量的理解:从线性空间的角度看,在一个定义了内积的线性空间里,对一个N阶对称方阵进行特征分解,就是产生了该空间的N个标准正交基,然后把矩阵投影到这N个基上。N个特征向量就是N个标准正交基,而特征值的模则代表矩阵在每个基上的投影长度。)

    四、应用Hessian 矩阵检测图片边缘

    在图片特征点的边缘消除中,往往会用的Hessian矩阵。 在曲面横跨边缘的地方会同时具有较大的最大主曲率和有较小的最小主曲率。 给定一张图片的Hessian 矩阵如下 H ( x , y ) = [ I x x ( x , y ) I x y ( x , y ) I x y ( x , y ) I y y ( x , y ) ] H(x,y) = \begin{bmatrix}I_{xx}(x,y) & I_{xy}(x,y)\\ I_{xy}(x,y) &I_{yy}(x,y) \end{bmatrix} H(x,y)=[Ixx(x,y)Ixy(x,y)Ixy(x,y)Iyy(x,y)] 矩阵里面的每一项可以通过求取邻近点像素的差分得到。令 α = λ m a x α=λ_{max} α=λmax为最大的特征值(最大主曲率), β = λ m i n β=λ_{min} β=λmin为最小的特征值(最小主曲率),如果 γ \gamma γ为最大特征值与最小特征值之间的比例,那么 α = γ β \alpha = \gamma \beta α=γβ,则 γ \gamma γ越大越接近于边界上的点。 我们不想去求具体的 α 和 β \alpha\text{和}\beta αβ来得到 γ \gamma γ,而是用H 矩阵的迹和行列式去代表 γ \gamma γ

    则H 矩阵的迹和行列式分别为: T r ( H ) = I x x + I y y = α + β Tr(H) = I_{xx}+I_{yy} = \alpha +\beta Tr(H)=Ixx+Iyy=α+β D e t ( H ) = I x x I y y − ( I x y ) 2 = α β Det(H) = I_{xx}I_{yy}-(I_{xy})^2=\alpha \beta Det(H)=IxxIyy(Ixy)2=αβ 这样便有组合式 T = T r ( H ) 2 D e t ( H ) = ( α + β ) 2 α β = ( γ + 1 ) 2 γ T=\frac{Tr(H)^2}{Det(H)} = \frac{(\alpha+\beta)^2}{\alpha\beta} = \frac{(\gamma+1)^2}{\gamma} T=Det(H)Tr(H)2=αβ(α+β)2=γ(γ+1)2 上式中,当两个特征值相等时, T的值最小,随着 γ \gamma γ的增加,T的值也随之不断增大,也就是说T和 γ \gamma γ是同单调的,可以代表 γ \gamma γ

    所以我们要过滤掉这些边缘上的点,在Lowe的文章中,实验给出 γ \gamma γ的上限阈值为10。所以T的最大值应该为 12.1,每个待过滤的特征点分别计算组合T,只要T>12.1的就需要被过滤掉。

    Processed: 0.017, SQL: 9