You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
Multi-channel images get truncated to 3 channels #3160
Several Deep Learning Framework Libraries (.e.g PyTorch's TorchVision), Image Processing libraries (.e.g skimage) and machine learning data augmentation libraries (e.g. Augmenter) internally rely on the PIL to perform image transformations.
You can have a situation where in a Semantic Segmentation problem, you have a 3-ch RGB input image, but have a 10-ch mask with each individual channels containing a binary mask of the classes found in the RGB image.
Another situation is when you deal with Geospatial Images, where a TIFF file can contain many channels (8-ch M-Band, 8-ch A-Band) of information corresponding to different spectral bands, for multispectral and hyper-spectral images.
If you use PIL to perform any type of transform, e.g. rescale, it truncates a multi-channel image to a 3-channel image.
There is a related issue #1888, related to PIL not being able to handle high-bit depth images.
What did you expect to happen?
I expected PIL to be able to handle multi-channel images.
What actually happened?
Any multi-channel image processed by the PIL library gets truncated to 3-channels.
What versions of Pillow and Python are you using?
Pillow-5.0.0
Python-3.6.4
The attached file is a binary mask containing 10-channels of binary information in the TIFF file format.
This is how the original image looks like. It was originally in the TIFF file format, but I've converted it to JPEG format for display.
Satellite Imagery (C) DigitalGlobe, Inc.
Reacted by Andrew Jong, Adam J. Stewart, Houjing Huang, Xiuming Zhang, QoT, Shoaib Ahmed Siddiqui, Aurangzaib Siddiqui, Hima, Tommaso Biancalani, Alex Ziller and 5 more
One way to handle this is to process each channel individually, in parallel, if the number of channels is greater than 3.
I've had to stop using any image transforms that use PIL, in order to overcome this issue, and resort to using simple transformations using numpy at the moment.
Reacted by Tommaso Biancalani, André F. Rendeiro, Carina and CielAl
changed the title [-]PIL cannot handle multi-channel images, they get truncated to 3 channels by default[/-][+]Multi-channel images get truncated to 3 channels[/+]on Jul 27, 2019
Activity
hugovk commentedon Jun 7, 2018
Thanks for the report, please see:
#1888
edowson commentedon Jun 7, 2018
One way to handle this is to process each channel individually, in parallel, if the number of channels is greater than 3.
I've had to stop using any image transforms that use PIL, in order to overcome this issue, and resort to using simple transformations using numpy at the moment.
[-]PIL cannot handle multi-channel images, they get truncated to 3 channels by default[/-][+]Multi-channel images get truncated to 3 channels[/+]radarhere commentedon Jul 27, 2019
See also #2821
radarhere commentedon Feb 27, 2021
Closing in favour of the tracking issue, #1888