Grokking Modern System Design Interview for Engineers & Managers
Ace your System Design Interview and take your career to the next level. Learn to handle the design of applications like Netflix, Quora, Facebook, Uber, and many more in a 45-min interview. Learn the RESHADED framework for architecting web-scale applications by determining requirements, constraints, and assumptions before diving into a step-by-step design process.
Histogram equalization is a process where the intensity values of an image are adjusted to create a higher overall contrast.
Digital Image Processing is a significant aspect of data science. It is used to enhance and modify images so that their attributes are more easily understandable.
Artificial Intelligence also makes use of digital image processing to make for a consistent and advantageous dataset.
Image histograms are largely used to obtain information about image attributes. Image contrast can be determined by looking at the range of pixel intensity values that the histogram bars are spread over.
If the range is low, image contrast is also low. Meanwhile, a higher range of pixel intensity values means a higher contrast.
An example of a low contrast image is shown below.
Histogram equalization is done by using the following formula:
L
: The maximum intensity level of the image. For a 8-bit image, L is 256.M
: The width of the image.N
: The height of the image.n
: The frequency corresponding to each intensity level.rj
: The range of values from 0 to L-1.pin
: The total frequency that corresponds to a specific value of rj.rk
: The new frequencies.sk
: The new equalized histogram.#create list of values 0-255pixels=[]for x in range(256):pixels.append(x)#set width and height of imagewidth,height=img.sizesize=width*heightcounts=[]#for each intensity levelfor i in pixels:#set counter to 0temp=0#traverse through the pixelsfor x in range(width):for y in range(height):#if pixel intensity is equal to intensity level#increment counterif (img.getpixel((x,y))==i):temp=temp+1#append frequency of intensity levelcounts.append(temp)#initialize list for frequency probabilitiespdf=[]for i in counts:pdf.append(i/size)#initialize list for cumulative probabilitycdf=[]total=0for i in pdf:total=total+icdf.append(total)#intialize list for mapping cdftr=[]for i in cdf:t=round(i*255)tr.append(t)#initialize list containing new frequencies for equalized hisths=[]for i in pixels:count=0tot=0for j in tr:if (j==i):tot=tot+counts[count]count=count+1hs.append(tot)#plot equalized histogramplt.bar(pixels,hs)plt.show()
In the above code:
We start out by storing the frequencies of each pixel intensity in a list: counts
.
Next, we make a list named pdf
that stores the probability distribution of each pixel. This is obtained by dividing the frequency of each pixel intensity by the total number of pixels.
The cdf
list is then initialized which stores the cumulative probability of each pixel, found by adding up the previous frequencies.
The cdf
list is then mapped through multiplication with L-1, and stored in tr
.
The new frequencies for each pixel are stored in a list hs
, by summing the individual frequencies where the values in tr
are equal to the respective pixel intensity.
Matplotlib
is used to plot the equalized histogram.
The equalized histogram will have bars spread out over a larger range of intensity values.
An example is shown below:
RELATED TAGS
CONTRIBUTOR
Grokking Modern System Design Interview for Engineers & Managers
Ace your System Design Interview and take your career to the next level. Learn to handle the design of applications like Netflix, Quora, Facebook, Uber, and many more in a 45-min interview. Learn the RESHADED framework for architecting web-scale applications by determining requirements, constraints, and assumptions before diving into a step-by-step design process.