Matlab使用线性索引索引二维,同时保持三维不变

Termnus

假设我有2D线性指标:

linInd = sub2ind(imSize,rowPnts,colPnts);

我有3D彩色图像,我:

I = rand(64,64,3)*255

有什么办法可以索引这样的东西,以便获取2D平面中除图像每个通道之外的所有坐标?也就是说,是否可以使用为2D指定的线性指标,通过一个命令获得每个像素的所有颜色通道信息?

I(linInd,:)

因此,我不必将图像分为三部分,然后重新组装吗?

谢谢。

迪卡卡

您可以broadcast不干扰输入数组2D3D情况下使用线性索引bsxfun,例如,

[m,n,r] = size(I);
out = I(bsxfun(@plus,linInd,(m*n*(0:r-1))'))

样品设置

%// ---------------- 2D Case ---------------------
im = randi(9,10,10);
imSize = size(im);

rowPnts = [3,6,8,4];
colPnts = [6,3,8,5];
linInd = sub2ind(imSize,rowPnts,colPnts);

%// ---------------- 3D Case ---------------------
I = randi(9,10,10,4);

%// BSXFUN solution
[m,n,r] = size(I);
out = I(bsxfun(@plus,linInd,(m*n*(0:r-1))')); %//'

%// Tedious work of splitting
Ir = I(:,:,1);
Ig = I(:,:,2);
Ib = I(:,:,3);
Ia = I(:,:,4);

输出

>> Ir(linInd)
ans =
     8     9     1     6
>> Ig(linInd)
ans =
     1     5     9     8
>> Ib(linInd)
ans =
     8     5     3     8
>> Ia(linInd)
ans =
     8     8     3     3
>> out
out =
     8     9     1     6
     1     5     9     8
     8     5     3     8
     8     8     3     3

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

是否可以使用索引数组索引到三维数组的二维?

来自分类Dev

三维到二维

来自分类Dev

Matlab:将三维数组的子集与二维数组相乘

来自分类Dev

在二维三维阵列中寻找“线索”

来自分类Dev

二维数组索引

来自分类Dev

R索引数组。如何通过使用三维矩阵对3维数组建立索引

来自分类Dev

在MATLAB中存储二维数组的排序索引吗?

来自分类Dev

使用numpy获取二维索引的子集

来自分类Dev

使用顶部和左侧索引打印二维数组

来自分类Dev

使用列索引进行二维数组排序

来自分类Dev

使用枚举访问二维数组索引

来自分类Dev

在python中索引二维数组

来自分类Dev

索引二维数组/列表

来自分类Dev

Dask中的二维布尔索引

来自分类Dev

返回二维数组的索引

来自分类Dev

从二维数组获取索引

来自分类Dev

二维阵列的索引方式

来自分类Dev

通过二维索引提取轴

来自分类Dev

从一维列表创建索引的二维列表

来自分类Dev

从一维获取二维数组索引

来自分类Dev

在大型numpy三维数组上计算二维成对距离

来自分类Dev

检查二维列表的索引并根据二维列表打印出索引

来自分类Dev

使用索引一维数组切片二维数组

来自分类Dev

在Matlab中使用mvnrnd生成三维数组?

来自分类Dev

提取二维二进制数组的索引

来自分类Dev

Matlab中二维矩阵的双线性和三次三次插值

来自分类Dev

Matlab上的三维图

来自分类Dev

在Matlab中生成三维散点图

来自分类Dev

三维图像旋转(Matlab)