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

def make_three_color(self, upper_percentile=100, lower_percentile=0):
        """
        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
        """
        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