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:
45 concatenated_image = np.zeros((one_height * y_num, one_width * x_num, 3),
47 if margin_color
is not None:
48 concatenated_image[:, :] = margin_color
49 for y
in range(y_num):
50 for x
in range(x_num):
55 concatenated_image[y*one_height:(y+1)*one_height,x*one_width:(x+1)*one_width,] = imgs[i]
56 return concatenated_image
59 def get_tile_image(imgs, tile_shape=None, result_img=None, margin_color=None):
60 """Concatenate images whose sizes are different. 62 @param imgs: image list which should be concatenated 63 @param tile_shape: shape for which images should be concatenated 64 @param result_img: numpy array to put result image 66 def get_tile_shape(img_num):
68 y_num = int(math.sqrt(img_num))
69 while x_num * y_num < img_num:
73 if tile_shape
is None:
74 tile_shape = get_tile_shape(len(imgs))
77 max_height, max_width = np.inf, np.inf
79 max_height = min([max_height, img.shape[0]])
80 max_width = min([max_width, img.shape[1]])
83 for i, img
in enumerate(imgs):
85 h_scale, w_scale = max_height / h, max_width / w
86 scale = min([h_scale, w_scale])
87 h, w = int(scale * h), int(scale * w)
88 img = cv2.resize(img, (w, h))
89 img =
centerize(img, (max_height, max_width, 3),
90 margin_color=margin_color)
93 margin_color=margin_color)
97 from skimage.color
import rgb2gray
98 from skimage.color
import gray2rgb
99 from skimage.util
import img_as_float
100 from skimage.color.colorlabel
import DEFAULT_COLORS
101 from skimage.color.colorlabel
import color_dict
102 image = img_as_float(rgb2gray(image))
103 image = gray2rgb(image) * image_alpha + (1 - image_alpha)
104 height, width = image.shape[:2]
106 n_colors = len(DEFAULT_COLORS)
107 indices_to_color = np.zeros((height * width, 3))
108 for i, indices
in enumerate(cluster_indices):
109 color = color_dict[DEFAULT_COLORS[i % n_colors]]
110 indices_to_color[indices] = color
111 indices_to_color = indices_to_color.reshape((height, width, 3))
112 result = indices_to_color * alpha + image * (1 - alpha)
113 result = (result * 255).astype(np.uint8)
def centerize(src, dst_shape, margin_color=None)
def get_tile_image(imgs, tile_shape=None, result_img=None, margin_color=None)
def _tile_images(imgs, tile_shape, concatenated_image, margin_color=None)
def colorize_cluster_indices(image, cluster_indices, alpha=0.3, image_alpha=1)