def __display_image(self,filename): lip = LoadImagesImageProvider("dummy", "", filename, True) image = lip.provide_image(None).pixel_data frame = FIG.CPFigureFrame(self.__list_box.GetTopLevelParent(), title = filename, subplots=(1,1)) if image.ndim == 3: frame.subplot_imshow(0,0,image,filename) else: frame.subplot_imshow_grayscale(0,0,image,filename) frame.Refresh()
def __display_image(self, filename): lip = LoadImagesImageProvider("dummy", "", filename, True) image = lip.provide_image(None).pixel_data frame = FIG.CPFigureFrame(self.__list_box.GetTopLevelParent(), title=filename, subplots=(1, 1)) if image.ndim == 3: frame.subplot_imshow(0, 0, image, filename) else: frame.subplot_imshow_grayscale(0, 0, image, filename) frame.Refresh()
def estimate_absorbance(self): """Load an image and use it to estimate the absorbance of a stain Returns a 3-tuple of the R/G/B absorbances """ from cellprofiler.modules.loadimages import LoadImagesImageProvider import wx dlg = wx.FileDialog(None, "Choose reference image", cpprefs.get_default_image_directory()) dlg.Wildcard = ( "Image file (*.tif, *.tiff, *.bmp, *.png, *.gif, *.jpg)|" "*.tif;*.tiff;*.bmp;*.png;*.gif;*.jpg") if dlg.ShowModal() == wx.ID_OK: lip = LoadImagesImageProvider("dummy", "", dlg.Path) image = lip.provide_image(None).pixel_data if image.ndim < 3: wx.MessageBox( "You must calibrate the absorbance using a color image", "Error: not color image", style=wx.OK | wx.ICON_ERROR, ) return None # # Log-transform the image # eps = 1.0 / 256.0 / 2.0 log_image = np.log(image + eps) data = [-log_image[:, :, i].flatten() for i in range(3)] # # Order channels by strength # sums = [np.sum(x) for x in data] order = np.lexsort([sums]) # # Calculate relative absorbance against the strongest. # Fit Ax = y to find A where x is the strongest and y # is each in turn. # strongest = data[order[-1]][:, np.newaxis] absorbances = [lstsq(strongest, d)[0][0] for d in data] # # Normalize # absorbances = np.array(absorbances) return absorbances / np.sqrt(np.sum(absorbances**2)) return None
def estimate_absorbance(self): '''Load an image and use it to estimate the absorbance of a stain Returns a 3-tuple of the R/G/B absorbances ''' from cellprofiler.modules.loadimages import LoadImagesImageProvider import wx dlg = wx.FileDialog( None, "Choose reference image", cpprefs.get_default_image_directory()) dlg.Wildcard = ("Image file (*.tif, *.tiff, *.bmp, *.png, *.gif, *.jpg)|" "*.tif;*.tiff;*.bmp;*.png;*.gif;*.jpg") if dlg.ShowModal() == wx.ID_OK: lip = LoadImagesImageProvider("dummy", "", dlg.Path) image = lip.provide_image(None).pixel_data if image.ndim < 3: wx.MessageBox("You must calibrate the absorbance using a color image", "Error: not color image", style=wx.OK | wx.ICON_ERROR) return None # # Log-transform the image # eps = 1.0 / 256.0 / 2.0 log_image = np.log(image + eps) data = [- log_image[:, :, i].flatten() for i in range(3)] # # Order channels by strength # sums = [np.sum(x) for x in data] order = np.lexsort([sums]) # # Calculate relative absorbance against the strongest. # Fit Ax = y to find A where x is the strongest and y # is each in turn. # strongest = data[order[-1]][:, np.newaxis] absorbances = [lstsq(strongest, d)[0][0] for d in data] # # Normalize # absorbances = np.array(absorbances) return absorbances / np.sqrt(np.sum(absorbances ** 2)) return None
def run(self, workspace): statistics = [] m = workspace.measurements assert isinstance(m, cpmeas.Measurements) # # Hack: if LoadSingleImage is first, no paths are populated # if self.file_wants_images(self.file_settings[0]): m_path = "_".join( (C_PATH_NAME, self.file_settings[0].image_name.value)) else: m_path = "_".join((C_OBJECTS_PATH_NAME, self.file_settings[0].objects_name.value)) if m.get_current_image_measurement(m_path) is None: self.prepare_run(workspace) image_set = workspace.image_set for file_setting in self.file_settings: wants_images = self.file_wants_images(file_setting) image_name = (file_setting.image_name.value if wants_images else file_setting.objects_name.value) m_path, m_file, m_md5_digest, m_scaling, m_height, m_width = [ "_".join((c, image_name)) for c in ( C_PATH_NAME if wants_images else C_OBJECTS_PATH_NAME, C_FILE_NAME if wants_images else C_OBJECTS_FILE_NAME, C_MD5_DIGEST, C_SCALING, C_HEIGHT, C_WIDTH, ) ] pathname = m.get_current_image_measurement(m_path) filename = m.get_current_image_measurement(m_file) rescale = wants_images and file_setting.rescale.value provider = LoadImagesImageProvider(image_name, pathname, filename, rescale) image = provider.provide_image(image_set) pixel_data = image.pixel_data if wants_images: md5 = provider.get_md5_hash(m) m.add_image_measurement("_".join((C_MD5_DIGEST, image_name)), md5) m.add_image_measurement("_".join((C_SCALING, image_name)), image.scale) m.add_image_measurement("_".join((C_HEIGHT, image_name)), int(pixel_data.shape[0])) m.add_image_measurement("_".join((C_WIDTH, image_name)), int(pixel_data.shape[1])) image_set.providers.append(provider) else: # # Turn image into objects # labels = convert_image_to_objects(pixel_data) objects = cpo.Objects() objects.segmented = labels object_set = workspace.object_set assert isinstance(object_set, cpo.ObjectSet) object_set.add_objects(objects, image_name) add_object_count_measurements(m, image_name, objects.count) add_object_location_measurements(m, image_name, labels) # # Add outlines if appropriate # if file_setting.wants_outlines: outlines = centrosome.outline.outline(labels) outline_image = cpi.Image(outlines.astype(bool)) workspace.image_set.add(file_setting.outlines_name.value, outline_image) statistics += [(image_name, filename)] workspace.display_data.col_labels = ("Image name", "File") workspace.display_data.statistics = statistics
def run(self, workspace): statistics = [] m = workspace.measurements assert isinstance(m, cpmeas.Measurements) # # Hack: if LoadSingleImage is first, no paths are populated # if self.file_wants_images(self.file_settings[0]): m_path = "_".join((C_PATH_NAME, self.file_settings[0].image_name.value)) else: m_path = "_".join((C_OBJECTS_PATH_NAME, self.file_settings[0].objects_name.value)) if m.get_current_image_measurement(m_path) is None: self.prepare_run(workspace) image_set = workspace.image_set for file_setting in self.file_settings: wants_images = self.file_wants_images(file_setting) image_name = file_setting.image_name.value if wants_images else \ file_setting.objects_name.value m_path, m_file, m_md5_digest, m_scaling, m_height, m_width = [ "_".join((c, image_name)) for c in ( C_PATH_NAME if wants_images else C_OBJECTS_PATH_NAME, C_FILE_NAME if wants_images else C_OBJECTS_FILE_NAME, C_MD5_DIGEST, C_SCALING, C_HEIGHT, C_WIDTH)] pathname = m.get_current_image_measurement(m_path) filename = m.get_current_image_measurement(m_file) rescale = (wants_images and file_setting.rescale.value) provider = LoadImagesImageProvider( image_name, pathname, filename, rescale) image = provider.provide_image(image_set) pixel_data = image.pixel_data if wants_images: md5 = provider.get_md5_hash(m) m.add_image_measurement("_".join((C_MD5_DIGEST, image_name)), md5) m.add_image_measurement("_".join((C_SCALING, image_name)), image.scale) m.add_image_measurement("_".join((C_HEIGHT, image_name)), int(pixel_data.shape[0])) m.add_image_measurement("_".join((C_WIDTH, image_name)), int(pixel_data.shape[1])) image_set.providers.append(provider) else: # # Turn image into objects # labels = convert_image_to_objects(pixel_data) objects = cpo.Objects() objects.segmented = labels object_set = workspace.object_set assert isinstance(object_set, cpo.ObjectSet) object_set.add_objects(objects, image_name) add_object_count_measurements(m, image_name, objects.count) add_object_location_measurements(m, image_name, labels) # # Add outlines if appropriate # if file_setting.wants_outlines: outlines = centrosome.outline.outline(labels) outline_image = cpi.Image(outlines.astype(bool)) workspace.image_set.add(file_setting.outlines_name.value, outline_image) statistics += [(image_name, filename)] workspace.display_data.col_labels = ("Image name", "File") workspace.display_data.statistics = statistics