81 lines
2.2 KiB
Python
81 lines
2.2 KiB
Python
import random as rd
|
|
|
|
import cv2 as cv
|
|
import matplotlib.pyplot as plt
|
|
import numpy as np
|
|
|
|
|
|
def addSaltAndPepper(src, percentage):
|
|
NoiseImg = src.copy()
|
|
NoiseNum = int(percentage * src.shape[0] * src.shape[1])
|
|
for i in range(NoiseNum):
|
|
randX = rd.randint(0, src.shape[0] - 1)
|
|
randY = rd.randint(0, src.shape[1] - 1)
|
|
if rd.randint(0, 1) == 0:
|
|
NoiseImg[randX, randY] = 0
|
|
else:
|
|
NoiseImg[randX, randY] = 255
|
|
return NoiseImg
|
|
|
|
|
|
def addGaussianNoise(src, means, sigma):
|
|
NoiseImg = src / src.max()
|
|
rows = NoiseImg.shape[0]
|
|
cols = NoiseImg.shape[1]
|
|
for i in range(rows):
|
|
for j in range(cols):
|
|
NoiseImg[i, j] = NoiseImg[i, j] + rd.gauss(means, sigma)
|
|
if NoiseImg[i, j] < 0:
|
|
NoiseImg[i, j] = 0
|
|
if NoiseImg[i, j] > 1:
|
|
NoiseImg[i, j] = 1
|
|
NoiseImg = np.uint8(NoiseImg * 255)
|
|
return NoiseImg
|
|
|
|
|
|
if __name__ == "__main__":
|
|
im = cv.imread(r"img\iris.jpg", cv.IMREAD_GRAYSCALE)
|
|
im1 = addSaltAndPepper(im, 0.1)
|
|
im11 = cv.blur(im1, (3, 3))
|
|
im12 = cv.medianBlur(im1, 3)
|
|
im13 = cv.GaussianBlur(im1, (3, 3), 1)
|
|
im2 = addGaussianNoise(im, 0, 0.1)
|
|
im21 = cv.blur(im2, (3, 3)) # type: ignore
|
|
im22 = cv.medianBlur(im2, 3) # type: ignore
|
|
im23 = cv.GaussianBlur(im2, (3, 3), 1) # type: ignore
|
|
plt.figure()
|
|
plt.subplot(241)
|
|
plt.imshow(im1, cmap="gray")
|
|
plt.title("salt and pepper")
|
|
plt.axis("off")
|
|
plt.subplot(242)
|
|
plt.imshow(im11, cmap="gray")
|
|
plt.title("blur")
|
|
plt.axis("off")
|
|
plt.subplot(243)
|
|
plt.imshow(im12, cmap="gray")
|
|
plt.title("median")
|
|
plt.axis("off")
|
|
plt.subplot(244)
|
|
plt.imshow(im13, cmap="gray")
|
|
plt.title("gaussian")
|
|
plt.axis("off")
|
|
plt.subplot(245)
|
|
plt.imshow(im2, cmap="gray")
|
|
plt.title("gaussian noise")
|
|
plt.axis("off")
|
|
plt.subplot(246)
|
|
plt.imshow(im21, cmap="gray")
|
|
plt.title("blur")
|
|
plt.axis("off")
|
|
plt.subplot(247)
|
|
plt.imshow(im22, cmap="gray")
|
|
plt.title("median")
|
|
plt.axis("off")
|
|
plt.subplot(248)
|
|
plt.imshow(im23, cmap="gray")
|
|
plt.title("gaussian")
|
|
plt.axis("off")
|
|
plt.tight_layout()
|
|
plt.show()
|