How do I split a color image into its 3 RGB channels?

2,802 views (last 30 days)
Hi,
How can I split a color image into its 3 RGB channels, like in this link:
Thanks
  5 Comments

Sign in to comment.

Accepted Answer

Image Analyst
Image Analyst on 10 Jul 2017
You can do that with this code:
% Read in original RGB image.
rgbImage = imread('flower.png');
% Extract color channels.
redChannel = rgbImage(:,:,1); % Red channel
greenChannel = rgbImage(:,:,2); % Green channel
blueChannel = rgbImage(:,:,3); % Blue channel
% Create an all black channel.
allBlack = zeros(size(rgbImage, 1), size(rgbImage, 2), 'uint8');
% Create color versions of the individual color channels.
just_red = cat(3, redChannel, allBlack, allBlack);
just_green = cat(3, allBlack, greenChannel, allBlack);
just_blue = cat(3, allBlack, allBlack, blueChannel);
% Recombine the individual color channels to create the original RGB image again.
recombinedRGBImage = cat(3, redChannel, greenChannel, blueChannel);
% Display them all.
subplot(3, 3, 2);
imshow(rgbImage);
fontSize = 20;
title('Original RGB Image', 'FontSize', fontSize)
subplot(3, 3, 4);
imshow(just_red);
title('Red Channel in Red', 'FontSize', fontSize)
subplot(3, 3, 5);
imshow(just_green)
title('Green Channel in Green', 'FontSize', fontSize)
subplot(3, 3, 6);
imshow(just_blue);
title('Blue Channel in Blue', 'FontSize', fontSize)
subplot(3, 3, 8);
imshow(recombinedRGBImage);
title('Recombined to Form Original RGB Image Again', 'FontSize', fontSize)
% Set up figure properties:
% Enlarge figure to full screen.
set(gcf, 'Units', 'Normalized', 'OuterPosition', [0, 0, 1, 1]);
% Get rid of tool bar and pulldown menus that are along top of figure.
% set(gcf, 'Toolbar', 'none', 'Menu', 'none');
% Give a name to the title bar.
set(gcf, 'Name', 'Demo by ImageAnalyst', 'NumberTitle', 'Off')
My MATLAB code produces this figure:
which you can see is the same as your example figure you gave:
The original flower image is attached. I cropped it out of your figure.
  1 Comment
Mahmood Aldhuhl
Mahmood Aldhuhl on 28 Nov 2020
hello sir
i try typing the code but show this messgae
Error in Q5 (line 7)
redChannel = rgbImage(:,:,1); % Red channel

Sign in to comment.

More Answers (6)

sixwwwwww
sixwwwwww on 22 Oct 2013
If you want to show RGB channels in there original color then you can do like it:
img = imread('filename.png'); % Read image
red = img(:,:,1); % Red channel
green = img(:,:,2); % Green channel
blue = img(:,:,3); % Blue channel
a = zeros(size(img, 1), size(img, 2));
just_red = cat(3, red, a, a);
just_green = cat(3, a, green, a);
just_blue = cat(3, a, a, blue);
back_to_original_img = cat(3, red, green, blue);
figure, imshow(img), title('Original image')
figure, imshow(just_red), title('Red channel')
figure, imshow(just_green), title('Green channel')
figure, imshow(just_blue), title('Blue channel')
figure, imshow(back_to_original_img), title('Back to original image')
I hope it helps. Good luck!
  5 Comments

Sign in to comment.


David Sanchez
David Sanchez on 22 Oct 2013
my_rgb = my_image;
R = my_rgb(:,:,1);
G = my_rgb(:,:,2);
B = my_rgb(:,:,3);
  2 Comments
Image Analyst
Image Analyst on 28 Nov 2020
An RGB image is like three 2-D monochrome/grayscale images stacked on top of each other in the third dimension. See attached demo for a visualization:
The code basically extracts each 2-D image from the 3-D image into a separate 2-D array. With MATLAB Release 2018b and later, you can use imsplit() instead
[R, G, B] = imsplit(rgbImage);

