我正在psychtoolbox中创建一个任务,我需要一个光栅。我制作了光栅,它工作得很好,但现在我只想通过将这些矩阵元素设置为零来从中切出一些片段(目前我使用的是掩模,但我想在源中切出片段,光栅本身)。
为了切出我想要的部分,我需要光栅矩阵(称为A)的索引,所以我想我使用ind2sub。然而,这不起作用:
[I,J] = ind2sub(size(A),A);
"I"给出与"A"相同的值,"J"给出一个(大小(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
似乎您想要的是数组中每个条目的索引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
好吧,我想我得到了我想要的方式:
[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"one_answers"j"的和不应该超过阈值