Converting color images to black and white is quite easy using the OpenCV framework,but for converting black and white images to color we need to take a different approach. We need to add colors to black and white pixels using Deep Learning Neural Networks. Let's first look at how the color information is represented in gray scale images and digital images.
Gray scale image means the value of each pixel represents only the intensity information of the light. Such images commonly display only the darkest black to the brightest white. The image carries only black, white, and gray colors, in which gray has multiple levels.Each pixel typically consists of 8 bits(1byte) for gray scale images and there are 256 possible grayscale colors.
Color images have three different channels called RGB. Each pixel intensity was represented by three channels. Each color image has 24 bits/pixel, which means 8 bits for each of the three color bands(RGB).There are 16 million colors possible.
Black and White Image to Color Image
We trained a neural network which converts this grayscale image to the colored one. It needs to learn to map this single value to a three channel image. For this purpose we used a concept called LAB space where we figured out the lightness scale of each pixel and mapped them correspondent A and B channels.
LAB color space
- Lab is an another color space same like RGB where
- L channel = Lightness
- A channel = from green-red
- B channel = from Yellow-blue
Here the grayscale images are in only the L channel. Hence,we find lab color space is more convenient for our problem. we develop a Neural network where it should map our lightness of pixel intensity to their A and B channel. But even though we map A and B channels we used to get only 2 channels but color images need 3 different channels so the third channel is nothing but the original image.So our input value is lightness of each pixel and our neural network should predict A and B channels and add original input. Using OpenCV we can convert them into RGB format.
- Neural Networks
- Open CV
- Statistics for Normalization
For this purpose we used a pre-trained neural network which was already trained on Imagenet grayscale dataset.It uses a simple convolutional neural network architecture. As explained above, we take the L channel image and learn to predict a and b channels. Combining the prediction and input would give us the colorized image which looks like a Lab color space image.
After collecting pretrained weights and using tensorflow and opencv we convert predicted lab space images into RGB format.Hence the Neural network trained on 1000 different greyscale images we got 91.29 % accuracy for our results. Some results are
For videos we divide each frame individually and send it to the neural network and finally we add each predicted frame and convert them back to video. Some results using videos.