def plot_colormap(self, x, y, z, num_contours=5, contour_spacing_dB=5):
        """Plot *x*, *y* and *z* on a colourmap, with colour intervals defined
        by *num_contours* at *contour_spacing_dB* intervals."""

        #self.PlotWidget.removeItem(self.z_img)

        self.x = x
        self.y = y
        self.z = z

        self.num_contours = num_contours
        self.contour_spacing_dB = contour_spacing_dB
        self.update_lowest_contour()

        # Set up axes:
        x_axis = self.PlotWidget.getAxis('bottom')
        y_axis = self.PlotWidget.getAxis('left')

        self.x_scale_fact = self.get_scale_fact(x)
        self.y_scale_fact = self.get_scale_fact(y)

        x_axis.setScale(self.x_scale_fact)
        y_axis.setScale(self.y_scale_fact)

        #self.autoRange()

        self.z_img = ImageItem(z.transpose())
        self.z_img.setLookupTable(self.lookup_table)
        self.z_img.setLevels([self.lowest_contour, self.highest_contour])

        self.PlotWidget.addItem(self.z_img)

        self.PlotWidget.autoRange()
예제 #2
0
    def __init__(self, diff, parent=None):
        super(SideView, self).__init__(parent=parent)
        self.parent = parent
        self.brain = parent.brain
        self.diff = diff

        self.view1 = ViewBox()
        self.setCentralItem(self.view1)

        # Making Images out of data
        self.brain.section = (self.brain.section + self.diff) % 3
        self.i = int(self.brain.shape[self.brain.section] / 2)
        data_slice = self.brain.get_data_slice(self.i)
        self.brain_img1 = ImageItem(
            data_slice,
            autoDownsample=False,
            compositionMode=QtGui.QPainter.CompositionMode_SourceOver)
        self.brain.section = (self.brain.section - self.diff) % 3

        self.view1.addItem(self.brain_img1)
        self.view1.setAspectLocked(True)

        self.view1.setFixedHeight(250)
        self.view1.setFixedWidth(250)
        self.setMinimumHeight(250)

        self.vLine = InfiniteLine(angle=90, movable=False)
        self.hLine = InfiniteLine(angle=0, movable=False)
        self.vLine.setVisible(False)
        self.hLine.setVisible(False)
        self.view1.addItem(self.vLine, ignoreBounds=True)
        self.view1.addItem(self.hLine, ignoreBounds=True)
예제 #3
0
    def __init__(self, model_wrapper, statusbar, parent=None):
        """
        The Plot2DWidget is responsible for rendering the 2D chromatogram data.
        :param model_wrapper: the wrapper of the model.
        :param parent: the parent of this Widget.
        """
        super().__init__(parent=parent)

        self.listener = Plot2DListener(self, model_wrapper, statusbar)
        """ The listener for the 2D plot """
        self.img = ImageItem()
        """ The image of the chromatogram"""
        self.wrapper_temp = model_wrapper  # TEMPORARY TODO What is this for?
        """A temporary reference to the wrapper?"""

        # Add the image to the plot.
        self.addItem(self.img)

        # Disable right click context menu.
        self.getPlotItem().setMenuEnabled(False)
        self.getPlotItem().getAxis('bottom').enableAutoSIPrefix(False)
        self.getPlotItem().getAxis('left').enableAutoSIPrefix(False)

        model_wrapper.add_observer(self, self.notify)

        # call notify to draw the model. NOTE: The if statement isn't nesessary, it checks in notify if there is
        # a model or not.
        self.notify('model', model_wrapper.model)
예제 #4
0
 def update_img(self, i: int, j: int, img: pg.ImageItem):
     """Template function for creating image update callback functions.
     i is the row axis, j is the col axis corresponding to the image. xy is 0, 1 and zy is 2, 1"""
     data_slice = [self.cursor.index[i].val for i in range(self.data.ndim)]
     data_slice[i] = slice(None)
     data_slice[j] = slice(None)
     if j > i:
         img.setImage(self.data_slice2d(i, j))
     else:
         img.setImage(self.data_slice2d(i, j).T)
