0

我有一个解决方案来为矩阵的一个元素创建一个向量:

[dx,dy] = gradient(Im);
orient11 = [(-dx(1,1)) (dy(1,1)) 0];

在哪里

size(orient11) =

0 0 0

即对于orient的第一个元素,即orient11,是一个向量。我如何对所有其他元素执行此操作,所以我有 orient12、orient13 ....orientnn。我知道我需要一个 for 循环,但是我应该将向量从 for 循环存储到什么对象中?我发现我无法创建向量矩阵。

提前致谢。

4

2 回答 2

1
v = -2:0.2:2;
[x,y] = meshgrid(v);
z = x .* exp(-x.^2 - y.^2);
[px,py] = gradient(z,.2,.2);

orient11 = [(-px(1,1)) (py(1,1)) 0]; % based off of your concatination there.
size(orient11)

然后我得到:

ans =

     1     3

如果您只想从您拥有的渐变中获取第一列数据并且只想与它们堆叠零,您可以这样做:

orient11 = [(-px(:,1)) (py(:,1)) zeros(size(px,1),1)];

而不是一个for循环。

更新:

Orient = zeros(size(px,1),3,size(px,2));
for n = 1:size(px,1)
    Orient(:,:,n) = [(-px(:,n)) (py(:,n)) zeros(size(px,1),1)];
end

现在的布局Orient是你的 -px, py, 0 in layers。每层代表来自初始数据的列。因此,如果您想访问第 4 行第 14 列,您可以调用Orient(4,:,14).

希望这有意义并有所帮助!

于 2012-07-17T14:52:29.637 回答
1

可以尝试构建一个N × N × 3 矩阵,但操作起来不太方便。这是因为从该矩阵中提取一个向量会产生一个 1×1×3 的向量,您需要对其进行整形。绝对不好玩。

相反,我建议您构建一个由 1×3 向量组成的N × N 元胞数组,如下所示:

[dx, dy] = gradient(Im);
vec = @(i)[-dx(i), dy(i), 0];
orient = arrayfun(vec, reshape(1:numel(dx), size(dx)), 'UniformOutput', 0);

要访问向量,请使用花括号。例如, (1, 2) 位置的向量将是:

orient12 = orient{1, 2};

希望能帮助到你!

于 2012-07-17T15:35:29.160 回答