# Ejercicios para practicar numpy y optimización con scipy
## Resolución espacial
En observaciones astronómicas e imágenes en general, llamamos resolución espacial
a la distancia angular minima a la que pueden estar dos fuentes puntuales de luz
y aun poder ser reconocidas como objetos individuales.
En el caso de la astronomía, este efecto tiene que ver con la dispersión de la
luz al atravezar la atmósfera, la cual hace que una estrella, que debería
en principio aparecer como una fuente puntual (pues las estrellas están muy
lejos), aparezca en cambio como una mancha. Así, si dos estrellas están
demasiado cerca sus *manchas* se superpondrán hasta el punto en que sea imposible
distinguirlas como fuentes individuales [(Ver imágenes en este link)](http://www.carlostapia.es/fisica/resolucion_criterios_practica.html)
Para modelar este efecto, típicamente consideramos la acción de la atmósfera
como la convolución de la imagen "perfecta" (como se vería desde el espacio)
con un kernel gaussiano. El ancho de esa función gaussiana 2D caracteriza
las condiciones de observación, varía con las condiciones climáticas y para
cada sitio de la Tierra.
La resolución espacial normalmente se toma como el [FWHM](https://es.wikipedia.org/wiki/Anchura_a_media_altura#:~:text=La%20Anchura%20a%20media%20altura,mitad%20de%20su%20valor%20m%C3%A1ximo.)
de la gaussiana caracteristica registrada durante una observación. Es decir,
si dos estrellas están a una distancia aparente en el cielo menor que el
FWHM del efecto atmosférico, la luz de ambas fuentes se mezclará después de
la convolución hasta el punto de impedir reconocerlas de modo individual.
Además, la atmósfera puede interactuar de maneras distintas con la luz de
distintas longitudes de onda, de manera que el ancho de la gaussiana puede
ser distinto para observaciones con diferentes filtros.
El objetivo de esta tarea es medir de forma aproximada la resolución
espacial en una noche de observación en Zapatoca, Santander (Colombia), a partir
de una foto del cielo estrellado.
## Ejercicio: Pasos
- Leer la imagen almacenada en la carpeta `data` como un array de numpy. Ese
array estará compuesto de 3 matrices, una tras otra, correspondiente a los
canales *R*,*G*,*B*
- Combinar los 3 array para generar una versión blanco y negro de la imagen,
en la cual ella consiste de una sola matriz 2D. Puede usar su intuición y prueba
y error para combinar las 3 imágenes, explicando el procedimiento elegido. Esto
será más interesante que usar un comando desconocido de una biblioteca sofisticada
que haga las cosas como una caja negra (**_queremos practicar numpy_**)
- Recorte un sector de la imagen conteniendo una estrella individual y ajuste una
gaussiana 2D simétrica a la imagen de la estrella por mínimos cuadrados, incluyendo
una constante aditiva (el cielo "vacio" brilla)
- Repita este procedimiento para varias estrellas y presente alguna estadística
sobre las medidas de la FWHM de las distintas gaussianas: histograma, media, mediana,
desviación estándar
- Repita el mismo ejercicio sobre cada una de las bandas *R*,*G*,*B* separadamente
y comente si observa diferencias en los resultados
## Instrucciones generales
- La entrega debe ser un archivo de markdown llamado `Entrega.md` incluyendo todo:
Texto con las
explicaciones, bloques de código, ecuaciones, gráficos.
- También debe haber un notebook (`Entrega.ipynb`)
con todos los códigos y resultados, por si deseo
revisar la ejecución de alguna parte del código, pero en principio el archivo de
markdown debería ser autocontenido, como su reporte final.
- No olvide identificarse y dar un contexto amigable del contexto a resolver,
así como explicar todos sus procedimientos y comentar los códigos apropiadamente
- Fraccione el código en celdas de acuerdo a la lógica de la solución
- Exploraciones complementarias al ejercicio serán muy bien recibidas
**El objetivo es que si su instructor desea correr el código pueda hacerlo,
para eso va el notebook, pero que esto no sea necesario para evaluar la tarea,
para eso va el markdown con todas las explicaciones, cógdigos, ejemplos y
resultados**
Ejercicios para practicar numpy y optimización con scipy