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()
#...........................Additional notes............................
'''In addition to cv2.GaussianBlur() filter, other commonly used filters
are: Average blur, cv2.blur(); Median blur, cv2.medianBlur(); and
and Bilateral filter, cv2.bilateralFilter. For example, Bilateral filter
can be used to filter high frequecy components while maintaining the
edges of the image, this is the strength of this filter compared to others.
The example below implements the Bilateral filter:'''
import cv2
from matplotlib import pyplot as plt
img = cv2.imread("myimage.jpg")
gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
diameter = 30# diameter of the pixels included in the neighborhood.
sigmaColor = 20 # color standard deviation in the neighborhood.
sigmaSpace = 20 # space standard deviation in the neighborhood
blurred = cv2.bilateralFilter(img, diameter, sigmaColor, sigmaSpace)
plt.imshow(threshdimage, cmap = 'gray', interpolation = 'bicubic')# plot
plt.xticks([]), plt.yticks([]) # to hide tick values on X and Y axis
plt.show()