def ej3_2(show_fft = True): img = cv.imread("../img/camaleon.tif", cv.IMREAD_GRAYSCALE) # Cantidad de filas y columnas de la imagen rows, cols = img.shape # Variables del filtro corte = 0.05 # Creo el filtro Gauss en frecuencia filtro = fun.filterGaussian(rows, cols, corte) filtroPasaAlto = np.ones([rows, cols]) - filtro #Creo filtro de alta potencia a = 0.5 b = 10 filtroEAF = a + b * filtroPasaAlto # Filtro la imagen en freciencia imgFiltrada = fun.filterImg(img, filtroEAF) #TDF de la imagen original espectro = fun.spectrum(img) # TDF de la imagen filtrada espectroFiltrada = fun.spectrum(imgFiltrada) func.graficar(img, 255, 0, 'gray', 'Imagen Original') func.graficar(imgFiltrada, 255, 0, 'gray', 'Imagen Filtrada (Alta potencia frecuencial)') if show_fft: func.graficar(espectro, espectro.max(), 0, 'gray', 'TDF imagen original') func.graficar(espectroFiltrada, espectroFiltrada.max(), 0, 'gray', 'TDF Imagen Filtrada')
def ej2_4(): img = cv.imread("../img/huang1.jpg", cv.IMREAD_GRAYSCALE) # Cantidad de filas y columnas de la imagen rows, cols = img.shape # Variables del filtro corte = 0.010 # Creo el filtro Gauss en frecuencia filtro = fun.filterGaussian(rows, cols, corte) # Filtro pasa altos # filtro = 1- filtro func.graficar(filtro, filtro.max(), 0, 'gray', 'Filtro') # Filtro la imagen en freciencia imgFiltrada = fun.filterImg(img, filtro) # Calculo el espectro de la imagen filtrada espectro = fun.spectrum(imgFiltrada) # Grafico func.graficar(img, img.max(), 0, 'gray', 'Imagen Original') func.graficar(imgFiltrada, imgFiltrada.max(), 0, 'gray', 'Imagen filtrada') func.graficar(espectro, espectro.max(), 0, 'gray', 'Espectro')
def ej3_1(): img = cv.imread("../img/huang1.jpg", cv.IMREAD_GRAYSCALE) # Cantidad de filas y columnas de la imagen rows, cols = img.shape # Variables del filtro corte = .05 # Creo el filtro Gauss en frecuencia filtro = fun.filterGaussian(rows, cols, corte) filtroPasaAlto = 1 - filtro a = 1.1 A = a * np.ones([rows, cols]) Hap = (A - 1) + filtroPasaAlto # Filtro la imagen en freciencia imgFiltrada = fun.filterImg(img, Hap) # Calculo el espectro de la imagen filtrada espectro = fun.spectrum(imgFiltrada) # Grafico func.graficar(img, img.max(), 0, 'gray', 'Imagen Original') func.graficar(filtroPasaAlto, filtroPasaAlto.max(), 0, 'gray', 'Filtro pasa alto') func.graficar(imgFiltrada, imgFiltrada.max(), 0, 'gray', 'Imagen filtrada (filtro de alta frecuencia)') func.graficar(espectro, espectro.max(), 0, 'gray', 'Espectro')
def ej2_2(): img = cv.imread("../img/huang1.jpg", cv.IMREAD_GRAYSCALE) #Cantidad de filas y columnas de la imagen rows, cols = img.shape #Variables del filtro corte = 0.02 order = 5 #Creo el filtro Butterworth pasa bajos en frecuencia filtro = fun.filterButterworth(rows, cols, corte, order) # Lo convierto a pasa altos # filtro = 1 - filtro func.graficar(filtro, filtro.max(), 0, 'gray', 'Filtro') #Filtro la imagen en freciencia imgFiltrada = fun.filterImg(img, filtro) #Calculo el espectro de la imagen filtrada espectro = fun.spectrum(imgFiltrada) #Grafico func.graficar(img, img.max(), 0, 'gray', 'Imagen Original') func.graficar(imgFiltrada, imgFiltrada.max(), 0, 'gray', 'Imagen filtrada Corte: 0.02. Orden: 5.') func.graficar(espectro, espectro.max(), 0, 'gray', 'Espectro')
def ej4_7(): img = cv.imread("../img/HeadCT_degradada.tif", cv.IMREAD_GRAYSCALE) img_fft = fun.spectrum(img) img_fft = np.fft.ifftshift(img_fft) # Cantidad de filas y columnas de la imagen rows, cols = img.shape # En este caso el filtro se construye a mano, y se anulan los puntos blancos # del espectro que no tienen nada que ver con su entorno filtro = np.ones((rows, cols)) filtro[40, 40] = 0 filtro[20, 0] = 0 filtro[0, 10] = 0 filtro[492, 0] = 0 mascara = filtro * img_fft # Aplico el filtro filtrada = fun.filterImg(img, filtro) # Graficar func.graficar(img, 255, 0, 'gray', 'Imagen original') func.graficar(img_fft, 1, 0, 'gray', 'Espectro') func.graficar(filtrada, 255, 0, 'gray', 'filtrada') func.graficar(mascara, 1, 0, 'gray', 'mascara')
def ej4_3_rechazabanda(): img = cv.imread("../img/img_degradada.tif", cv.IMREAD_GRAYSCALE) rows, cols = img.shape # Espectro de la imagen # Shiftear en false para poder determinar el punto del espectro a anular img_fft = fun.spectrum(img, shiftear=False) # Parametros de los filtros Butterworth (dentro del pasabanda) cortes = [.04, .043] orden = 100 # Obtengo el filtro y filtro la imagen filtro = fun.filtroRechazaBanda(rows, cols, cortes, orden) img_fil = fun.filterImg(img, filtro) # Calcular el espectro para graficarlo img_fil_s = fun.spectrum(img_fil, shiftear=False) # Graficar func.graficar(img, 255, 0, 'gray', 'Imagen original') func.graficar(img_fft, 1, 0, 'gray', 'Espectro de la imagen original') func.graficar(filtro, 1, 0, 'gray', 'Filtro notch') func.graficar(img_fil, 255, 0, 'gray', 'Imagen filtrada') func.graficar(img_fil_s, 1, 0, 'gray', 'Espectro de la imagen filtrada')
def ej2_1(): img = cv.imread("../img/huang1.jpg", cv.IMREAD_GRAYSCALE) rows, cols = img.shape # Filtros pasa altos: Para que funcionen, comentar los pasa bajos. # imgf1 = fun.filterImg(img, 1-fun.filterIdeal(rows,cols,0.08)) # spec1 = fun.spectrum(fun.filterImg(img,fun.filterIdeal(rows,cols,0.15))) # # imgf2 = fun.filterImg(img, 1-fun.filterIdeal(rows,cols,0.15)) # spec2 = fun.spectrum(fun.filterImg(img, fun.filterIdeal(rows,cols,0.15))) # # imgf3 = fun.filterImg(img, 1-fun.filterIdeal(rows,cols,0.6)) # spec3 = fun.spectrum(fun.filterImg(img, fun.filterIdeal(rows,cols,0.6))) # Filtros pasa bajos imgf1 = fun.filterImg(img, fun.filterIdeal(rows,cols,0.08)) spec1 = fun.spectrum(fun.filterImg(img,fun.filterIdeal(rows,cols,0.15))) imgf2 = fun.filterImg(img, fun.filterIdeal(rows,cols,0.15)) spec2 = fun.spectrum(fun.filterImg(img, fun.filterIdeal(rows,cols,0.15))) imgf3 = fun.filterImg(img, fun.filterIdeal(rows,cols,0.6)) spec3 = fun.spectrum(fun.filterImg(img, fun.filterIdeal(rows,cols,0.6))) func.graficar(imgf1, imgf1.max(), 0, 'gray', 'Imagen para 0.1') func.graficar(spec1, (spec1).max(), 0, 'gray', 'Espectro para 0.08') func.graficar(imgf2, imgf2.max(), 0, 'gray', 'Imagen para 0.15') func.graficar(spec2, (spec2).max(), 0, 'gray', 'Espectro para 0.15') func.graficar(imgf3, imgf3.max(), 0, 'gray', 'Imagen para 0.6') func.graficar(spec3, (spec3).max(), 0, 'gray', 'Espectro para 6')
def ej4_4(): img = cv.imread("../img/img_degradada.tif", cv.IMREAD_GRAYSCALE) rows, cols = img.shape # Espectro de la imagen # Shiftear en false para poder determinar el punto del espectro a anular img_fft = fun.spectrum(img, shiftear=False) # Elegir puntos a filtrar con clic punto1 = func.elegir_punto(img_fft) fNotch1 = fun.filtroNotch(rows, cols, punto1, pixel=True) img_fil = fun.filterImg(img, fNotch1) # Calcular el espectro para graficarlo img_fil_s = fun.spectrum(img_fil, shiftear=False) # Graficar func.graficar(img, 255, 0, 'gray', 'Imagen original') func.graficar(img_fft, 1, 0, 'gray', 'Espectro de la imagen original') func.graficar(img_fil, 255, 0, 'gray', 'Imagen filtrada') func.graficar(img_fil_s, 1, 0, 'gray', 'Espectro de la imagen filtrada')
def ej4(): #Filtrado Homomorfico img_o = cv.imread("../img/reunion.tif", cv.IMREAD_GRAYSCALE) img = np.array(img_o, dtype=np.float32) rows, cols = img.shape # Logaritmo de la imagen original img_log = np.log(1+img) # Variables del filtro corte = 0.01 order = 5 gL = 0.5 gH = 0.6 # Filtro que voy a usar en frecuencia (basado en el gaussiano) filtro = func.filterHomomorfico(rows, cols, corte, gL, gH, order) # Filtro la imagen imgFiltrada = fun.filterImg(img_log, filtro) # Saco el logaritmo imgFinal = np.exp(imgFiltrada - imgFiltrada.min()) imgFinal = 255 * imgFinal/imgFinal.max() # La imagen se abrió como flotante para poder manipular sus números con mayor precisión # Luego de operar, se debe volver a 8 bits entero sin signo . img = np.array(img, dtype=np.uint8) imgFinal = np.array(imgFinal, dtype=np.uint8) # Ecualizacion (Ver si mejora) imgeq = cv.equalizeHist(imgFinal) # Graficar func.graficar(img, 255, 0, 'gray', 'Imagen original') func.graficar(imgFinal, 255, 0, 'gray', 'Imagen Final') func.graficar(imgeq, 255, 0, 'gray', 'Imagen Final ecualizada')