예제 #5
0
 def addImageMsg(self, img=DEFAULT_IMG, lr=True, head=DEFAULT_HEAD):
     it = QListWidgetItem(self)
     wid = self.size().width()
     item = ImageItem(it, self, img, lr, head)  #增加必须指定本list和本item用于删除item
     # item.setEnabled(False) #对象灰度显示,不能导致ITEM不可选
     it.setSizeHint(item.sizeHint())
     it.setFlags(Qt.ItemIsEnabled)  # 设置Item不可选择
     self.addItem(it)
     self.setItemWidget(it, item)
     self.setCurrentItem(it)
예제 #6
0
 def __init_ui__(self):
     self.setWindowTitle('Image Viewer')
     self.image_plot = self.addPlot()
     self.image_plot.vb.setAspectLocked()
     self.image_plot.vb.invertY()
     self.image_item = ImageItem()
     self.image_plot.addItem(self.image_item)
     self.hist = HistogramLUTItem()
     self.hist.setImageItem(self.image_item)
     self.addItem(self.hist)
예제 #7
0
    def _update_preview_image(image_data: Optional[np.ndarray],
                              image: ImageItem,
                              redraw_histogram: Optional[Callable[[Any],
                                                                  None]]):
        image.clear()
        image.setImage(image_data)

        if redraw_histogram:
            # Update histogram
            redraw_histogram(image.getHistogram())
예제 #8
0
    def __init__(self, parent=None, **kwargs):
        super(FilterPreviews, self).__init__(parent, **kwargs)

        widget_location = self.mapToGlobal(QPoint(self.width() / 2, 0))
        # allow the widget to take up to 80% of the desktop's height
        self.ALLOWED_HEIGHT: QRect = QGuiApplication.screenAt(widget_location).availableGeometry().height() * 0.8

        self.before_histogram_data = None
        self.after_histogram_data = None
        self.histogram = None
        self.before_histogram = None
        self.after_histogram = None
        self.combined_histograms = True
        self.histogram_legend_visible = True

        self.addLabel("Image before")
        self.addLabel("Image after")
        self.addLabel("Image difference")
        self.nextRow()

        self.image_before, self.image_before_vb, self.image_before_hist = self.image_in_vb(name="before")
        self.image_after, self.image_after_vb, self.image_after_hist = self.image_in_vb(name="after")
        self.image_difference, self.image_difference_vb, self.image_difference_hist = self.image_in_vb(
            name="difference")

        self.image_after_overlay = ImageItem()
        self.image_after_overlay.setZValue(10)
        self.image_after_vb.addItem(self.image_after_overlay)

        # Ensure images resize equally
        self.image_layout: GraphicsLayout = self.addLayout(colspan=6)
        self.image_layout.addItem(self.image_before_vb, 0, 0)
        self.image_layout.addItem(self.image_before_hist, 0, 1)
        self.image_layout.addItem(self.image_after_vb, 0, 2)
        self.image_layout.addItem(self.image_after_hist, 0, 3)
        self.image_layout.addItem(self.image_difference_vb, 0, 4)
        self.image_layout.addItem(self.image_difference_hist, 0, 5)
        self.nextRow()

        before_details = self.addLabel("")
        after_details = self.addLabel("")
        difference_details = self.addLabel("")

        self.display_formatted_detail = {
            self.image_before: lambda val: before_details.setText(f"Before: {val:.6f}"),
            self.image_after: lambda val: after_details.setText(f"After: {val:.6f}"),
            self.image_difference: lambda val: difference_details.setText(f"Difference: {val:.6f}"),
        }

        for img in self.image_before, self.image_after, self.image_difference:
            img.hoverEvent = lambda ev: self.mouse_over(ev)

        self.init_histogram()
예제 #9
0
class Image:
    """requires that parser would
    initialize self.image_array"""
    
    def gen_icon(self):
        qimage = QImage(self.image_array,
                  self.image_array.shape[1],
                  self.image_array.shape[0],
                  QImage.Format_Grayscale8)
        self.icon = QIcon(QPixmap(qimage))
        
    def gen_image_item(self, height, width):
        self.pg_image_item = ImageItem(self.image_array)
        self.pg_image_item.setRect(QRectF(0, height, width, -height))
예제 #10
0
    def __init__(self, parent=None):
        """Initialize the class.

        Parameters
        ----------
        parent : None, optional
            Top-level widget.
        """
        super().__init__(parent)
        p1 = self.addPlot()
        p1.setAspectLocked(True)
        self.image = ImageItem()
        self.image.setOpts(axisOrder='row-major')
        p1.addItem(self.image)
