My image is RGB image but when I used size function it showed me grayscale image.

31 ビュー (過去 30 日間)
Akib Rahman
Akib Rahman 2018 年 6 月 13 日
編集済み: Stephen23 2018 年 6 月 13 日
I have an image. When I open it using windows photo viewer it showed RGB image but when I use size function of Matlab for finding color channel it showed me "1". That's mean it is the grayscale image. The image also attached.
My Matlab code is:
[rows, columns, numberOfColorChannels] = size('test.jpg');
Output is: numberOfColorChannels is "1"
  6 件のコメント
Stephen23
Stephen23 2018 年 6 月 13 日
編集済み: Stephen23 2018 年 6 月 13 日
@Akib Rahman: The link you gave shows how to imread the image into MATLAB and then use size in the image array. In contrast you don't load any data from any file into MATLAB (no imread, no load, nothing at all that actually gets the image file into MATLAB memory), and then instead of testing the size of a variable (which you don't have anyway) you test the size of a 1xN char vector, which might as well be 'Hello World' for all the difference it would make:
>> [~,~,P] = size('Hello World')
P = 1
Why do I get the same value as you did? Is it because I have an image the same size as you... or because I measured the size of an 1xNx1x1x1x... char vector? Your code has nothing to do with any image (unlike the code on the link you gave).
In any case, a simple method to check the image type is to use imfinfo, which does not require reading the image into memory.

サインインしてコメントする。

採用された回答

Stephen23
Stephen23 2018 年 6 月 13 日
編集済み: Stephen23 2018 年 6 月 13 日
There is no problem, you just did not actually read the image into MATLAB. It works perfectly for me:
>> [img,map] = imread('test.jpg');
>> size(img)
ans =
96 200 3
Or alternatively:
>> S = imfinfo('test.jpg');
>> S.ColorType
ans = truecolor
Nope, not a grayscale image at all.
  3 件のコメント
Akib Rahman
Akib Rahman 2018 年 6 月 13 日
Thanks for your reply. But in my cases, it gives little bit different answer.
Stephen23
Stephen23 2018 年 6 月 13 日
編集済み: Stephen23 2018 年 6 月 13 日
@Akib Rahman: your file is not a grayscale JPEG image. It has three color channels, which indicates that it is stored as RGB. And when I test it, it shows that it is RGB (truecolor):
>> S = imfinfo('HSIimage2.jpg');
>> S.ColorType
ans =
truecolor
And to test whether this works or not, I converted your original image to grayscale (I used Irfanview, the option to save as a grayscale file is offered in the "save options" dialog box), saved it, and tested my new image file, it shows this:
>> S = imfinfo('HSIimage3.jpg');
>> S.ColorType
ans =
grayscale
Your file is not saved as a grayscale JPEG.

サインインしてコメントする。

その他の回答 (1 件)

Image Analyst
Image Analyst 2018 年 6 月 13 日
You're calling size() on the filename string, not the RGB image. You need to call imread() to read the image into a variable:
rgbImage = imread('test.jpg');
[rows, columns, numberOfColorChannels] = size(rgbImage)
like I did in my demo where you pulled this code from (but altered it).
  2 件のコメント
Akib Rahman
Akib Rahman 2018 年 6 月 13 日
I run your code for 2 images. First image is already given in the question. The output is: rows = 96; columns = 200; numberOfColorChannels = 3
The second image is
The output is: rows = 661; columns = 604; numberOfColorChannels = 3
For both images, numberOfColorChannels is 3. But the second image is grayscale
Image Analyst
Image Analyst 2018 年 6 月 13 日
They're RGB images but all color channels are the same. R=G, R=B, and G=B. So it appears as gray scale. If you don't want that, then you need to take a closer look at how the images were saved originally and why they probably got converted to gray scale BEFORE saving to a JPG file.

サインインしてコメントする。

カテゴリ

Help Center および File ExchangeExplore and Edit Images with Image Viewer App についてさらに検索

Community Treasure Hunt

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

Start Hunting!

Translated by