def test_contrast_stretching(): data = np.arange(100) assert contrast_stretching(data, 1, 99) == (1, 99) assert contrast_stretching(data, 1.0, 99.0) == (1, 99) assert contrast_stretching(data, '1th', '99th') == (0.99, 98.01) assert contrast_stretching(data, '0.05th', '99.95th') == (0.0495, 98.9505) # vmin, vmax are to set in conftest.py assert contrast_stretching(data, None, None) == (0.0, 99.0)
def optimize_contrast(self, data): if (self._vmin_user is not None and self._vmax_user is not None): return if np.issubdtype(data.dtype, complex): data = np.log(np.abs(data)) self._vmin_auto, self._vmax_auto = utils.contrast_stretching( data, self.saturated_pixels)
def _convert_tia_single_item(self, item, suffix=''): original_data = item.data.copy() for extension in self.extension_list: item.data = original_data if extension in ['jpg', 'jpeg'] and self.contrast_streching: if isinstance(item, hs.signals.Signal1D): return vmin, vmax = contrast_stretching( item.data, self.saturated_pixels) item.data = self.stretch_contrast(item.data, vmin, vmax) if extension in ['tif', 'tiff']: if isinstance(item, hs.signals.Signal1D): return self._set_convenient_scale(item) if self.normalisation: # dirty workaround to read tif file in imagej and dm... item.data = self.normalise(item.data) item.data *= np.iinfo(np.int32).max item.change_dtype(np.int32) self.fname_ext = ''.join([os.path.splitext(self.fname)[0], suffix, '.', extension]) if os.path.exists(self.fname_ext) and self.overwrite is None: write_answer = self._ask_confirmation_overwrite() self._save_data(item, overwrite=write_answer) # workaround, currently hyperspy doesn't write file is # overwrite=False elif not os.path.exists(self.fname_ext): self._save_data(item) else: self._save_data(item, overwrite=self.overwrite)
def _calculate_vmin_max(self, data, auto_contrast=False, vmin=None, vmax=None): # Calculate vmin and vmax using `utils.contrast_stretching` when: # - auto_contrast is True # - self.vmin or self.vmax is of tpye str if (auto_contrast and (isinstance(self.vmin, str) or isinstance(self.vmax, str))): with ignore_warning(category=RuntimeWarning): # In case of "All-NaN slices" vmin, vmax = utils.contrast_stretching(data, self.vmin, self.vmax) else: vmin, vmax = self._vmin_numeric, self._vmax_numeric # provided vmin, vmax override the calculated value if isinstance(vmin, (int, float)): vmin = vmin if isinstance(vmax, (int, float)): vmax = vmax if vmin == np.nan: vmin = None if vmax == np.nan: vmax = None return vmin, vmax
def optimize_contrast(self, data): if (self._vmin_user is not None and self._vmax_user is not None): return with ignore_warning(category=RuntimeWarning): # In case of "All-NaN slices" vmin, vmax = utils.contrast_stretching(data, self.saturated_pixels) if vmin == np.nan: vmin = None if vmax == np.nan: vmax = None self._vmin_auto, self._vmax_auto = vmin, vmax
def convert(self): original_data = self.s.data.copy() for extension in self.extension_list: self.s.data = original_data if extension in ['jpg', 'jpeg'] and self.contrast_streching: vmin, vmax = contrast_stretching(self.s.data, self.saturated_pixels) self.s.data = self.normalise(self.s.data, vmin, vmax) self.fname_ext = ''.join( [os.path.splitext(self.fname)[0], '.', extension]) if os.path.exists(self.fname_ext) and self.overwrite is None: write_answer = self._ask_confirmation_overwrite() self._save_data(self.s, overwrite=write_answer) # workaround, currently hyperspy doesn't write file is # overwrite=False elif not os.path.exists(self.fname_ext): self._save_data(self.s) else: self._save_data(self.s, overwrite=self.overwrite)
def convert(self): original_data = self.s.data.copy() for extension in self.extension_list: self.s.data = original_data if extension in ['jpg', 'jpeg'] and self.contrast_streching: vmin, vmax = contrast_stretching(self.s.data, self.saturated_pixels) self.s.data = self.normalise(self.s.data, vmin, vmax) self.fname_ext = ''.join([os.path.splitext(self.fname)[0], '.', extension]) if os.path.exists(self.fname_ext) and self.overwrite is None: write_answer = self._ask_confirmation_overwrite() self._save_data(self.s, overwrite=write_answer) # workaround, currently hyperspy doesn't write file is # overwrite=False elif not os.path.exists(self.fname_ext): self._save_data(self.s) else: self._save_data(self.s, overwrite=self.overwrite)
def _convert_tia_single_item(self, item, suffix=''): if self.correct_cfeg_fluctuation: item = correct_intensity(item) original_data = item.data.copy() for extension in self.extension_list: item.data = original_data if extension in ['jpg', 'jpeg'] and self.contrast_streching: if isinstance(item, hs.signals.Signal1D): return vmin, vmax = contrast_stretching( item.data, f"{self.saturated_pixels/2}th", f'{100-self.saturated_pixels/2}th') item.data = self.stretch_contrast(item.data, vmin, vmax) item.data = self.normalise(item.data) item.data *= np.iinfo(np.uint8).max item.change_dtype(np.uint8) if extension in ['tif', 'tiff']: if isinstance(item, hs.signals.Signal1D): return try: # TODO: improve this self._set_convenient_scale(item) except: pass if self.normalisation: # dirty workaround to read tif file in imagej and dm... item.data = self.normalise(item.data) item.data *= np.iinfo(np.int32).max item.change_dtype(np.int32) dname, fname = os.path.split(self.fname) if self.use_subfolder: dname = os.path.join(dname, extension) fname = os.path.join(dname, os.path.splitext(fname)[0]) self.fullfname = f'{fname}{suffix}.{extension}' if os.path.exists(self.fullfname) and self.overwrite is None: write_answer = self._ask_confirmation_overwrite() self._save_data(item, overwrite=write_answer) # workaround, currently hyperspy doesn't write file is # overwrite=False elif not os.path.exists(self.fullfname): self._save_data(item) else: self._save_data(item, overwrite=self.overwrite)
def test_out_of_range(self): with pytest.raises(ValueError): contrast_stretching(self.data, -1)
def test_nans(self): data = self.data[:-1] bounds = contrast_stretching(self.data, 1) assert bounds == (np.percentile(data, 0.5), np.percentile(data, 99.5))
def test_no_nans(self, value): data = self.data[:-1] bounds = contrast_stretching(data, value[0], value[1]) assert bounds == (np.percentile(data, 0.5), np.percentile(data, 99.5))
def test_out_of_range(self): contrast_stretching(self.data, -1)
def optimize_contrast(self, data): if (self._vmin_user is not None and self._vmax_user is not None): return self._vmin_auto, self._vmax_auto = utils.contrast_stretching( data, self.saturated_pixels)
def test_nans(self): data = self.data[:-1] bounds = contrast_stretching(self.data, 1) nose.tools.assert_tuple_equal(bounds, ( np.percentile(data, 0.5), np.percentile(data, 99.5)))
def test_nans(self): data = self.data[:-1] bounds = contrast_stretching(self.data, 1) nose.tools.assert_tuple_equal( bounds, (np.percentile(data, 0.5), np.percentile(data, 99.5)))
def test_nans(self): data = self.data[:-1] bounds = contrast_stretching(self.data, 1) assert bounds == ( np.percentile(data, 0.5), np.percentile(data, 99.5))