예제 #11
0
    def __init__(self):
        super(PreviewWidget, self).__init__()
        self.setMinimumHeight(250)
        self.setMinimumWidth(250)
        self.view = self.addViewBox(lockAspect=True, enableMenu=False)
        self.imageitem = ImageItem()
        self.textitem = TextItem(anchor=(0.5, 0))
        self.textitem.setFont(QFont('Zero Threes'))
        self.imgdata = None

        self.view.addItem(self.imageitem)
        self.view.addItem(self.textitem)
        self.textitem.hide()
        self.setSizePolicy(QSizePolicy.Minimum, QSizePolicy.Minimum)
예제 #12
0
파일: bp2d_widget.py 프로젝트: evreyuga/rpv
 def __init__(self):
     super(Bp2DWidget, self).__init__()
     # M.B. plot add to params
     self.setXRange(-60, 60)
     self.setYRange(-60, 60)
     self.img = ImageItem()
     self.addItem(self.img)
     _translate = QCoreApplication.translate
     self.setLabels(title=_translate("Bp2DWidget", "Beam pattern"),
                    left=_translate("Bp2DWidget", "Elevation, °"),
                    bottom=_translate("Bp2DWidget", "Azimuth, °"))
     self.setLogMode()
     colormap = ColorMap(*zip(*Gradients["bipolar"]["ticks"]))
     self.img.setLookupTable(colormap.getLookupTable())
예제 #13
0
 def _init_ui(self, **kwargs):
     self.setWindowTitle('Image Viewer')
     self.image_plot = self.addPlot(**kwargs)
     self.image_plot.vb.setAspectLocked()
     self.image_plot.vb.invertY()
     self.image_item = ImageItem()
     self.image_plot.addItem(self.image_item)
     self.image_plot.setMenuEnabled(False)
     self.hist = HistogramLUTItem()
     self.hist.setImageItem(self.image_item)
     self.addItem(self.hist)
     self.hist.vb.menu = CustomViewBoxMenu(self.hist.vb)
     self.hist.vb.menu.sigSigmaChanged.connect(self.set_sigma_factor)
     self.hist.vb.menu.sigRangeAsDefault.connect(self.set_limit_as_default)
     self.hist.vb.menu.sigUseClahe.connect(self.enable_clahe)
예제 #14
0
    def __init__(self, parent=None, **kwargs):
        super(FilterPreviews, self).__init__(parent, **kwargs)
        self.before_histogram_data = None
        self.after_histogram_data = None
        self.histogram = None
        self.before_histogram = None
        self.after_histogram = None

        self.combined_histograms = True
        self.histogram_legend_visible = True

        self.addLabel("Image before")
        self.addLabel("Image after")
        self.addLabel("Image difference")
        self.nextRow()

        self.image_before, self.image_before_vb = self.image_in_vb(
            name="before")
        self.image_after, self.image_after_vb = self.image_in_vb(name="after")
        self.image_difference, self.image_difference_vb = self.image_in_vb(
            name="difference")

        self.image_after_overlay = ImageItem()
        self.image_after_overlay.setZValue(10)
        self.image_after_vb.addItem(self.image_after_overlay)

        # Ensure images resize equally
        image_layout = self.addLayout(colspan=3)
        image_layout.addItem(self.image_before_vb, 0, 0)
        image_layout.addItem(self.image_after_vb, 0, 1)
        image_layout.addItem(self.image_difference_vb, 0, 2)
        self.nextRow()

        before_details = self.addLabel("")
        after_details = self.addLabel("")
        difference_details = self.addLabel("")

        self.display_formatted_detail = {
            self.image_before:
            lambda val: before_details.setText(f"Before: {val:.6f}"),
            self.image_after:
            lambda val: after_details.setText(f"After: {val:.6f}"),
            self.image_difference:
            lambda val: difference_details.setText(f"Difference: {val:.6f}"),
        }

        for img in self.image_before, self.image_after, self.image_difference:
            img.hoverEvent = lambda ev: self.mouse_over(ev)
