簡體   English   中英

如何計算二維數組的結構張量?

[英]How to compute the Structure Tensor of a 2D array?

一個如何從2D數組(即結構張量場)計算結構張量?

我無法弄清楚我在實現中做錯了什么。 就我而言,2D數組是2D灰度圖像,這是我使用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)的結構張量,不是嗎?

從您看來,結構張量不是簡單地在一個像素u上計算的,

在此處輸入圖片說明

但是

在此處輸入圖片說明

其中w( r是一個窗口函數,您可以選擇使用該函數來加權像素的周圍環境(例如,高斯)。

如果從邏輯上考慮它,則僅一個像素處的梯度通常不能包含足夠的信息來表示該像素處的結構。 您需要考慮像素的周圍環境。 因此,我們有一個影響半徑r ,在影響區域有一個窗函數。 通過改變r ,您可以選擇要查看的結構的比例。

一旦在每個像素處計算了結構張量,就可以通過計算與每個結構張量的幅度最小的特征值相對應的特征向量來組成結構張量字段。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM