如何形成从RGB矩阵的矢量(How to form a vector from RGB matric

2019-11-03 13:35发布

我在从图像构建载体的一个问题。 我已经使用了512×512的彩色图像,并分离RGB平面。 现在,我想这三个平面转换成应在下面的例子给出3个维向量。

考虑一个4x4x3矩阵。 转换成RGB飞机很容易。 现在我需要这三个平面转换成一维向量作为如下

  V=[r1g1b1....r6]
  W=[g6b6r7...g11] 
  X=[b11r12...B16]

编写的程序IVE如下。 我用了重塑功能RGB平面转换成一维向量。 现在我有麻烦重组他们到不同的载体。

 A=imread('C:\Users\Desktop\lena.jpg');
 % Extract the individual red, green, and blue color channels.
 R = A(:, :, 1);
 G = A(:, :, 2);
 B = A(:, :, 3);

 R1 = reshape(R.',1,[]);
 G1 = reshape(G.',1,[]);
 B1 = reshape(B.',1,[]);

我已经转换的2D矩阵RG和B成一维向量R1,G1和B1。 现在我只是需要与所有三个values.I创造新vectores不知道如何进行提前......请你帮助...谢谢。

Answer 1:

OK,给你的榜样,你想要做的就是给一个RGB图像什么,你希望将图像分成3个载体中,使得RGB分量交错。 这可以容易地通过第一尺寸的置换而实现。 你能具体做的是:

B = permute(A, [3 1 2]);

什么permute确实是它重新安排尺寸,使得它产生另一个矩阵。 具体来说,就是我们要做的是,我们要采取的第三维的每个值,使它们出现在第一个层面。 下一步,我们将采取的行A ,让他们展开入列,终于列A ,让他们去了每架飞机。

其结果是,每将是描述你的形象独特的RGB像素。 如何展开将工作,虽然是,它会在列优先的顺序去。 然后我们可以使用线性索引,以它们分开到像这样的数组:

N = numel(A)/3;
V = B(1 : N);
W = B(N + 1 : 2*N);
X = B(2*N + 1 : end);

线性索引的作业是使用单个索引,而不是单独索引每个维度访问元素。 如何线性索引将在这里工作是,如果我们有这样的是一个图像X x Y x 3置换后的图像将被重塑,使得它成为了一个3 x X x Y矩阵。 N在我们的情况下将是在一个单一的平面元件的总数量。 因为你正试图将图像分成3个向量,在它的计算上述操作N应该能够为我们有三个颜色平面处理均匀地除以3。

通过这样做B(1 : N)直到我们取得我们将访问所有的元素从第一片,第二片,在列优先格式起来N元素。 这些获得放入V 。 然后,我们从这个角度,抢继续N更多的元素,并将它们放到W ,最后剩下的进入X

如果您要访问的行优先的顺序像素,你只需要改变的方式permute正在访问像这样的尺寸:

B = permute(A, [3 2 1]);

然后你只访问与通常上面的代码中的元素。 如果你不希望使用线性索引,你可以使用reshape重塑矩阵,使得它成为一个三列的矩阵,其中每列将所需载体:

C = reshape(B, [], 3);
V = C(:,1);
W = C(:,2);
X = C(:,3);


Answer 2:

从你的4x4x3例子很明显,要编制索引先用显色指数 。 我想,那么你要 ,然后 。 在这种情况下,如果A是您的图像(3D阵列),你想要的三个向量是的列

B = reshape(permute(A,[3 1 2]),[],3);

所以,如果你需要这些向量作为明确的变量,

vector1 = B(:,1);
vector2 = B(:,2);
vector3 = B(:,3);

如果所需的索引顺序是颜色 ,然后 ,然后 ,使用

B = reshape(permute(A,[3 2 1]),[],3);


文章来源: How to form a vector from RGB matrices