예제 #15
0
    def __init__(self, parent=None):
        # initialization of Qt MainWindow widget
        super(PyqtgraphGraphicsWidget, self).__init__(parent)
        # # set the "canvas" to the RawImage widget
        # self.rawImg = RawImageWidget(QWidget())
        # # create a vertical box layout
        # self.vbl = QVBoxLayout()
        # # add widget to vertical box
        # self.vbl.addWidget(self.rawImg)
        # # set the layout to the vertical box
        # self.setLayout(self.vbl)

        # Create a central Graphics Layout Widget
        self.widget = GraphicsLayoutWidget()
        # self.setCentralWidget(self.win)

        # A plot area (ViewBox + axes) for displaying the image
        self.p1 = self.widget.addPlot()
        # Item for displaying image data
        self.img = ImageItem()
        self.p1.addItem(self.img)

        # create a vertical box layout
        self.vbl = QVBoxLayout()
        # add widget to vertical box
        self.vbl.addWidget(self.widget)
        # set the layout to the vertical box
        self.setLayout(self.vbl)
예제 #16
0
 def set_current_imageitem(self, imageitem: ImageItem):
     if self.current_image_item:
         self.current_image_item.deactivate()
     self.current_image_item = imageitem
     self.current_view = imageitem.getViewBox()
     self.current_image_item.activate()
     self.hist_widget.item.setImageItem(self.current_image_item)
예제 #17
0
 def img_hover_handler(self, i: int, j: int, img: pg.ImageItem,
                       evt: HoverEvent):
     """Template function for image hover handler
     i should be index for the x-axis
     j should be index for the y-axis
     img is a reference to the image"""
     if not evt.isExit():
         self.mouse_panel = 'img_' + self.index_to_coord[
             i] + self.index_to_coord[j]
         mousepnt = img.transform().map(evt.pos())
         self.mouse_pos = mousepnt
         pos = np.array([x.value for x in self.cursor.pos])
         pos[i] = mousepnt.x()
         pos[j] = mousepnt.y()
         idx = np.round(
             (pos - self.data.coord_min) / self.data.delta).astype(np.int)
         if self.data.ndim == 2:
             self.status_bar = "{0:#.3g} : x = {1:#.3g}, y = {2:#.3g} [{3:d},{4:d}]".format(
                 self.data.values[tuple(idx)], *tuple(pos), *tuple(idx))
         elif self.data.ndim == 3:
             self.status_bar = "{0:#.3g} : x = {1:#.3g}, y = {2:#.3g}, z = {3:#.3g} [{4:d},{5:d},{6:d}]".format(
                 self.data.values[tuple(idx)], *tuple(pos), *tuple(idx))
         elif self.data.ndim == 4:
             self.status_bar = "{0:#.3g} : x = {1:#.3g}, y = {2:#.3g}, z = {3:#.3g}, t = {4:#.4g} [{5:d},{6:d},{7:d},{8:d}]".format(
                 self.data.values[tuple(idx)], *tuple(pos), *tuple(idx))
         else:
             raise RuntimeError(
                 "The data ndim for an image is not 2, 3, or 4")
         self.mouse_hover.emit(self.status_bar)
         if self.shift_down:
             self.set_crosshair_to_mouse()
예제 #18
0
    def __init__(self, slice_direction, parent=None, xlink=None, ylink=None):
        super(SliceableGraphicsView, self).__init__(parent=parent)

        self.slice_direction = slice_direction

        self.setContentsMargins(0, 0, 0, 0)

        # Add axes
        self.view = SliceableAxes(slice_direction)
        self.view.axes["left"]["item"].setZValue(10)
        self.view.axes["top"]["item"].setZValue(10)
        self.setCentralItem(self.view)

        for sig in [
                'sigToggleVerticalSlice', 'sigToggleHorizontalSlice',
                'sigToggleDepthSlice', 'sigMakePrimary'
        ]:
            if hasattr(self.view, sig):
                getattr(self.view, sig).connect(getattr(self, sig))

        # Add imageitem
        self.image_item = ImageItem(axisOrder='row-major')
        self.image_item.setOpts()
        self.view.addItem(self.image_item)

        # add crosshair
        self.crosshair = BetterCrosshairROI((0, 0),
                                            parent=self.view,
                                            resizable=False)
        self.crosshair.sigMoved.connect(self.sigCrosshairMoved)
        self.view.getViewBox().addItem(self.crosshair)

        # find top-level parent NDImageView
        while not isinstance(parent, NDImageView):
            parent = parent.parent()

        # Initialize lut, levels
        self.image_item.setLevels(parent.levels, update=True)
        self.image_item.setLookupTable(parent.lut, update=True)

        # Link axes
        if ylink:
            self.view.vb.setYLink(ylink)
        if xlink:
            self.view.vb.setXLink(xlink)
