From 2fb2b804693c7444dc0d6e18c2596a63ad619722 Mon Sep 17 00:00:00 2001 From: Stan Soldatov Date: Mon, 18 Nov 2024 01:30:58 +0100 Subject: [PATCH] Multiplier and blur radius. --- maps4fs/generator/config.py | 2 +- maps4fs/generator/dem.py | 27 ++++++++++++++++++++++++++- maps4fs/generator/map.py | 8 ++++---- 3 files changed, 31 insertions(+), 6 deletions(-) diff --git a/maps4fs/generator/config.py b/maps4fs/generator/config.py index 4569a667..81215bc2 100644 --- a/maps4fs/generator/config.py +++ b/maps4fs/generator/config.py @@ -22,7 +22,7 @@ class Config(Component): def preprocess(self) -> None: self._map_xml_path = self.game.map_xml_path(self.map_directory) - self.logger.debug(f"Map XML path: {self._map_xml_path}") + self.logger.debug("Map XML path: %s.", self._map_xml_path) def process(self): self._set_map_size() diff --git a/maps4fs/generator/dem.py b/maps4fs/generator/dem.py index 3a212212..77a52dcb 100644 --- a/maps4fs/generator/dem.py +++ b/maps4fs/generator/dem.py @@ -14,6 +14,8 @@ from maps4fs.generator.component import Component SRTM = "https://elevation-tiles-prod.s3.amazonaws.com/skadi/{latitude_band}/{tile_name}.hgt.gz" +DEFAULT_MULTIPLIER = 3 +DEFAULT_BLUR_RADIUS = 21 # pylint: disable=R0903 @@ -36,6 +38,12 @@ def preprocess(self) -> None: os.makedirs(self.hgt_dir, exist_ok=True) os.makedirs(self.gz_dir, exist_ok=True) + self.multiplier = self.kwargs.get("multiplier", DEFAULT_MULTIPLIER) + self.blur_radius = self.kwargs.get("blur_radius", DEFAULT_BLUR_RADIUS) + self.logger.debug( + "DEM multiplier is %s, blur radius is %s.", self.multiplier, self.blur_radius + ) + # pylint: disable=no-member def process(self) -> None: """Reads SRTM file, crops it to map size, normalizes and blurs it, @@ -44,7 +52,7 @@ def process(self) -> None: self.coordinates, dist=self.distance ) self.logger.debug( - f"Processing DEM. North: {north}, south: {south}, east: {east}, west: {west}." + "Processing DEM. North: %s, South: %s, East: %s, West: %s.", north, south, east, west ) dem_output_size = self.distance * self.game.dem_multipliyer + 1 @@ -88,12 +96,29 @@ def process(self) -> None: data, dem_output_resolution, interpolation=cv2.INTER_LINEAR ).astype("uint16") + self.logger.debug( + f"Maximum value in resampled data: {resampled_data.max()}, " + f"minimum value: {resampled_data.min()}." + ) + + resampled_data = resampled_data * self.multiplier # TODO: Add multiplier to config. + self.logger.debug( + f"DEM data multiplied by {self.multiplier}. Shape: {resampled_data.shape}, " + f"dtype: {resampled_data.dtype}. " + f"Min: {resampled_data.min()}, max: {resampled_data.max()}." + ) + self.logger.debug( f"DEM data was resampled. Shape: {resampled_data.shape}, " f"dtype: {resampled_data.dtype}. " f"Min: {resampled_data.min()}, max: {resampled_data.max()}." ) + resampled_data = cv2.GaussianBlur(resampled_data, (self.blur_radius, self.blur_radius), 0) + self.logger.debug( # TODO: Add blur radius to config. + f"Gaussion blur applied to DEM data with kernel size {self.blur_radius}. " + ) + cv2.imwrite(self._dem_path, resampled_data) self.logger.debug("DEM data was saved to %s.", self._dem_path) diff --git a/maps4fs/generator/map.py b/maps4fs/generator/map.py index e3025e07..2190909d 100644 --- a/maps4fs/generator/map.py +++ b/maps4fs/generator/map.py @@ -30,6 +30,7 @@ def __init__( # pylint: disable=R0917 distance: int, map_directory: str, logger: Any = None, + **kwargs, ): self.game = game self.components: list[Component] = [] @@ -42,6 +43,8 @@ def __init__( # pylint: disable=R0917 self.logger = logger self.logger.debug("Game was set to %s", game.code) + self.kwargs = kwargs + os.makedirs(self.map_directory, exist_ok=True) self.logger.debug("Map directory created: %s", self.map_directory) @@ -61,6 +64,7 @@ def generate(self) -> None: self.distance, self.map_directory, self.logger, + **self.kwargs, ) try: component.process() @@ -71,7 +75,6 @@ def generate(self) -> None: e, ) raise e - # setattr(self, game_component.__name__.lower(), component) self.components.append(component) pbar.update(1) @@ -82,9 +85,6 @@ def previews(self) -> list[str]: Returns: list[str]: List of preview images. """ - # texture_previews = self.texture.previews() # type: ignore # pylint: disable=no-member - # dem_previews = self.dem.previews() # type: ignore # pylint: disable=no-member - # return texture_previews + dem_previews previews = [] for component in self.components: previews.extend(component.previews())