import os from typing import Tuple import cv2 import numpy.typing as npt from config import ( NormalMapGenerator, Planes, RGBFlatten, artifactFlatten, grayscaleInv, heightCreation, kernels, stampFill, valueFill, ) class Init_Planes: def __init__(self, base_image: npt.NDArray, depth_image: npt.NDArray) -> None: self.base_image = base_image self.depth_image = depth_image def separation( self, depth: npt.NDArray ) -> Tuple[npt.NDArray, npt.NDArray, npt.NDArray]: print("Starting separation...") contrast = cv2.convertScaleAbs(depth, alpha=3, beta=-100) colorIndex = RGBFlatten(contrast).initiate() mask_list = [] for i in range(3): mask_img = cv2.cvtColor( Planes(colorIndex, i).create_planes(), cv2.COLOR_RGB2BGR ) mask_list.append(mask_img) return mask_list def data_augmentation(self, mask_list: list): print("Cleaning planes...") cleaned_segments = [] for i in range(3): fill_img = stampFill(mask_list[i], i).run() clean_img = valueFill(fill_img).run() cleaned_segments.append(clean_img) return cleaned_segments def normal_process(self, img: npt.NDArray): print("Starting normal process...") grayscale = grayscaleInv(img).run() heightMap = heightCreation(grayscale, scale=0.5).run() blurred_image_list = artifactFlatten(heightMap).run() normal_maps = [] for image in blurred_image_list: normal_map = NormalMapGenerator(image).generate_normal_map() normal_maps.append(normal_map) return normal_maps def initiate_split(self) -> None: mask_list = self.separation(self.depth_image) cleaned_segments = self.data_augmentation(mask_list) normal_maps = self.normal_process(self.base_image) return cleaned_segments, normal_maps