예제 #19
0
    def __init__(self, parent: QWidget):
        GraphicsView.__init__(self, parent)
        layout = GraphicsLayout()
        self.setCentralItem(layout)

        self._image_item = ImageItem()
        self.viewbox = ViewBox(layout, lockAspect=True, invertY=True)
        self.viewbox.addItem(self._image_item)
        layout.addItem(self.viewbox)

        self.scale = ScaleBar(size=10, suffix='μm')
        self.scale.setParentItem(self.viewbox)
        self.scale.anchor((1, 1), (1, 1), offset=(-20, -20))
        self.scale.hide()

        self._show_mask = False
        self.blend_mode = QPainter.CompositionMode_Screen
        self.items: List[ChannelImageItem] = None
예제 #20
0
class CamView(PlotWidget):
    def __init__(self, cam: Cam, parent=None) -> None:
        super().__init__(parent=parent)
        self.cam = cam
        self.main_plot_item = self.plotItem
        self.last_centers: List[Tuple[float]] = []
        self.image_item = ImageItem(cam.read_cam())
        #cmap = colormap.get('CET-C2')
        #self.image_item.setLookupTable(cmap.getLookupTable())

        self.target = TargetItem(movable=False)
        self.main_plot_item.addItem(self.image_item)
        self.main_plot_item.addItem(self.target)

        self.iso_curve = IsocurveItem()
        self.iso_curve.setParentItem(self.image_item)
        self.iso_curve2 = IsocurveItem()
        self.iso_curve2.setParentItem(self.image_item)
        self.main_plot_item.addItem(self.iso_curve)
        self.center_hist = self.main_plot_item.plot(pen='r')

        self.update_cam()

    @Slot()
    def update_cam(self):
        #print('update')
        image = self.cam.last_image
        self.image_item.setImage(image)
        if not self.cam.last_fit is None:
            lf = self.cam.last_fit
            center = (lf.params['x0'], lf.params['y0'])
            self.target.setPos(*center)
            self.last_centers = [center] + self.last_centers[:30]
            self.iso_curve.setData(lf.best_fit, lf.best_fit.max() * 0.5)
            self.iso_curve2.setData(lf.best_fit,
                                    lf.best_fit.max() * np.exp(-2))
            arr = np.array(self.last_centers)
            self.center_hist.setData(x=arr[:, 0], y=arr[:, 1])

    @Slot()
    def reset_hist(self):
        self.last_centers = []
예제 #21
0
    def __init__(self):
        super(SliceableGraphicsView, self).__init__()

        self.setContentsMargins(0, 0, 0, 0)

        # Add axes
        self.view = SliceableAxes()
        self.view.axes["left"]["item"].setZValue(10)
        self.view.axes["top"]["item"].setZValue(10)
        self.setCentralItem(self.view)
        self.view.sigToggleVerticalSlice.connect(self.sigToggleVerticalSlice)
        self.view.sigToggleHorizontalSlice.connect(self.sigToggleHorizontalSlice)
        self.view.sigMakePrimary.connect(self.sigMakePrimary)

        # Add imageitem
        self.image_item = ImageItem()
        self.view.addItem(self.image_item)

        # add crosshair
        self.crosshair = BetterCrosshairROI((0, 0), parent=self.view, resizable=False)
        self.view.getViewBox().addItem(self.crosshair)
예제 #22
0
 def initializeModel(self, sliceLoc=0, sliceIndex=0):
     self.thisSliceLoc = sliceLoc
     self.thisSliceIndex = 0
     self.T_MRI_Ref = np.eye(4)
     self.T_patient_pixels = np.eye(4)
     self.T_pixels_patient = np.eye(4)
     self.PlottableContours = {}
     self.sliceIndGauge.setText("Slice 0 / 0")
     self.depthGauge.setText("0.0 mm")
     self.currentUID = 0
     self.UID_zero = 0
     self.PlottableImage = ImageItem()
