code: def make_three_color(self, upper_percentile=100, lower_percentile=0):
          
          order = {'red': 0, 'green': 1, 'blue': 2}
          shape = self.thmap.shape
          three_color = np.zeros((shape[0], shape[1], 3))
          channel_colors = {color: self.config.default[color] for color in ['red', 'green', 'blue']}
  
          data = Fetcher(self.date, products=list(channel_colors.values()), verbose=False).fetch()
          for color, channel in channel_colors.items():
              three_color[:, :, order[color]] = data[channel][1]
  
              # scale the image by the power
              three_color[:, :, order[color]] = np.power(three_color[:, :, order[color]],
                                                         self.config.default["{}_power".format(color)])
  
              # adjust the percentile thresholds
              lower = np.nanpercentile(three_color[:, :, order[color]], lower_percentile)
              upper = np.nanpercentile(three_color[:, :, order[color]], upper_percentile)
              three_color[np.where(three_color[:, :, order[color]] < lower)] = lower
              three_color[np.where(three_color[:, :, order[color]] > upper)] = upper
  
          # image values must be between (0,1) so scale image
          for color, index in order.items():
              three_color[:, :, index] /= np.nanmax(three_color[:, :, index])
          return three_color
docs: Load the configured input channel images and create a three color image
          :param upper_percentile: pixels above this percentile are suppressed
          :param lower_percentile: pixels below this percentile are suppressed
          :return: a numpy array (m,n,3) representing a three-color image