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)