コード例 #1
0
    def hl_table2canvas(self, w, res_dict):
        """Highlight mask on canvas when user click on table."""
        objlist = []

        # Remove existing highlight
        if self.maskhltag:
            try:
                self.canvas.delete_object_by_tag(self.maskhltag, redraw=False)
            except:
                pass

        for sub_dict in itervalues(res_dict):
            for seqno in sub_dict:
                mobj = self._maskobjs[int(seqno) - 1]
                dat = self._rgbtomask(mobj)
                obj = self.dc.Image(
                    0, 0, masktorgb(dat,
                                    color=self.hlcolor,
                                    alpha=self.hlalpha))
                objlist.append(obj)

        # Draw on canvas
        if len(objlist) > 0:
            self.maskhltag = self.canvas.add(self.dc.CompoundObject(*objlist))

        self.fitsimage.redraw()  # Force immediate redraw
コード例 #2
0
    def mark_dqs(self):
        """Mark all pixels affected by selected DQ flag(s)."""
        if not self.gui_up:
            return True

        # Clear existing canvas
        if self.pxdqtag:
            try:
                self.canvas.deleteObjectByTag(self.pxdqtag, redraw=False)
            except:
                pass

        if self._curshape is None:
            return True

        # Recreate pixel marking and label
        p_obj = self.dc.Point(self.xcen,
                              self.ycen,
                              self._point_radius,
                              color=self.pxdqcolor)
        lbl_obj = self.dc.Text(self.xcen,
                               self.ycen + self._text_label_offset,
                               self._text_label,
                               color=self.pxdqcolor)

        # Pixel list is set by redo().
        # To save memory, composite mask is generated on the fly.
        mask = np.zeros(self._curshape, dtype=np.bool)
        selected_items = self.imdqlist.selectedItems()
        for item in selected_items:
            key = int(str(item.text()).split()[0])
            mask[self._curpxmask[key]] = True

        # Generate canvas mask overlay
        npix = np.count_nonzero(mask)
        if npix > 0:
            self.logger.debug('Overlaying mask for {0} pixels'.format(npix))
            self.w.npix.set_text('{0}/{1} ({2:.3f}%)'.format(
                npix, mask.size, 100 * npix / mask.size))
            m_obj = self.dc.Image(
                0, 0,
                masktorgb(mask, color=self.imdqcolor, alpha=self.imdqalpha))
            self.pxdqtag = self.canvas.add(
                self.dc.CompoundObject(m_obj, p_obj, lbl_obj))
        else:
            self.w.npix.set_text('0')
            self.pxdqtag = self.canvas.add(
                self.dc.CompoundObject(p_obj, lbl_obj))

        return True
コード例 #3
0
ファイル: DQInspect.py プロジェクト: stscieisenhamer/stginga
    def mark_dqs(self):
        """Mark all pixels affected by selected DQ flag(s)."""
        if not self.gui_up:
            return True

        # Clear existing canvas
        if self.pxdqtag:
            try:
                self.canvas.deleteObjectByTag(self.pxdqtag, redraw=False)
            except:
                pass

        if self._curshape is None:
            self.fitsimage.redraw()  # Need this to clear mask immediately
            return True

        # Recreate pixel marking and label
        p_obj = self.dc.Point(self.xcen, self.ycen, self._point_radius,
                              color=self.pxdqcolor)
        lbl_obj = self.dc.Text(self.xcen, self.ycen + self._text_label_offset,
                               self._text_label, color=self.pxdqcolor)

        # Pixel list is set by redo().
        # To save memory, composite mask is generated on the fly.
        mask = np.zeros(self._curshape, dtype=np.bool)
        selected_items = self.imdqlist.selectedItems()
        for item in selected_items:
            key = int(str(item.text()).split()[0])
            mask[self._curpxmask[key]] = True

        # Generate canvas mask overlay
        npix = np.count_nonzero(mask)
        if npix > 0:
            self.logger.debug('Overlaying mask for {0} pixels'.format(npix))
            self.w.npix.set_text('{0}/{1} ({2:.3f}%)'.format(
                npix, mask.size, 100 * npix / mask.size))
            m_obj = self.dc.Image(0, 0,
                masktorgb(mask, color=self.imdqcolor, alpha=self.imdqalpha))
            self.pxdqtag = self.canvas.add(
                self.dc.CompoundObject(m_obj, p_obj, lbl_obj))
        else:
            self.w.npix.set_text('0')
            self.pxdqtag = self.canvas.add(
                self.dc.CompoundObject(p_obj, lbl_obj))

        self.fitsimage.redraw()  # Need this to clear mask immediately
        return True
