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 if tile_shape
is None:
81 tile_shape = get_tile_shape(len(imgs))
84 max_height, max_width = np.inf, np.inf
86 max_height = min([max_height, img.shape[0]])
87 max_width = min([max_width, img.shape[1]])
88 max_height = max(max_height, min_size)
89 max_width = max(max_width, min_size)
92 for i, img
in enumerate(imgs):
94 h_scale, w_scale = max_height / h, max_width / w
95 scale = min([h_scale, w_scale])
96 h, w = int(scale * h), int(scale * w)
97 img = cv2.resize(img, (w, h))
99 img =
centerize(img, (max_height, max_width),
100 margin_color=margin_color)
102 img =
centerize(img, (max_height, max_width, 3),
103 margin_color=margin_color)
105 raise NotImplementedError
108 margin_color=margin_color)
112 from skimage.color
import rgb2gray
113 from skimage.color
import gray2rgb
114 from skimage.util
import img_as_float
115 from skimage.color.colorlabel
import DEFAULT_COLORS
116 from skimage.color.colorlabel
import color_dict
117 image = img_as_float(rgb2gray(image))
118 image = gray2rgb(image) * image_alpha + (1 - image_alpha)
119 height, width = image.shape[:2]
121 n_colors = len(DEFAULT_COLORS)
122 indices_to_color = np.zeros((height * width, 3))
123 for i, indices
in enumerate(cluster_indices):
124 color = color_dict[DEFAULT_COLORS[i % n_colors]]
125 indices_to_color[indices] = color
126 indices_to_color = indices_to_color.reshape((height, width, 3))
127 result = indices_to_color * alpha + image * (1 - alpha)
128 result = (result * 255).astype(np.uint8)