From 3365d968595104650e7cc1d385a4615c5bfe43d8 Mon Sep 17 00:00:00 2001
From: Sebastian Schwarz
 <Sebastian_Vincent.Schwarz@cs.Reutlingen-University.DE>
Date: Mon, 9 May 2022 18:09:22 +0200
Subject: [PATCH] KernelFactory + BorderBehaviour added

---
 ...orderlineBehavior.py => BorderBehavior.py} |   7 +++--
 Bildfaltung/ClampingBorderBehavior.py         |  24 +++++++++++++++
 Bildfaltung/KernelFactory.py                  |  24 +++++++++++++++
 Bildfaltung/ZeroPaddingBorderBehavior.py      |  20 ++++++++++--
 .../BorderBehavior.cpython-310.pyc            | Bin 0 -> 532 bytes
 .../ClampingBorderBehavior.cpython-310.pyc    | Bin 0 -> 830 bytes
 .../__pycache__/KernelFactory.cpython-310.pyc | Bin 0 -> 1361 bytes
 .../ZeroPaddingBorderBehavior.cpython-310.pyc | Bin 0 -> 593 bytes
 Bildfaltung/main.py                           |  29 ++++++++++++++++--
 9 files changed, 96 insertions(+), 8 deletions(-)
 rename Bildfaltung/{BorderlineBehavior.py => BorderBehavior.py} (52%)
 create mode 100644 Bildfaltung/ClampingBorderBehavior.py
 create mode 100644 Bildfaltung/KernelFactory.py
 create mode 100644 Bildfaltung/__pycache__/BorderBehavior.cpython-310.pyc
 create mode 100644 Bildfaltung/__pycache__/ClampingBorderBehavior.cpython-310.pyc
 create mode 100644 Bildfaltung/__pycache__/KernelFactory.cpython-310.pyc
 create mode 100644 Bildfaltung/__pycache__/ZeroPaddingBorderBehavior.cpython-310.pyc

diff --git a/Bildfaltung/BorderlineBehavior.py b/Bildfaltung/BorderBehavior.py
similarity index 52%
rename from Bildfaltung/BorderlineBehavior.py
rename to Bildfaltung/BorderBehavior.py
index 4dc7e06..392d065 100644
--- a/Bildfaltung/BorderlineBehavior.py
+++ b/Bildfaltung/BorderBehavior.py
@@ -1,7 +1,8 @@
 from abc import ABC, abstractmethod
 
 class BorderBehavior(ABC):
+
     @abstractmethod
-    def getPixelValue(i, j, image):
-        #CONTENT
-        return Integer
+    def getPixelValue(self, i, j, image):
+        pass
+
diff --git a/Bildfaltung/ClampingBorderBehavior.py b/Bildfaltung/ClampingBorderBehavior.py
new file mode 100644
index 0000000..bf23ee2
--- /dev/null
+++ b/Bildfaltung/ClampingBorderBehavior.py
@@ -0,0 +1,24 @@
+from BorderBehavior import BorderBehavior
+''' 
+ClampingBorderBehavior, welche für (i, j) ausserhalb des Bildes,
+wie in Abbildung 2 unten dargestellt, den Wert des am nächsten
+gelegenen Randpixels zurückgibt (2p)
+'''
+
+
+def clamp(num, min_value, max_value):
+    num = max(min(num, max_value), min_value)
+    return num
+
+class ClampingBorderBehavior(BorderBehavior):
+
+    def getPixelValue(self, i, j, image):
+
+        try:
+            return image[i][j]
+        except IndexError:
+            clamped_i = clamp(i, 0, image.shape[1]-1)
+            clamped_j = clamp(j, 0, image.shape[0]-1)
+        return image[clamped_i][clamped_j]
+
+
diff --git a/Bildfaltung/KernelFactory.py b/Bildfaltung/KernelFactory.py
new file mode 100644
index 0000000..0901e12
--- /dev/null
+++ b/Bildfaltung/KernelFactory.py
@@ -0,0 +1,24 @@
+class KernelFactory:
+
+    @staticmethod
+    def createVerticalPrewittKernel():
+        verticalPrewittKernel = [[-1, -1, -1],
+                                 [0, 0, 0],
+                                 [1, 1, 1]]
+        return verticalPrewittKernel
+
+    @staticmethod
+    def createHorizontalPrewittKernel():
+        horizontalPrewittKernel = [[-1, 0, 1],
+                                   [-1, 0, 1],
+                                   [-1, 0, 1]]
+        return horizontalPrewittKernel
+
+    @staticmethod
+    def createBoxFilter(size):
+        value = 1/(size*size)
+        boxFilter = [[value for x in range(size)] for y in range(size)]
+
+        return boxFilter
+
+
diff --git a/Bildfaltung/ZeroPaddingBorderBehavior.py b/Bildfaltung/ZeroPaddingBorderBehavior.py
index cadc2f0..48b7aeb 100644
--- a/Bildfaltung/ZeroPaddingBorderBehavior.py
+++ b/Bildfaltung/ZeroPaddingBorderBehavior.py
@@ -1,3 +1,19 @@
-class ZeroPaddingBorderBehavior:
+from BorderBehavior import BorderBehavior
+'''
+ZeroPaddingBorderBehavior, welche für (i, j) ausserhalb des
+Bildes, wie in Abbildung 2 oben dargestellt, den Wert 0 zurückgibt
+(2p).
+'''
+
+class ZeroPaddingBorderBehavior(BorderBehavior):
+
+    def getPixelValue(self, i, j, image):
+        try:
+            return image[i][j]
+        except IndexError:
+            return 0
+
+
+
+
 
