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&A{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