How to denoise an Image using Median Blur in Python using OpenCV – easy project – 2023

In this blog what we will be seeing will not be something less than magic. You will be amazed after watching the power of Median Blur. So without any further due, let’s do it.

Step 1 – Import all the required packages.

```import cv2
import matplotlib.pyplot as plt
import numpy as np
import random
```

Step 2 – Reading our image.

```img = cv2.imread('test.tiff')
img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)```

Step 3 – Creating a black image.

`noisy = np.zeros(img.shape, np.uint8)`
• Here we have just initialized a black image of same dimensions as of our original image.
• We will be creating our noisy image out of it.

Step 4 – Actually creating the noisy image.

```p = 0.2

#traversing throughout the image pixels
for i in range(img.shape[0]): #rows
for j in range(img.shape[1]): #cols
r = random.random()
if r < p / 2:
noisy[i][j] = [0, 0, 0] #black noise
elif r < p:
noisy[i][j] = [255, 255, 255] #white noise
else:
noisy[i][j] = img[i][j] #original image pixel```
• In the first line, we have just set a random variable p/probability as 0.2.
• Then we will start traversing through the image pixels.
• Then we will take a random value r using random.random() and check if that’s less than p/2 then add a black/pepper noise (0,0,0).
• Else if the random r value is greater than p/2 and less than p then add a white/salt noise.
• Else put the pixel from the original image there.
• 98% of the time it will be the else case (pixel from the original image).

Step 5 – Applying Median Blur to denoise the image.

Syntax: cv2.medianBlur(src, dst, ksize)

Parameters:

```# median blur
denoised = cv2.medianBlur(noisy, 5)```

Step 6 – Visualizing the results.

```output = [img, noisy, denoised]

titles = ['Original', 'Noisy', 'Denoised']

for i in range(3):
plt.subplot(1, 3, i + 1)
plt.imshow(output[i])
plt.title(titles[i])
plt.xticks([])
plt.yticks([])
plt.show()```

Let’s see the whole code…

```import cv2
import matplotlib.pyplot as plt
import numpy as np
import random

img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)

noisy = np.zeros(img.shape, np.uint8)

p = 0.2

# traversing throughout the image pixels
for i in range(img.shape[0]):  # rows
for j in range(img.shape[1]):  # cols
r = random.random()
if r < p / 2:
noisy[i][j] = [0, 0, 0]  # black noise
elif r < p:
noisy[i][j] = [255, 255, 255]  # white noise
else:
noisy[i][j] = img[i][j]  # original image pixel

# median blur
denoised = cv2.medianBlur(noisy, 5)

output = [img, noisy, denoised]

titles = ['Original', 'Noisy', 'Denoised']

for i in range(3):
plt.subplot(1, 3, i + 1)
plt.imshow(output[i])
plt.title(titles[i])
plt.xticks([])
plt.yticks([])
plt.show()
```

Do let me know if there’s any query regarding median blur by contacting me on email or LinkedIn.

So this is all for this blog folks, thanks for reading it and I hope you are taking something with you after reading this and till the next time ?…

Read my previous post: HOW TO DETECT CONTOURS IN AN IMAGE IN PYTHON USING OPENCV

Check out my other machine learning projectsdeep learning projectscomputer vision projectsNLP projectsFlask projects at machinelearningprojects.net.

Abhishek Sharma

Started my Data Science journey in my 2nd year of college and since then continuously into it because of the magical powers of ML and continuously doing projects in almost every domain of AI like ML, DL, CV, NLP.

Articles: 521