-    def get_pixel_value(i, j, img):
diff --git a/Bildfaltung/__pycache__/BorderBehavior.cpython-310.pyc b/Bildfaltung/__pycache__/BorderBehavior.cpython-310.pyc
new file mode 100644
index 0000000000000000000000000000000000000000..7a919095ae9017d104c5846ef7bdaf9cac22d9f7
GIT binary patch
literal 532
zcmZ8e%}xR_5bn>eAt=Oy2M->-kQg7p5QEFX8zCWj*lg02ZGk0S7TaATUf~sZ2;apg
z=+%?2;K`XKL~xS%+G)R;elsmvttJ8cyjhL6uzq21XaNL0aCZ%$h@yt%G^RO=86}TI
zF~v7TaZT4e<|-JGPWTN>(qW!IM19|uV^><4mborxg-Y@6&^QD=aCZryNlX=qndXWr
zwjpa82Z}?@z_+8qDs3Y@ldoA}Q`EIL+*9yAxWhmZ$f1J|Obnbh6HhZw=RVAGIn_1<
zN)12V{$29qv~|fyFPA16uF{#b`Op?~ot7?%GNUHal+|LI91FNzu6%2%%VGAW&9gL>
z#;T411nm9lANhzl=!Cu@#6sp;2;USUFH~i4e<s9BCC%=};%MyYUhAJ~i$7+uPh_|g
pfCgc#P3yA(^vvZrwJ2p*1E~k;b^BPuH@ds0?{Rwd<j%<j`vrtRc7gx^

literal 0
HcmV?d00001

diff --git a/Bildfaltung/__pycache__/ClampingBorderBehavior.cpython-310.pyc b/Bildfaltung/__pycache__/ClampingBorderBehavior.cpython-310.pyc
new file mode 100644
index 0000000000000000000000000000000000000000..43a303511bdcafa64288b3725d9c70978953e005
GIT binary patch
literal 830
zcmZvZ&59F25XY;!XYyqd7g-kLS%mSh51=BFtcaHoSX3MW!#LfWOqj3jN!DbUJ!Rj(
zr|^~f>S<rWgIG0LaRVu+;y=~X_3`Vx*XsaT@p|*^hXDA+9}mr;k9XwdO9~1UCXj*;
z2yIY8$y@O811Lwix1d}NTj>kcI0vtJNB@I|wm-~`(q^dV;Z>ZQNOJz(SaX9Bd3j7>
z2}`V?5?fK>R@^`ZR0_wQurdwT6ynU2R%WZzwn+z9VY1RB!}U)71k<82zt2Xmrk_e}
z%IUc-iex(3MDx(36O%7=v@EB?I8hg2vRq}e=_m=)BF<*}bDkC(>qdOk=HYnCBXrO(
zt%!Wj2;2@5@1O~Z0>Xew5FV){?cmsx!+j#I{LdOBc>bD)PvW{+$qENVWB^}?g+qik
zFOcvflR|}+TnI&{N<1a_Hx6Z~bDgDo_gVKVWcVGZmP57N0aKM@gVf=U12OG<%#>cg
zHzqgrj@B*bVWGW-bxNIFSd1+$d^b+RnfBW?7_EZ%zg*PhcY%@F-b^ni@meRJ`H>z|
zs_at`qK{oX!DlG`bmjH)!&pxDE{};{D+sbM)j?o8L6GKZm9Xvx!R0DUb|>Zu)qgMs
uqcl8=c|@T{UcX}tx}wgEJ!$yq>V@mfq06@QX4md5qbj**7X-GN$If4*%DG|y

literal 0
HcmV?d00001

diff --git a/Bildfaltung/__pycache__/KernelFactory.cpython-310.pyc b/Bildfaltung/__pycache__/KernelFactory.cpython-310.pyc
new file mode 100644
index 0000000000000000000000000000000000000000..66ad584ce838b1fa84b7a5fbd9875f888ed4136a
GIT binary patch
literal 1361
zcmb7EPiqrF6rY*hY_=h(wN?~MFTLm@gnHEwq?IZNAyD)XBFlDXnr_)-)7eRFmgbZ|
z>(Q^^EuX;evR6-@y?IdIn>GJvT6Ez3^5)IV@BQ6GrBZ>wdTjO&zcNC;;bwjruz3j*
zuLHa$oNzh<8L|f9?0`6i5B7yMeX#>(K^l~k1``ISoQ=qkHcZeBZfZRTdX8IKw|E}-
z?6mY&$c_m2Jzqt#zd%oc(FEB8i5~&9Ae1i@kZCjkjRCnJKxEb&<NI$|64D|XzyK<d
z7@-C*Af-f34P)Za#{DxPRp5JJU5bx^QdvAQhnEn3zSw)-d>0EDHxER&8#e2G|Jal5
zx{OYQuj1xz5b`50RJ~5CxsXh`+fO%rDLf_KFY|$c{lI=$%%T=Gf0;(&EHd2k`X5V`
z6%27wDh8#>s-!EUtAU9^Egl?4GDxD1y0IG4f}8197T25Qw=pGY10+wEWpl$TAA2)d
z*hGvDC4K_H=@q#m8)TDwqL<{79x=|iF|rj{hx8T5fL>5N2)eb`*f7I;$hHm8f}#0P
z8c^VYd4(CD<N3@^anji}28=~BtW6lq0YsJEpUsQIQdZtc>A6GG+?f~lM0TbNSEz(R
zto*3mt!`j2nCBWvD$DA$8=db5p%SuO2_u-#xC+YT^_)5eKho>8gu^73KBfIJOU*b)
zge<~-=3bUyJN3Iwl4t+zSFQpDIKuyj#>(L&#LUNC^rrK?lMTo;1w4uIq{tpplO<cX
zI<7hS)OOvD*A}ju7F@R-@m`2}(RELIUikN<7%LAx-L_E25tn)NzJh>Vnl)rDe;hHC
h7_+bmV+G1AlvOIxUURbFWsg(4l7&&#4A{AK@&^=|IWzzO

literal 0
HcmV?d00001

diff --git a/Bildfaltung/__pycache__/ZeroPaddingBorderBehavior.cpython-310.pyc b/Bildfaltung/__pycache__/ZeroPaddingBorderBehavior.cpython-310.pyc
new file mode 100644
index 0000000000000000000000000000000000000000..36c1eb5b7789b3435a960975f3d6ae3990801e06
GIT binary patch
literal 593
zcmZ`$!AiqG5S`tmwJm8u=%rT?Bo{wGL`sVkFC`FE41o~4+cag9)ZIjz(woJDf8sCY
z>d9a5qO&bR6&#qy&g{OKH?vv0-2$|iPI>=I0N!=5ZzcwPbajNlfDr)+ctD^DBVd#n
z8(;>9XTu}RbiuBD;5)EM)fr@xaXH|#@G;KhM5p(SV$erdT?7tD2ahts=mtE48Cc4!
zdLEaV6EYU3(Vuc!*N^FQ1AU0DjuBP|Yhz7%u%<n@1s6=np*$q0n!p{-;KCEwbS!aT
zEwy!(GQPZ&GLzWUR9s9e5?5sI)#4<K_!~%F{&O@u^RE?`%6Iu<A$+Ht%tDzsGMn>B
zuKYnP*fbP*kw*T%%1;+%)sA@X#7i!2LQ!!20ZIcU9b%C>p<k<$|M|bTV-(y7f;3Ec
z5LB%oNHSIkeYS$&p$Nt9M(Xn0A@-oDa|VJQPVJUx(QRgIQ>i~_8|+c^OR0HP<9yfY
OLhn%35iHc-t$zdgaEC<z

literal 0
HcmV?d00001

diff --git a/Bildfaltung/main.py b/Bildfaltung/main.py
index d40e22e..61e12d0 100644
--- a/Bildfaltung/main.py
+++ b/Bildfaltung/main.py
@@ -1,17 +1,40 @@
+from ClampingBorderBehavior import ClampingBorderBehavior
 from Image import Image
 import numpy as np
 
+from KernelFactory import KernelFactory
+from ZeroPaddingBorderBehavior import ZeroPaddingBorderBehavior
 
 path = "E:/Downloads/test.pgm"
 path1 = "E:/Downloads/test1.pgm"
 array = np.random.randint(256, size=(4, 4))
 
 
+def clamp(num, min_value, max_value):
+    num = max(min(num, max_value), min_value)
+    return num
+
 if __name__ == '__main__':
     print(array)
-    img = Image()
-    img.writeToFile(array, path1)
-    print(img.readFromFile(path1))
+    #img = Image()
+    #img.writeToFile(array, path1)
+    #print(img.readFromFile(path1))
+    test = ClampingBorderBehavior()
+    print(test.getPixelValue(1, 4, array))
+
+
+
+
+
+
+    #print(KernelFactory.createBoxFilter(5))
+
+
+
+
+
+
+
 
 
 
-- 
GitLab