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