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_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_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 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_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 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 ej5(): img = cv.imread("../img/huang3_movida.tif", cv.IMREAD_GRAYSCALE) rows, cols = img.shape img_fft = fun.spectrum(img) img_fft = np.fft.ifftshift(img_fft) func.graficar(img, 255, 0, 'gray', 'imagen original') func.graficar(img_fft, 1, 0, 'gray', 'Espectro')
def ej1_4(): img1 = cv.imread("../img/imagenB.tif", cv.IMREAD_GRAYSCALE) img2 = cv.imread("../img/cameraman.tif", cv.IMREAD_GRAYSCALE) img3 = cv.imread("../img/hubble.tif", cv.IMREAD_GRAYSCALE) img4 = cv.imread("../img/chairs.jpg", cv.IMREAD_GRAYSCALE) sp1 = fun.spectrum(img1) sp2 = fun.spectrum(img2) sp3 = fun.spectrum(img3) sp4 = fun.spectrum(img4) func.graficar(img1, img1.max(), 0, 'gray', 'Original: imagenB.tif') func.graficar(sp1, sp1.max(), 0, 'gray', 'FFT: imagenB.tif') func.graficar(img2, img2.max(), 0, 'gray', 'Original: cameraman.tif') func.graficar(sp2, sp2.max(), 0, 'gray', 'FFT: cameraman.tif') func.graficar(img3, img3.max(), 0, 'gray', 'Original: hubble.tif') func.graficar(sp3, sp3.max(), 0, 'gray', 'FFT: hubble.tif') func.graficar(img4, img4.max(), 0, 'gray', 'Original: chairs.jpg') func.graficar(sp4, sp4.max(), 0, 'gray', 'FFT: chairs.jpg')
def ej1_3(): cols = 512 rows = 512 linea_horizontal = np.zeros([512, 512], dtype=np.uint8) linea_horizontal[256, 0:512] = 255 M = cv.getRotationMatrix2D((cols / 2, rows / 2), 20, 1) linea_horizontal_r = cv.warpAffine(linea_horizontal, M, (cols, rows)) lh_rec = linea_horizontal[128:382,128:382] lh_rec_r = linea_horizontal_r[128:382,128:382] func.graficar(lh_rec, 255, 0, 'gray', 'Linea Horizontal Recortada') func.graficar(lh_rec_r, 255, 0, 'gray', 'Linea Horizontal Recortada Rotada') lh_fft = fun.spectrum(lh_rec) lh_r_fft = fun.spectrum(lh_rec_r) func.graficar(lh_fft, lh_fft.max(), 0, 'gray', 'Linea Horizontal Transformada') func.graficar(lh_r_fft, lh_r_fft.max(), 0, 'gray', 'Linea Horizontal Transformada')
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 ej1_1y1_2(): linea_vertical = np.zeros([512,512],dtype=np.uint8) linea_vertical[0:512,256] = 255 linea_horizontal = np.zeros([512,512],dtype=np.uint8) linea_horizontal[256, 0:512] = 255 circulo = np.zeros([512,512],dtype=np.uint8) cv.circle(circulo, (256,256), 50, 255, -1) cv.circle(circulo, (256,256), 49, 0, -1) rectangulo = np.zeros([512,512],dtype=np.uint8) cv.rectangle(rectangulo, (156,206), (356, 306), 255,3) rectanguloC = np.zeros([512, 512], dtype=np.uint8) cv.rectangle(rectanguloC, (100, 206), (300, 306), 255, 3) cuadrado = np.zeros([512,512],dtype=np.uint8) cv.rectangle(cuadrado, (206,206), (306, 306), 255,3) lv_fft = fun.spectrum(linea_vertical) lh_fft = fun.spectrum(linea_horizontal) cr_fft = fun.spectrum(circulo) rc_fft = fun.spectrum(rectangulo) rc_fft2 = fun.spectrum(rectanguloC) cd_fft = fun.spectrum(cuadrado) func.graficar(linea_vertical, 255, 0, 'gray', 'Linea Vertical') func.graficar(lv_fft, lv_fft.max(), 0, 'gray', 'Linea Vertical Transformada') func.graficar(linea_horizontal, 255, 0, 'gray', 'Linea Horizontal') func.graficar(lh_fft, lh_fft.max(), 0, 'gray', 'Linea Horizontal Transformada') func.graficar(circulo, 255, 0, 'gray', 'Circulo') func.graficar(cr_fft, cr_fft.max(), 0, 'gray', 'Circulo Transformada') func.graficar(rectangulo, 255, 0, 'gray', 'Rectangulo') func.graficar(rc_fft, rc_fft.max(), 0, 'gray', 'Rectangulo Transformada') func.graficar(rectanguloC, 255, 0, 'gray', 'Rectangulo corrido') func.graficar(rc_fft2, rc_fft2.max(), 0, 'gray', 'Rectangulo Transformada Corrida') func.graficar(cuadrado, 255, 0, 'gray', 'Cuadrado') func.graficar(cd_fft, cd_fft.max(), 0, 'gray', 'Cuadrado Transformada')