Skip to main content

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.0 por compatibilidad con SciPy en muchos entornos)
  • pydicom
  • opencv-python
  • scipy
  • matplotlib
  • pandas

🛠️ Instalación

  1. Clonar el repositorio:
git clone https://github.com/tu-usuario/pyatia.git
cd pyatia
  1. 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


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

pyatia-0.1.0.tar.gz (11.2 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

pyatia-0.1.0-py3-none-any.whl (9.3 kB view details)

Uploaded Python 3

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

Hashes for pyatia-0.1.0.tar.gz
Algorithm Hash digest
SHA256 2376a9820a3bc24c7e37b29b96a67cf3859abdee93cd7af9e40199771981f5da
MD5 018a2de23874c7e384bebaafaed6389c
BLAKE2b-256 8be14875f5182c30e6d432eb7f9a7b22b6e29c2ab1eb73d4ba6bd66c4afcc587

See more details on using hashes here.

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

Hashes for pyatia-0.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 6f8f22d4e9ec19477407d57ceca0c517c6d8d45ed04cf57a1b7c13b093096b55
MD5 7b055831167cc75e73f8dd7c701991ba
BLAKE2b-256 bbfbd9b511a09fe2541ebdbb452608ef5099b128029f9419c52c9634c361a18e

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page