コード例 #4
0
    def load_file(self, filename):
        """Load mask image.

        Results are appended to previously loaded masks.
        This can be used to load mask per color.

        """
        if not os.path.isfile(filename):
            return

        self.logger.info('Loading mask image from {0}'.format(filename))

        try:
            # 0=False, everything else True
            dat = fits.getdata(filename).astype(np.bool)
        except Exception as e:
            self.logger.error('{0}: {1}'.format(e.__class__.__name__, str(e)))
            return

        key = '{0},{1}'.format(self.maskcolor, self.maskalpha)

        if key in self.tree_dict:
            sub_dict = self.tree_dict[key]
        else:
            sub_dict = {}
            self.tree_dict[key] = sub_dict

        # Add to listing
        seqstr = '{0:04d}'.format(self._seqno)  # Prepend 0s for proper sort
        sub_dict[seqstr] = Bunch.Bunch(ID=seqstr,
                                       MASKFILE=os.path.basename(filename))
        self._treepaths.append((key, seqstr))
        self._seqno += 1

        # Create mask layer
        obj = self.dc.Image(0, 0, masktorgb(
            dat, color=self.maskcolor, alpha=self.maskalpha))
        self._maskobjs.append(obj)

        self.redo()
コード例 #5
0
ファイル: TVMask.py プロジェクト: SaOgaz/ginga
    def load_file(self, filename):
        """Load mask image.

        Results are appended to previously loaded masks.
        This can be used to load mask per color.

        """
        if not os.path.isfile(filename):
            return

        self.logger.info('Loading mask image from {0}'.format(filename))

        try:
            # 0=False, everything else True
            dat = fits.getdata(filename).astype(np.bool)
        except Exception as e:
            self.logger.error('{0}: {1}'.format(e.__class__.__name__, str(e)))
            return

        key = '{0},{1}'.format(self.maskcolor, self.maskalpha)

        if key in self.tree_dict:
            sub_dict = self.tree_dict[key]
        else:
            sub_dict = {}
            self.tree_dict[key] = sub_dict

        # Add to listing
        seqstr = '{0:04d}'.format(self._seqno)  # Prepend 0s for proper sort
        sub_dict[seqstr] = Bunch.Bunch(ID=seqstr,
                                       MASKFILE=os.path.basename(filename))
        self._treepaths.append((key, seqstr))
        self._seqno += 1

        # Create mask layer
        obj = self.dc.Image(0, 0, masktorgb(
            dat, color=self.maskcolor, alpha=self.maskalpha))
        self._maskobjs.append(obj)

        self.redo()
コード例 #6
0
 def __init__(self, filepaths):
     self._views = []
     self.images = []
     self.filepaths = filepaths
     self._create_image_list()
     self._determin_shape()
     self._current_image_index = 0
     self.current_color_index = 0
     self._selection_index = 0
     self._zoom = 1.0
     self._center = None
     self._alpha = 1.0
     self._flip_x = False
     self._flip_y = False
     self._swap_xy = False
     mask = np.zeros(self.shape[:2], dtype=np.bool)
     self._maskrgb = masktorgb(mask, self.color, self.alpha)
     self._roi_data = self._maskrgb.get_data().astype(float)
     self._maskrgb_obj = Image(0, 0, self._maskrgb)
     self._subsets = []
     self._simultaneous_roi = False
     self._unit = 'nm'
     self.set_unit()
コード例 #7
0
    def hl_table2canvas(self, w, res_dict):
        """Highlight mask on canvas when user click on table."""
        objlist = []

        # Remove existing highlight
        if self.maskhltag:
            try:
                self.canvas.delete_object_by_tag(self.maskhltag, redraw=False)
            except Exception:
                pass

        for sub_dict in res_dict.values():
            for seqno in sub_dict:
                mobj = self._maskobjs[int(seqno) - 1]
                dat = self._rgbtomask(mobj)
                obj = self.dc.Image(0, 0, masktorgb(
                    dat, color=self.hlcolor, alpha=self.hlalpha))
                objlist.append(obj)

        # Draw on canvas
        if len(objlist) > 0:
            self.maskhltag = self.canvas.add(self.dc.CompoundObject(*objlist))

        self.fitsimage.redraw()  # Force immediate redraw