예제 #23
0
    def __init__(self, cam: Cam, parent=None) -> None:
        super().__init__(parent=parent)
        self.cam = cam
        self.main_plot_item = self.plotItem
        self.last_centers: List[Tuple[float]] = []
        self.image_item = ImageItem(cam.read_cam())
        #cmap = colormap.get('CET-C2')
        #self.image_item.setLookupTable(cmap.getLookupTable())

        self.target = TargetItem(movable=False)
        self.main_plot_item.addItem(self.image_item)
        self.main_plot_item.addItem(self.target)

        self.iso_curve = IsocurveItem()
        self.iso_curve.setParentItem(self.image_item)
        self.iso_curve2 = IsocurveItem()
        self.iso_curve2.setParentItem(self.image_item)
        self.main_plot_item.addItem(self.iso_curve)
        self.center_hist = self.main_plot_item.plot(pen='r')

        self.update_cam()
예제 #24
0
파일: bp2d_widget.py 프로젝트: evreyuga/rpv
class Bp2DWidget(PlotWidget):

    def __init__(self):
        super(Bp2DWidget, self).__init__()
        # M.B. plot add to params
        self.setXRange(-60, 60)
        self.setYRange(-60, 60)
        self.img = ImageItem()
        self.addItem(self.img)
        _translate = QCoreApplication.translate
        self.setLabels(title=_translate("Bp2DWidget", "Beam pattern"),
                       left=_translate("Bp2DWidget", "Elevation, °"),
                       bottom=_translate("Bp2DWidget", "Azimuth, °"))
        self.setLogMode()
        colormap = ColorMap(*zip(*Gradients["bipolar"]["ticks"]))
        self.img.setLookupTable(colormap.getLookupTable())
        #gradient_legend = GradientLegend(10, 10)
        #self.addItem(gradient_legend)

    @pyqtSlot()
    def on_data_changed(self):
        sender = self.sender()
        self.img.setImage(np.rot90(sender.data, -1))
        self.img.setRect(self.__ensure_rect(np.shape(sender.data)))

    def __ensure_rect(self, shape):
        x_offset = 120. / (shape[0]-1) / 2
        y_offset = 120. / (shape[1]-1) / 2
        return QRectF(-60 - x_offset, 60 + y_offset, 120 + x_offset * 2, -120 - y_offset * 2)
예제 #25
0
 def populate_spectrogram_widget(self, widget: GraphicsLayoutWidget,
                                 game_name: str, player_name: PlayerName,
                                 electrode_name: str):
     # https://stackoverflow.com/questions/51312923/plotting-the-spectrum-of-a-wavfile-in-pyqtgraph-using-scipy-signal-spectrogram
     f, t, Sxx = self._acquire_spectrogram_signal(game_name, player_name,
                                                  electrode_name)
     plot = widget.addPlot()
     plot.setTitle('Frequency over time for electrode %s' %
                   ELECTRODES[electrode_name])
     img = ImageItem()
     plot.addItem(img)
     hist = HistogramLUTItem()
     hist.setImageItem(img)
     widget.addItem(hist)
     hist.setLevels(np.min(Sxx), np.max(Sxx))
     hist.gradient.restoreState({
         'mode':
         'rgb',
         'ticks': [(0.5, (0, 182, 188, 255)), (1.0, (246, 111, 0, 255)),
                   (0.0, (75, 0, 113, 255))]
     })
     img.setImage(Sxx)
     img.scale(t[-1] / np.size(Sxx, axis=1), f[-1] / np.size(Sxx, axis=0))
     plot.setLimits(xMin=0, xMax=t[-1], yMin=0, yMax=f[-1])
     plot.setLabel('bottom', "Time", units='s')
     plot.setLabel('left', "Frequency", units='Hz')
예제 #26
0
class PreviewWidget(GraphicsLayoutWidget):
    def __init__(self):
        super(PreviewWidget, self).__init__()
        self.setMinimumHeight(250)
        self.setMinimumWidth(250)
        self.view = self.addViewBox(lockAspect=True, enableMenu=False)
        self.imageitem = ImageItem()
        self.textitem = TextItem(anchor=(0.5, 0))
        self.textitem.setFont(QFont('Zero Threes'))
        self.imgdata = None

        self.view.addItem(self.imageitem)
        self.view.addItem(self.textitem)
        self.textitem.hide()
        self.setSizePolicy(QSizePolicy.Minimum, QSizePolicy.Minimum)

        # def textItemBounds(axis, frac=1.0, orthoRange=None):
        #     b = self.textitem.boundingRect()
        #     sx, sy = self.view.viewPixelSize()
        #     x, y = sx*b.width(), sy*b.height()
        #     if axis == 0: return (-x/2, x/2)
        #     if axis == 1: return (0, y)
        #
        # self.textitem.dataBounds = textItemBounds

    def sizeHint(self):
        return QSize(250, 250)

    def preview_header(self, header: NonDBHeader):
        try:
            data = header.meta_array()[0]
            self.setImage(data)
        except IndexError:
            self.imageitem.clear()
            self.setText('UNKNOWN DATA FORMAT')

    def setImage(self, imgdata):
        self.imageitem.clear()
        self.textitem.hide()
        self.imgdata = imgdata
        self.imageitem.setImage(np.rot90(
            np.log(self.imgdata * (self.imgdata > 0) + (self.imgdata < 1)), 3),
                                autoLevels=True)
        self.view.autoRange()

    def setText(self, text):
        self.textitem.setText(text)
        self.imageitem.clear()
        self.textitem.setVisible(True)
        self.view.autoRange()
