| import cv2 | |
| import numpy as np | |
| from src.processors.interfaces.ImagePreprocessor import ImagePreprocessor | |
| class Levels(ImagePreprocessor): | |
| def __init__(self, *args, **kwargs): | |
| super().__init__(*args, **kwargs) | |
| options = self.options | |
| def output_level(value, low, high, gamma): | |
| if value <= low: | |
| return 0 | |
| if value >= high: | |
| return 255 | |
| inv_gamma = 1.0 / gamma | |
| return (((value - low) / (high - low)) ** inv_gamma) * 255 | |
| self.gamma = np.array( | |
| [ | |
| output_level( | |
| i, | |
| int(255 * options.get("low", 0)), | |
| int(255 * options.get("high", 1)), | |
| options.get("gamma", 1.0), | |
| ) | |
| for i in np.arange(0, 256) | |
| ] | |
| ).astype("uint8") | |
| def apply_filter(self, image, _file_path): | |
| return cv2.LUT(image, self.gamma) | |
| class MedianBlur(ImagePreprocessor): | |
| def __init__(self, *args, **kwargs): | |
| super().__init__(*args, **kwargs) | |
| options = self.options | |
| self.kSize = int(options.get("kSize", 5)) | |
| def apply_filter(self, image, _file_path): | |
| return cv2.medianBlur(image, self.kSize) | |
| class GaussianBlur(ImagePreprocessor): | |
| def __init__(self, *args, **kwargs): | |
| super().__init__(*args, **kwargs) | |
| options = self.options | |
| self.kSize = tuple(int(x) for x in options.get("kSize", (3, 3))) | |
| self.sigmaX = int(options.get("sigmaX", 0)) | |
| def apply_filter(self, image, _file_path): | |
| return cv2.GaussianBlur(image, self.kSize, self.sigmaX) | |