コード例 #8
0
ファイル: DQInspect.py プロジェクト: pllim/stginga
    def mark_dqs_cb(self, w, res_dict):
        """Mark all pixels affected by selected DQ flag(s)."""
        if not self.gui_up:
            return True

        # Clear existing canvas
        if self.pxdqtag:
            try:
                self.canvas.deleteObjectByTag(self.pxdqtag, redraw=False)
            except:
                pass

        if self._curshape is None:
            self.fitsimage.redraw()  # Need this to clear mask immediately
            return True

        # Recreate pixel marking and label
        p_obj = self.dc.Point(self.xcen, self.ycen, self._point_radius,
                              color=self.pxdqcolor)
        lbl_obj = self.dc.Text(self.xcen, self.ycen + self._text_label_offset,
                               self._text_label, color=self.pxdqcolor)

        # Pixel list is set by redo().
        # To save memory, composite mask is generated on the fly.
        imdqcolors = self.settings.get('imdqcolors', self._def_imdqcolors)
        n_color = len(imdqcolors)
        mask = np.zeros(self._curshape, dtype=np.bool)
        m_objs = []

        # Evenly distribute alpha between all individual masks
        n_key = len(res_dict)
        if n_key > 0:
            imdqalpha = 1.0 / n_key

        # Only valid DQs are selectable and passed in here
        for i, key in enumerate(res_dict):
            ikey = int(key)
            mask[self._curpxmask[ikey]] = True  # Composite mask for npix count

            # Mask only for that DQ flag, for individual color display
            cur_col = imdqcolors[i % n_color]
            cur_mask = np.zeros(self._curshape, dtype=np.bool)
            cur_mask[self._curpxmask[ikey]] = True
            m_objs.append(self.dc.Image(
                0, 0, masktorgb(cur_mask, color=cur_col, alpha=imdqalpha)))

            # TODO: Better way to report colors used? Cannot set as treeview
            # columns because treeview resets on update.
            self.logger.info('{0}: {1}'.format(key, cur_col))

        # Report number of affected pixels
        npix = np.count_nonzero(mask)
        if npix > 0:
            self.w.npix.set_text('{0}/{1} ({2:.3f}%)'.format(
                npix, mask.size, 100 * npix / mask.size))
        else:
            self.w.npix.set_text('0')

        # Generate canvas mask overlay
        m_objs += [p_obj, lbl_obj]
        self.pxdqtag = self.canvas.add(self.dc.CompoundObject(*m_objs))

        self.fitsimage.redraw()  # Need this to clear mask immediately
        return True
コード例 #9
0
    def mark_dqs_cb(self, w, res_dict):
        """Mark all pixels affected by selected DQ flag(s)."""
        if not self.gui_up:
            return True

        # Clear existing canvas
        if self.pxdqtag:
            try:
                self.canvas.deleteObjectByTag(self.pxdqtag, redraw=False)
            except:
                pass

        if self._curshape is None:
            self.fitsimage.redraw()  # Need this to clear mask immediately
            return True

        # Recreate pixel marking and label
        p_obj = self.dc.Point(self.xcen,
                              self.ycen,
                              self._point_radius,
                              color=self.pxdqcolor)
        lbl_obj = self.dc.Text(self.xcen,
                               self.ycen + self._text_label_offset,
                               self._text_label,
                               color=self.pxdqcolor)

        # Pixel list is set by redo().
        # To save memory, composite mask is generated on the fly.
        imdqcolors = self.settings.get('imdqcolors', self._def_imdqcolors)
        n_color = len(imdqcolors)
        mask = np.zeros(self._curshape, dtype=np.bool)
        m_objs = []

        # Evenly distribute alpha between all individual masks
        n_key = len(res_dict)
        if n_key > 0:
            imdqalpha = 1.0 / n_key

        # Only valid DQs are selectable and passed in here
        for i, key in enumerate(res_dict):
            ikey = int(key)
            mask[self._curpxmask[ikey]] = True  # Composite mask for npix count

            # Mask only for that DQ flag, for individual color display
            cur_col = imdqcolors[i % n_color]
            cur_mask = np.zeros(self._curshape, dtype=np.bool)
            cur_mask[self._curpxmask[ikey]] = True
            m_objs.append(
                self.dc.Image(
                    0, 0, masktorgb(cur_mask, color=cur_col, alpha=imdqalpha)))

            # TODO: Better way to report colors used? Cannot set as treeview
            # columns because treeview resets on update.
            self.logger.info('{0}: {1}'.format(key, cur_col))

        # Report number of affected pixels
        npix = np.count_nonzero(mask)
        if npix > 0:
            self.w.npix.set_text('{0}/{1} ({2:.3f}%)'.format(
                npix, mask.size, 100 * npix / mask.size))
        else:
            self.w.npix.set_text('0')

        # Generate canvas mask overlay
        m_objs += [p_obj, lbl_obj]
        self.pxdqtag = self.canvas.add(self.dc.CompoundObject(*m_objs))

        self.fitsimage.redraw()  # Need this to clear mask immediately
        return True