SISTEMA DE APOYO PARA IDENTIFICACIÓN Y ESTIMACIÓN DE VOLUMETRÍA DE NÓDULOS PULMONARES. MANUAL DE ADMINISTRADOR Pontificia Universidad Javeriana José Alejandro León Andrade Ingeniería de Sistemas 2015 1 Contenido Tabla de ilustraciones.................................................................................................................... 2 1. CONTEXTO ............................................................................................................................. 3 2. LIMITACIONES, RESTRICCIONES Y SUPOSICIONES ................................................................ 3 3. ORGANIZACIÓN DEL CODIGO FUENTE .................................................................................. 3 4. a. CONTROLADOR ................................................................................................................. 3 b. MODELO ............................................................................................................................ 4 c. VISTA ................................................................................................................................. 7 Typedef usados: .................................................................................................................... 9 Tabla de ilustraciones Ilustración 1: Estructura del Controlador ...................................................................................... 3 Ilustración 2: Estructura del Modelo ............................................................................................. 4 Ilustración 3: Vista ......................................................................................................................... 7 Ilustración 4: Componente Resources .......................................................................................... 8 2 1. CONTEXTO En este documento se detallan datos importantes para poder realizar cambios en el sistema en caso que se requiera. En caso de querer modificar, eliminar o agregar elementos de software por favor ver antes (Anexo SRS, SDD, Manual de instalación). 2. LIMITACIONES, RESTRICCIONES Y SUPOSICIONES - El sistema actual, está desarrollado con las siguientes versiones de software de desarrollo: o ITK : InsightToolkit-4.7.1 o VTK: VTK-6.1.0 o QT: qt-opensource-4.8.6-1 o Software adicional (Ver Anexo Manual de instalación). - Se recomienda usar QT creator para realizar cualquier cambio o actualización. - El archivo CmakeList no debería cambiar, siempre y cuando se siga la convención de organización de los códigos fuentes tal cual está el sistema. 3. ORGANIZACIÓN DEL CODIGO FUENTE El código fuente está organizado de acuerdo a la arquitectura de Modelo –Vista –Controlador (MVC). Al ser un proyecto realizado en C++, para cada componente de la arquitectura se tienen los encabezados (headers) o fuentes (Sources). Cabe recordar que si quiere realizar cambios en algún método o algún parámetro de una clase debe dirigirse primero a la carpeta Headers (.h) donde está la clase que desea cambiar y agregar el nuevo método o atributo. Todo lo relacionado con la lógica debe realizarlo en su respectivo Source (.cpp) a. CONTROLADOR Ilustración 1: Estructura del Controlador 3 Está compuesto principalmente por el Coordinator y el main. Tenga en cuenta que para realizar cambios en el controlador, es porque previamente debió haber hecho un cambio en el modelo. Además, si se agrega alguna nueva funcionalidad en la vista, se deben agregar los métodos necesarios en el coordinador con el fin de manejar las nuevas funcionalidades. La clase main únicamente inicia la aplicación, generalmente los cambios y actualizaciones deben hacerse sobre el coordinador. b. MODELO Ilustración 2: Estructura del Modelo Está compuesto por las clases que usan exclusivamente filtros de ITK, si desea realizar algún cambio en la lógica del sistema, debe dirigirse primero al modelo y realizar los cambios que sean necesarios. Solamente debe hacer cambios en el modelo si requiere agregar o actualizar funcionalidades relacionadas con el procesamiento de imágenes médicas. A continuación se muestran los filtros que se utilizan en cada uno de los métodos de las clases, con el fin que sea sencillo modificarlas en caso que requiera actualizar la aplicación. BinaryFilters: - orFunction: o - andFunction: o - itk::OrImageFilter itk::AndImageFilter closingFilter: 4 - - o itk::BinaryBallStructuringElement o itk::BinaryMorphologicalClosingImageFilter openingFilter: o itk::BinaryBallStructuringElement o itk::BinaryMorphologicalOpeningImageFilter notImage: o - - - erodeGrayScaleFilter: o itk::BinaryBallStructuringElement o itk::GrayscaleErodeImageFilter dilateGrayScaleFilter: o itk::BinaryBallStructuringElement o itk::GrayscaleDilateImageFilter dilateFilter: o itk::BinaryBallStructuringElement o itk::BinaryDilateImageFilter BoumaMethos: - rowWiseMethod: o - typedef itk::ImageDuplicator clearSmallRegions: o itk::BinaryImageToLabelMapFilter o itk::LabelMapToLabelImageFilter o itk::LabelStatisticsImageFilter DICOMIOManage: - castImage: o itk::BinaryNotImageFilter itk::ImageToVTKImageFilter DICOMProperties: - - loadValues: o itk::ImageSeriesReader o itk::GDCMImageIO o itk::GDCMSeriesFileNames o itk::MetaDataDictionary o itk::MetaDataObject o itk::MetaDataObjectBase printMetadata: 5 o itk::ImageSeriesReader o itk::GDCMImageIO o itk::GDCMSeriesFileNames o itk::MetaDataDictionary o itk::MetaDataObject o itk::MetaDataObjectBase ImageFilters: - filtroMediana: o - - regionGrowing: o itk::CastImageFilter o itk::CurvatureFlowImageFilter o itk::ConnectedThresholdImageFilter binaryThreshold: o - - - - o itk::BinaryBallStructuringElement o itk::GrayscaleErodeImageFilter dilateFilter: o itk::BinaryBallStructuringElement o itk::GrayscaleDilateImageFilter distanceMap: o itk::ConnectedComponentImageFilter o itk::DanielssonDistanceMapImageFilter o itk::RescaleIntensityImageFilter signedDistanceMap: - itk::SignedDanielssonDistanceMapImageFilter subtractImage: o - itk::MaskImageFilter erodeFilter: o - itk::BinaryThresholdImageFilter maskImage: o - itk::MedianImageFilter itk::SubtractImageFilter segmentVessels: o itk::HessianRecursiveGaussianImageFilter o itk::Hessian3DToVesselnessMeasureImageFilter eigenValuesAnalysis: 6 o itk::HessianRecursiveGaussianImageFilter o itk::SymmetricEigenAnalysisImageFilter o itk::ImageDuplicator o itk::CastImageFilter o itk::RescaleIntensityImageFilter ImageProcessingUtils: - getMaximumValue: o - getMinimumValue: o - - - itk::MinimumMaximumImageCalculator itk::MinimumMaximumImageCalculator histogram: o itk::Statistics::ImageToHistogramFilter o itk::Statistics::MaskedImageToHistogramFilter histogramFilterToVector: o itk::Statistics::ImageToHistogramFilter o itk::Statistics::MaskedImageToHistogramFilter getImageEdge: o itk::BinaryContourImageFilter c. VISTA Ilustración 3: Vista 7 Compuesto exclusivamente por las clases que usan filtros de QT-VTK, si desea realizar algún cambio en la interfaz gráfica debe realizar primero los cambios que sean necesarios en una de estas clases. Si desea modificar elementos a la interfaz gráfica como botones, textos, etc. Debe modificar el archivo *.ui de la forma que quiera cambiar, mediante el software QT Designer. Un elemento importante de la vista es el componente “Resources”, donde se guardan y administran los iconos e imágenes propias de la interfaz gráfica. Ilustración 4: Componente Resources 8 4. Typedef usados: Dada la dificultad en los nombres de las variables usadas en ITK y VTK, se suele usar dichas variables con un nombre alternativo, para ello se usa la palabra reservada en c++ “typedef” Los typedef usados en el proyecto son principalmente: Definición de imagen DICOM ITK. typedef signed short PixelType; const unsigned int Dimension = 3; typedef itk::Image< PixelType, Dimension > ImageType; Definicion de imagen Binaria typedef unsigned char PixelBinaryType; typedef itk::Image<PixelBinaryType, Dimension> ImageBinaryType; Definicion de imagen de tipo float (para algoritmo de Tubularidad, mapa de distancias y valores propios) typedef itk::Image<float, Dimension> ImageFloatType; Definición de imagen de valores propios. typedef itk::Vector<double, Dimension> E_PixelType; typedef itk::Image<E_PixelType, Dimension > E_ImageType; Definicion de mapa de etiquetas. typedef itk::BinaryImageToShapeLabelMapFilter<ImageBinaryType> BinaryImageToShapeLabelMapFilterType; 9