필터 지우기
필터 지우기

How to display grayscale image using imshow function

조회 수: 37 (최근 30일)
Atinesh S
Atinesh S 2015년 10월 21일
댓글: Walter Roberson 2015년 10월 25일
Why the below code not showing grayscale image
f = imread('lena.bmp');
imshow(f, [0 80])
I'm reading a book Digital Image Processing using Matlab, they have discussed the below syntax to show grayscale image.
imshow(f, [low high])
displays as black all values less than or equal to low, and as white all values greater than or equal to high
I'm using Matlab R2015a
  댓글 수: 1
Thorsten
Thorsten 2015년 10월 21일
This code works fine for me (R2012a). What are you getting?

댓글을 달려면 로그인하십시오.

답변 (2개)

Guillaume
Guillaume 2015년 10월 21일
편집: Guillaume 2015년 10월 21일
The problem is that your f (what a bad variable name for an image!) is not a greyscale image as greyscale is not supported by the 'bmp' format. It is an RGB image that may happen to have all three channels identical, so it appear grey. A true greyscale image has only one colour channel.
imshow(f(:, :, 1), [0 80]) %since all three channels should be identical
%or
imshow(rgb2gray(f), [0 80]) %works even if all 3 channels are not identical, but then the original image is not greyscale
imshow with a RGB image appears to ignore the 'DisplayRange' argument.
  댓글 수: 4
Guillaume
Guillaume 2015년 10월 21일
편집: Guillaume 2015년 10월 21일
By the way, it's why I always recommend using PNG as an image format. The PNG format support all three types of images (indexed, greyscale, rgb), plus optional transparency, plus up to 16 bit per channel, plus storage of metadata. And it's got fast non-lossy compression to boot.
Atinesh S
Atinesh S 2015년 10월 24일
@Guillaume Ya you right. I was using the command for color image. But it doesn't worked for grayscale image also. See my below comment.

댓글을 달려면 로그인하십시오.


Atinesh S
Atinesh S 2015년 10월 24일
Sorry, I was using the above command for color image. But it doesn't worked for grayscale image also. See the below command and O/P images can you tell any difference.
f = imread('peppers_gray.jpg');
imshow(f);
figure
imshow(f, [100 180])
  댓글 수: 4
Guillaume
Guillaume 2015년 10월 24일
You have to differentiate between images in memory and image file format. You can have a greyscale image in memory but if you save it to BMP it has to be converted either to indexed or rgb. In JPG, it's always RGB. Regardless, IF you know the image is grayscale, you can simply load it and convert the rgb/indexed image back to grayscale with no loss of data. With indexed, just discard the colour map, with rgb just discard two of the channels.
There are not many image formats that will store an image as greyscale. As mentioned in my answer, PNG is one of them, and the one I'd recommend. TIF is another (I think, that format is a mess).
Walter Roberson
Walter Roberson 2015년 10월 25일
With indexed, do not just discard the colormap: the index is not necessarily in order of grayscale level. You should instead use ind2gray()

댓글을 달려면 로그인하십시오.

카테고리

Help CenterFile Exchange에서 Image Processing Toolbox에 대해 자세히 알아보기

Community Treasure Hunt

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

Start Hunting!

Translated by