从加载的图像创建分离的R-G-B阵列

时间:2015-07-08 18:27:29

标签: matlab

很抱歉打扰,但似乎我坚持很轻松的任务。 简单地说,我想从m-by-by-by-3加载图像创建3 * m-by-3 * n-by-3 RGB文件。让我们以folowing数组为例作为例子:

Image(:,:,1) = 0.5*ones(4);
Image(:,:,2) = ones(4);
Image(:,:,3) = 0.25*ones(4);
Image = uint8(255*Image); %3-D array, Red = 128, Green = 255, Blue = 64;

我想得到的是:

ImageRGB(:,:,1) =

   128     0     0   128     0     0   128     0     0   128     0     0
   128     0     0   128     0     0   128     0     0   128     0     0
   128     0     0   128     0     0   128     0     0   128     0     0
   128     0     0   128     0     0   128     0     0   128     0     0


ImageRGB(:,:,2) =

     0   255     0     0   255     0     0   255     0     0   255     0
     0   255     0     0   255     0     0   255     0     0   255     0
     0   255     0     0   255     0     0   255     0     0   255     0
     0   255     0     0   255     0     0   255     0     0   255     0


ImageRGB(:,:,3) =

     0     0    64     0     0    64     0     0    64     0     0    64
     0     0    64     0     0    64     0     0    64     0     0    64
     0     0    64     0     0    64     0     0    64     0     0    64
     0     0    64     0     0    64     0     0    64     0     0    64

到目前为止,我没有使用循环就出现了这个:

[i1,i2] = ndgrid(1:size(Image,1),[1:3:size(Image,2)*size(Image,3),2:3:size(Image,2)*size(Image,3),3:3:size(Image,2)*size(Image,3)]);
ImageRGB = accumarray([i1(:),i2(:),[ones(size(Image,1)*size(Image,2),1);2*ones(size(Image,1)*size(Image,2),1);3*ones(size(Image,1)*size(Image,2),1)] ],Image(:));

可能是,有一些我不知道的功能,或更简单的方法来执行 WITHOUT 循环。使用它们看似简单的任务感觉错误。

1 个答案:

答案 0 :(得分:1)

你所拥有的一切都很好,但很难读懂。为什么不做一些非常简单易懂的事情:

ImageRGB = zeros(4,4*3,3);
ImageRGB(:,1:3:end,1) = Image(:,:,1);
ImageRGB(:,2:3:end,2) = Image(:,:,2);
ImageRGB(:,3:3:end,3) = Image(:,:,3);