Librería para análisis automatizado de calidad en mamografía (basado en IAEA ATIA)
Project description
PyATIA: Automated Tool for Image Analysis (Python Library)
PyATIA es una librería de Python de código abierto diseñada para el análisis automatizado de calidad de imagen en Mamografía Digital.
Esta librería implementa y extiende en Python la metodología ATIA (Automated Tool for Image Analysis) desarrollada por el OIEA (IAEA), permitiendo el cálculo de métricas físicas objetivas directamente desde archivos DICOM de maniquíes (phantoms) estándar.
🚀 Características principales
- Segmentación automática: detección inteligente de ROIs (Regiones de Interés) sobre imágenes de maniquíes estándar (tipo IAEA/ACR) sin intervención manual.
- Métricas de calidad de imagen:
- SNR (Signal-to-Noise Ratio): relación señal-ruido.
- SDNR (Signal-Difference-to-Noise Ratio): contraste relativo al ruido.
- MTF (Modulation Transfer Function): cálculo de la función de transferencia de modulación (nitidez) mediante el método de borde inclinado (slanted-edge) tanto vertical como horizontal.
- NNPS (Normalized Noise Power Spectrum): análisis espectral del ruido con corrección de tendencias (detrending) polinómico 2D.
- Índice de detectabilidad (d’): cálculo basado en el modelo de observador NPW (Non-Prewhitening), ajustado al contraste real del objeto según protocolos IAEA (Human Health Series No. 39).
- Salida estructurada: retorna todas las métricas en un diccionario Python, fácil de integrar en dashboards, bases de datos (p. ej., MongoDB) o reportes.
📋 Requisitos
- Python 3.8+
Dependencias principales:
numpy(se recomienda< 2.0por compatibilidad con SciPy en muchos entornos)pydicomopencv-pythonscipymatplotlibpandas
🛠️ Instalación
- Clonar el repositorio:
git clone https://github.com/tu-usuario/pyatia.git
cd pyatia
- Instalar dependencias:
pip install -r requirements.txt
Nota: si encuentras errores con
numpy, prueba:
pip install "numpy<2.0"
💻 Uso básico
PyATIA está diseñada para ser directa de usar. Solo necesitas instanciar la clase AtiaMamo y pasar la ruta de un archivo DICOM.
from pyatia import AtiaMamo
# 1) Instanciar el analizador
analyzer = AtiaMamo()
# 2) Procesar una imagen DICOM
dicom_path = "ruta/a/tu/imagen_mamo.dcm"
resultado = analyzer.process(dicom_path)
# 3) Verificar resultados
if resultado["success"]:
metrics = resultado["metrics"]
print("✅ Análisis exitoso")
print(f"📡 SNR: {metrics['snr']}")
print(f"🔎 SDNR: {metrics['sdnr']}")
print(f"📉 MTF 50% (H): {metrics['mtf50_h']} cycles/mm")
print(f"🧠 Detectabilidad (d' 0.25mm): {metrics['dprime_0.25mm']}")
# Imagen procesada con ROIs (numpy array)
imagen_rois = resultado["image_processed"]
else:
print(f"❌ Error: {resultado['error']}")
🔬 Metodología física
El cálculo de métricas sigue lineamientos estándar de física médica:
- MTF: se utiliza la técnica slanted-edge con sobremuestreo (super-sampling) para obtener la curva de respuesta en frecuencia.
- NNPS: se extrae una ROI central de fondo, se normaliza por la señal media y se aplica una ventana de Hann 2D para calcular el espectro de potencia de ruido.
- Detectabilidad (d’): se implementa el modelo del observador ideal sin pre-blanqueo (NPW):
[ d'^2 = \frac{\left[ \iint |W(u,v)|^2 \cdot MTF^2(u,v); du; dv \right]^2}{\iint |W(u,v)|^2 \cdot MTF^2(u,v)\cdot NNPS(u,v); du; dv} ]
donde (W(u,v)) es la función de tarea (disco) escalada por el contraste medido del inserto.
📂 Estructura del proyecto
pyatia/
├── pyatia/ # Código fuente de la librería
│ ├── __init__.py # Punto de entrada
│ ├── mamo.py # Clase principal (AtiaMamo)
│ ├── image_utils.py # Segmentación y utilidades CV2
│ └── physics/ # Módulos de física médica
│ ├── metrics.py # SNR, SDNR, MTF
│ ├── nnps.py # Noise Power Spectrum
│ └── detectability.py # Modelo d'
├── test_pyatia.py # Script de prueba y demostración
└── requirements.txt # Dependencias
⚠️ Exención de responsabilidad
Este software es una herramienta de soporte para control de calidad y no está diseñado ni certificado para uso diagnóstico clínico directo en pacientes. El usuario es responsable de validar los resultados en su entorno específico.
📄 Licencia
Este proyecto está bajo la Licencia MIT. Siéntete libre de usarlo y modificarlo.
Basado en metodologías del OIEA (IAEA).
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file pyatia-0.1.0.tar.gz.
File metadata
- Download URL: pyatia-0.1.0.tar.gz
- Upload date:
- Size: 11.2 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.11.4
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
2376a9820a3bc24c7e37b29b96a67cf3859abdee93cd7af9e40199771981f5da
|
|
| MD5 |
018a2de23874c7e384bebaafaed6389c
|
|
| BLAKE2b-256 |
8be14875f5182c30e6d432eb7f9a7b22b6e29c2ab1eb73d4ba6bd66c4afcc587
|
File details
Details for the file pyatia-0.1.0-py3-none-any.whl.
File metadata
- Download URL: pyatia-0.1.0-py3-none-any.whl
- Upload date:
- Size: 9.3 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.11.4
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
6f8f22d4e9ec19477407d57ceca0c517c6d8d45ed04cf57a1b7c13b093096b55
|
|
| MD5 |
7b055831167cc75e73f8dd7c701991ba
|
|
| BLAKE2b-256 |
bbfbd9b511a09fe2541ebdbb452608ef5099b128029f9419c52c9634c361a18e
|