Articulo de referencia

Kit de herramientas de segmentación y registro de información

{{cite web|url=https://github.com/InsightSoftwareConsortium/ITK|title=Insight Software Consortium / ITK - GitHub|website=[[GitHub]] |date=2019-12-17}} "},"operating system":{"wt...

ITK es un marco de desarrollo de aplicaciones multiplataforma de código abierto, ampliamente utilizado para el desarrollo de programas de segmentación y registro de imágenes . La segmentación consiste en identificar y clasificar datos presentes en una representación digital muestreada. Normalmente, esta representación es una imagen obtenida mediante instrumentación médica como escáneres de tomografía computarizada (TC) o resonancia magnética (RM). El registro consiste en alinear o establecer correspondencias entre los datos. Por ejemplo, en el ámbito médico, una tomografía computarizada se puede alinear con una resonancia magnética para combinar la información de ambas.

ITK se desarrolló con financiación de la Biblioteca Nacional de Medicina de EE . UU . como un recurso abierto de algoritmos para el análisis de imágenes del Proyecto Visible Human . ITK significa The Insight Segmentation and Registration Toolkit (Kit de herramientas de segmentación y registro Insight) . Este kit proporciona algoritmos de segmentación y registro de vanguardia en dos, tres y más dimensiones. ITK utiliza el entorno de compilación CMake para gestionar el proceso de configuración. El software está implementado en C++ y se puede adaptar para Python . SimpleITK , una rama del proyecto ITK que proporciona una interfaz simplificada para ITK en ocho lenguajes de programación, también se encuentra en desarrollo activo.

Introducción

Orígenes

En 1999, la Biblioteca Nacional de Medicina de los Institutos Nacionales de Salud de EE. UU. adjudicó un contrato de tres años para desarrollar un conjunto de herramientas de registro y segmentación de código abierto, que posteriormente se conoció como Insight Toolkit (ITK). El director del proyecto ITK en la NLM fue el Dr. Terry Yoo, quien coordinó a los seis contratistas principales que conformaban el Consorcio de Software Insight . Estos miembros del consorcio incluían a los tres socios comerciales GE Corporate R&D, Kitware , Inc. y MathSoft (cuyo nombre actual es Insightful); y a los tres socios académicos Universidad de Carolina del Norte ( UNC ), Universidad de Tennessee (UT) y Universidad de Pensilvania (UPenn). Los investigadores principales de estos socios fueron, respectivamente, Bill Lorensen en GE CRD, Will Schroeder en Kitware, Vikram Chalana en Insightful, Stephen Aylward con Luis Ibáñez en UNC (ambos posteriormente se trasladaron a Kitware), Ross Whitaker con Josh Cates en UT (ambos ahora en Utah) y Dimitris Metaxas en UPenn (Dimitris Metaxas ahora está en la Universidad de Rutgers ). Además, varios subcontratistas completaron el consorcio, entre ellos Peter Ratiu en el Brigham & Women's Hospital, Celina Imielinska y Pat Molholt en la Universidad de Columbia , Jim Gee en el Grasp Lab de UPenn y George Stetten en la Universidad de Pittsburgh .

Detalles técnicos

ITK es un conjunto de herramientas de software de código abierto para realizar registro y segmentación. La segmentación es el proceso de identificar y clasificar datos en una representación digital muestreada. Normalmente, esta representación es una imagen obtenida mediante instrumentación médica como escáneres de tomografía computarizada (TC) o resonancia magnética (RM) . El registro consiste en alinear o establecer correspondencias entre los datos. Por ejemplo, en el ámbito médico, una tomografía computarizada se puede alinear con una resonancia magnética para combinar la información de ambas.

ITK está implementado en C++. Es multiplataforma y utiliza el entorno de compilación CMake para gestionar el proceso. Además, un proceso de encapsulación automatizado genera interfaces entre C++ y otros lenguajes de programación como Java y Python. Esto permite a los desarrolladores crear software utilizando diversos lenguajes. La implementación de ITK emplea la técnica de programación genérica mediante el uso de plantillas de C++.

Dado que ITK es un proyecto de código abierto, desarrolladores de todo el mundo pueden usar, depurar, mantener y ampliar el software. ITK utiliza un modelo de desarrollo de software conocido como programación extrema . La programación extrema simplifica la metodología habitual de creación de software, reduciéndola a un proceso simultáneo e iterativo de diseño, implementación, prueba y lanzamiento. Las características clave de la programación extrema son la comunicación y las pruebas. La comunicación entre los miembros de la comunidad ITK facilita la rápida evolución del software. Las pruebas garantizan su estabilidad. En ITK, se implementa un exhaustivo proceso de pruebas (mediante CDash ) que mide la calidad diariamente. El panel de control de pruebas de ITK se actualiza continuamente, reflejando la calidad del software.

Desarrolladores y colaboradores

El Insight Toolkit fue desarrollado inicialmente por seis organizaciones principales.

y tres subcontratistas

Después de su creación, el software continuó creciendo con contribuciones de otras instituciones, entre ellas:

Fondos

La financiación del proyecto proviene de la Biblioteca Nacional de Medicina de los Institutos Nacionales de Salud (NIH). A su vez, la Biblioteca Nacional de Medicina recibió el apoyo de las instituciones miembros de los NIH (véase la lista de patrocinadores).

Los objetivos del proyecto incluyen los siguientes:

  • Apoya el Proyecto del Humano Visible .
  • Establecer las bases para futuras investigaciones.
  • Crear un repositorio de algoritmos fundamentales.
  • Desarrollar una plataforma para el desarrollo avanzado de productos.
  • Apoyar la aplicación comercial de la tecnología.
  • Crear convenciones para el trabajo futuro.
  • Fomentar una comunidad autosostenible de usuarios y desarrolladores de software.

El código fuente de Insight Toolkit se distribuye bajo la licencia Apache 2.0 (aprobada por la Open Source Initiative ).

La filosofía de código abierto del Insight Toolkit se extendió para apoyar la ciencia abierta , en particular al proporcionar acceso abierto a publicaciones en el ámbito del procesamiento de imágenes médicas. Estas publicaciones están disponibles gratuitamente a través de la revista Insight Journal.

Participación de la comunidad

Dado que ITK es un sistema de código abierto, cualquiera puede contribuir al proyecto. Una persona interesada en contribuir a ITK puede realizar las siguientes acciones.

  1. Lea la Guía de software de ITK . (Este libro se puede adquirir en la tienda de Kitware).
  2. Lea las instrucciones sobre cómo contribuir con clases y algoritmos al Toolkit mediante el envío de contribuciones a la revista Insight Journal.
  3. Obtén acceso a GitHub .
  4. Sigue las instrucciones para contribuir con Git .
  5. Únete al debate en ITK Discourse . La comunidad está abierta a todo el mundo.

Cualquier persona puede enviar un parche, y no es necesario tener acceso de escritura al repositorio para que se integre o para conservar el crédito de autoría. Para obtener más información, consulte la documentación de ITK Bar Camp sobre cómo enviar un parche .

ITK está protegido por derechos de autor del Insight Software Consortium, una alianza sin ánimo de lucro de organizaciones e individuos interesados ​​en apoyar ITK. A partir de la versión 3.6, el software se distribuye bajo una licencia de código abierto BSD. Esta licencia permite su uso para cualquier propósito, con la posible excepción del código que se encuentre en el directorio patentado, siempre que se le dé el debido reconocimiento. Los términos completos de los derechos de autor y la licencia están disponibles en www.itk.org/ITK/project/license.html . La versión 4.0 utiliza la licencia Apache 2.0 .

La licencia se cambió a Apache 2.0 con la versión 4.0 para adoptar una licencia moderna con disposiciones de protección de patentes. De la versión 3.6 a la 3.20, se utilizó una licencia BSD simplificada. Las versiones de ITK anteriores a la 3.6 se distribuyeron bajo una licencia BSD modificada. La principal motivación para adoptar una licencia BSD a partir de ITK 3.6 fue contar con una licencia aprobada por la OSI .

Resumen técnico

Las siguientes secciones resumen las características técnicas del conjunto de herramientas Insight ITK de la NLM. Filosofía de diseño Las siguientes son características clave de la filosofía de diseño del conjunto de herramientas.

  • El conjunto de herramientas proporciona representación de datos y algoritmos para realizar segmentación y registro. Se centra en aplicaciones médicas, aunque también es capaz de procesar otros tipos de datos.
  • El conjunto de herramientas proporciona representaciones de datos en formato general para imágenes (de dimensión arbitraria) y mallas (no estructuradas).
  • Este conjunto de herramientas no aborda la visualización ni la interfaz gráfica de usuario. Estas funciones se dejan para otros conjuntos de herramientas (como VTK , VISPACK , 3DViewnix, MetaImage, etc.).
  • El conjunto de herramientas proporciona herramientas mínimas para la interfaz de archivos. Nuevamente, esta funcionalidad se deja a cargo de otros conjuntos de herramientas o bibliotecas.
  • Se admite el procesamiento paralelo multihilo (memoria compartida).
  • El desarrollo del conjunto de herramientas se basa en los principios de la programación extrema. Es decir, el diseño, la implementación y las pruebas se realizan mediante un proceso iterativo y rápido. Las pruebas constituyen el núcleo de este proceso. En Insight, las pruebas se realizan de forma continua a medida que se incorporan los archivos y todas las noches en múltiples plataformas y compiladores. El panel de pruebas de ITK, donde se publican los resultados, es fundamental para este proceso.

Arquitectura

A continuación se describen las características clave de la arquitectura del conjunto de herramientas.

  • El conjunto de herramientas se organiza en torno a una arquitectura de flujo de datos. Es decir, los datos se representan mediante objetos de datos que, a su vez, son procesados ​​por objetos de proceso (filtros). Los objetos de datos y los objetos de proceso se conectan entre sí formando tuberías. Estas tuberías pueden procesar los datos por partes, respetando un límite de memoria especificado por el usuario.
  • Las fábricas de objetos se utilizan para instanciar objetos. Las fábricas permiten la extensión del sistema en tiempo de ejecución.
  • Para el procesamiento de eventos se utiliza un patrón de diseño de comando/observador.

Filosofía de implementación

A continuación se presentan las características clave de la filosofía de implementación del conjunto de herramientas.

  • El conjunto de herramientas se implementó utilizando principios de programación genérica. Este código C++ con tantas plantillas supone un reto para muchos compiladores; por lo tanto, el desarrollo se llevó a cabo con las últimas versiones de los compiladores MSVC, Sun, gcc, Intel y SGI.
  • El conjunto de herramientas es multiplataforma (Unix, Windows y Mac OS X).
  • El conjunto de herramientas admite enlaces a múltiples lenguajes, incluidos lenguajes como Tcl, Python y Java. Estos enlaces se generan automáticamente mediante un proceso de autoenvoltura.
  • El modelo de memoria se basa en "punteros inteligentes" que mantienen un contador de referencias a los objetos. Los punteros inteligentes se pueden asignar en la pila y, al salir del ámbito, desaparecen y disminuyen su contador de referencias al objeto al que apuntan.

Entorno de compilación

ITK utiliza el entorno de compilación CMake (creación multiplataforma). CMake es un proceso de compilación independiente del sistema operativo y del compilador que genera archivos de compilación nativos adecuados para el sistema operativo y el compilador con los que se ejecuta. En Unix, CMake genera archivos makefile, y en Windows, genera proyectos y espacios de trabajo.

Entorno de prueba

ITK ofrece un entorno de pruebas exhaustivo. El código se prueba diariamente (e incluso de forma continua) en numerosas combinaciones de hardware, sistema operativo y compilador, y los resultados se publican diariamente en el panel de pruebas de ITK. Utilizamos Dart para gestionar el proceso de pruebas y publicar los resultados en el panel.

Referencias de fondo: Patrones y genéricos de C++

ITK utiliza numerosos patrones de diseño avanzados y programación genérica. Estas referencias pueden resultarle útiles para comprender el diseño y la sintaxis de Insight.

  • Patrones de diseño. Por Erich Gamma, Richard Helm, Ralph Johnson, John Vlissides y Grady Booch.
  • Programación genérica y la STL  : Uso y extensión de la biblioteca de plantillas estándar de C++ (Serie de informática profesional de Addison-Wesley) por Matthew H. Austern
  • Estilos y modismos avanzados de programación en C++ por James O. Coplien
  • Revista de usuarios de C/C++
  • Informe de C++

Ejemplos

Gradiente de imagen suavizado por gaussiana

#incluir "itkImage.h"int main () { usando ImageType = itk :: Imagen < característica sin firmar , 3 > ; usando ReaderType = itk :: ImageFileReader <ImageType> ;usando WriterType = itk :: ImageFileWriter <ImageType> ;usando FilterType = itk :: GradientRecursiveGaussianImageFilter < ImageType , ImageType > ;ReaderType :: Pointer reader = ReaderType :: New (); WriterType :: Pointer writer = WriterType :: New ();lector -> EstablecerNombreArchivo ( "lungCT.dcm" ); escritor -> EstablecerNombreArchivo ( "smoothedLung.hdr" );FilterType :: Pointer filter = FilterType :: New ();filtro -> EstablecerEntrada ( lector -> ObtenerSalida () ); escritor -> EstablecerEntrada ( filtro -> ObtenerSalida () ); filtro -> EstablecerSigma ( 45.0 );try { writer -> Update (); } catch ( itk :: ExceptionObject & excp ) { std :: cerr << excp << std :: endl ; return EXIT_FAILURE ; } }

Segmentación regional en crecimiento

#incluir "itkImage.h"int main () { using InputImageType = itk :: Image < signed short , 3 > ; using OutputImageType = itk :: Image < unsigned char , 3 > ; using ReaderType = itk :: ImageFileReader < InputImageType > ; using WriterType = itk :: ImageFileWriter < OutputImageType > ; using FilterType = itk :: ConnectedThresholdImageFilter < InputImageType , OutputImageType > ;ReaderType :: Pointer reader = ReaderType :: New (); WriterType :: Pointer writer = WriterType :: New ();lector -> EstablecerNombreArchivo ( "brain.dcm" ); escritor -> EstablecerNombreArchivo ( "whiteMatter.hdr" );FilterType :: Pointer filter = FilterType :: New ();filtro -> EstablecerEntrada ( lector -> ObtenerSalida () ); escritor -> EstablecerEntrada ( filtro -> ObtenerSalida () );filtro -> EstablecerMultiplicador ( 2.5 ); ImageType :: IndexType semilla ; semilla [ 0 ] = 142 ; semilla [ 1 ] = 97 ; semilla [ 2 ] = 63 ; filtro -> AgregarSemilla ( semilla ); intentar { escritor -> Actualizar (); } capturar ( itk :: ExceptionObject & excp ) { std :: cerr << excp << std :: endl ; devolver EXIT_FAILURE ; } }

Información adicional

Recursos

Existen diversos recursos disponibles para obtener más información sobre ITK.

  • Las páginas web de ITK se encuentran en www.itk.org .
  • Tanto los usuarios como los desarrolladores deberían leer la Guía de software de ITK.
  • En la wiki de ejemplos de ITK encontrará numerosos ejemplos compilables.
  • Los tutoriales están disponibles en www.itk.org/ITK/help/tutorials.html
  • El software se puede descargar desde www.itk.org/ITK/resources/software.html .
  • Los desarrolladores o usuarios interesados ​​en contribuir con código deben consultar el documento Insight/Documentation/InsightDeveloperStart.pdf o InsightDeveloperStart.doc que se encuentra en la distribución del código fuente.
  • Los desarrolladores también deben consultar la guía de estilo de ITK Insight/Documentation/Style.pdf que se encuentra en la distribución del código fuente.

Aplicaciones

Una excelente manera de aprender sobre el conocimiento tecnológico es ver cómo se utiliza. Hay cuatro lugares donde encontrar aplicaciones del conocimiento tecnológico.

  1. Los ejemplos de código fuente de Insight/Examples/ se distribuyen con ITK. El código fuente está disponible. Además, está ampliamente comentado y funciona en combinación con la Guía de Software de ITK.
  2. El proceso de pago independiente de InsightApplications.
  3. Las páginas web de Aplicaciones . Estas son descripciones detalladas, con imágenes y referencias, de los ejemplos que se encuentran en el punto n.° 1 anterior.
  4. Los directorios de prueba que se distribuyen con ITK son ejemplos sencillos, en su mayoría no documentados, de cómo usar el código.

En 2004, ITK-SNAP ( sitio web ) se desarrolló a partir de SNAP y se convirtió en un popular software de segmentación gratuito que utilizaba ITK y tenía una interfaz de usuario agradable y sencilla.

Datos

  • Los datos están disponibles en ITK data.kitware.com Girder Community .
  • Véase también la página web de datos de ITK .

Véase también

Contactos

Visita el foro de discusión de ITK para obtener contactos y ayuda de la comunidad.

Referencias

  1. "Versión 5.4.6" . 1 de mayo de 2026. Consultado el 2 de mayo de 2026 .
  2. "Insight Software Consortium / ITK - GitHub" . GitHub . 17 de diciembre de 2019.
  3. "Derechos de autor y licencia" .
  • Yoo, TS; Ackerman, MJ; Lorensen, WE; et  al. (2002). "Diseño de ingeniería y algoritmos para una API de procesamiento de imágenes: un informe técnico sobre ITK—el Insight Toolkit". Stud Health Technol Inform . 85 : 586–92 . PMID 15458157 . 
  • Yoo, TS; Metaxas, DN (dic. 2005). "Ciencia abierta: combinación de datos abiertos y software de código abierto: análisis de imágenes médicas con Insight Toolkit" . Med Image Anal . 9 (6): 503–6 . doi : 10.1016/j.media.2005.04.008 . PMID 16169766 . 
  • Prior, FW; Erickson, BJ; Tarbox, L (noviembre de 2007). "Proyectos de software de código abierto del grupo de interés especial caBIG In Vivo Imaging Workspace Software" . J Digit Imaging . 20 (Supl. 1): 94–100 . doi : 10.1007/s10278-007-9061-4 . PMC 2039820. PMID 17846835 .  
  • ITK