-
Notifications
You must be signed in to change notification settings - Fork 0
/
ReducirRuido.py
83 lines (59 loc) · 2.48 KB
/
ReducirRuido.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
import numpy as np
import cv2
from skimage import img_as_float
from skimage.restoration import denoise_nl_means,inpaint,denoise_tv_chambolle, denoise_bilateral,denoise_tv_bregman
def denoiseDilate(imagen,iterations=1):
# Crear un kernel de '1' de 3x3
kernel = np.ones((3, 3), np.uint8)
# Se aplica la transformacion: Morphological Gradient
transformacion = cv2.dilate(imagen, kernel, iterations) - cv2.erode(imagen, kernel, iterations)
return transformacion
def denoiseMorfologico(imagen):
# Crear un kernel de '1' de 5x5
kernel = np.ones((5, 5), np.uint8)
# Se aplica la transformacion: Morphological Gradient
transformacion = cv2.morphologyEx(imagen, cv2.MORPH_OPEN, kernel)
return transformacion
def denoiseNonLocalMeans(imagen):
"""
Reemplaza la intensidad de cada pixel con la media de los pixels a su alrededor
"""
noisy = img_as_float(imagen)
denoise = denoise_nl_means(noisy, patch_size=4, patch_distance=7, h=0.05)
return denoise
def denoiseBilateral(imagen,multichannel):
"""
-Reemplaza el valor de cada pixel en funcion de la proximidad espacial y radiometrica
medida por la funcion Gaussiana de la distancia euclidiana entre dos pixels y con
cierta desviacion estandar.
-False si la imagen es una escala de grises, sino True
"""
noisy = img_as_float(imagen)
denoise = denoise_bilateral(noisy, 7, 9, 0.08,multichannel)
return denoise
def denoiseTV_Chambolle(imagen,multichannel):
"""
-Tiende a producir imagenes como las de los dibujos animados.
-Reduce al minimo la variacion total de la imagen
"""
noisy = img_as_float(imagen)
denoise = denoise_tv_chambolle(noisy, 7, 9, 0.08,multichannel)
return denoise
def denoiseTV_Bregman(imagen,isotropic):
"""
-isotropic es el atributo para cambiar entre filtrado isotropico y anisotropico
"""
noisy = img_as_float(imagen)
denoise = denoise_tv_bregman(noisy, 7, 9, 0.08, isotropic)
return denoise
def denoiseInpaint(imagen,mask,multichannel):
noisy = img_as_float(imagen)
image_orig = noisy
# Afecta a la imagen original en las regiones marcadas por la mascara
# Se puede cambiar de acuerdo a lo que se necesite
# En este caso produce defectos en la zona
image_defect = image_orig.copy()
for layer in range(image_defect.shape[-1]):
image_defect[np.where(mask)] = 1
image_result = inpaint.inpaint_biharmonic(image_defect, mask, multichannel)
return image_result