0

psychtoolbox でタスクを作成していますが、そのための格子が必要です。グレーティングを作成し、うまく機能していますが、マトリックス要素をゼロに設定して一部を切り取りたいだけです (現在は代わりにマスクを使用していますが、ソースの一部を切り取りたいのですが、格子自体)。

必要な部分を切り取るには、グレーティング マトリックス (A と呼ばれる) のインデックスが必要なので、ind2sub を使用することにしました。ただし、これは機能しません。

[I,J] = ind2sub(size(A),A);

'I' は 'A' と同じものを返し、'J' は ones(size(A)) を返します。

ここでAを見つけることができます

これが私がやりたいことの例です:

% A is a 3x3 matrix
% if I use "[I,J] = ind2sub(size(A),A);" I get the problem as described before: 
% I = A and J = ones(3,3)
% When I use "[I,J] = ind2sub(size(A),[1:numel(A)]);" as suggested, I do get the
% following (which is a vector but can be reshaped into a 3x3 matrix):
I = [1 1 1 2 2 2 3 3 3]
J = [1 2 3 1 2 3 1 2 3]
I = reshape(I,[3,3]);
J = reshape(J,[3,3]);

K = I + J; % = [2 3 4; 3 4 5; 4 5 6]
for i=1:length(A)
for j=1:length(A)
if K(i,j)>*some threshold*
A(I(i),J(i))=0
end
end
end
4

2 に答える 2

0

わかりました、私はそれを私が望む方法で手に入れたと思います:

[I,J] = ind2sub(size(A),[1:numel(A)]);
I = reshape(I,size(A));
J = reshape(J,size(A));
K = I + J;
for i=1:length(A)
for j=1:length(A)
if K(i,j)<halfWidthOfGrid %predefined threshold
   A(i,j)=0;
end
end
end

グレーチングから何を切り取りたいのか、もっと明確にするべきだったと思います。私はすべてのエッジを切り取りたいです (つまり、トランプのダイヤモンドのようにします)。三角形を切り取りたいので、A(i,j) の 'i' と 'j' の合計がしきい値を超えてはならないと言えます

于 2015-03-06T14:12:34.747 に答える
0

あなたが望むのは、配列内の各エントリのインデックス i,j です。次に、これを行います:

  A = ones(2,3); % <-- dummy data
  [I,J] = ind2sub(size(A),[1:numel(A)]);

結果は

 I =

   1   2   1   2   1   2

J =

   1   1   2   2   3   3
于 2015-03-06T08:55:21.423 に答える