Repository navigation
Releases
AstroLoom v0.14.3
Añadido
-
Compositor de Pila Multicapa Coronal en el Revelador (
gui/tab_eclipse.py,gui/dialog_coronal_stack.py,gui/tab_developer.py):-
Transferencia Directa de Filtros Eclipses
$\to$ Revelador: Nuevo flujo y botón«Transferir Pila Coronal al Revelador»en la pestaña de Eclipses, permitiendo enviar la composición completa de filtros astronómicos (NRGF, SWAP, Larson-Sekanina, Steerable G2, NAFE, WOW Bilateral y MGN Multiescala) como capas ráster independientes al Revelador de AstroLoom sin requerir exportaciones intermedias ni software externo. -
Diálogo Interactivo de Selección de Pila (
CoronalStackDialog): Ventana de configuración previa que permite seleccionar qué filtros computar, asignando automáticamente modos de fusión y opacidades iniciales óptimas en orden físico de apilado (NRGF en Trama al 15%, SWAP en Normal al 25%, Larson-Sekanina en Luz Suave al 20%, Steerable G2 en Luz Suave al 20%, NAFE en Luz Suave al 20%, WOW en Luminosidad al 25% y MGN en Luminosidad al 40%). -
Cálculo Asíncrono no Bloqueante (
EclipseCoronalStackWorker): Generación secuencial de todos los filtros seleccionados en un hiloQThreaden segundo plano con barra de progreso y cancelación segura sin congelar la interfaz.
-
Transferencia Directa de Filtros Eclipses
-
Motor de Capas Ráster Genéricas y Modos de Fusión (
core/mask_layers.py,gui/widgets/mask_layers_widget.py,gui/developer/pipeline.py):-
Nuevo Tipo de Capa Ráster (
MASK_TYPE_IMAGE_RASTER): Extensión del motor de capas del Revelador para alojar arrays de imagen ráster arbitrarios (image_dataen Float32), permitiendo componer múltiples imágenes y filtros sobre el lienzo base. -
Arsenal Profesional de Modos de Fusión (Blend Modes): Soporte no destructivo para
Normal,Trama (Screen),Luminosidad (Luminosity),Luz Suave (Soft Light),Superponer (Overlay)yMultiplicar (Multiply). -
Integración de Máscaras y Ajustes por Capa: Las capas ráster incorporan soporte completo de máscara espacial de pincel (
brush_mask, pintar y borrar para dosificar el filtro coronal localmente o excluir el limbo lunar), control de opacidad (0–100%), deslizadores de ajuste tonal (exposición, contraste, sombras, luces, balance de blancos) y curva tonal interactiva spline LUT dedicada. -
Interfaz Ergonómica en el Gestor de Capas: Identidad visual diferenciada con distintivo y bordes en tono ámbar/dorado (
#ff9800) para capas ráster, selector desplegable de modo de fusión reactivo y generación automática de miniaturas fotorrealistas.
-
Nuevo Tipo de Capa Ráster (
-
Aceleración en Rust Rayon SIMD de Modos de Fusión (
astroloom_rs/src/blend.rs,astroloom_rs/src/lib.rs):- Kernels nativos multihilo con Rayon (
apply_blend_mode_rs) que computan en paralelo las ecuaciones de fusión de píxeles (Normal, Screen, Luminosity con ponderación CIE Rec.709 y corrección de saturación, Soft Light de Pegtop, Overlay y Multiply) con modulación por opacidad y máscara espacial. - Rendimiento superior a 60 FPS en composiciones multicapa 4K y 60 MP, con respaldo (fallback) transparente y robusto en NumPy/OpenCV en entornos sin módulo compilado.
- Kernels nativos multihilo con Rayon (
-
Persistencia Completa de Capas Ráster en Proyectos
.devloom(core/project_io.py):- Empaquetado multihilo de datos de imagen ráster en formato PNG de 16 bits sin pérdida (
rasters/raster_{idx}.png) dentro del archivo ZIP del proyecto, garantizando la preservación íntegra de la composición coronal al guardar (Ctrl+S) y reabrir proyectos.
- Empaquetado multihilo de datos de imagen ráster en formato PNG de 16 bits sin pérdida (
Corregido
- Estabilidad y Resiliencia en Filtro SWAP Polar (
core/eclipse.py):- Pre-inicialización de búferes continuos de destino (
dst_polarydst_cart) con saneamiento de memorianp.nan_to_num(..., copy=False)encv2.warpPolar, erradicando lecturas de basura de memoria, valoresNaNy posibles cuelgues en versiones recientes de OpenCV (5.0+).
- Pre-inicialización de búferes continuos de destino (
AstroLoom v0.14.2
Añadido
-
Arsenal Completo de Filtros Coronales Científicos para Eclipses (AEL v1.3.2 – v1.4.2) (
core/eclipse.py,gui/tab_eclipse.py):-
Filtro Steerable G2 de Segunda Derivada Orientable (
apply_steerable_g2,accumulate_steerable_g2_rs): Basado en Freeman & Adelson (1991) y validado sobre el eclipse de 2026. Calcula el tensor de estructura local suavizado para alinear analíticamente la respuesta direccional a lo largo del ángulo local de los arcos magnéticos y bucles cerrados cerca del limbo, logrando el mismo nivel de microcontraste que los filtros tangenciales pero con más del 50% de reducción de grano aleatorio. -
Gradiente Rotacional de Larson–Sekanina con Protección Cromática (
apply_larson_sekanina,compute_larson_sekanina_rs): Implementación de la formulación astrofísica (Larson & Sekanina 1984) con rotación continua por interpolación cúbica de Keys ($a = -0.5$ ) libre de artefactos periódicos. Incorpora detección y enmascaramiento automático de excesos de emisión cromosférica$H\alpha$ (compute_red_excess_mask_rs, ratio$R/G > 1.12 \times \text{mediana}$ ), erradicando las réplicas oscuras "fantasma" a$\pm\Delta\theta$ generadas por protuberancias solares intensas. -
Filtro SWAP / Misión PROBA2 de la ESA (
apply_swap_filter,polar_circular_median_filter_rs): Adaptación del algoritmo desarrollado para el telescopio espacial SWAP (Seaton et al. 2023). Realiza un filtrado de mediana circular polar en ventana angular de$\pm 15^\circ$ , compresión radial suave$I / (F + t_0)^{c_0}$ ($c_0 = 0.75$ ) y normalización por raíz cuarta en$[0.5, 2.0]$ . Genera una imagen autónoma de rango dinámico homogéneo que exhibe simultáneamente bucles magnéticos interiores y streamers gigantes exteriores sin necesidad de capas adicionales. -
Filtro WOW Bilateral Guiado Edge-Aware (
apply_wow_edge_aware,paired_b3_step_rs,b3_normalized_rs): Descomposición multiescala à-trous con spline B3 normalizado, ponderación de rango con pares simétricos y cálculo guiado de pesos (AEL 1.3.5 / Issue #4), erradicando la inversión de signo en filamentos tenues y halos en el limbo lunar, acelerado 819× en Rust. -
Filtro NAFE (Noise Adaptive Fuzzy Equalization) (
apply_nafe,nafe_neighbourhood): Ecualización difusa según la formulación de Miloslav Druckmüller (2013) con vecindario de 129 px compuesto por 12 gaussianas diádicas ($\sigma_m = 2^{m/2}$ ), aceleración mediante convoluciones FFT bidimensionales y compuerta adaptativa de ruido en el eje de intensidad ($12\times$ el ruido medido en corona externa). -
Normalización de Detalle por Anillos Concéntricos (
display_detail_rings,display_detail_rings_rs): Mapeo de microcontraste anillo por anillo en pasos de 2 px radiales en torno al centro solar (mediana y$1.4826 \cdot \text{MAD}$ ) con suavizado continuo 1D e interpolación sigmoidal$\tanh$ . Previene la saturación en blanco o empaste en negro en el limbo solar brillante preservando texturas en toda la corona. -
Encadenamiento Angular de Anillos Parciales en NRGF (
partial_annuli='chain'): Evaluación de perfiles radiales restringida a sectores angulares mutuamente compartidos por anillos contiguos, eliminando saltos de densidad en tomas con Luna descentrada o recortada por el borde del sensor. -
Fusión HDR con Traspaso Gradual de Exposición (
gradual_handover=True): Modulación de los pesos de saturación proporcionalmente a la relación de tiempos$t_i / t_{i-1}$ , mitigando la duplicación abrupta de varianza de ruido local y eliminando al 100% los falsos contornos o anillos anulares a lo largo de las isófotas de bracketing. -
Exportación Nativa a Photoshop PSD Multicapa de 16 Bits (
export_coronal_layers_psd): Generación automática de proyectos PSD de 16 bits por canal listos para retoque fino en Photoshop, GIMP o PixInsight, estructurados en capas estandarizadas (Fondo HDR Base,01 NRGF,02 WOW Edge-Aware,09 NAFE,11 Steerable G2,15 Larson-Sekanina,16 SWAP) con sus correspondientes modos de fusión (Normal,Overlay).
-
Filtro Steerable G2 de Segunda Derivada Orientable (
-
Aceleración en Rust Rayon de Filtros Coronales (
astroloom_rs/src/eclipse.rs,astroloom_rs/src/lib.rs):- Kernels nativos de alta velocidad añadidos al módulo de extensión:
-
display_detail_rings_rs: Bins anulares y cálculo multihilo de estadísticas radiales. -
accumulate_steerable_g2_rs: Acumulación analítica del tensor de estructura y segundas derivadas. -
compute_larson_sekanina_rs: Convolución e interpolación cúbica de Keys ($a = -0.5$ ) en paralelo. -
polar_circular_median_filter_rs: Muestreo polar y mediana circular móvil optimizada. -
compute_red_excess_mask_rs: Detección en paralelo de excesos cromáticos de protuberancias solares. -
paired_b3_step_rsyb3_normalized_rs: Pasos convolucionales à-trous multiescala en memoria continua.
-
- Kernels nativos de alta velocidad añadidos al módulo de extensión:
-
Evolución Ergonómica de la Pestaña de Eclipses (
gui/tab_eclipse.py):- Desplegable de algoritmos reactivo que conmuta dinámicamente los controles pertinentes: deslizador de intensidad para Steerable G2, ángulo
$\Delta\theta$ y protección de protuberancias para Larson-Sekanina, ventana angular y$c_0$ para SWAP,$\sigma$ y modo Overlay para NAFE, número de escalas para WOW, y opciones avanzadas para NRGF. - Casillas de verificación para activar/desactivar el Traspaso Gradual HDR y la Normalización de Detalle por Anillos.
- Botón y flujo de exportación directa a PSD Multicapa con diálogo interactivo y ejecución asíncrona mediante
EclipseWorker.
- Desplegable de algoritmos reactivo que conmuta dinámicamente los controles pertinentes: deslizador de intensidad para Steerable G2, ángulo
Optimizado
- Invarianza de Escala en MGN (
combine_mgn_scales_rs):- Piso de ruido y corte de varianza adaptados proporcionalmente al rango dinámico del dato flotante (
data_scale), solventando variaciones espurias de microcontraste ante diferentes normalizaciones de entrada.
- Piso de ruido y corte de varianza adaptados proporcionalmente al rango dinámico del dato flotante (
- Consumo de Memoria en Filtrado de Corona:
- Acumulación in-place y reutilización de búferes contiguos en Rust, manteniendo el procesamiento de fotogramas de 24–60 MP por debajo del umbral de memoria física.
AstroLoom v0.14.1
Añadido
-
Puente de Renderizado Directo a Qt sin Copias Intermedias (
gui/canvas.py,src/renderer.rs):- Motor de renderizado nativo en Rust (
render_canvas_frame_rs) que transforma datosf32,u8yu16directamente a un búfer contiguo plano de memoria BGRA8888, compatible de forma nativa conQImage(..., QImage.Format_RGB32). - Detección y pintado vectorial multihilo con Rayon de alertas de recorte (Clipping Alerts: sombras empastadas en azul
#0070ffy altas luces quemadas en rojo#ff1744), eliminando la creación de capasQPixmapseparadas. - Soporte nativo para Split-View con cortina comparadora Antes/Después (
Y) vertical u horizontal en el visor del revelador y zoom directo sub-ventana 1:1 (zoom_rect). - Reutilización de búferes continuos preasignados (
bytearray) sin recolección de basura (GC), alcanzando más de 160 FPS y una latencia de renderizado de ~6 ms en 4K (3840×2160). - Integración fluida en
MaskCanvas(gui/canvas.py) y sincronización inmediata engui/tab_developer.py.
- Motor de renderizado nativo en Rust (
-
Poda Integral de Dependencias Externas y Módulos Nativos en Rust:
-
Eliminación Total de
pytoshop(src/psd_writer.rs,core/psd_export.py): Escritor nativo multicapa PSD/PSB de 16 y 8 bits en Rust con compresión RLE PackBits paralela por canal y máscaras de capa nativas de Photoshop vinculadas. Exportación PSD entre$8\times$ y$15\times$ más rápida y sin dependencias externas. -
Eliminación Total de
astropy(src/fits_io.rs,core/fits_io.py): Lector y decodificador FITS nativo en Rust con lectura SIMD/Rayon de bloques estándar de 2880 bytes e inversión de endianness Little-Endian ultra-rápida (<15 ms en 60 MP). Módulo puente en Pythoncore/fits_io.pycon fallback autónomo en Python puro + NumPy. -
Eliminación Total de
psutil(src/system_info.rs,core/system_info.py): Monitorización directa de memoria RAM física del sistema operativo víaGlobalMemoryStatusExen Windows y/proc/meminfoen Linux.
-
Eliminación Total de
-
Tiling ONNX de Redes Neuronales y Filtro Guiado O(1) (
src/ai_preprocessing.rs):-
Tiling Multihilo para StarNet++ v2 (
prepare_starnet_tiles_rsyassemble_starnet_tiles_rs): Partición multihilo sin GIL en baldosas con margen reflectivo perimetralBORDER_REFLECT, estirado analítico MTF simétrico por canal con cálculo rápido de mediana/MAD por Quickselect, y recomposición paralela por solapamiento con ventana de Hann o recorte central (Center-Crop). -
Preprocesado de NAFNet Denoise (
core/ai_denoise.py): Ventana 2D de Hann analítica (compute_hann_2d_window_rs), cálculo de cuadrícula de coordenadas (get_tile_coords_rs) y acumulación/normalización in-place sin copias intermedias en Python. -
Filtro Guiado Rápido O(1) (
fast_guided_filter_rs): Filtrado guiado en tiempo constante por píxel mediante imágenes integrales de área sumada (SAT) conBORDER_REFLECT_101para refinamiento milimétrico de máscaras de horizonte y follaje fino en ~21 ms para 1.44 MP.
-
Tiling Multihilo para StarNet++ v2 (
-
Serialización y Deserialización Paralela de Proyectos
.devloom(src/project_codec.rs,core/project_io.py):- Empaquetado y desempaquetado de sesiones de revelador completas en formato comprimido ZIP mediante compresión multihilo Rayon y códec PNG de 16 bits nativo en Rust, acelerando drásticamente el guardado y la carga de proyectos pesados con capas y máscaras.
-
Ingesta Concurrente de Lotes Masivos RAW/TIFF (
src/streaming_io.rs,core/stacking.py,gui/tab_stacker.py,gui/tab_startrails.py):- Inspección concurrente y asíncrona de cabeceras binarias (TIFF, Nikon NEF, Canon CR2, Sony ARW, Adobe DNG, Olympus ORF, Pentax PEF, FITS, PNG, JPEG) liberando el GIL (
scan_raw_batch_metadata_rs). - Extracción en microsegundos de dimensiones del sensor, orientación, nivel de negro, balance de blancos, estimación de temperatura de color (K), fabricante, modelo, ISO y tiempo de exposición.
- Validación automática de tomas corruptas o ilegibles con reporte granular de errores en log sin abortar la sesión.
- Inspección concurrente y asíncrona de cabeceras binarias (TIFF, Nikon NEF, Canon CR2, Sony ARW, Adobe DNG, Olympus ORF, Pentax PEF, FITS, PNG, JPEG) liberando el GIL (
AstroLoom v0.14.0
Añadido
-
Motor Nativo de Cómputo Astrofotográfico en Rust (
astroloom_rs):- Implementación de la arquitectura híbrida de alto rendimiento: Interfaz Gráfica en Python (
PySide6) acoplada a un núcleo de cálculo de bajo nivel en Rust compilado como módulo de extensión nativo (cdylibvíaPyO3 0.23,rust-numpy 0.23,rayon 1.10ynalgebra 0.33). -
Vectorización SIMD y Paralelismo Multihilo: Todos los kernels numéricos intensivos liberan de forma estricta el GIL (
py.allow_threads) y ejecutan en paralelo con Rayon sobre todos los núcleos lógicos de la CPU con optimizacionesAVX2/FMAylto = "fat". -
Arquitectura Zero-Copy y Asignación en Pila L1: Sustitución de millones de asignaciones dinámicas en el heap (
malloc/free) por buffers estáticos en la pila ([f32; N]) y selección lineal$O(N)$ con Quickselect (slice.select_nth_unstable_by) para medianas y dispersión$MAD$ , erradicando cuellos de botella de recolección de basura (GC). -
Mecanismo Drop-in Fallback Universal: Todos los subsistemas de
core/incorporan autodetección dinámica deastroloom_rscon respaldo transparente y continuo hacia Python/NumPy/Numba en caso de ejecutarse en entornos sin el binario compilado. -
Paridad Matemática y Validación Numérica: Verificación cruzada exhaustiva contra las implementaciones de referencia de Python en 18 módulos y suites de tests (diferencia máxima
$< 10^{-5}$ , idéntica a precisión de coma flotante de 32 bits).
- Implementación de la arquitectura híbrida de alto rendimiento: Interfaz Gráfica en Python (
-
Migración Integral de Módulos Críticos a
astroloom_rs:-
Motor de Apilado Estadístico y Registro Elástico TPS (
core/stacking.py,src/stacking.rs):- Kernels paralelos
kappa_sigma_kernel,percentile_kernelymedian_kernelen caché L1:$2.77\times$ más rápidos que Numba LLVM JIT. - Solver matricial analítico de placa delgada (Thin-Plate Splines - TPS) y evaluación paralela de mallas de remapado elástico (
compute_tps_grid_rsycompute_tps_remap_grid_rs), eliminando dependencias descipy.interpolate.
- Kernels paralelos
-
Calibración Pura CFA Pre-Debayer In-Place (
core/stacking.py,src/streaming_io.rs):- Calibración de Darks, Flats, Bias y pedestal térmico directamente sobre la matriz
uint16de fotodiodos de LibRaw (calibrate_raw_cfa_inplace_rs) sin crear copias intermedias en float32: 0 bytes de asignación adicional en RAM y una aceleración de$4\times$ .
- Calibración de Darks, Flats, Bias y pedestal térmico directamente sobre la matriz
-
Extracción de Gradientes y Neutralización de Fondo RBF (
core/background_extraction.py,src/background.rs):- Interpolador multiescala 2D multicuádrico inverso (
fit_and_eval_rbf_proxy) en Rust sustituyendo ascipy.interpolate.RBFInterpolator. - Neutralizador fotométrico fusionado (
apply_bg_model_fused): Sustracción/división, modulación de suelo y clamping en una sola pasada de memoria por filas (par_chunks_mut).$15.27\times$ más rápido y reducción de$-1.375\text{ MB}$ de RAM (de 1.650 MB a 274 MB en 24 MP).
- Interpolador multiescala 2D multicuádrico inverso (
-
Compositor de Capas y Pipeline del Revelador (
core/mask_layers.py,core/stretch.py,src/developer.rs):- Kernel fusionado en paralelo (
apply_layer_adjustments_fused): Evalúa transformaciones tonales HSV, balance RGB, EV, sombras, altas luces, curvas LUT y mezcla de capas en una sola pasada por píxel ($1.76\times$ a$3.2\times$ más rápido,$<3\text{ ms}$ en viewport 1080p). - Fusión Trama (Screen Blend) de capa de estrellas:
$9.84\times$ más rápida que NumPy. - Estirado adaptativo automático de cielo Starless (
auto_stretch_adaptive_starless_rs) con estimación Quickselect de mediana/MAD y MTF por canal:$5.39\times$ más rápido.
- Kernel fusionado en paralelo (
-
Estirado Hiperbólico Generalizado (GHS) y Filtros Ópticos (
core/ghs.py,core/orton.py,core/star_diffusion.py,src/developer.rs):- Precomputación analítica vectorizada de LUT 1D de 16 bits (65.536 puntos) en microsegundos (
compute_ghs_lut_rs) con continuidad$C^1$ en puntos de inflexión LP y HP. - Aplicación multihilo de GHS en 2D y 3D (
apply_ghs_stretch_rs) con preservación fotométrica de luminancia Rec. 709 sin reservas en heap. - Resplandor difuso Orton y Star Mist (
compute_orton_glow_source_rsyblend_orton_and_diffusion_rs): Compuerta suave Hermite (smoothstep), supresión de picos estelares y mezcla tonal con protección de máscara de horizonte en una pasada.
- Precomputación analítica vectorizada de LUT 1D de 16 bits (65.536 puntos) en microsegundos (
-
Deconvolución Óptica Regularizada Richardson-Lucy (
core/deconvolution.py,src/deconv.rs):- Modelado analítico de PSF 2D Moffat astrofísica con parámetro
$\beta$ y elipticidad (generate_moffat_psf_rs) y PSF Gaussiana elíptica rotada (generate_gaussian_psf_rs). - Bucle iterativo de Richardson-Lucy en Rust (
richardson_lucy_deconv_rs) con convolución espacial reflectiva de alto rendimiento (convolve2d_reflect), ping-pong buffers estáticos, amortiguación Bayesiana de ruido basada en MAD y supresión de halos perimetrales (deringing). - Fusión cromática reconstruida en una sola pasada con alcance selectivo ('all', 'stars_only', 'background_only').
- Modelado analítico de PSF 2D Moffat astrofísica con parámetro
-
Detección y Fusión Fotométrica de Meteoros (
core/meteors.py,src/meteors.rs):- Diferencia positiva
$\max(0, \text{curr} - \text{bg})$ y estimación estadística simultánea (media, desviación estándar, mediana y MAD con Quickselect) en un único barrido de memoria. - Generación continua subpíxel de máscara de cápsula vectorial ajustada a la trayectoria con desvanecimiento suave Hermite.
- Fusión en modo Aclarar (Lighten) directamente sobre la caja delimitadora (bounding box) o con inserción homográfica sin alojar matrices intermedias de 288 MB por meteoro.
- Diferencia positiva
-
Filtros Coronales de Eclipses HDR (
core/eclipse.py,src/eclipse.rs):- Filtro NRGF continuo (
compute_nrgf_profiles_and_detail_rs,apply_nrgf_continuous_rs): Tablas radiales continuas$\mu(r), \sigma(r)$ , estimación de ruido de fondo, compuerta radial suave Hermite y recomposición radiométrica RGB sin matrices 2D de radio ni ordenaciones globales ($9.41\times$ más rápido, pasando de 2.0 s a 0.21 s en 24 MP). - Normalización multiescala de Morgan & Druckmüller (MGN) en 6 escalas espaciales (
combine_mgn_scales_rs,finalize_mgn_lum_rs) con bucles SIMD acumulando in-place ($2.53\times$ más rápido, eliminando 1.5 GB de matrices intermedias). - Detección paralela de protuberancias H-alfa (
$R/G > 1.15$ ), supresión adaptativa de croma según SNR y máscara lunar sin mallas densas.
- Filtro NRGF continuo (
-
Alineación por Asterismos y Cosido Panorámico (
core/panorama.py,src/panorama.rs,src/astrometry.rs):- Extracción de asterismos de 4 estrellas (quads) normalizados proyectivamente en microsegundos sin GIL (
$49.6\times$ más rápido, de 85.3 ms a 1.72 ms por panel). - Árbol k-d 4D nativo en Rust con consulta de bolas euclídeas, acumulador de votos y correspondencias mutuas en
$<2\text{ ms}$ , sustituyendo ascipy.spatial.cKDTree. - Algoritmo
$O(H \times W)$ de programación dinámica para recorte de rectángulo máximo inscrito sin bordes negros en$<2\text{ ms}$ para panorámicas gigapíxel de más de 100 MP. - Emparejamiento RANSAC de triángulos estelares en Rust devolviendo la homografía directa
$H$ en microsegundos.
- Extracción de asterismos de 4 estrellas (quads) normalizados proyectivamente en microsegundos sin GIL (
-
Calibración Fotométrica Gaia (PCC) y Filtros Dual-Band (
core/pcc.py,core/dualband.py,src/photometry.rs):- Regresor robusto Theil-Sen
$O(N^2)$ anclado al estándar solar espectral G2V en microsegundos y aplicación paralela de factores de ganancia cromática. - Pipeline Dual-Band fusionado (HOO, SHO Hubble Sintético, Foraxx dinámico y Cannistra) con compensación de diafonía de sensor OSC, boost de [OIII] y atenuación de halos magenta (
unpurple). - Detección y difusión cromática perimetral para reparación de centros estelares saturados o quemados a blanco (
unclip_stars).
- Regresor robusto Theil-Sen
-
Filtros Espaciales, Supresión de Banding CMOS y Anti-Halo (
core/banding.py,core/masking.py,src/spatial_filters.rs):- Supresión de banding CMOS horizontal y vertical en tiempo lineal
$O(W)$ in-place con modelado estadístico de fondo y filtrado gaussiano 1D. - Fusión cielo/suelo con campo de distancias con signo (SDF), rampa cosenoidal y protección anti-ghosting de árboles en horizonte.
- Clamping adaptativo de halos de horizonte circunscrito al bounding box perimétrico.
- Supresión de banding CMOS horizontal y vertical en tiempo lineal
-
Trazas de Estrellas (Startrails) y Adaptación Cromática ICC (
core/startrails.py,core/icc_manager.py,core/display_transfer.py,src/streaming_io.rs):- Acumulación en streaming SIMD de trazas (Lighten y efecto cometa con curvas lineal/coseno/exponencial).
- Recuperación cromática estelar en el plano cartesiano
$(u = S\cos H, v = S\sin H)$ en tiempo real (~0.4s). - Conversión matricial Bradford CIE D65/D50 y curvas TRC gamma en una sola pasada para sRGB, AdobeRGB 1998 y ProPhoto RGB en datos de 16 y 32 bits sin duplicar memoria.
-
Diagnóstico Óptico 3x3 y Cribado de Sesión (
core/frame_culling.py,src/astrometry.rs):- Evaluación paralela multihilo de FWHM subpíxel, excentricidad (momentos centrales
$\mu_{20}, \mu_{02}, \mu_{11}$ ) y censo estelar en cuadrícula 3x3 para clasificación de curvatura de campo vs sensor tilt.
- Evaluación paralela multihilo de FWHM subpíxel, excentricidad (momentos centrales
-
Motor de Apilado Estadístico y Registro Elástico TPS (
Corregido
- Sincronización y Persistencia de Diagnóstico de Polvo de Sensor (
gui/tab_developer.py):- Corrección de sincronización bidireccional entre
DeveloperStateypanel_dustpara parámetros de visualización paso alto (dust_visualize,dust_visualize_threshold), modo de curación y sensibilidad. - Invalidación estricta de cachés de pipeline al añadir, mover o eliminar manchas de polvo, previniendo artefactos visuales residuales.
- Optimización de
has_state_changedpara ignorar flags efímeros de visualización diagnóstica en el historial de Deshacer/Rehacer.
- Corrección de sincronización bidireccional entre
Mejorado
- Desacoplo de Dependencias Pesadas (
scipy/numba):- Los subsistemas clave de apilado, RBF y panorámicas ya no dependen obligatoriamente de `sci...
AstroLoom v0.13.1
Añadido
- Detección, Curación y Diagnóstico de Manchas de Polvo de Sensor (
core/dust.pyygui/developer/panels/panel_dust.py):- Implementación del pipeline clásico no destructivo de detección morfológica de manchas y anillos oscuros de polvo en cielo y fondo plano (
detect_dust_spots) mediante diferencia gaussiana normalizada por textura local y filtros de circularidad, relación de aspecto y factor de llenado. - Algoritmo de selección inteligente de parche donante (
pick_donor_source) que explora 48 posiciones a lo largo de 3 anillos concéntricos (2.4r, 3.2r, 4.2r), evaluando similitud de textura, varianza interna homogénea y prevención estricta de colisiones con manchas vecinas o bordes de encuadre. - Motor de curación continua (
heal_single_spot/apply_dust_healing) con tres modalidades:- Curar (Tonal Seamless): Fusión de textura y gradiente mediante aproximación de Poisson / convolución normalizada sobre retícula con bordes suaves (smoothstep feathering).
- Inpainting Puro: Reconstrucción fluida de fondo sin requerir parche donante vía Telea.
- Clonar (Directo): Transferencia directa de píxeles desde la zona de referencia con remapado bilineal subpíxel (
cv2.remap).
- Modo de inspección de alto contraste («Visualizar Manchas» / Visualize Spots, atajo de teclado
A): filtro paso alto que resalta en blanco brillante sobre negro hasta las motas más tenues y difusas del sensor, con control de umbral dinámico en tiempo real. - Herramientas interactivas en el lienzo (
MaskCanvasengui/canvas.py): colocación manual de manchas con clic izquierdo, arrastre libre para reubicar, eliminación con clic derecho y retículas circulares con cruz central proporcionales al zoom. - Integración nativa en el pipeline lineal temprano (
gui/developer/pipeline.py), en el estado del revelador (DeveloperState) y en el historial completo de Deshacer (Ctrl+Z) y Rehacer (Ctrl+Y).
- Implementación del pipeline clásico no destructivo de detección morfológica de manchas y anillos oscuros de polvo en cielo y fondo plano (
- Refinamiento de Bordes por Filtro Cruzado Guiado (
core/masking.py:refine_mask_guided_cross/guided_cross):- Nuevo algoritmo de filtrado guiado cruzado O(1) con
cv2.boxFilterguiado por la luminancia logarítmica de la escena (log1p(255 * L) / log(256)). - Imanta con precisión fotométrica los contornos y transiciones de cualquier máscara a las ramas, crestas montañosas, estructuras o siluetas reales del paisaje.
- Integración en el Gestor de Capas (
core/mask_layers.pyygui/widgets/mask_layers_widget.py) con casilla "Refinar Bordes (Guided Cross)", control de intensidad (0% a 100%) y radio adaptativo (0.04 * long_edge).
- Nuevo algoritmo de filtrado guiado cruzado O(1) con
- Protección de Driver Gráfico contra Cuelgues (Crash Sentinel en
core/gpu_backend.py):- Patrón centinela de inicialización mediante archivo marcador persistente (
gpu-init.markeren AppData/directorio de configuración). - Si un fallo o cuelgue irrecuperable a nivel de driver gráfico de bajo nivel (CUDA / OpenCL) cierra abruptamente el proceso, el centinela permanece activo y el siguiente arranque de AstroLoom conmuta automáticamente a modo seguro CPU, evitando bucles de fallos irrecuperables.
- Métodos de diagnóstico e inspección:
is_crash_sentinel_active()yclear_gpu_crash_sentinel().
- Patrón centinela de inicialización mediante archivo marcador persistente (
- Cálculo Fusionado de Histograma en Vivo de 1 Pasada (
core/histogram.py):- Nuevo motor de histograma de alta velocidad que evalúa simultáneamente los canales R, G, B y Luma Rec.709 (
(54*r + 183*g + 19*b) >> 8) en una sola pasada de memoria sin asignaciones intermedias. - Aceleración Numba JIT
@njit(fastmath=True, nogil=True)con soporte nativo parafloat32,uint8,uint16y monocromo, respaldado por un fallback vectorizado eficiente en OpenCV/NumPy. - Detección ultrarrápida y unificada de advertencias de recorte (clipping) en sombras puras (0) y altas luces quemadas (255).
- Rediseño de
gui/widgets/live_histogram.py: eliminación de las 4 pasadas independientes connp.histogram, logrando actualizaciones a más de 60 FPS durante la edición.
- Nuevo motor de histograma de alta velocidad que evalúa simultáneamente los canales R, G, B y Luma Rec.709 (
Corregido
- Garantía Estricta de Monotonicidad en Curvas Tonales:
- Incorporación de
np.maximum.accumulateencore/stretch.py:apply_curve_lut,core/mask_layers.py:compute_curve_lut_from_pointsygui/widgets/curve_widget.py. - Erradicación de inversiones de pendiente, artefactos de solarización o gradientes negativos accidentales en curvas RGB y capas de ajuste.
- Incorporación de
- Estabilidad y Jerarquía de Widgets en Secciones Colapsables (
CollapsibleSection):- Corrección en
gui/widgets/collapsible_section.py:setContentLayoutpara detectar layouts con contenedor existente y delegar aset_content_widget, evitando excepciones o reparenting erróneo en PySide6.
- Corrección en
AstroLoom v0.13.0
Añadido
- Extracción y Neutralización de Gradientes de Fondo por Muestreo Interactivo (RBF 2D / DBE / GraXpert):
- Implementación en
core/background_extraction.pydel motor de interpolación multiescala 2D conscipy.interpolate.RBFInterpolator(base multicuádrica inversainverse_multiquadriccon regularización de curvaturaepsilon=1.0). - Detección y generación automática de malla de puntos de ancla en el cielo (
generate_sky_sample_points) con exclusión morfológica estricta del terreno terrestre (sky_maskcon erosión perimétrica de seguridad de 5 px). - Inmunidad estelar completa en el muestreo de fondo mediante estimación de baja intensidad por percentil 15 (
np.percentile(patch, 15)) dentro de cada ventana local (box_size). - Modelado analítico de superficies polinómicas bidimensionales de Grado 1 (lineal / plano inclinado) y Grado 2 (cuadrático / viñeteo parabólico suave) en
extract_background_polynomial. - Soporte de dos modos matemáticos de corrección:
- Sustracción: Para resplandores aditivos de luz (contaminación lumínica dispersa, lunas o crepúsculo).
- División: Para gradientes ópticos multiplicativos (viñeteo o sombras de sensor).
- Inmunidad absoluta de la silueta terrestre: preservación al 100% de los píxeles de suelo sin alteraciones, saltos tonales ni halos perimétricos en el horizonte.
- Integración nativa profunda en el historial de Deshacer (
Ctrl+Z) y Rehacer (Ctrl+Y) engui/tab_developer.py(type: "bg_extract").
- Implementación en
- Herramientas de Muestreo de Fondo en el Lienzo (
MaskCanvasengui/canvas.py):- Modo interactivo de edición de puntos (
bg_sample_mode):- Clic izquierdo: Añadir un nuevo punto o hacer clic y arrastrar para reposicionar un punto existente.
- Clic derecho: Eliminar el punto seleccionado bajo el cursor.
- Representación visual intuitiva de las cajas de muestra con bordes luminosos y centro con retícula, adaptándose al nivel de zoom (coordenadas normalizadas [0.0, 1.0] inmunes al encuadre o zoom 1:1).
- Indicador dinámico en tiempo real del recuento de puntos de muestreo en el panel del revelador.
- Modo interactivo de edición de puntos (
- Recuadro de Color Interactivo (Swatch) y Pipeta de Tinte para Contaminación Lumínica:
- Incorporación en
gui/developer/panels/panel_light_pollution.pyde un recuadro visual de color (btn_lp_swatch/lbl_tint_swatch) de 22×22 px junto al selector de tinte, reflejando en tiempo real el color espectral activo (ámbar de sodio, LED cálido, LED frío, blanco neutro o personalizado). - Interacción directa con el selector de color del sistema: un clic sobre el recuadro abre
QColorDialogpara seleccionar o ajustar cualquier color RGB manualmente. - Insignia y cursor contextualizados en el lienzo (
_draw_eyedropper_badgeengui/canvas.py): la pipeta muestra mensajes dinámicos según el objetivo de la muestra ("Clic: balancear WB", "Clic: punto simetría SP", "Clic: centro cúpula LP", "Clic: muestrear tinte LP", "Clic: seleccionar color").
- Incorporación en
- Modernización del Sistema de Temas y Chevrons Vectoriales SVG:
- Creación de iconos vectoriales SVG para flechas de colapso y despliegue (
chevron_up.svg,chevron_down.svg,chevron_up_hover.svg,chevron_down_hover.svg,chevron_up_disabled.svg,chevron_down_disabled.svg) engui/assets/. - Integración en
gui/theme.pyygui/main_window.pypara erradicar el renderizado inconsistente de caracteres Unicode en diferentes versiones de Windows. - Refinamiento de estilos de barras de desplazamiento (scrollbars), bordes sutiles y ergonomía de paneles laterales.
- Creación de iconos vectoriales SVG para flechas de colapso y despliegue (
Corregido
- Mapeo de Presets Cromáticos de Contaminación Lumínica en el Pipeline:
- Corrección en
gui/developer/pipeline.pyde la lista de identificadores de presets (["sodium", "warm_led", "cold_led", "neutral", "custom"]), resolviendo un desajuste crítico que provocaba que todos los presets excepto sodio cayeran al fallback predeterminado de vapor de sodio.
- Corrección en
- Sincronización Bidireccional de la Pipeta de Tinte con el Panel Modular:
- Corrección en
gui/tab_developer.py:_on_eyedropper_color_sampled: la captura de tinte ahora invocaself.panel_lp.set_custom_tint(), actualizando correctamente el estado paramétrico, el combo selector y el recuadro de color visual. - Muestreo espectral directo desde el búfer lineal previo a la cúpula (
_cache_ms_pre_lp_img), asegurando que la muestra capture el balance de blancos real de la toma sin verse falseada por el estirado no lineal posterior. - Erradicación del efecto en el que la reducción de contaminación lumínica viraba permanentemente hacia el azul al muestrear colores no amarillos.
- Corrección en
Mejorado
- Reorganización Estructural del Flujo de Trabajo en el Revelador:
- Reordenación pedagógica de las secciones del acordeón en
gui/tab_developer.pyy paneles modulares:- Paisaje y Máscara de Suelo (Horizonte IA)
- Balance de Blancos y Calibración
- Gradientes y Contaminación Lumínica
- Estirado Tonal y Contraste
- Desacoplo Estelar y Fondo
[Avanzado] Deconvolución Óptica y Enfoque (R-L)
Máscaras y Capas de Ajuste Local
- Reordenación pedagógica de las secciones del acordeón en
- Localización Completa (ES / EN):
- Incorporación de todas las cadenas de interfaz y mensajes de registro para el nuevo motor RBF, cajas de muestreo, modelos polinómicos y herramientas interactivas de gradientes.
AstroLoom v0.12.2
Corregido
- Estabilidad Dimensional de Máscaras y Resolución de
IndexErroren el Revelador:- Corrección en
core/masking.py:shift_mask_edgepara preservar la profundidad de canales (mask.shape[2]), impidiendo que el desplazamiento perimétrico de máscara reduzca matrices RGB tridimensionales a un único canal(H, W, 1). - Normalización dimensional en
gui/developer/pipeline.py:apply_developer_pipelinepara expandir de forma robusta máscaras 2D o monocanal a 3 canales cuando la imagen de trabajo es RGB. - Blindaje con vista 2D de máscara (
stretched[mask_2d > 0.5]) en el cálculo de mediana de cielo para el contraste selectivo de fondo starless (contrast_starless), neutralizando fallos de dimensionalidad durante scrubbing interactivo y refresco en zoom 1:1. - Normalización 2D segura en
gui/tab_developer.py:_compose_active_baseal generarmask_3den exportación y previsualización con zoom 100%. - Protección dimensional de entrada análoga en
core/banding.py:suppress_cmos_banding,core/starnet_bridge.py:run_starnetycore/starnet_onnx.py:run_starnet_onnx.
- Corrección en
AstroLoom v0.12.1
Añadido
-
Calibración Fotométrica del Color (PCC Real contra Catálogo Gaia DR3 / Locus Estelar G2V):
- Implementación en
core/pcc.pyde fotometría de apertura circular con sustracción de anillo de fondo sobre estrellas no saturadas (detect_stars_photometry). - Ajuste de regresión robusta Theil-Sen (
fit_theil_sen_pcc) sobre las razones$\log(R/G)$ y$\log(B/G)$ referenciadas a los índices de color del catálogo Gaia$(BP - RP)$ . - Anclaje fotométrico riguroso al estándar solar espectral G2V (
$(BP - RP) = 0.82$ ) con estimación robusta de locus estelar en modo offline cuando no hay metadatos astrométricos de campo. - Aplicación no destructiva de ganancias fotométricas (
apply_pcc_gains) que calibra el color físico exacto de las estrellas preservando la neutralidad del fondo cósmico. - Integración en el panel de balance de blancos (
gui/developer/panels/panel_color_wb.py) con botón de acciónCalibración PCC (Gaia), estado dinámico en vivo y botón de restablecimiento.
- Implementación en
-
Procesado Especializado de Filtros Dual-Band OSC y Paletas de Banda Estrecha:
- Implementación en
core/dualband.py:extract_ha_oiiiyapply_dualband_palettede extracción matemática de$H\alpha$ y$[OIII]$ desde sensores de color OSC con compensación de diafonía cromática (crosstalk). - Incorporación de 4 paletas astronómicas clásicas y modernas para astrofotografía de emisión:
-
HOO Bicolor: Mapeo natural (
$R = H\alpha$ ,$G/B = [OIII]$ ). -
SHO Hubble Sintético: Generación de canal
$SII$ sintético ponderado desde$H\alpha$ y composición tricromática con gradiente de contraste. -
Foraxx Dinámico: Modulación no lineal del canal verde basada en solapamiento de intensidades relativas de
$H\alpha$ y$[OIII]$ . -
Cannistra Bicolor: Fusión adaptativa en el canal verde preservando la visibilidad de filamentos débiles de
$[OIII]$ .
-
HOO Bicolor: Mapeo natural (
- Control de ganancia
Boost [OIII]paramétrico (0.10x a 3.00x) y sección colapsable dedicada en el Revelador (Paletas Dual-Band y Corrección Estelar).
- Implementación en
-
Herramientas de Corrección y Reparación Estelar Avanzada:
-
Recuperación de Núcleos Saturados (Unclip Stars): Función
unclip_starsencore/dualband.pyque calcula las proporciones cromáticas reales en la periferia no saturada del disco estelar y las proyecta hacia el centro sobreexpuesto, erradicando núcleos estelares lavados o quemados a blanco plano. -
Supresión de Aberración Cromática y Halos Magenta (Unpurple): Algoritmo selectivo en
core/dualband.py:unpurpleque reduce halos púrpuras y violetas en bordes de estrellas brillantes sin comprometer la nebulosidad legítima de hidrógeno alfa ($H\alpha$ ).
-
Recuperación de Núcleos Saturados (Unclip Stars): Función
-
Supresión de Ruido Banding CMOS de Sensor (Banding Reduction):
- Nuevo módulo algorítmico en
core/banding.py:suppress_cmos_bandingpara erradicar patrones de líneas y bandas estructuradas originadas por conversores ADC y raíles de potencia en sensores CMOS a sensibilidades ISO elevadas. - Protección de estrellas y nebulosas mediante máscara adaptativa basada en la mediana y desviación absoluta respecto a la mediana (MAD) del fondo.
- Separación de frecuencias por filtrado paso bajo 1D gaussiano para suprimir exclusivamente el banding de alta frecuencia sin alterar gradientes astronómicos suaves.
- Controles en el Revelador (
panel_starnet.py): deslizador de intensidad (0% a 100%) y selector de orientación (Horizontal, Vertical o Ambos ejes).
- Nuevo módulo algorítmico en
-
Alineación Elástica No Rígida por Thin Plate Splines (TPS con Remap Lanczos4):
- Implementación en
core/stacking.py:compute_tps_remap_gridde deformación elástica subpíxel por mallas Thin Plate Splines combinada con interpolacióncv2.INTER_LANCZOS4. - Resuelve la distorsión periférica diferencial en las esquinas generada por rotación de campo en objetivos gran angular y reflectores en modo seguimiento (tracker / cielo profundo).
- Implementación en
-
Diagnóstico Óptico 3x3 de Campo y Sesión (Curvatura vs Sensor Tilt):
- Implementación en
core/frame_culling.py:compute_3x3_optical_diagnosisde rejilla 3x3 para mapear FWHM y excentricidad en centro, laterales y esquinas del encuadre. - Clasificación analítica de anomalías: Curvatura de campo simétrica vs Inclinación de sensor (Sensor Tilt) / flexión mecánica.
- Diagnóstico individual integrado en el tooltip del badge de calidad de la lista de tomas (
FileListRow). - Diagnóstico sintético global de sesión (
diagnose_session_optics) emitido en el registro del Apilador con recomendaciones de ajuste de backfocus, colimación o espaciado del aplanador.
- Implementación en
-
Calibración Matemática en Espacio Puro CFA (Pre-Debayer):
- Soporte en
core/stacking.py:load_image_as_float32para restar el exceso térmico del Master Dark y normalizar por Master Flat directamente sobre los fotositos de la matriz Bayer (CFA) antes de la interpolación de color.
- Soporte en
Mejorado
- Ergonomía de Ingesta en el Apilador (Sección 2: Calibración y Tomas):
- Reubicación de los botones «Añadir Tomas...» y «Limpiar Pestaña» al inicio de la Sección 2 en
gui/tab_stacker.py, situándolos en la cabecera directamente encima de las pestañas (Lights,Darks,Flats,Bias,Suelo). - Evita que los botones de carga queden desplazados hacia abajo o por debajo de la barra de control de calidad y cribado estelar (
culling_bar).
- Reubicación de los botones «Añadir Tomas...» y «Limpiar Pestaña» al inicio de la Sección 2 en
- Robustez de Integración Kappa-Sigma:
- Ajuste de umbral de máscara a
channel_data > -0.5en los bucles de acumulación encore/stacking.pypara prevenir exclusiones indebidas de valores oscuros válidos. - Aseguramiento de rango físico
[0.0, 1.0]mediante recorte in-place en la salida final apilada (stream_stack_auto).
- Ajuste de umbral de máscara a
AstroLoom v0.12.0
Añadido
-
Nuevo Módulo Dedicado: Lluvias de Meteoros (
gui/tab_meteors.pyycore/meteors.py):-
Detección Algorítmica Acelerada con Numba: Sustracción temporal diferencial continua
_numba_positive_diff_and_stats(nogil) y estimación robusta de ruido del cielo (MAD) para procesar cientos de tomas nocturnas a máxima velocidad. -
Arquitectura Híbrida Rendimiento/Resolución: Escaneo ultra-rápido en binning 2:1 (
load_fast_meteor_frame, ~20s para 160+ tomas RAW Nikon NEF, Sony ARW, Canon CR2/CR3, DNG) y composición final con fidelidad nativa al 100% (resolución 1:1) exclusivamente para las tomas seleccionadas. -
Fusión Fotométrica en Modo Aclarar (Lighten) con Calibración RGB:
- Estimación robusta del pedestal de cielo por canal RGB (percentil 30) en el entorno local del bólido y en la imagen base, eliminando cualquier dominante de color o alteración cromática.
- Máscara vectorial en cápsula ajustada al FWHM de la traza con desvanecimiento gaussiano suave y puerta de ruido adaptativa (Noise Gate a 2.0σ).
- Fusión en modo Aclarar:
out_img += mask * max(0.0, patch_calibrado - out_img), erradicando al 100% la acumulación de ruido estocástico, la duplicación/engorde de estrellas y las auras luminosas artificiales.
-
Discriminación Inteligente de Satélites y Falsos Positivos:
- Persistencia orbital multicuadro: Descarte automático de trazas colineales que continúan a lo largo de 2 o 3 fotogramas consecutivos con el mismo rumbo.
- Cruces intra-fotograma: Descarte de trazas que se intersectan en la misma exposición (geometría orbital incompatible con meteoroides).
- Filtro de continuidad de haz: Comprobación de perfil longitudinal (iluminación continua con análisis de huecos oscuros internos) para evitar falsos positivos por alineaciones casuales de estrellas.
-
Discriminación Cromática Adaptativa de Aviones:
- Evaluación de exceso cromático relativo diferencial
$(\Delta R, \Delta G, \Delta B)$ sobre el fondo del cielo local, inmune a fotos subexpuestas o de bajo flujo. - Detección de balizas bicolores simultáneas (luces rojas a babor y verdes a estribor) y análisis de estrobos periódicos pulsantes con prominencia de caída entre destellos.
- Evaluación de exceso cromático relativo diferencial
-
Reproyección Homográfica al Radiante Celeste:
- Cálculo de matrices homográficas
$H$ mediante asterismos estelares invariantes y RANSAC (compute_frame_homography_to_ref), compensando la rotación diurna de la Tierra para proyectar cada meteoro a su constelación de origen. - Estimación por mínimos cuadrados del punto radiante óptimo e identificación automática de meteoros de la lluvia vs. esporádicos.
- Cálculo de matrices homográficas
-
Galería de Culling y Lienzo Gráfico Interactivo:
- Tabla interactiva con censo detallado (longitud, ángulo, flujo pico, divergencia respecto al radiante y continuidad de haz).
- Selección de usuario como verdad absoluta (
is_meteor) respetada estrictamente en la composición. - Botón de alternancia de visualización
[Ver Compuesto]/[Ver Toma]para comparar el compuesto final contra tomas individuales sin perder el resultado. - Retículas de resalte vectorial individuales y modo colectivo
[👁️ Resaltar Todas], con centrado y zoom 1:1 en el lienzo.
-
Exportación Multicapa PSD (Photoshop 16-bit):
- Generación nativa de archivos PSD de 16 bits (
pytoshop) con cada meteoro en su propia capa independiente en modoLightensobre fondo transparente. - Optimización por caja delimitadora (Bounding Box): recorte espacial de cada capa al área activa del bólido, reduciendo el tamaño del archivo PSD de más de 2 GB a ~150 MB.
- Inclusión de vista previa compuesta previa (
ImageData) para miniaturas en exploradores.
- Generación nativa de archivos PSD de 16 bits (
-
Persistencia de Sesión Completa (
.astrometeor):- Guardado y restauración de tomas cargadas, toma de referencia, máscara de suelo, candidatos detectados, clasificación y parámetros de fusión.
-
Detección Algorítmica Acelerada con Numba: Sustracción temporal diferencial continua
AstroLoom v0.11.6
Añadido
- Módulo de Panorámicas: Modo Ráfaga y Apilado Previo por Tesela (Burst Stacking):
- Implementación en
core/panorama.py:stack_and_stitch_nightscape_panoramaygui/tab_panorama.pyde una canalización integral de 2 fases: pre-apilado multihilo de reducción de ruido en cada panel antes del cosido geométrico final. - Modos de agrupación por tesela: selección fija de tomas (2 a 10 tomas por panel) o detección automática temporal por marca de tiempo EXIF (
group_panel_paths). - Soporte para monturas astronómicas: modo Trípode Fijo (alineación traslacional para suprimir ruido sin deformar el horizonte) y modo Star Tracker (compensación de rotación sidérea y seguimiento estelar).
- Desacoplamiento inteligente de cielo y suelo mediante auto-máscara IA (
compose_sky_ground_with_anti_ghosting): apilado dual por tesela con transición continua en el horizonte y eliminación de estelas fantasma (ghosting).
- Implementación en
- Módulo de Panorámicas: Motor de Alineación Guiada por Estrellas (Star Triangle Matching):
- Nuevo pipeline de registro astronómico en
core/panorama.py:- Extracción morfológica de estrellas brillantes con filtrado Top-Hat y refinamiento de centroides subpíxel (
extract_bright_stars). - Construcción de descriptores invariantes de triángulos estelares / asterismos (
build_star_triangle_descriptors) basados en ratios métricas de lados y ángulos. - Correspondencia espacial acelerada con k-d tree (
match_star_triangles) y estimación homográfica robusta RANSAC para coser teselas nocturnas profundas donde algoritmos tradicionales de visión artificial (ORB/SIFT) fallan por falta de textura diurna.
- Extracción morfológica de estrellas brillantes con filtrado Top-Hat y refinamiento de centroides subpíxel (
- Nuevo pipeline de registro astronómico en
- Módulo de Panorámicas: Compensación Automática de Viñeteo:
- Estimación estadística en
core/panorama.py:estimate_series_vignettingde la caída perimétrica de luz en bordes y esquinas a partir del fondo de cielo de la serie panorámica. - Modelado radial de ganancia (
apply_vignette_compensation) para ecualizar la iluminación entre fotogramas adyacentes y erradicar bandas oscuras o costuras verticales.
- Estimación estadística en
- Módulo de Panorámicas: Control de Curvatura de Arco (Arch Curvature):
- Control de deformación geométrica vertical en la proyección cilíndrica/esférica para nivelar o acentuar el arco de la Vía Láctea según la composición deseada.
- Módulo de Panorámicas: Persistencia Completa de Sesión (
.astropano):- Serialización y restauración integral en
save_panorama_sessionyload_panorama_sessionde paneles activos, modo ráfaga, parámetros de montura, estado de inclusión individual, geometría y ajustes fotométricos.
- Serialización y restauración integral en
Corregido
- Eclipses: Prevención de Cierre Abrupto (Crash) por Concurrencia de Workers:
- Deshabilitación de botones de acción (
btn_apply_filtersybtn_detect_all) durante la ejecución de la fusión HDR bracketing engui/tab_eclipse.py. - Protección con guardas contra sobreescritura del hilo
QThread(EclipseWorker) en ejecución nativa, evitando el fallo de terminación forzada del proceso Qt (QThread: Destroyed while thread is still running). - Reactivación coordinada y estilización de estado deshabilitado (
QPushButton:disabled) en el botón de filtros coronales.
- Deshabilitación de botones de acción (
- Revelador: Ajuste Dimensional y Recorte de Capas StarNet en Zoom 1:1:
- Corrección en
gui/tab_developer.py: recorte espacial coordinado de las capas sin estrellas (image_starless) y sólo estrellas (image_stars) al activar la inspección a resolución nativa del 100%. - Escalado y alineación del subrecorte para el caché de reducción de ruido neuronal Starless AI Denoise (
_process_starless_base), eliminando desajustes de escala y artefactos de estiramiento en el lienzo.
- Corrección en
- Lienzo (Canvas): Desacoplamiento de Interacciones de Paneo y Máscara:
- Corrección en
gui/canvas.py: navegación fluida con barra espaciadora o botón izquierdo del ratón en niveles de zoom elevados, evitando activaciones accidentales del cursor de mano abierta cuando las herramientas de trazado o pincel de máscara están operativas.
- Corrección en