def clip(input_array, clip_val, top_or_bottom, output=False): """ Clip an input numpy array and set the clipped pixels to the clipping value. Bottom clip scales pixels below the clip_val. Top does the same for pixels above. """ # Input validation error = "input_array for clip must be a numpy array instance." assert isinstance(input_array, N.ndarray), error error = "clip_val must be float" assert isinstance(clip_val, float), error error = 'top_or_bottom for clip must be "top" or "bottom".' assert top_or_bottom in ["top", "bottom"], error if top_or_bottom == "bottom": index = N.where(input_array < clip_val) elif top_or_bottom == "top": index = N.where(input_array > clip_val) output_array = copy.deepcopy(input_array) output_array[index] = clip_val if output != False: before_after( before_array=input_array, after_array=output_array, before_array_name="Input Data", after_array_name="Clip " + top_or_bottom + " at " + str(clip_val), output=output, ) return output_array
def log(self, output=False): """ Take the log of self.data. """ array_log = N.log(self.data) if output != False: before_after( before_array=self.data, after_array=array_log, before_array_name="Input Data", after_array_name="Log", output=output, ) self.data = array_log
def threshold_clip(self, minimum, maximum, output=False): """ Set all values below minum and above maximum to the minimum and maximum, respectively """ output_array = copy.deepcopy(self.data) output_array[output_array > maximum] = maximum output_array[output_array < minimum] = minimum if output != False: before_after( before_array=self.data, after_array=output_array, before_array_name="Input Data", after_array_name="Threshold Clipped", output=output, pause=False, ) self.data = output_array
def positive(self, output=False): """ Shift all the values in self.data so there are no negative or 0 pixels. Needed to prevent taking the log of negative values. This function is not currently used. """ min_val = N.min(self.data) if min_val <= 0: output_array = self.data + ((min_val * -1.0) + 0.0001) else: output_array = self.data if output != False: before_after( before_array=self.data, after_array=output_array, before_array_name="Input Data", after_array_name="Positive Corrected", output=output, pause=False, ) self.data = output_array