Converting 3D matrix to 2D matrix image

20 次查看(过去 30 天)
I am working with a JPEG image, if it results in a 3D matrix (225x225x3), you can convert it to 2D. If the image is grayscale, it will become a 2D matrix. If it contains color information, it will remain a 3D matrix. Could someone please share the code or steps to be followed.

采纳的回答

Matt J
Matt J 2023-10-16
  8 个评论
Kartikeya
Kartikeya 2023-10-16
May i know what is meant by A, I, RGB in the names

请先登录,再进行评论。

更多回答(1 个)

Image Analyst
Image Analyst 2023-10-16
Try these two code snippets. The first one gives you a grayscale image, regardless of what's in the file.
originalImage = imread(fullFileName);
% To get a 2-D grayscale image from the file, converting from RGB
% to gray scale if it's not already grayscale.
% Get the dimensions of the image.
% numberOfColorChannels should be = 1 for a gray scale image, and 3 for an RGB color image.
[rows, columns, numberOfColorChannels] = size(originalImage)
if numberOfColorChannels > 1
% It's not really gray scale like we expected - it's color.
fprintf('It is not really gray scale like we expected - it is color\n');
% Extract the red channel.
grayImage = originalImage(:, :, 1); % 2 for green, 3 for blue.
% OR ALTERNATIVELY use the rgb2gray() function to do a weighted average of all 3 color channels.
grayImage = rgb2gray(originalImage);
else
% It's already gray scale. Just put it into our grayImage variable.
grayImage = originalImage;
end
The second one gives you an RGB image regardless of what's in the file.
originalImage = imread(fullFileName);
% To get a 2-D grayscale image from the file, converting from RGB
% to gray scale if it's not already grayscale.
% Get the dimensions of the image.
% numberOfColorChannels should be = 1 for a gray scale image, and 3 for an RGB color image.
[rows, columns, numberOfColorChannels] = size(originalImage)
if numberOfColorChannels > 1
% It's already RGB. Just put it into our rgbImage variable.
rgbImage = originalImage;
else
% It's not really RGB like we expected - it's grayscale (or indexed). We'll assume it's grayscale here.
fprintf('It is not really RGB like we expected - it is grayscale.\n');
% Concatenate the gray scale image to be all 3 color channels.
rgbImage = cat(3, originalImage, originalImage, originalImage);
end
If it's indexed, we'll need some additional code to use ind2rgb to apply the colormap.
  3 个评论
Kartikeya
Kartikeya 2023-10-18
@Image Analyst Not getting channel 1 in an Face images even though in Grey-colour based on your code. Can you please help me. I am storing every image in jpeg format.
originalImage = imread('greyface1.jpg');
% To get a 2-D grayscale image from the file, converting from RGB
% to gray scale if it's not already grayscale.
% Get the dimensions of the image.
% numberOfColorChannels should be = 1 for a gray scale image, and 3 for an RGB color image.
[rows, columns, numberOfColorChannels] = size(originalImage)
rows = 183
columns = 275
numberOfColorChannels = 3
if numberOfColorChannels > 1
% It's already RGB. Just put it into our rgbImage variable.
rgbImage = originalImage;
else
% It's not really RGB like we expected - it's grayscale (or indexed). We'll assume it's grayscale here.
fprintf('It is not really RGB like we expected - it is grayscale.\n');
% Concatenate the gray scale image to be all 3 color channels.
rgbImage = cat(3, originalImage, originalImage, originalImage);
end
Image Analyst
Image Analyst 2023-10-20
Not sure what you want. You're using the code snippet to make an image an RGB image, but your image is already an RGB image. See? It says numberOfColorChannels = 3 so that means it's already color, and so there is nothing really to do to make it color. I just put it into another, more secriptively named variable. So why should you get gray scale?

请先登录,再进行评论。

类别

Help CenterFile Exchange 中查找有关 Images 的更多信息

Community Treasure Hunt

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

Start Hunting!

Translated by