4 from __future__ 
import division
 
   13     """Centerize image for specified image size 
   15     @param src: image to centerize 
   16     @param dst_shape: image shape (height, width) or (height, width, channel) 
   18     if src.shape[:2] == dst_shape[:2]:
 
   20     centerized = np.zeros(dst_shape, dtype=src.dtype)
 
   21     if margin_color 
is not None:
 
   22         centerized[:, :] = margin_color
 
   23     pad_vertical, pad_horizontal = 0, 0
 
   25     dst_h, dst_w = dst_shape[:2]
 
   27         pad_vertical = (dst_h - h) // 2
 
   29         pad_horizontal = (dst_w - w) // 2
 
   30     centerized[pad_vertical:pad_vertical+h,
 
   31                pad_horizontal:pad_horizontal+w] = src
 
   34 def _tile_images(imgs, tile_shape, concatenated_image, margin_color=None):
 
   35     """Concatenate images whose sizes are same. 
   37     @param imgs: image list which should be concatenated 
   38     @param tile_shape: shape for which images should be concatenated 
   39     @param concatenated_image: returned image. if it is None, new image will be created. 
   41     x_num, y_num = tile_shape
 
   42     one_width = imgs[0].shape[1]
 
   43     one_height = imgs[0].shape[0]
 
   44     if concatenated_image 
is None:
 
   46             concatenated_image = np.zeros((one_height * y_num, one_width * x_num),
 
   48         elif imgs[0].ndim == 3:
 
   49             concatenated_image = np.zeros((one_height * y_num, one_width * x_num, 3),
 
   52             raise NotImplementedError
 
   53         if margin_color 
is not None:
 
   54             concatenated_image[:, :] = margin_color
 
   55     for y 
in range(y_num):
 
   56         for x 
in range(x_num):
 
   61                 concatenated_image[y*one_height:(y+1)*one_height,x*one_width:(x+1)*one_width,] = imgs[i]
 
   62     return concatenated_image
 
   65 def get_tile_image(imgs, tile_shape=None, result_img=None, margin_color=None,
 
   67     """Concatenate images whose sizes are different. 
   69     @param imgs: image list which should be concatenated 
   70     @param tile_shape: shape for which images should be concatenated 
   71     @param result_img: numpy array to put result image 
   73     def get_tile_shape(img_num):
 
   75         y_num = int(math.sqrt(img_num))
 
   76         while x_num * y_num < img_num:
 
   80     imgs = [img 
for img 
in imgs 
if img 
is not None]
 
   81     if tile_shape 
is None:
 
   82         tile_shape = get_tile_shape(len(imgs))
 
   85     max_height, max_width = np.inf, np.inf
 
   87         max_height = min([max_height, img.shape[0]])
 
   88         max_width = min([max_width, img.shape[1]])
 
   89     max_height = max(max_height, min_size)
 
   90     max_width = max(max_width, min_size)
 
   93     for i, img 
in enumerate(imgs):
 
   95         h_scale, w_scale = max_height / h, max_width / w
 
   96         scale = min([h_scale, w_scale])
 
   97         h, w = int(scale * h), int(scale * w)
 
   98         img = cv2.resize(img, (w, h))
 
  100             img = 
centerize(img, (max_height, max_width),
 
  101                             margin_color=margin_color)
 
  103             img = 
centerize(img, (max_height, max_width, 3),
 
  104                             margin_color=margin_color)
 
  106             raise NotImplementedError
 
  109                         margin_color=margin_color)
 
  113     from skimage.color 
import rgb2gray
 
  114     from skimage.color 
import gray2rgb
 
  115     from skimage.util 
import img_as_float
 
  116     from skimage.color.colorlabel 
import DEFAULT_COLORS
 
  117     from skimage.color.colorlabel 
import color_dict
 
  118     image = img_as_float(rgb2gray(image))
 
  119     image = gray2rgb(image) * image_alpha + (1 - image_alpha)
 
  120     height, width = image.shape[:2]
 
  122     n_colors = len(DEFAULT_COLORS)
 
  123     indices_to_color = np.zeros((height * width, 3))
 
  124     for i, indices 
in enumerate(cluster_indices):
 
  125         color = color_dict[DEFAULT_COLORS[i % n_colors]]
 
  126         indices_to_color[indices] = color
 
  127     indices_to_color = indices_to_color.reshape((height, width, 3))
 
  128     result = indices_to_color * alpha + image * (1 - alpha)
 
  129     result = (result * 255).astype(np.uint8)