Beispiel #1
0
def reloadImageInNewImageItem(cmbROIs,
                              graphicsView,
                              pixelDataLabel,
                              roiMeanLabel,
                              self,
                              buttonList,
                              btnDraw,
                              btnErase,
                              zoomSlider,
                              zoomLabel,
                              imageSlider=None):
    try:
        logger.info("DisplayImageDrawROI.reloadImageInNewImageItem called")
        graphicsView.dictROIs.setPreviousRegionName(cmbROIs.currentText())

        if imageSlider:
            imageNumber = imageSlider.value()
        else:
            imageNumber = 1

        pixelArray = readDICOM_Image.returnPixelArray(self.selectedImagePath)
        mask = graphicsView.dictROIs.getMask(cmbROIs.currentText(),
                                             imageNumber)
        graphicsView.setImage(pixelArray, mask)
        pixelDataLabel.setText("Pixel Data:")
        roiMeanLabel.setText("ROI Mean Value:")
        setUpImageEventHandlers(self, graphicsView, pixelDataLabel, btnDraw,
                                btnErase, roiMeanLabel, cmbROIs, buttonList,
                                zoomSlider, zoomLabel, imageSlider)
    except Exception as e:
        print('Error in DisplayImageDrawROI.reloadImageInNewImageItem: ' +
              str(e))
        logger.error(
            'Error in DisplayImageDrawROI.reloadImageInNewImageItem: ' +
            str(e))
def returnPixelArray(imagePath, *args):
    """Applies a low and high threshold on an image and returns the resulting maskArray"""
    try:
        if os.path.exists(imagePath):
            pixelArray = readDICOM_Image.returnPixelArray(imagePath)
            derivedImage = thresholdPixelArray(pixelArray, *args)
            return derivedImage
        else:
            return None
    except Exception as e:
            print('Error in function thresholdDICOM_Image.returnPixelArray: ' + str(e))
def returnPixelArray(imagePath, func):
    """Applies the algorithm in the function, func to
   an image and returns the resulting PixelArray"""
    try:
        if os.path.exists(imagePath):
            dataset = readDICOM_Image.getDicomDataset(imagePath)
            pixelArray = readDICOM_Image.returnPixelArray(imagePath)
            derivedImage = func(pixelArray, dataset)
            return derivedImage
        else:
            return None
    except Exception as e:
        print('Error in function #.returnPixelArray: ' + str(e))
Beispiel #4
0
def displayImageROISubWindow(self, derivedImagePath=None):
    """
    Creates a subwindow that displays one DICOM image and allows the creation of an ROI on it 
    """
    try:
        logger.info("DisplayImageDrawROI displayImageROISubWindow called")
        pixelArray = readDICOM_Image.returnPixelArray(self.selectedImagePath)

        hbox, layout, lblImageMissing, subWindow = setUpGraphicsViewSubWindow(
            self)
        windowTitle = displayImageCommon.getDICOMFileData(self)
        subWindow.setWindowTitle(windowTitle)

        graphicsView, zoomSlider, zoomLabel = setUpGraphicsView(hbox)

        pixelDataLabel, roiMeanLabel = setPixelDataLabels(layout)
        (cmbROIs, buttonList, btnDraw,
         btnErase) = setUpROIButtons(self, layout, pixelDataLabel,
                                     roiMeanLabel, graphicsView, zoomSlider,
                                     zoomLabel)

        spinBoxIntensity, spinBoxContrast = setUpLevelsSpinBoxes(
            layout, graphicsView, cmbROIs)
        if pixelArray is None:
            lblImageMissing.show()
            graphicsView.setImage(np.array([[0, 0, 0], [0, 0, 0]]))
        else:
            graphicsView.setImage(pixelArray)

        spinBoxIntensity.blockSignals(True)
        spinBoxIntensity.setValue(graphicsView.graphicsItem.intensity)
        spinBoxIntensity.blockSignals(False)
        spinBoxContrast.blockSignals(True)
        spinBoxContrast.setValue(graphicsView.graphicsItem.contrast)
        spinBoxContrast.blockSignals(False)

        setUpImageEventHandlers(self, graphicsView, pixelDataLabel, btnDraw,
                                btnErase, roiMeanLabel, cmbROIs, buttonList,
                                zoomSlider, zoomLabel)

    except (IndexError, AttributeError):
        subWindow.close()
        msgBox = QMessageBox()
        msgBox.setWindowTitle("View a DICOM series or image with an ROI")
        msgBox.setText("Select either a series or an image")
        msgBox.exec()
    except Exception as e:
        print('Error in DisplayImageDrawROI.displayImageROISubWindow: ' +
              str(e))
        logger.error(
            'Error in DisplayImageDrawROI.displayImageROISubWindow: ' + str(e))
