我在从图像构建载体的一个问题。 我已经使用了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不知道如何进行提前......请你帮助...谢谢。
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);
从你的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);