2013-05-29 34 views
1

如何从2D阵列(即结构张量场)计算结构张量?如何计算二维数组的结构张量?

我搞不​​清楚我在做什么错了。在我的情况下,二维数组是一个二维灰度图像,这里就是我用C++做的和本征的总体概述:现在

// 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 ),是不是这样?

回答

2

从你似乎认为,结构张量不是简单地在一个像素ü计算公式,

enter image description here

但是,

enter image description here

其中瓦特( r是一个窗口函数,您可以选择权重su具有(例如高斯)像素的周围。

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

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