import cv2
from matplotlib import pyplot as plt
'''Read your image and convert it to graycale as follows:'''
img = cv2.imread("myimage.jpg")
gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
'''Apply a Low-pass filter such as guassian blur to reduce high frequency
components as follows:'''
img_blur = cv2.GaussianBlur(gray, (3,3), 0)
'''The (3,3) is filter size (must be odd) and zero is the standard
deviation parameter of a guassian function which tells GaussianBlur to
calculate standard diviation automatically. Assuming myimage.jpg is of a
bi-modal distribution (its histogram plot contains two peaks) then
threshold is applied as follows:'''
threshdimage = cv2.threshold(img_blur,100,255,cv2.THRESH_BINARY)[1]
plt.imshow(threshdimage, cmap = 'gray', interpolation = 'bicubic')# plot
plt.xticks([]), plt.yticks([]) # to hide tick values on X and Y axis
'''Where 100 is threshold that divides the pixel space , hence all pixel
values smaller than 100 are set to 0 and all above 100 are set to 255.
The THRESH_BINARY specifies method used for thresholding. See the
following: https://docs.opencv.org/4.x/d7/d4d/tutorial_py_thresholding.html
for more info'''
plt.show()