Dodawanie szumu do obrazu polega na odchylaniu wartości pikseli obrazu, zaburzając go w sposób losowy. Możemy generować szum za pomocą różnych generatorów liczb losowych. Dwie informacje w ramach przypomnienia: Pamiętajcie, że nie wszystkie generatory dają wartości wycentrowane na 0, dlatego czasem trzeba je wyśrodkować. Drugie przypomnienie to fakt, że jeżeli przekroczymy wartości skrajne uint8
, to wartości będą zastępowane w sposób cykliczny, czyli \(255+5=0+5\) oraz \(0-55=255-55\), co może być niepożądanym efektem. Tutaj również można porównywać kilka różnych metod albo sprawdzić jedną metodę dla różnych parametrów. Stopień zaszumienia możemy regulować za pomocą jakiegoś parametru alpha
.
=0.5 # 0-1
alpha
= 25 # tym można sterować
sigma = np.random.normal(0,sigma,(img.shape))
gauss = (img + alpha * gauss).clip(0,255).astype(np.uint8)
noisy1
=0.01 # małe wartoci
beta= len(np.unique(img))
vals = beta * 2 ** np.ceil(np.log2(vals))
vals = (np.random.poisson(img * vals) / float(vals)).clip(0,255).astype(np.uint8)
noisy2
=[-25,25] #zakres szumu
Noise_range= (Noise_range[1]-Noise_range[0])*np.random.random((img.shape))+Noise_range[0]
rand = (img + alpha * rand).clip(0,255).astype(np.uint8) noisy3
Inne generatory liczb losowych, które mogą wam się przydać (doczytać w dokumentacji):
I na koniec parametryczny generator szumu sól i pieprz (nie dla zajęć z SM):
def noise_SnP(img,S=255,P=0,rnd=(333,9999)):
= img.shape
r , c = random.randint(rnd[0], rnd[1])
number_of_pixels for i in range(number_of_pixels):
=random.randint(0, r - 1)
y=random.randint(0, c - 1)
x= S
img[y][x] = random.randint(rnd[0], rnd[1])
number_of_pixels for i in range(number_of_pixels):
=random.randint(0, r - 1)
y=random.randint(0, c - 1)
x= P
img[y][x] return img