I am practicing with an image dataset which is having different dimensions. If I simply crop and pad them to 1024X1024(the original images having smallest width is around 300 and largest is around 2400 and widths and heights of the images are not the same) I am not getting good val_accuracy. It's just giving 49% accuracy. How to do image processing to these images because the brightness of the images is also changing. My task is to classify them into 5 classes.
I would use the ImageDataGenerator.flow_from_directory. Documentation is [here.]Make a train directory. Within it create 5 subdirectories one for each class and give them the desired class name. Place the associated images into the 5 class sub directories. Then use something like the code below. Set the image size to something standard particularly is you are using transfer learning. For MobileNet standard size is 224 X 224. You can use the Image Data Generator to augment your data for example set horizontal flip =True. You can also vary the brightness and rotation of the images.
tf.keras.preprocessing.image.ImageDataGenerator( featurewise_center=False, samplewise_center=False, featurewise_std_normalization=False, samplewise_std_normalization=False, zca_whitening=False, zca_epsilon=1e-06, rotation_range=0, width_shift_range=0.0, height_shift_range=0.0, brightness_range=None, shear_range=0.0, zoom_range=0.0, channel_shift_range=0.0, fill_mode="nearest", cval=0.0, horizontal_flip=True, vertical_flip=False, rescale=None, preprocessing_function=None, data_format=None, validation_split=0.0, dtype=None) #for flow from directory .flow_from_directory( directory, target_size=(256, 256), color_mode="rgb", classes=None, class_mode="categorical", batch_size=32, shuffle=True, seed=None, save_to_dir=None, save_prefix="", save_format="png", follow_links=False, subset=None, interpolation="nearest", ). : https://keras.io/api/preprocessing/image/
You can rescale images to same size based on the classification model you are using (preferably 300x300). Also for preprocessing you can try some morphological operations and some brightness removal techniques from OpenCV-Python. One more factor that could have affected your accuracy might be the number of images, if you are having less number of images you can augment your dataset to come up with enough samples for training.
Why do not simply perform some bilinear or bicubic interpolation?
Tensorflow and PyTorch deep learning frameworks have dedicated function to do this - https://pytorch.org/vision/stable/transforms.html#torchvision.transforms.Resize and https://www.tensorflow.org/api_docs/python/tf/image/resize .