Sign in to comment.


diya
diya on 3 May 2016
how to split rgb image to just take red color and to supress high intensities
  1 Comment
Image Analyst
Image Analyst on 3 May 2016
You know how to extract the red channel already
redChannel = rgbImage(:, :, 1);
Now explain what "suppress" means to you. Do you want to set high values to zero? Multiply them by 0.5 or some other number? Apply a gamma curve?

Sign in to comment.


Adam G
Adam G on 12 Jul 2017
Edited: Adam G on 15 Jul 2017
I have picture hand.tif.
%the best idea is to make screenshot of this picture
I have following codes
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
imfinfo('hand.tif');
[L1]= imread('hand.tif');
figure, imshow(L1);
L1r=L1(:, :, 1);
L1g=L1(:, :, 2);
L1b=L1(:, :, 3);
figure;
imshow(cat(3, L1r, ones(size(L1g)), ones(size(L1b))));
figure;
imshow(cat(3, ones(size(L1r)), L1g, ones(size(L1b))));
figure;
imshow(cat(3, ones(size(L1r)), ones(size(L1g)), L1b));
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
I got following pictures
and okay. I have following code
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
imfinfo('hand.tif');
[L1]= imread('hand.tif');
L1=double(L1)/255;
figure, imshow(L1);
L1c=L1(:, :, 1);
L1m=L1(:, :, 2);
L1y=L1(:, :, 3);
figure;
imshow(cat(3, L1c, ones(size(L1m)), ones(size(L1y))));
figure;
imshow(cat(3, ones(size(L1c)), L1m, ones(size(L1y))));
figure;
imshow(cat(3, ones(size(L1c)), ones(size(L1m)), L1y));
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
I got following pictures
Is it matlab error or what?
So now I check matrix L1r
L1r=
0 0 0 0 0
0 5 5 3 3
0 5 4 3 4
0 3 4 2 3
0 3 4 2 1
I check matrix L1c
L1c=
0 0 0 0 0
0 0,0196078431372549 0,0196078431372549 0,0117647058823529 0,0117647058823529
0 0,0196078431372549 0,0156862745098039 0,0117647058823529 0,0156862745098039
0 0,0117647058823529 0,0156862745098039 0,00784313725490196 0,0117647058823529
0 0,0117647058823529 0,0156862745098039 0,00784313725490196 0,00392156862745098
Strange when I make L1=double(L1)/255
L1c=L1r/255
cyan=red/255
or matlab error and I got wrong colormap?
???????????? so what color is in matrix L1r and L1c?
I check in Paint Program and I got red color =5 (position of pixel 2,2 ) so L1r should be red, but L1c????
  6 Comments
Image Analyst
Image Analyst on 21 Jun 2020
  1. Use imread(), then
  2. Invert the images using img=255-img
  3. if image is grayscale, make red, green, and blue equal to the image, otherwise get the red, green, and blue using imsplit()
  4. Use addition or subtraction to change each color channel
  5. Combine into color image using cat(3, red, green, blue)
  6. Write using imwrite()

Sign in to comment.


Syed Masaab Ahmed
Syed Masaab Ahmed on 20 Nov 2018
R = my_rgb(:,:,1);
G = my_rgb(:,:,2);
B = my_rgb(:,:,3);
whats are these (:,:,1) doing
  2 Comments

Sign in to comment.


Fatimah Asiri
Fatimah Asiri on 2 Nov 2021
Edited: Rik on 2 Nov 2021
imfinfo('hand.tif');
[L1]= imread('hand.tif');
L1=double(L1)/255;
figure, imshow(L1);
L1c=L1(:, :, 1); L1m=L1(:, :, 2); L1y=L1(:, :, 3);
figure;
imshow(cat(3, L1c, ones(size(L1m)), ones(size(L1y))));
figure;
imshow(cat(3, ones(size(L1c)), L1m, ones(size(L1y))));
figure;
imshow(cat(3, ones(size(L1c)), ones(size(L1m)), L1y));

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!