Пример #1
0
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')
Пример #2
0
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')
Пример #3
0
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')
Пример #4
0
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')
Пример #5
0
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')
Пример #6
0
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')
Пример #7
0
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')
Пример #8
0
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')
Пример #9
0
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')