ind2sub索引不起作用

时间:2015-03-06 08:47:12

标签: matlab psychtoolbox

我在psychtoolbox中创建了一个任务,我需要一个光栅。我制作光栅并且效果很好,但是现在我只想通过将这些矩阵元素设置为零来切割一些碎片(目前我使用的是掩模,但我想在源中切出碎片,光栅本身。)

为了剪切我想要的碎片,我需要光栅矩阵的索引(称为A),所以我想我使用了ind2sub。然而,这不起作用:

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

'我'与A' A'相同。和' J'给出(大小(A))

Here you can find 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

2 个答案:

答案 0 :(得分: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

答案 1 :(得分: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'的总和不应超过阈值