Spaces:
Sleeping
Sleeping
| # -------------------------------------------------------- | |
| # Fast R-CNN | |
| # Copyright (c) 2015 Microsoft | |
| # Licensed under The MIT License [see LICENSE for details] | |
| # Written by Ross Girshick | |
| # -------------------------------------------------------- | |
| """Blob helper functions.""" | |
| import numpy as np | |
| import cv2 | |
| import torch | |
| import torch.nn as nn | |
| import random | |
| def chromatic_transform(im, label=None, d_h=None, d_s=None, d_l=None): | |
| """ | |
| Given an image array, add the hue, saturation and luminosity to the image | |
| """ | |
| # Set random hue, luminosity and saturation which ranges from -0.1 to 0.1 | |
| if d_h is None: | |
| d_h = (np.random.rand(1) - 0.5) * 0.02 * 180 | |
| if d_l is None: | |
| d_l = (np.random.rand(1) - 0.5) * 0.2 * 256 | |
| if d_s is None: | |
| d_s = (np.random.rand(1) - 0.5) * 0.2 * 256 | |
| # Convert the BGR to HLS | |
| hls = cv2.cvtColor(im, cv2.COLOR_BGR2HLS) | |
| h, l, s = cv2.split(hls) | |
| # Add the values to the image H, L, S | |
| new_h = (h + d_h) % 180 | |
| new_l = np.clip(l + d_l, 0, 255) | |
| new_s = np.clip(s + d_s, 0, 255) | |
| # Convert the HLS to BGR | |
| new_hls = cv2.merge((new_h, new_l, new_s)).astype('uint8') | |
| new_im = cv2.cvtColor(new_hls, cv2.COLOR_HLS2BGR) | |
| if label is not None: | |
| I = np.where(label > 0) | |
| new_im[I[0], I[1], :] = im[I[0], I[1], :] | |
| return new_im | |
| def add_noise(image): | |
| # random number | |
| r = np.random.rand(1) | |
| # gaussian noise | |
| if r < 0.9: | |
| row,col,ch= image.shape | |
| mean = 0 | |
| var = np.random.rand(1) * 0.3 * 256 | |
| sigma = var**0.5 | |
| gauss = sigma * np.random.randn(row,col) + mean | |
| gauss = np.repeat(gauss[:, :, np.newaxis], ch, axis=2) | |
| noisy = image + gauss | |
| noisy = np.clip(noisy, 0, 255) | |
| else: | |
| # motion blur | |
| sizes = [3, 5, 7, 9, 11, 15] | |
| size = sizes[int(np.random.randint(len(sizes), size=1))] | |
| kernel_motion_blur = np.zeros((size, size)) | |
| if np.random.rand(1) < 0.5: | |
| kernel_motion_blur[int((size-1)/2), :] = np.ones(size) | |
| else: | |
| kernel_motion_blur[:, int((size-1)/2)] = np.ones(size) | |
| kernel_motion_blur = kernel_motion_blur / size | |
| noisy = cv2.filter2D(image, -1, kernel_motion_blur) | |
| return noisy | |
| def add_noise_depth(image, level = 0.01): | |
| row,col,ch= image.shape | |
| noise_level = random.uniform(0, level) | |
| gauss = noise_level * np.random.randn(row,col) | |
| gauss = np.repeat(gauss[:, :, np.newaxis], ch, axis=2) | |
| noisy = image + gauss | |
| return noisy | |