Vinod Kumar Chauhan
Vinod Kumar Chauhan

Reputation: 748

Why resizing image lead to increase in channels?

I have grayscale images of different dimensions so I need to convert them to same dimension (say, 28*28) for my experiments. I tried to do it using different methods and I was able to do it but I observed that resizing of image lead to increase in number of channels. I am new to python and image processing so please help.

from PIL import Image

image = Image.open('6.tif')
image = image.resize((28, 28), Image.ANTIALIAS)
image.save('6.png', 'PNG', quality=100)

And then following code shows different dimensions:

import imageio

image_data = imageio.imread("6.tif").astype(float)
print(image_data.shape)

image_data = imageio.imread("6.png").astype(float)
print(image_data.shape)

and result is:

(65, 74)
(28, 28, 4)

I don't need the last dimension. How is this coming? I get the similar results even with "from resizeimage import resizeimage".

Upvotes: 1

Views: 1155

Answers (1)

Mark Setchell
Mark Setchell

Reputation: 207465

There are a number of issues with your code...


If you are expecting a greyscale image, make sure that is what you get. So, change this:

image = Image.open('6.tif')

to:

image = Image.open('6.tif').convert('L')

When you resize an image, you need to use one of the correct resampling methods:

  • PIL.Image.NEAREST
  • PIL.Image.BOX
  • PIL.Image.BILINEAR
  • PIL.Image.HAMMING
  • PIL.Image.BICUBIC
  • PIL.Image.LANCZOS

So, you need to replace the ANTI_ALIAS with something from the above list on this line:

image = image.resize((28, 28), Image.ANTIALIAS)

When you save as PNG, it is always loss-less. The quality factor does not work the same as for JPEG images, so you should omit it unless you have a good understanding of how it affects the PNG encoder.


If you make these changes, specifically the first, I think your problem will go away. Bear in mind though that the PNG encoder may take an RGB image and save it as a palletised image, or it may take a greyscale image and encode it as RGB, or RGB alpha.

Upvotes: 1

Related Questions