c++ - 如何计算二维数组的结构张量?

标签 c++ image-processing

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

我无法弄清楚我在实现过程中做错了什么。在我的例子中,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上计算的,

enter image description here

但是,

enter image description here

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

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

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

关于c++ - 如何计算二维数组的结构张量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16803587/

相关文章:

android - 如何在图像中选择正确的矩形?

java - 在android中将图像转换为铅笔素描

c++ - 如何使用 C++ 和 PDCurses 显示可变字符串?

c++ - C++为类方法实现超时功能模板

c++ - f_close 错误(写入 SD 卡我的最终项目)

python - 如何从图像中仅提取外部轮廓(OpenCV)

c++ - 为什么将结构传递给函数而不是单独的参数?

python - 嵌入式 python Py_Finalize() 是否阻塞?

image-processing - 图像处理: How to get luminance weighting value?

c# - 如何将播放视频作为相机输入?