From 54b182d8135170186a415fc9d152221ea3dce8a9 Mon Sep 17 00:00:00 2001 From: feger <marc.feger@hhu.de> Date: Wed, 24 Apr 2019 13:24:36 +0200 Subject: [PATCH] Refactor the writing of the result image; Add optional color range --- GUI.py | 7 ++++++- editor.py | 10 ++++++---- filter.py | 35 +++++++++++++++++++++++++++++++---- images/edit.jpeg | Bin 19042 -> 10561 bytes 4 files changed, 43 insertions(+), 9 deletions(-) diff --git a/GUI.py b/GUI.py index a48cdf9..df928e4 100644 --- a/GUI.py +++ b/GUI.py @@ -91,7 +91,7 @@ class GUI(object): :return: None """ self.image_path: String = askopenfilename(initialdir='/', title='Select file', - filetypes=(('jpeg files', '*.jpeg'), ('all files', '*.*'))) + filetypes=[('jpeg files', '*.jpeg'), ('jpg files', '*.jpg')]) new_image = self.read_image(self.image_path) @@ -132,6 +132,11 @@ if __name__ == '__main__': Notice: The edited image will be saved in ./images/edited.py. Each new filter will overwrite this image. This may take a while. + It is not possible to edit *.png images since they are images with size NxMx4. + If the colors should be in a certain range e.g. [0, 255] feel free to checkout Filter. + + For the edges it is proofed if the H-element is in the image. This is done because otherwise the opposite site of + the image would be relevant within the filter region. """ root = Tk() root.resizable(False, False) diff --git a/editor.py b/editor.py index 762bd6b..aa4b7ce 100644 --- a/editor.py +++ b/editor.py @@ -1,4 +1,3 @@ -import copy from tokenize import String from skimage import io @@ -27,12 +26,15 @@ class Editor(object): :return: None """ image = io.imread(fname=self.image_path) - edited_image = copy.deepcopy(image) # io.imread(fname=self.image_path) - height, width, _ = image.shape - + height, width, _ = image.shape # len(image), len(image[0, 0:, 0:]) wont work for .png-images. + edited_image = np.zeros((height, width, 3), dtype=np.float64) + edited_pixels = 0 for v in range(height): for u in range(width): pixel = Pixel(image, v, u) edited_image[v, u] = pixel.filter_with(option) + edited_pixels += 1 + if edited_pixels % 10000 == 0: + print('Finished with: ' + str(edited_pixels) + ' of ' + str(width * height)) io.imsave(arr=edited_image, fname=self.edit_path) diff --git a/filter.py b/filter.py index 58ca9cf..32a13b1 100644 --- a/filter.py +++ b/filter.py @@ -13,10 +13,11 @@ from mask import * class Filter(object): - def __init__(self, image: imageio.core.util.Array, v: int, u: int) -> None: + def __init__(self, image: imageio.core.util.Array, v: int, u: int, color_range: List = None) -> None: """ This class edits a pixel in a image with a given filter. + :param color_range: If the image pixel should be in a certain range e.g. [0, 255]. :param image: The image in which the filter should be used. :param v: The v coordinate :param u: The u coordinate @@ -24,6 +25,10 @@ class Filter(object): self.image = image self.v = v self.u = u + self.color_range = color_range + if color_range: + self.min_color = np.min(self.color_range) + self.max_color = np.max(self.color_range) def use(self, option: String = FILTER.empty.value, linear: bool = True, dim: Tuple = (5, 5), f: function = np.min) -> List: @@ -41,6 +46,21 @@ class Filter(object): else: return self.non_linear_filter(f, dim) + def __keep_values_in_range(self, pixel): + if pixel[COLOR.red.value] > self.max_color: + pixel[COLOR.red.value] = self.max_color + if pixel[COLOR.green.value] > self.max_color: + pixel[COLOR.green.value] = self.max_color + if pixel[COLOR.blue.value] > self.max_color: + pixel[COLOR.blue.value] = self.max_color + + if pixel[COLOR.red.value] < self.min_color: + pixel[COLOR.red.value] = self.min_color + if pixel[COLOR.green.value] < self.min_color: + pixel[COLOR.green.value] = self.min_color + if pixel[COLOR.blue.value] < self.min_color: + pixel[COLOR.blue.value] = self.min_color + def linear_filter(self, option: String) -> List: """ This method is for filtering with linear filters. @@ -50,7 +70,7 @@ class Filter(object): :return: A modified rgb-pixel """ - height_I, width_I, _ = self.image.shape + height_I, width_I, _ = self.image.shape # len(self.image), len(self.image[0, 0:, 0:]) H = np.matrix(Mask().H[option]) divider = abs(H.sum()) @@ -68,6 +88,9 @@ class Filter(object): for color in COLOR: new_pixel[color.value] += self.image[self.v + j, self.u + i, color.value] * \ np.multiply(1 / divider, H[center_j + j, center_i + i]) + + if self.color_range: + self.__keep_values_in_range(new_pixel) return new_pixel def non_linear_filter(self, f: function, dim: Tuple = (5, 5)) -> List: @@ -91,9 +114,13 @@ class Filter(object): (self.v + j >= 0) and (self.v + j <= height_I - 1): for color in COLOR: colors_neighbors[color.value] += [self.image[self.v + j, self.u + i, color.value]] - - return [ + new_pixel = [ f(colors_neighbors[COLOR.red.value]), f(colors_neighbors[COLOR.green.value]), f(colors_neighbors[COLOR.blue.value]) ] + + if self.color_range: + self.__keep_values_in_range(new_pixel) + + return new_pixel diff --git a/images/edit.jpeg b/images/edit.jpeg index 60dc966838f446baf89a8d602d08a3b0f49ceb32..ce7f832cf7933c1dc34afe7f806b9ca686956cb4 100644 GIT binary patch literal 10561 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 literal 19042 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 -- GitLab