You are now following this question
- You will see updates in your followed content feed.
- You may receive emails, depending on your communication preferences.
Matlab imread grayscale import has bad contrast
1 view (last 30 days)
Show older comments
I'm trying to import a series of grayscale TIFF images. The pixels span the full range of values, from pure white to pure black. This can be seen when the image is viewed in a desktop program such as paint. However, when imread in Matlab is used to import the image, the contrast is greatly reduced: instead of spanning from 0 to 255 like it ought to, it covers only 70 to 95, for example. The range is different for each imported file.
The image is definitely grayscale, as imread outputs a 2D matrix.
Is there some trick that needs to be used, so that the image has the proper contrast after import?
17 Comments
Geoff Hayes
on 13 Aug 2014
Jacob - could you attach one of the images that should be showing pure white and pure black colours, but is only covering a subset of the range?
Jacob
on 13 Aug 2014
Actually I used Windows' "Remove Properties and Personal Information" tool in the file properties menu to remove anything sensitive and tried importing that and it works. Does Matlab have a way of removing file properties?
I'm sorry but I'd prefer not to upload the picture; my company takes IP very seriously.
Joseph Cheng
on 13 Aug 2014
Then how about create a sample TIFF that you generate (non IP gradient, random pixel values, take Lena (or matlab sample image) and convert to problematic TIFF) that also contains this problem. Which property that you removed which caused this to import correctly?
Geoff Hayes
on 13 Aug 2014
Interesting - I wonder what properties you removed? Could you do the following instead - on the tif file that has not had its properties removed, can you run the command
imfinfo('myTifWithProps.tif')
and compare those results with the file where you have removed all properties and personal info
imfinfo('myTifWithoutProps.tif')
Either or both might still show something sensitive, so if you'd rather not post, I understand.
Jacob
on 13 Aug 2014
I already did just that. Both Windows' property viewer and imfinfo show identical results. Yet the stripped file definitely has the proper grayscale.
Geoff Hayes
on 13 Aug 2014
t = Tiff('myTifWithProblems.tif','r');
image_one = t.read();
imshow(subimage_one)
Jacob
on 13 Aug 2014
I get an elaborate structure from Tiff(). What am I looking for? t has the following fields. Each one except file name is a structure.
t.FileName, t.TagID, t.SubFileType, t.Compression, t.Photometric, t.Thresholding, t.Orientation, t.PlanarConfiguration, t.ExtraSamples, t.Group3Options, t.ResolutionUnit, t.InkSet, t.SampleFormat, t.YCbCrPositioning, t.SGILogDataFmt, t.JPEGColorMode
Jacob
on 13 Aug 2014
The Tiff object returned by t = Tiff('image.tif','r') seems to be a directory of possible values rather than an actual list of properties.
imfinfo gives actual values for those fields but all of the data returned by imfinfo is the same before and after clearing the properties.
Geoff Hayes
on 13 Aug 2014
I was curious to see what happened when the TIFF library was used to load and read the image.
Did
img = t.read();
imshow(img)
show the same flawed image?
Jacob
on 13 Aug 2014
Ok I have no clue what happened but displaying the "stripped" file now has bad contrast just like the normal file. I have no clue what made it display properly before.
Geoff Hayes
on 13 Aug 2014
What are the lines of code that you are using to read the file - simply imread('image.tif'), or something else? Do you have (or can you create) a non-sensitive file that is exhibiting this behaviour? And, are you doing anything special/different when generating the tif?
Jacob
on 13 Aug 2014
What I'm doing right now as a workaround is I'll have the user manually convert the TIFFs to PNG in MSPaint. Matlab is displaying PNG's just fine with the help of the rgb2gray function. Obviously this is not ideal though so if you have any more insight that would be great.
I'm not sure what changed but the stripped TIFF displays wrong as well. I think I need to find some TIFF property that is improperly defining the luminance scale of the image.
Jacob
on 13 Aug 2014
The tif is generated from a 3rd party program, which is why I'm trying to find something embedded in the file.
I think I found a way around. The program can also export to .csv, so if I can parse through that, it might be the way I have to go. I'm sorry if I wasted your time, I really thought TIFF files would be easier to process.
Geoff Hayes
on 13 Aug 2014
If you do something like
[img,map] = imread('yourTifFile.tif');
is map empty?
Jacob
on 14 Aug 2014
I'm just driven by curiosity now. The map is the same as what was stored under the Colormap property. 256x3 array ranging from 0 to 1. Seems to be divided into blocks of 24 rows where it would start at zero and either be all zeros for the next 24 rows; or start at zero and irregularly increase towards 1. For some reason, loading the image using imshow in the command line displays it properly without the contrast issue. I think I may still stick with csv but it's interesting that the TIFF worked in the command prompt.
Geoff Hayes
on 14 Aug 2014
Jacob - so what happens if you do the following:
[img,map] = imread('yourTifFile.tif');
imshow(img);
At this point, is the image displaying the poor contrast? If so, then do the following
colormap(map)
What does the image look like now that you are using the colour map that is associated with the image?
Maybe the integers in the 2D img matrix are NOT colours but indices into the colour map that comes with the image.
Answers (0)
See Also
Categories
Find more on Image Data in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!An Error Occurred
Unable to complete the action because of changes made to the page. Reload the page to see its updated state.
Select a Web Site
Choose a web site to get translated content where available and see local events and offers. Based on your location, we recommend that you select: .
You can also select a web site from the following list
How to Get Best Site Performance
Select the China site (in Chinese or English) for best site performance. Other MathWorks country sites are not optimized for visits from your location.
Americas
- América Latina (Español)
- Canada (English)
- United States (English)
Europe
- Belgium (English)
- Denmark (English)
- Deutschland (Deutsch)
- España (Español)
- Finland (English)
- France (Français)
- Ireland (English)
- Italia (Italiano)
- Luxembourg (English)
- Netherlands (English)
- Norway (English)
- Österreich (Deutsch)
- Portugal (English)
- Sweden (English)
- Switzerland
- United Kingdom(English)
Asia Pacific
- Australia (English)
- India (English)
- New Zealand (English)
- 中国
- 日本Japanese (日本語)
- 한국Korean (한국어)