Beispiel #5
0
def imageROISliderMoved(self, seriesName, imageList, imageSlider,
                        lblImageMissing, pixelDataLabel, roiMeanLabel, cmbROIs,
                        btnDraw, btnErase, spinBoxIntensity, spinBoxContrast,
                        graphicsView, subWindow, buttonList, zoomSlider,
                        zoomLabel):
    """On the Multiple Image with ROI Display sub window, this
        function is called when the image slider is moved. 
        It causes the next image in imageList to be displayed"""
    try:
        logger.info("DisplayImageDrawROI.imageROISliderMoved called")
        imageNumber = imageSlider.value()

        currentImageNumber = imageNumber - 1
        if currentImageNumber >= 0:
            self.selectedImagePath = imageList[currentImageNumber]
            #print("imageSliderMoved before={}".format(self.selectedImagePath))
            pixelArray = readDICOM_Image.returnPixelArray(
                self.selectedImagePath)
            setButtonsToDefaultStyle(buttonList)
            if pixelArray is None:
                lblImageMissing.show()
                graphicsView.setImage(np.array([[0, 0, 0], [0, 0, 0]]))
            else:
                reloadImageInNewImageItem(cmbROIs, graphicsView,
                                          pixelDataLabel, roiMeanLabel, self,
                                          buttonList, btnDraw, btnErase,
                                          zoomSlider, zoomLabel, imageSlider)
                spinBoxIntensity.blockSignals(True)
                spinBoxIntensity.setValue(graphicsView.graphicsItem.intensity)
                spinBoxIntensity.blockSignals(False)
                spinBoxContrast.blockSignals(True)
                spinBoxContrast.setValue(graphicsView.graphicsItem.contrast)
                spinBoxContrast.blockSignals(False)
                setUpImageEventHandlers(self, graphicsView, pixelDataLabel,
                                        btnDraw, btnErase, roiMeanLabel,
                                        cmbROIs, buttonList, zoomSlider,
                                        zoomLabel, imageSlider)

            subWindow.setWindowTitle(seriesName + ' - ' +
                                     os.path.basename(self.selectedImagePath))
        # print("imageSliderMoved after={}".format(self.selectedImagePath))
    except Exception as e:
        print('Error in DisplayImageDrawROI.imageROISliderMoved: ' + str(e))
        logger.error('Error in DisplayImageDrawROI.imageROISliderMoved: ' +
                     str(e))
Beispiel #6
0
def displayROIMeanAndStd(self,
                         roiMeanLabel,
                         graphicsView,
                         cmbROIs,
                         imageSlider=None):
    logger.info("DisplayImageDrawROI.displayROIMeanAndStd called")
    if imageSlider:
        imageNumber = imageSlider.value()
    else:
        imageNumber = 1
    pixelArray = readDICOM_Image.returnPixelArray(self.selectedImagePath)
    regionName = cmbROIs.currentText()
    mask = graphicsView.dictROIs.getMask(regionName, imageNumber)
    if mask is not None:
        mean, std = getRoiMeanAndStd(mask, pixelArray)
        str = "ROI mean = {}, standard deviation = {}".format(mean, std)
    else:
        str = ""
    roiMeanLabel.setText(str)