Source code for venim.mask_functions

import numpy as np
import cv2


[docs]def loadMask(path): img = cv2.imread(path, 0) print(img) mask = img != 0 return mask + 0
[docs]def crescentMask(center, area, outer_radius, pixel_angle, border): # Minimum inner pixel radius of the crescent min_inner_radius = (1 - 2 * area) * outer_radius # Define indices relative to center y, x = np.indices((512, 512)) y = y - center[0] x = x - center[1] # Define angle array angle = np.arctan2(y, x) angle -= np.radians(pixel_angle) angle[angle < -np.pi / 2] += 2 * np.pi # Define distance array dist = np.sqrt(x ** 2 + y ** 2) # Define crescent relative to angle and dist arrays crescent = ( (angle > 0) & (angle < np.pi) & ( dist > ( (min_inner_radius * outer_radius) / np.sqrt( (min_inner_radius * np.cos(angle)) ** 2 + (outer_radius * np.sin(angle)) ** 2 ) ) ) & (dist < outer_radius) ) # Add a border around the mask to show more if border > 0: y, x = np.indices((border * 2 - 1, border * 2 - 1)) kernel = np.array( np.sqrt((y - border + 1) ** 2 + (x - border + 1) ** 2) < border, dtype=np.uint8, ) crescent = cv2.dilate(np.array(crescent, dtype=np.uint8), kernel) return 1 - crescent
[docs]def outerMask(center, outer_radius, border): # Define indices relative to center y, x = np.indices((512, 512)) y = y - center[0] x = x - center[1] # Define mask by distance to center mask = np.sqrt(y ** 2 + x ** 2) < (outer_radius + border) return mask
[docs]def cloudMask(center, area, radius, angle): # Cloud mask is a combination of crescent and outer mask with fixed borders mask = crescentMask(center, area, radius, angle, 35) * outerMask(center, radius, 20) return mask