visualize.py
Go to the documentation of this file.
1 #!/usr/bin/env python
2 # -*- coding: utf-8 -*-
3 
4 from __future__ import division
5 import math
6 
7 import cv2
8 import numpy as np
9 import PIL
10 
11 
12 def centerize(src, dst_shape, margin_color=None):
13  """Centerize image for specified image size
14 
15  @param src: image to centerize
16  @param dst_shape: image shape (height, width) or (height, width, channel)
17  """
18  if src.shape[:2] == dst_shape[:2]:
19  return src
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
24  h, w = src.shape[:2]
25  dst_h, dst_w = dst_shape[:2]
26  if h < dst_h:
27  pad_vertical = (dst_h - h) // 2
28  if w < dst_w:
29  pad_horizontal = (dst_w - w) // 2
30  centerized[pad_vertical:pad_vertical+h,
31  pad_horizontal:pad_horizontal+w] = src
32  return centerized
33 
34 def _tile_images(imgs, tile_shape, concatenated_image, margin_color=None):
35  """Concatenate images whose sizes are same.
36 
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.
40  """
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),
46  dtype=np.uint8)
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):
51  i = x + y * x_num
52  if i >= len(imgs):
53  pass
54  else:
55  concatenated_image[y*one_height:(y+1)*one_height,x*one_width:(x+1)*one_width,] = imgs[i]
56  return concatenated_image
57 
58 
59 def get_tile_image(imgs, tile_shape=None, result_img=None, margin_color=None):
60  """Concatenate images whose sizes are different.
61 
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
65  """
66  def get_tile_shape(img_num):
67  x_num = 0
68  y_num = int(math.sqrt(img_num))
69  while x_num * y_num < img_num:
70  x_num += 1
71  return x_num, y_num
72 
73  if tile_shape is None:
74  tile_shape = get_tile_shape(len(imgs))
75 
76  # get max tile size to which each image should be resized
77  max_height, max_width = np.inf, np.inf
78  for img in imgs:
79  max_height = min([max_height, img.shape[0]])
80  max_width = min([max_width, img.shape[1]])
81 
82  # resize and concatenate images
83  for i, img in enumerate(imgs):
84  h, w = img.shape[:2]
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)
91  imgs[i] = img
92  return _tile_images(imgs, tile_shape, result_img,
93  margin_color=margin_color)
94 
95 
96 def colorize_cluster_indices(image, cluster_indices, alpha=0.3, image_alpha=1):
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]
105 
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)
114  return result
def centerize(src, dst_shape, margin_color=None)
Definition: visualize.py:12
def get_tile_image(imgs, tile_shape=None, result_img=None, margin_color=None)
Definition: visualize.py:59
def _tile_images(imgs, tile_shape, concatenated_image, margin_color=None)
Definition: visualize.py:34
def colorize_cluster_indices(image, cluster_indices, alpha=0.3, image_alpha=1)
Definition: visualize.py:96


jsk_recognition_utils
Author(s):
autogenerated on Mon May 3 2021 03:03:03