ITK es un marco de desarrollo de aplicaciones multiplataforma de código abierto ampliamente utilizado para el desarrollo de programas de registro y segmentación de imágenes . La segmentación es el proceso de identificar y clasificar datos que se encuentran en una representación muestreada digitalmente. Normalmente, la representación muestreada es una imagen adquirida a partir de instrumentos médicos como escáneres de tomografía computarizada o resonancia magnética. El registro es la tarea de alinear o desarrollar correspondencias entre datos. Por ejemplo, en el entorno médico, una tomografía computarizada se puede alinear con una resonancia magnética para combinar la información contenida en ambas.
ITK fue desarrollado con financiación de la Biblioteca Nacional de Medicina ( EE.UU. ) como un recurso abierto de algoritmos para analizar las imágenes del Visible Human Project . ITK significa The Insight Segmentation and Registration Toolkit . El conjunto de herramientas proporciona algoritmos de registro y segmentación 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 está empaquetado para Python . También se está desarrollando activamente una rama del proyecto ITK que proporciona una interfaz simplificada para ITK en ocho lenguajes de programación, SimpleITK .
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 segmentación y registro de código abierto, que con el tiempo llegó a conocerse como Insight Toolkit (ITK). El director del proyecto NLM de ITK fue el Dr. Terry Yoo, quien coordinó a los seis contratistas principales que formaron el Insight Software Consortium. Estos miembros del consorcio incluían a los tres socios comerciales GE Corporate R&D, Kitware , Inc. y MathSoft (el nombre de la empresa ahora es Insightful); y 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 la UNC (quienes posteriormente se mudaron a Kitware), Ross Whitaker con Josh Cates en UT. (ambos ahora en Utah) y Dimitris Metaxas en UPenn (Dimitris Metaxas está ahora en la Universidad de Rutgers ). Además, varios subcontratistas completaron el consorcio, incluidos Peter Ratiu del Brigham & Women's Hospital, Celina Imielinska y Pat Molholt de la Universidad de Columbia , Jim Gee del Grasp Lab de UPenn y George Stetten de la Universidad de Pittsburgh .
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 que se encuentran en una representación muestreada digitalmente. Normalmente, la representación muestreada es una imagen adquirida a partir de instrumentos médicos como escáneres de tomografía computarizada o resonancia magnética . El registro es la tarea de alinear o desarrollar correspondencias entre datos. Por ejemplo, en el entorno médico, una tomografía computarizada se puede alinear con una resonancia magnética para combinar la información contenida en ambas.
ITK está implementado en C++. ITK es multiplataforma y utiliza el entorno de compilación CMake para gestionar el proceso de compilación. Además, un proceso de ajuste automatizado genera interfaces entre C++ y otros lenguajes de programación como Java y Python. Esto permite a los desarrolladores crear software utilizando una variedad de lenguajes de programación. La implementación de ITK emplea la técnica de programación genérica mediante el uso de plantillas C++.
Debido a que ITK es un proyecto de código abierto, los desarrolladores de todo el mundo pueden usar, depurar, mantener y ampliar el software. ITK utiliza un modelo de desarrollo de software denominado programación extrema . La programación extrema colapsa la metodología habitual de creación de software en un proceso simultáneo e iterativo de diseño-implementación-prueba-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 es lo que ayuda a gestionar la rápida evolución del software. Las pruebas son lo que mantiene estable el software. En ITK, existe un extenso proceso de prueba (usando CDash) que mide la calidad diariamente. El Panel de pruebas de ITK se publica continuamente y refleja la calidad del software.
El Insight Toolkit fue desarrollado inicialmente por seis organizaciones principales.
y tres subcontratistas
Después de sus inicios, el software continuó creciendo con contribuciones de otras instituciones, incluidas
La financiación del proyecto proviene de la Biblioteca Nacional de Medicina de los Institutos Nacionales de Salud. NLM, a su vez, contó con el apoyo de instituciones miembros de los NIH (ver patrocinadores).
Los objetivos del proyecto incluyen los siguientes:
El código fuente de Insight Toolkit se distribuye bajo una licencia Apache 2.0 (aprobada por la Open Source Initiative ).
La filosofía de código abierto del Insight Toolkit se amplió para apoyar la ciencia abierta , en particular proporcionando acceso abierto a publicaciones en el ámbito del procesamiento de imágenes médicas. Estas publicaciones están disponibles gratuitamente a través del Insight Journal.
Como ITK es un sistema de código abierto, cualquiera puede contribuir al proyecto. Una persona interesada en contribuir con ITK puede realizar las siguientes acciones
Cualquiera puede enviar un parche y no es necesario tener acceso de escritura al repositorio para fusionar un parche o 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 tiene derechos de autor de Insight Software Consortium, una alianza sin fines de lucro de organizaciones e individuos interesados en apoyar a ITK. A partir de la versión 3.6 de ITK, el software se distribuye bajo una licencia de código abierto BSD. Permite su uso para cualquier propósito, con la posible excepción del código que se encuentra en el directorio patentado, y con el reconocimiento adecuado. 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. Desde la versión 3.6 a la 3.20 se utilizó una licencia BSD simplificada. Las versiones de ITK anteriores a ITK 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 tener una licencia aprobada por OSI .
Las siguientes secciones resumen las características técnicas del kit de herramientas Insight ITK de NLM. Filosofía de diseño Las siguientes son características clave de la filosofía de diseño del kit de herramientas.
Las siguientes son características clave de la arquitectura del kit de herramientas.
Las siguientes son características clave de la filosofía de implementación del kit de herramientas.
ITK utiliza el entorno de compilación CMake (creación multiplataforma). CMake es un sistema operativo y un proceso de compilación independiente del compilador que produce archivos de compilación nativos apropiados para el sistema operativo y el compilador con el que se ejecuta. En Unix, CMake produce archivos MAKE y en Windows, CMake genera proyectos y espacios de trabajo.
ITK admite un amplio entorno de pruebas. El código se prueba diariamente (e incluso continuamente) en muchas combinaciones de hardware/sistema operativo/compilador y los resultados se publican diariamente en el panel de pruebas de ITK. Usamos Dart para gestionar el proceso de prueba y publicar los resultados en el panel.
ITK utiliza muchos 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.
#incluir "itkImagen.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 :: Lector de puntero = ReaderType :: Nuevo (); WriterType :: Puntero escritor = WriterType :: Nuevo (); lector -> SetFileName ( "lungCT.dcm" ); escritor -> SetFileName ( "smoothedLung.hdr" ); FilterType :: Filtro de puntero = FilterType :: Nuevo (); filtro -> SetInput ( lector -> GetOutput () ); escritor -> SetInput ( filtro -> GetOutput () ); filtro -> SetSigma ( 45.0 ); prueba { escritor -> Actualizar (); } catch ( itk :: ExceptionObject & excp ) { std :: cerr << excp << std :: endl ; devolver EXIT_FAILURE ; } }
#incluir "itkImagen.h" int main () { usando InputImageType = itk :: Imagen < firmada corta , 3 > ; usando OutputImageType = itk :: Imagen < característica sin firmar , 3 > ; usando ReaderType = itk :: ImageFileReader <InputImageType> ; usando WriterType = itk :: ImageFileWriter <OutputImageType> ; usando FilterType = itk :: ConnectedThresholdImageFilter < InputImageType , OutputImageType > ; ReaderType :: Lector de puntero = ReaderType :: Nuevo (); WriterType :: Puntero escritor = WriterType :: Nuevo (); lector -> SetFileName ( "brain.dcm" ); escritor -> SetFileName ( "whiteMatter.hdr" ); FilterType :: Filtro de puntero = FilterType :: Nuevo (); filtro -> SetInput ( lector -> GetOutput () ); escritor -> SetInput ( filtro -> GetOutput () ); filtro -> SetMultiplier ( 2.5 ); ImageType :: semilla IndexType ; semilla [ 0 ] = 142 ; semilla [ 1 ] = 97 ; semilla [ 2 ] = 63 ; filtrar -> AgregarSemilla ( semilla ); prueba { escritor -> Actualizar (); } catch ( itk :: ExceptionObject & excp ) { std :: cerr << excp << std :: endl ; devolver EXIT_FAILURE ; } }
Hay varios recursos disponibles para aprender más sobre ITK.
Una excelente manera de aprender sobre ITK es ver cómo se usa. Hay cuatro lugares para encontrar aplicaciones de ITK.
En 2004, ITK-SNAP (sitio web) se desarrolló a partir de SNAP y se convirtió en un popular software de segmentación gratuito que utiliza ITK y tiene una interfaz de usuario sencilla y agradable.
Visite el foro de discusión de ITK para obtener contactos y ayuda de la comunidad.