MATLAB Answers

how to convert grey image to RGB

400 views (last 30 days)
mohd akmal masud
mohd akmal masud on 9 Jan 2021
Commented: Image Analyst on 30 Aug 2021 at 13:11
Hi all,
i have 60 slice grey image. how want to convert to RGB image?
as attached is my grey image (grey.jpg). rgb.jpg is from internet what i want like.
this is my coding, but got error.
P = zeros(103, 103, 60);
for K = 1 : 60
K_file=30+10*K;
petname = sprintf('I%d.dcm', K_file);
P(:,:,K) = dicomread(petname);
scale = 130/103 ;
Pi(:,:,K) = imresize(P(:,:,K),scale) ; % where P is your 103*103 3D matrix
end
rgbImage = gray2rgb(Pi);
imshow3D(rgbImage)
this is my function
function [Image]=gray2rgb(Image)
%Gives a grayscale image an extra dimension
%in order to use color within it
[m n]=size(Image);
rgb=zeros(m,n,3);
rgb(:,:,1)=Image;
rgb(:,:,2)=rgb(:,:,1);
rgb(:,:,3)=rgb(:,:,1);
Image=rgb/255;
end
BUT GOT ERROR.
Unable to perform assignment because the size of the left side is 130-by-7800 and the size of
the right side is 130-by-130-by-60.
Error in gray2rgb (line 6)
rgb(:,:,1)=Image;
Error in sliderspect1 (line 12)
rgbImage = gray2rgb(Pi);
I THINK MY function gray2rgb wrong.
can some one help me?

Accepted Answer

Jan
Jan on 9 Jan 2021
Your Pi is a [130 x 130 x 60] matrix, but your function gray2rgb() expects a 2D matrix as input. It is not clear how you want to convert the 60 layers of the image data to RGB channels.
Maybe you want:
[r,c,m] = size(Pi);
rgbImage = repmat(reshape(Pi / 255, [r, c, 1, m]), [1, 1, 3, 1]);
  2 Comments
Jan
Jan on 10 Jan 2021
Yes, of course the image is grey, because the original images contain the grey level information only. If the value of each pixel of the input is used for all 3 RGB channels, the output looks grey also.
Which information do you want to use to define the colors?

Sign in to comment.

More Answers (1)

Image Analyst
Image Analyst on 10 Jan 2021
Try
function rgbImage = gray2rgb(grayImage)
cmap = jet(256); % Or whatever one you want.
rgbImage = ind2rgb(grayImage, cmap); % Convert gray scale image into an RGB image.
  6 Comments
Image Analyst
Image Analyst on 30 Aug 2021 at 13:11
Carla, like I said, you can pick whatever colormap you want. I just arbitrarily picked jet because it works and gives an image with a lot of vivid colors. Of course you won't get back your original image with an arbitrary color map.
If you want, you can convert to an indexed image with rgb2ind() and that will return a colormap that you can use to get somewhat close to your original image though not exact since you'll only have a few colors (like 256) instead of all of them (up to 16.7 million for an 8 bit image). And if you view the indexed image as a gray scale image, it won't look anything like you expect it to because the image values are indexes (rows) into a color map rather than intensity (reflectance or luminance) values of the scene.

Sign in to comment.

Community Treasure Hunt

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

Start Hunting!