1

如何从二维数组(即结构张量场)计算结构张量?

我无法弄清楚我在实施中做错了什么。在我的例子中,二维数组是一个二维灰度图像,这里是我使用 C++ 和 Eigen 所做的一般概述:

// the 2D grey-scale image, represented by a 2D array of doubles
ArrayXXd img;

// compute the gradient vector field, which produces a 2D array of 2D vectors
typedef Array<Vector2d, Dynamic, Dynamic> ArrayXXv2;
ArrayXXv2 g = gvf(img);

// compute the outer-product of each element in g to get a 2x2 matrix, e.g.,
Matrix<double, 2, 2> st00 = g(0,0) * g(0,0).transpose();

st00 现在是 img(0,0) 的结构张量,不是吗?

4

1 回答 1

2

从你看来,结构张量不仅仅是在一个像素u处计算,

在此处输入图像描述

但是,

在此处输入图像描述

其中w( r )是一个窗口函数,您选择用(例如高斯)来衡量像素周围的环境。

如果从逻辑上考虑,单独一个像素的梯度通常不能包含足够的信息来表示该像素的结构。您需要考虑像素的周围环境。因此,我们有一个影响半径r和一个影响区域的窗口函数。通过改变r,您可以选择要查看的结构的比例。

一旦你计算了每个像素的结构张量,你可以通过计算每个结构张量的最小特征值对应的特征向量来组成结构张量场。

于 2013-09-11T09:48:17.830 回答