예제 #27
0
    def __init__(self, name: str = "MIMiniImageView"):
        super().__init__()

        self.name = name.title()
        self.im = ImageItem()
        self.vb = ViewBox(invertY=True, lockAspect=True, name=name)
        self.vb.addItem(self.im)
        self.hist = HistogramLUTItem(self.im)
        graveyard.append(self.vb)

        # Sub-layout prevents resizing issues when details text changes
        image_layout = self.addLayout(colspan=2)
        image_layout.addItem(self.vb)
        image_layout.addItem(self.hist)
        self.hist.setFixedWidth(100)  # HistogramLUTItem used pixel sizes

        self.nextRow()
        self.details = self.addLabel("", colspan=2)
        self.im.hoverEvent = lambda ev: self.mouse_over(ev)

        self.axis_siblings: "WeakSet[MIMiniImageView]" = WeakSet()
        self.histogram_siblings: "WeakSet[MIMiniImageView]" = WeakSet()
예제 #28
0
    def __init__(self, parent=None):
        """Initialize the class.

        Parameters
        ----------
        parent : None, optional
            Top-level widget.
        """
        super().__init__(parent)
        self.plot = self.addPlot()
        self.plot.invertY()

        self.image = ImageItem()
        self.image.setOpts(axisOrder='row-major')
        self.plot.addItem(self.image)

        self.data = None
        self.arraySize = None
        self.boundingRect = None
        self.timeScale = None
        self.colorMap = 'viridis'
        self.image.setLookupTable(getLutFromColorMap(self.colorMap))
예제 #29
0
 def heatmap(self,
             data: np.ndarray,
             label: Optional[str] = None,
             data_range: Tuple[Optional[float],
                               Optional[float]] = (None, None),
             **kwargs) -> None:
     kwargs = Axes._add_label_to_kwargs(label, kwargs)
     self._image = ImageItem(data.T, **kwargs)
     self._raw.addItem(self._image)
     # item = ImageItem(data.T, **kwargs)
     # self._images.append(item)
     # self._raw.addItem(item)
     # if data_range[0] is not None and data_range[1] is not None:
     self._data_range = data_range
예제 #30
0
    def enable_check(self, name: str, color: List[int], pos: int,
                     func: Callable, message: str,
                     actions: Optional[List[Tuple[str, Callable]]]):
        if name not in self.enabled_checks:
            icon_path = finder.ROOT_PATH + "/gui/ui/images/exclamation-triangle-red.png"
            indicator = IndicatorIconView(self.viewbox, icon_path, pos, color,
                                          message)
            if actions is not None:
                indicator.add_actions(actions)
            overlay = ImageItem()
            self.viewbox.addItem(overlay)

            check = BadDataCheck(func, indicator, overlay, color)
            self.enabled_checks[name] = check
            self.check_for_bad_data()
예제 #31
0
class CameraPlotWidget(GraphicsLayoutWidget):

    """This class manages and displays the camera CCD frame.

    Attributes
    ----------
    image : numpy.array
        The data frame to display.
    """

    def __init__(self, parent=None):
        """Initialize the class.

        Parameters
        ----------
        parent : None, optional
            Top-level widget.
        """
        super().__init__(parent)
        p1 = self.addPlot()
        p1.setAspectLocked(True)
        self.image = ImageItem()
        self.image.setOpts(axisOrder='row-major')
        p1.addItem(self.image)
예제 #32
0
 def gen_image_item(self, height, width):
     self.pg_image_item = ImageItem(self.image_array)
     self.pg_image_item.setRect(QRectF(0, height, width, -height))