From c3d0e720673a917b7600a05e77c01a75a4212eae Mon Sep 17 00:00:00 2001 From: Lukas K Date: Fri, 18 Oct 2024 12:59:08 +0200 Subject: [PATCH] added method to get vector of FeatureVector | added method to get color percentage per raster --- src/concept.py | 1 - src/featue_extraction.py | 13 +++++++++++++ src/feature_vector.py | 42 +++++++++++++++++++++++++++++++++++++++- src/image_processing.py | 3 --- 4 files changed, 54 insertions(+), 5 deletions(-) diff --git a/src/concept.py b/src/concept.py index 2569443..d11ca83 100644 --- a/src/concept.py +++ b/src/concept.py @@ -7,4 +7,3 @@ class Concept(Enum): STOP = auto() RECHTS_ABBIEGEN = auto() LINKS_ABBIEGEN = auto() - # TODO: add remaining signs diff --git a/src/featue_extraction.py b/src/featue_extraction.py index 5ea8100..733bb4d 100644 --- a/src/featue_extraction.py +++ b/src/featue_extraction.py @@ -1,6 +1,8 @@ import cv2 as cv import numpy as np +from image_processing import raster_image + blue_lower_hsv = np.array([90, 75, 75]) blue_upper_hsv = np.array([130, 255, 255]) @@ -54,3 +56,14 @@ def get_color_percentage(image: cv.Mat) -> dict: "none": none_percentage } +def get_raster_color_percentage(image: cv.Mat, rows: int, cols: int) -> list[list[dict]]: + rasters2d = raster_image(image, cols, rows) + ret = [] + for raster1d in rasters2d: + new = [] + for raster in raster1d: + color_percentage = get_color_percentage(raster) + new.append(color_percentage) + ret.append(new) + return ret + diff --git a/src/feature_vector.py b/src/feature_vector.py index 0077e9c..5ab9527 100644 --- a/src/feature_vector.py +++ b/src/feature_vector.py @@ -1,4 +1,5 @@ from typing import Any, Self +import numpy as np import os import pickle @@ -13,10 +14,50 @@ class FeatureVector: self.concept: Concept = concept + def _get_values_of_feature(self, feature: Feature) -> list[int]: + try: + feature_data = self.features[feature] + except KeyError: + print("missing key: ", feature) + return [-1] + + ret = [] + if feature == Feature.OVERALL_COLOR_PERCENTAGE: + feature_data: dict + for val in feature_data.values(): + ret.append(val) + print(ret) + return ret + + elif feature == Feature.RASTER_COLOR_PERCENTAGE: + feature_data: list[list[dict]] + + for feature_data1d in feature_data: + for data in feature_data1d: + for val in data.values(): + ret.append(val) + print(ret) + return ret + + elif feature == Feature.CORNERS: + #feature_data: int #? + return [-1] + elif feature == Feature.EDGES: + #feature_data: int #? + return [-1] + + def add_feature(self, key: Feature, value: Any) -> None: self.features.update({key: value}) + def get_vector(self) -> list: + ret = [] + for feature in Feature: + ret = ret + self._get_values_of_feature(feature) + return ret + + def get_concept(self) -> Concept: return self.concept @@ -43,4 +84,3 @@ class FeatureVector: self: FeatureVector = pickle.load(read) return self - diff --git a/src/image_processing.py b/src/image_processing.py index e485e5c..015ec26 100644 --- a/src/image_processing.py +++ b/src/image_processing.py @@ -115,16 +115,13 @@ def remove_background(image: cv.Mat, lower_rgb: np.ndarray, upper_rgb: np.ndarra def raster_image(image: cv.Mat, num_cols: int = 4, num_rows: int = 4) -> list[list[cv.Mat]]: width, height = image.shape[:2] - print("w", width, " h", height) rasters = [[0 for x in range(num_rows)] for y in range(num_cols)] - print(rasters) for y in range(num_cols): for x in range(num_rows): x1 = int(x * (width/num_rows)) y1 = int(y * (height/num_cols)) x2 = int((x+1) * (width/num_rows)) y2 = int((y+1) * (height/num_cols)) - print(" x1", x1, " y1", y1, " x2", x2, " y2", y2) rasters[x][y] = image[x1:x2, y1:y2]