Hola, buenas:
Para los que tienen conocimiento sobre el procesamiento de imagenes en python
El problema es que no puedo lograr que "img_back" se guarde en una ruta absoluta, es decir, similar a esto, por ejemplo:
- imagen_filtro_mediana.save('/home/gerardo/Documentos/python/lena-filtro-mediana.jpg')
Dicho en otras palabras, tengo que lograr que "img_back" se guarde en una ruta absoluta.
Aclaracion:
6° La 5 imagen es de color gris, similar a las anteriores. Ustedes pueden ver la 5 imagen agregando la linea de codigo:
Saludos
Gracias
Ahora le paso el codigo:
# -*- coding: utf-8 -*-
#!/usr/bin/env python
import numpy as np
from numpy import array,uint8,uint16,uint32,float,int8,int16,int32
import cv2
from matplotlib import pyplot as plt
#from cv2 import *
from PIL import Image
import time
from scipy import ndimage
import os
from scipy.misc import imshow,imsave
divline = "="*80
print(divline)
print("COMPRESION TRANSFORMADA DE FOURIER")
print(divline)
#-----------------------------------------SE MUESTRA LA IMAGEN ORIGINAL A COLOR--------------------------------------------
print(divline)
#se muestra (se abre la imagen) la imagen de entrada
print("SE MUESTRA LA IMAGEN ORIGINAL")
imagen_original = Image.open('/home/gerardo/Documentos/python/imagenes-jpg/lena.jpg')
#se muestra la imagen
imagen_original.show()
print(divline)
time.sleep(3)
#aqui es donde empeiza a correr el proceso de ejecucion
#----------------------------------------------SE CONVIERTE LA IMAGEN A ESCALA DE GRISES-----------------------------
print("SE MUESTRA LA IMAGEN EN ESCALA DE GRISES")
def cargar(imagen):
im = Image.open(imagen)
ancho, altura = im.size
pixels = im.load()
return ancho,altura,pixels,im
#######################proceso de transformar la imagen a gris#############################################################
#######################################################################
def escala(imagen):
ancho,altura,pixels,im = cargar(imagen)
for i in range(ancho):
for j in range(altura):
(a,b,c) = pixels[i,j]
suma = a+b+c
prom = int(suma/3)
a = prom ##igualamos
b = prom ##igualamos
c = prom ##igualamos
pixels[i,j] = (a,b,c) ##igualamos
im.save("/home/gerardo/Documentos/python/escala-gris.jpg") ##guardamos la imagen nueva
return
escala( '/home/gerardo/Documentos/python/imagenes-jpg/lena.jpg')
#se abre la imagen
imagen_gris = Image.open('/home/gerardo/Documentos/python/escala-gris.jpg')
#se muestra la imagen
imagen_gris.show()
#------------------------------------SE APLICA LA TRANSFORMADA DE FOURIER-----------------------------------------------------------------
print(divline)
print("SE APLICA LA TRANSFORMADA DE FOURIER")
#print("SE APLICA LA TRANSFORMADA DE FOURIER")
#aqui te lee la imagen de entrada utilizando OPENCV
imagen_entrada = cv2.imread('/home/gerardo/Documentos/python/escala-gris.jpg', 0)
#aplicamos un rango de presicion a la imagen, segun la siguiente fuente: Solo flotador de precisión: bit de signo, exponente de 8 bits, 23 bits de mantisa
img_float32 = np.float32(imagen_entrada) #float 32: Solo flotador de precisión: bit de signo, exponente de 8 bits, 23 bits de mantisa
#aplicamos la transformada de fourier
dft = cv2.dft(np.float32(img_float32),flags = cv2.DFT_COMPLEX_OUTPUT) #se aplica la transformada rapida de fourier
dft_shift = np.fft.fftshift(dft) #Cambie la componente de frecuencia cero al centro del espectro. Se obtuvo de la siguiente fuente: http://docs.scipy.org/doc/numpy/reference/generated/numpy.fft.fftshift.html
magnitude_spectrum = 20*np.log(cv2.magnitude(dft_shift[:,:,0],dft_shift[:,:,1]))
#Se transforma en escala de grises la magnitud del espectro que paso por DFT
imagen_fourier = Image.fromarray(array(magnitude_spectrum,dtype=uint8))
#se muestra la imagen
imagen_fourier.show()
#se guarda la imagen
imagen_fourier.save('/home/gerardo/Documentos/python/lena-gris-transformada-fourier.jpg')
#---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
#----------------SE LE APLICA EL FILTRO DE LA MEDIANA---------------------------------------------------------------------------------------------------------
print(divline)
print("SE LE APLICA EL FILTRO DE LA MEDIANA")
#aplicando filtro de la media
#print("SE LE APLICA EL FILTRO DE LA MEDIANA")
#tomando como fuente de filtros: http://pybonacci.github.io/scipy-lecture-notes-ES/advanced/image_processing/index.html#filtrado-de-imagenes
med_denoised = ndimage.median_filter(img_float32, 3)
imagen_filtro_mediana = Image.fromarray(array(med_denoised,dtype=uint8))
#se muestra la imagen
imagen_filtro_mediana.show()
#se guarda la imagen
imagen_filtro_mediana.save('/home/gerardo/Documentos/python/lena-filtro-mediana.jpg')
#----------------------SE LE APLICA LA TRANSFORMADA INVERSA-----------------------------------------------------------------------------
print(divline)
print("SE LE APLICA LA TRANSFORMADA INVERSA")
#print("SE LE APLICA LA TRANSFORMADA INVERSA")
#aplicar la transformada inversa de Fourier, creando primero una mascara
rows, cols = imagen_entrada.shape
#--------------------------------------------------------------------
nrows = cv2.getOptimalDFTSize(rows)
ncols = cv2.getOptimalDFTSize(cols)
#----------------------------------------------------------------------------
crow,ccol = nrows/2 , ncols/2
#---------------------------------------------------------------------------
nimg = np.zeros((nrows,ncols))
nimg[:rows,:cols] = imagen_entrada
# create a mask first, center square is 1, remaining all zeros
mask = np.zeros((nrows,ncols,2),np.uint8)
mask[crow-30:crow+30, ccol-30:ccol+30] = 1
# apply mask and inverse DFT
fshift = dft_shift*mask
f_ishift = np.fft.ifftshift(fshift)
img_back = cv2.idft (f_ishift)
img_back = cv2.magnitude (img_back [:,:, 0], img_back [:,:, 1])