Flattening is a technique that is used to convert multi-dimensional arrays into a 1-D array, it is generally used in Deep Learning while feeding the 1-D array information to the classification model.
What is the need for Flattening of an Image?
Multi-Dimensional arrays take more amount of memory while 1-D arrays take less memory, which is the most important reason why we flatten the Image Array before processing/feeding the information to our model. In most cases, we will be dealing with a dataset which contains a large amount of images thus flattening helps in decreasing the memory as well as reducing the time to train the model.
Step 1: Importing the necessary libraries
import numpy as np
import pandas as pd
import cv2 as cv
from google.colab.patches import cv2_imshow
from skimage import io
from PIL import Image
import matplotlib.pylab as plt
from numpy import array
from sys import getsizeof
|
Step 2: Fetching a random image through web
#Fetching the url and showing the image using cv2_imshow for url in urls:
image = io.imread(url)
cv2_imshow(image)
print ( '\n' )
|
Step 3: Transforming the image into a multi-dimensional array
#Getting the multi-dimensional array from the image array1 = array(image)
#Memory occupied by the multi-dimensional array size1 = getsizeof(array1)
print (array1)
|
Step 4: Now Flattening the multi-dimensional array using flatten() function
#Using Flatten function on array 1 to convert the multi-dimensional # array to 1-D array array2 = array1.flatten()
#Memory occupied by array 2 size2 = getsizeof(array2)
#displaying the 1-D array print (array2)
|
Step5: Results of Flattening
#Print's the two different size's of the array print (f "Size of Multidimensional Image : {size1}" )
print (f "Size of Flattened Image : {size2}" )
difference = size1 - size2
#Print's the difference of memory between the size of Multidimensional & 1-D array print ( "Size difference in the images: " , difference)
|
Size of Multidimensional Image : 1324928 Size of Flattened Image : 1324896 Size difference in the images: 32
Step 6: Full Code
#importing libraries import numpy as np
import pandas as pd
import cv2 as cv
from google.colab.patches import cv2_imshow
from skimage import io
from PIL import Image
import matplotlib.pylab as plt
from numpy import array
from sys import getsizeof
#Fetching the url and showing the image using cv2_imshow for url in urls:
image = io.imread(url)
cv2_imshow(image)
print ( '\n' )
#Getting the multi-dimensional array from the image array1 = array(image)
#Memory occupied by the multi-dimensional array size1 = getsizeof(array1)
print (array1)
#Using Flatten function on array 1 to convert the multi-dimensional # array to 1-D array array2 = array1.flatten()
#Memory occupied by array 2 size2 = getsizeof(array2)
#displaying the 1-D array print (array2)
#Print's the two different size's of the array print (f "Size of Multidimensional Image : {size1}" )
print (f "Size of Flattened Image : {size2}" )
difference = size1 - size2
#Print's the difference of memory between the size of Multidimensional & 1-D array print (difference)
|
Conclusion:
After running the whole code we see that there is not a major difference in memory used in the multi-dimensional image array and the flattened array. Then people may ask why we are doing the flattening when the effect is negligible. In a large datasets when we are dealing with thousands of images the net amount of the memory saved due to all the images accumulates to be pretty big.