Commit f906a73c authored by Jonatan Vignatti's avatar Jonatan Vignatti
Browse files

tarea_3

parent 42c3d8d4
This source diff could not be displayed because it is too large. You can view the blob instead.
This source diff could not be displayed because it is too large. You can view the blob instead.
## Fotografía del cielo nocturno de Zapatoca, Santander (Colombia)
### Primer punto
Se intentará aproximar la resolución espacial de una noche de observación de la noche estrellada de la ciudad de Zapatoca en
Colombia.
El primer punto fue descargar la imagen desde la carpeta data, pero de forma matricial con ayuda de numpy (np), después la idea era usar solo np para poder lograr una imagen en escala de grises, mediante la manipulación de las matrices.
Los intentos fueron por horas porque, realmente se intentaba hacer una función con numpy, pero he practicado más la librería de pandas desde antes, y lo de numpy los arreglos, ahora con este curso es donde practiqué más, pero cuando las volvía a convertir a imagen las matrices operadas, me salían imágenes de una dimensión y bien delgadas.
Después de gastar tiempo sin éxito, resolví hacerlo con cualquier función que lo hace en un paso, como se ve aquí
`import numpy as np
import matplotlib.image as img
from scipy import misc
chaska = img.imread('/home/vignattij/ejercicios-05-datos/ejercicios-clase-05-datos/data/zapatocaImage.jpeg')
arr_chaska = np.array(chaska)
print(arr_chaska)`
out put
´[[[25 6 10]
[25 6 10]
[25 6 10]
...
[31 15 18]
[36 20 23]
[39 23 26]]
[[26 7 11]
[26 7 11]
[26 7 11]
...
[32 16 19]
[36 20 21]
[38 22 23]]
[[27 8 12]
[27 8 12]
[27 8 12]
...
[33 17 20]
[36 20 21]
[37 21 22]]
...
[[24 8 21]
[23 7 20]
[23 7 20]
...
[10 3 10]
[12 5 12]
[14 7 14]]
[[22 6 19]
[23 7 20]
[24 8 21]
...
[12 5 12]
[12 5 12]
[12 5 13]]´
`plt.imshow(chaska);`
(Aquí va la imagen estrellada).
Con este código se pasó a escala de grises, esto reduce en una dimensión las matrices. Usé la palabra "chaska" que significa estrella en quechua, muy conveniente para este análisis.
`import imageio
chaska_bw = imageio.imread('/home/vignattij/ejercicios-05-datos/ejercicios-clase-05-datos/data/zapatocaImage.jpeg', pilmode="L")
chaska_bw_arr = np.array(chaska_bw)
plt.imshow(chaska_bw,cmap='gray')
plt.show()`
### Procesar la imagen
Ahora nos vamos al segundo punto que consistía en tomar una estrella y analizarla, considerando que hay más estrellas en el "cielo" nocturno que arena en el mar, fue la parte, diré más interesante, claro que para salir airoso de este paso era necesario usar algún software como photoshop para poder cuadrar bien las coordenadas de las estrellas que eran puntitos blancos en la foto, acaso a veces eran dos o más, bueno debo decir que alcance a analizar una estrella, porque consideré que analizando una estrella podría automatizar las demás.
El código utlizado es este:
´def trim(array, x, y, width, height):
return array[y:y + height, x:x+width]´
´im_trim2 = trim(chaska_bw_arr, 196, 68, 30, 20)
print(im_trim2.shape)´
´Image.fromarray(im_trim2).save('/home/vignattij/ejercicios-05-datos/ejercicios-clase-05-datos/data /zapatocaImage_trim2.jpeg')´
´chaska_2 = imageio.imread('/home/vignattij/ejercicios-05-datos/ejercicios-clase-05-datos/data/zapatocaImage_trim2.jpeg', pilmode="L")
plt.imshow(chaska_2,cmap='gray')´
Cada vez que llamo a la imagen, sí, es engorroso estar copiando todo el path, pero salía errores cuando lo quería hacer directo, siendo que estaba ubicado dentro del folder correcto.
Los comentarios están mejor en el archivo del .ipynb
el output es una imagen de la estrella que esta (x = 196, y = 68) de acuerdo al eje coordenado que da python en el output anterior.
Vi las dimensiones por si acaso,
´chaska_bw_arr.shape´
output
(789, 1184) dos dimensiones por estar en escala de grises (solo blanco y negro)
La idea al inicio, considerando (Red,Green,Black) generar el blanco y después suarlo con el negro para tener gris, de hecho hay una formula bien conocida que también se podría usar dirtectamente a mano con las matrices de RGB para poder lograr la escala de grises.
De hecho cuando se pone
´chaska_2 = imageio.imread('/home/vignattij/ejercicios-05-datos/ejercicios-clase-05-datos/data/zapatocaImage_trim2.jpeg', pilmode="L")´
Esa "L" del final corresponde a las formula L = R*0.3+G*0.59+B*0.11 que da como resutlado la escala de grises, y es lo qye hace el imageo.imread a parte de leer la iamgen.
### Punto tres, minimos cuadrados.
Se define la función gaussiana2D como en clase.
`def gauss2D(x, y, a=1, b=0, c=1, x0=0, y0=0):
exponente = -((x-x0)**2 + (y-y0)**2) / (2*c**2)
z = a * np.exp(exponente) + b
return z`
Se usa los números en arange() hasta 30 y 20 porque son las dimensiones del recorte de la primera estrella, estoy construyendo la función teórica que se comparará con la obervacional.
`x = np.arange(0,30,0.1)
y = np.arange(0,20,0.1)
xx, yy = np.meshgrid(x, y)
y.shape´
´a = 2
b = 3
c = 0.5´
`zz = gauss2D(xx,yy,a,b,c,15,10)
plt.imshow(zz, cmap='gray')
plt.colorbar()`
El output muestra la imagen que se ve mejor en el código. No pude incluir las imágenes aquí.
Visualizamos mejor la imagen en negro haciendo una en 3D
´fig = plt.figure()
ax = fig.gca(projection='3d')
ax.plot_surface(xx,yy,zz,rstride=3,cstride=3,linewidth=1)´
Aquí defino las coordenadas observacionales de la estrella para poder obtener una distribución en imagen de una gaussiana en 2D
´y_obs = chaska_bw_arr.sum(axis=1);
print(y_obs.sum());´
lo mismo fue para la coordenada x, siendo que son las que importan y la z que depende de ellas cambiará cuando la X e Y cambien.
Aquí finalmente se hace el plot de la gaussiana 2D. Observacional (de la estrella recortada)
´fig1 = plt.figure()
ax = fig1.gca(projection='3d')
ax.plot_surface(xx-x_obs.sum(),yy-y_obs.sum(),zz,rstride=3,cstride=3,linewidth=1)´
No pude lograr plotear ambas en un mismo plot.
Entiendo que existen mejores métodos dedicados a la astronomía que hacen este trabajo más fácil, pero se entiende el objetivo que desde el inicio era practicar.
Espero que se haya entendido lo poco que se hizo, sirvió mucho el curso complementó basante, hubiera querido dedicarle más tiempo para lograr al menos la mitad de lo que se pedía. En casa es un poco difícil, por eso es que aproveché los videos al máximo.
Buen curso, gracias profesor, buena didáctica, domina el tema y le gusta y eso es bueno, porque contagia.
Y Disculpe si se decepciona por no lograr el cometido de analizar el espectro de luminosidad de las estrellas en la foto.
Ahora sé que si se pueden analizar imágenes con python, incluso sin usar funciones dedicadas para la tarea.
Nos vemos en la tarde!
\ No newline at end of file
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment