Add the three channels in a image to obtain a colo

2020-04-21 08:44发布

问题:

I am modifying images in matlab and I have a problem.

I need to separate the 3 channels of color and modify them separately.

I use this to obtain the three channels:

 a = imread('./images/penguins.png');
colorlist = {'R','G','B'};    
subplot(2,2,1);
imshow(a);
for k=1:3
    subplot(2,2,k+1);
    imshow( a(:,:,k));
    title(colorlist{k});
end

a(:,:,k) is one color of the three. The problem is when I add the three vectors in one, to obtain the color image. I do this:

 A=a(:,:,1)+a(:,:,2)+a(:,:,3)
figure; imshow(A);

But it dont works, it only show me a very highlight image, no a color image.

Anyone knows how can I recover the color image? Thanks for yout help^^

回答1:

You are adding the values of the three layers instead of concatenating them in a 3D array.

Try this:

A= cat(3, a(:,:,1), a(:,:,2), a(:,:,3));

I should also note that you can edit the layers simply by indexing, say you want to switch the red and green components:

I1 = imread('http://i.stack.imgur.com/1KyJA.jpg');
I2=I1;
I2(:,:,1)=I1(:,:,2);
I2(:,:,2)=I1(:,:,1);
imshowpair(I1,I2, 'montage');

Now if I take your title literally, let's say you do want to add the three layers and display the result with a colormap, you can do:

A=a(:,:,1)+a(:,:,2)+a(:,:,3)
imagesc(A); axis image; 
colorbar;

Results: