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
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
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
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()
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()
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()
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
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
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