Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arrays 在matlab中访问元素,从另一个数组中存储的索引中获取彩色图像(数组)的像素_Arrays_Matlab_Image Processing_Indexing - Fatal编程技术网

Arrays 在matlab中访问元素,从另一个数组中存储的索引中获取彩色图像(数组)的像素

Arrays 在matlab中访问元素,从另一个数组中存储的索引中获取彩色图像(数组)的像素,arrays,matlab,image-processing,indexing,Arrays,Matlab,Image Processing,Indexing,A和B是掩码索引(分别为行和列),而C是一个图像,我想注意C中存储的颜色值,其中索引存储在A和B中。如果A和B类似于[1,2,3]和[20,30,40],那么我想找到C(1,20,:),C(2,30,:)和C(3,40,:) 如果我做了D=C(A,B,:),在这种情况下,我得到一个大小为3x3x3的数组,但是我想要一个大小为3x1x3的数组。我知道我搞乱了索引,有没有一种简单的方法不用写循环就可以做到这一点 简单地说,有没有一种方法可以在没有循环的情况下执行以下操作: for i = 1:10

A
B
是掩码索引(分别为行和列),而
C
是一个图像,我想注意
C
中存储的颜色值,其中索引存储在
A
B
中。如果
A
B
类似于
[1,2,3]
[20,30,40]
,那么我想找到
C(1,20,:)
C(2,30,:)
C(3,40,:)

如果我做了
D=C(A,B,:)
,在这种情况下,我得到一个大小为3x3x3的数组,但是我想要一个大小为3x1x3的数组。我知道我搞乱了索引,有没有一种简单的方法不用写循环就可以做到这一点

简单地说,有没有一种方法可以在没有循环的情况下执行以下操作:

for i = 1:10
    D(i, :) = C(A(i), B(i), :)
end

听起来好像一切都正常运转。在您的示例中,您已经使用A和B索引了C的9个元素。然后D是一个3x3x3数组,其尺寸对应于[row x col x color_mask(RGB)]。除非B只包含一个值(表示您只希望从一列中获取元素),否则为什么第二维度将减少为1?当然,A和B中的值不能大于C中的行数和列数

A = [1 2 3];
B = [20];
D = C(A,B,:);
size(D)
>> 3 1 3
编辑:好的,我现在明白你的意思了。要使用A(Nx1)和B(Nx1)指定N个点数。不是你目前得到的点数。

为什么不是这样

C = C(A,B(i),:);

您可以使用for语句来获取i的值,或者以其他方式进行设置。

您需要将子索引转换为线性索引。您可以使用
sub2ind
进行以下操作:

r = C(sub2ind([size(C,1) size(C,2) 1],A,B,1*ones(1,length(A))));
g = C(sub2ind([size(C,1) size(C,2) 2],A,B,2*ones(1,length(A))));
b = C(sub2ind([size(C,1) size(C,2) 3],A,B,3*ones(1,length(A))));

你想要的n x 1 x 3结果将是简单的
cat(3,r',g',b.)

可能是我的问题不清楚,当然matlab给出了一个3x3x3矩阵,但我想得到与我在a和b中的点对应的元素,假设A和B中具有相同索引的元素表示C中的相同点,这将不起作用,我不想使用for循环。您需要执行D(i,:)=C(A(i),B(i),:)并循环所有索引