diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..ef81b1e --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +/.venv/ diff --git a/image-enhancement.py b/image-enhancement.py new file mode 100644 index 0000000..8ca7cde --- /dev/null +++ b/image-enhancement.py @@ -0,0 +1,73 @@ +import numpy as np +from matplotlib import image +from matplotlib import pyplot as plt +import tkinter as tk + +FOETUS_PATH_ORIGINAL = ".\\images\\foetus.png" +NZJERS_PATH_ORIGINAL = ".\\images\\NZjers1.png" + +def updateImages(): + #x = slider1.get() + #y = slider2.get() + + # # apply filter to images with new parameters - with applyFilter() + # # save new images to disk + # # load new images into GUI + label1.configure(image=window.nzjers) + label1.photo = window.nzjers + print("image updated") + +def applyFilter(): + raise NotImplementedError + +# Instantiate new TKinter instance - Python's GUI builder +window = tk.Tk() + +# Add two sliders to the GUI to interactively experiment with filter parameters +slider1 = tk.Scale(window, from_=0, to=1) +slider1.pack() +slider2 = tk.Scale(window, from_=0, to=1) +slider2.pack() + +# Refresh images with new filters +button = tk.Button(window, text="Update", command=updateImages) +button.pack() + +window.foetus = tk.PhotoImage(file=FOETUS_PATH_ORIGINAL) +window.nzjers = tk.PhotoImage(file=NZJERS_PATH_ORIGINAL) + +# Create a canvas to load the images into +label1 = tk.Label(window, image=window.foetus) +label1.pack() + +# Begin GUI loop to enable interaction with GUI window +window.mainloop() + +# Think this is broken now +figures = {'foetus': FOETUS_PATH_ORIGINAL, + 'NZjers1': NZJERS_PATH_ORIGINAL} + + +# def plotFigs(figures, nrows=2, ncols=1): +# """ +# Function to +# +# :param figures: dictionary of {title, figure} pairs +# :param nrows: number of columns wanted in the display +# :param ncols: number of rows wanted in the display +# :return: +# """ +# +# fig, axes = plt.subplots(ncols=ncols, nrows=nrows) +# +# for i, title in enumerate(figures): +# axes.ravel()[i].imshow(figures[title], cmap=plt.gray()) +# axes.ravel()[i].set_title(title) +# axes.ravel()[i].set_axis_off() +# +# plt.tight_layout() +# #plt.colorbar() +# #plt.hist() +# plt.show() + +# plotFigs(figures, 2, 1) \ No newline at end of file diff --git a/images/NZjers1.pgm b/images/NZjers1.pgm new file mode 100644 index 0000000..a44b9a3 --- /dev/null +++ b/images/NZjers1.pgm @@ -0,0 +1,463 @@ +P5 +256 159 +255 +Q#> *P+- &88182#4-6-(2/'*$$ ( ##&/)Q,>Q=%. 3(*&.) $' 6/ + _!$0 # + ! + +:6< & (70 D3 8!7 - + #_- *=69  "2J: #/0 % 7+84(-#  &. +*:9 /N.%6 , # 7,3/ "&8# +C7&5&/# 7J629('/6N30#   @G<00 +  + -2-%  @0&*% 2/L@,  "4  11 !($ &= #&.?B'08 . 5$#, + 1J2&  +#@C #3E " , *&W23* +" ,%.'82# +)2#A$)C\D 7 +" # +  & '&:2#  8.7, !"3#! "#%'(7%@5"0&/$37,Tg  <3 - .%&#  ',5! &  ! @L%    + +4 0241)!"&$,07# 42#$!  !;-0 8& * + 4 $& +$1##" W8 47 @( $)#6$-%$$/  +!1&1 C66L"5"D<-"  "*0?#("6$% =:?#+M.F6.#!#!;(3# )8 +&: #41? .)&-# #&  $!/&/2+ +!"  &-F   % +, ) 5 &&9 A+& 30 )$ 1/ 5 !#(* O#A,, ".0,?'%63$#I/&/$69 >D-  .# . !! &5%A*/(, *&=&('[1$*  +*(  !*/& :- 6:#  " $  $8% /(3* # &&9 + N:3+ + & //#+ $#* +) %3# (XL C/.0 /8  78 &Nk?y,?-2>D !(7$! '!" $&./0%"*"-+ &!#!#(  !/$8 &,'D : =B (+5#&$, ( * &R( #74@0 ?" .& (&*1*3- #FJ*+ +#!#  )& '"u\A (* =/ + +' .,%  %"  8'&* 0&$ J#" &( 4^1,      <*!C!43> "I2)-+$&# &1& !B/ ) 5:>\5/M)  :># 3 ' *OOs.; !%O038' 9 #%40 + #- ?@ +6 2 +&8-5& '56 # X+/A ,9! /4 + &)&-<*';J&N) #"  +8%'  /)78$D*")!#8G/!'6 +4! *0/; &lPȲVx(4/ #8 9+3/%//$#&  :,2) /&5&    cG 1  - + !4 *"$ !&.AL %08/ '-#'!* ) \W# 7)#6 *A4&.88J + +$4&!7')/  .5>30/qpLyܪ^/J8; ## ! #* + 98" :$3 3(   +) 0 :($)) )> +/). ))9#&  + !% #-*!%## .. !1 '-3- 7=1 108 +/ ++2o8& 8(<CquF'flV% "*# &@+ +'.,& 8$ $  + $0/ +*?-   +/) + +13 5# + ^9# +#%% # 3(*= ""#2. 4=1 +$8 "-G@d -' !_ WL$@AC +-&, qu*ُ*i~G7%  #** & % -  +'-# /  / P9%-7  3 # +  +#0&(!.G[8 *  %' +% +/ " #  ""# +.7*$G . +; (, 3& '$4 *B!8   5d:3 +)# ) iF*%bOV_E"XF$] .&8)"8  ( *.)9 + (  (  N:&6 + + # 4' +% ",/, +/"' +  $)&# + /!*&$'")/;&R- /6+' -  + 5   +63& (8 0%bl~Ӄ3<&$;8 ,& # 082 %( ! +  1    $*  &;N:    + #1" 4'  <*&  +0  #  ,&" #-$$- !=C +(2#     0 8<9#?: +%/[&.*=m" lodCAx5p>$*+ + =/ 2=%*#/ +?_@< #*,   " +.=- +  1) '  +!*9  +',( + +01# 0+5+LR" $ A  %A9//    * 3 3498<#O:&+/F/&/B6[wNND)5 * =2!C2 %   D>*3!.$#-&**' %E- & #0 *   ##  1,## #2"#,N  C<A,   ,%$+#2/  + &O4)/+'6@P2; +#7P;2ai8=9;m+u[** .1,,2!;&  / )) +/4 -;948# 5 ; ! -  +   #  *( &/&  + " ,# !; +  =_#,  8 + +'\i    $&"F$ . /($1.1E! #( &#sbgEg<D"C  & ;&&3$+O88 "*3;9#'./")'- /"  *  +8 +1 D0$,ll3 )/ &8I?*  &*  (  ,  $# $&N2 !#@. +#83 # 6E!##/ "/]?Wod*Y&# %26--( /(#. % '#5-#'#5+#63%,$   M6 /*$9* (  +\ 21  5R0 %! %8I"-)/)(2#  + " **  # +* /.&  &! *%)9 *PY,##( "2.Jsoѹ4XFw&&& $A'*B= !.%1 )5)#&5  ># +1+?*37#**01=)A .  ( '*   +."# " &9 U:/837=24*$  & - / 47&!:>>( "+ 1IPè^F[L3?($0*7F& "&!. 39 # &5$ (-& 73*  2/((*L& ()#( +  + #$#*':)'## -   ?# $/!"//* !3+ $-  ( #* & 2:?" # +*+ JKqDl[Wu*c2LqslV*()/ 37&b:$7 $, -: ,97 .5"$ */" ! *$   DF' 1  02%  !+  +.   *. & +/I   #E !$  + %"&+    *QEA@ Jg=*'$JK%o  /40 .# #&,M:27C8+% + #=* ,$.#*/ 1" %06#  +   /<2 8  83 + +, , 99*&;C&B8/>6?V?bGtȔURRKPGcK(9 + #8# ##*(   &5+) +# .# * &# 17')&2<0#&!/*=A!!YT#187Gsί4 $9/ ' +*-%+ #! 5  +'4!1*'4 (8 ".*  !06 +&&    !!**>$   + 0,1 1&&!.&!@# +pW# ..*+ $9'//  ) +&"\{T!1{h2JEB511T$\;m ! -NK  & 7 BF )&5,  , 4/2,&'!7  05" "!# $7 + +% +  +U& + 6**2.*I?2(oA+"4  E$$+N /*)T!R+$5kdm&6b\> :- $ +3   +!72/5 "("(.&35;  + + ! & + &, 05 ,*  .1W1(hG! , +!67+ 8# '0U8 *1y7*I; 6!%)/*!(98A1+N5 $M dqdtWm-/kc 9(.   +6#.  && ,5*2 %!  $UC##  + 6   &#,65 , $#8    +!'8 2? # )@ ; %  :Q:u8 ;!1 DT/'7?f(;M"K5*GMLmGуt * !  / +15 &# !#(252+ $& Q$  -<" ?G &$1MY$"$&  '80 ( ',7 + &8>;0<8? (7 Jy52!1# */88#FRbV?(  3tg7pda]G뷂B#   "1/ 3B # #*# / $$/'#U8(=L  $ +  * 28 + + >  + 0(   -  !&,7 + &83GJ; # 5|? #M#8+*  8RY<#67,3w.mmX[*~,i*4#,& +&5 9-*/ +,(#&L ! +J2!  +$ %&  48 * + ,(  0$&  0% +#,,)+*))&&! 7c& !% D$&-.MR /0* +=$JO#0 T37KʒlRGg_b<tFf/~ MDTM(#"aDV. ;g:=> 2 / " 10  .E0*8 )>& " #2 @ + + =   /&5  %-*& + 4' ' 7=#?&%  2<+) R 3 +7##/- ,*@(+ P( +\ӣI !#   3 +N#&  $ ӭbQhXx ;>cOd4((?#'N%)*J$ %/+*>2W!#8! 4I - +'&@12 +1 "#   ?J%  %  2,  :15+4.&!  #F?)#' -' +-,;+tqJtAO-5'5# #Yp&% + +dp~TIfgX-:EGxPC 1?#) Ւ &A@N+   +3# +< '&@!8T + '7/!%/8" &!2/2 *&04  /":.*'  #/;8E  ""8, ###' +-B)4 +#8-,;)*-77;+- Yp% /LWtu~TKC\ba*f1]*M&?JNG)'ogI**(-&  ]# 7&3.. + +   7/,8(4/ !3".&#& 6/ , ***/*G  #  0 " 1 ( + #/0 #8!#k* + C y]yKNA&*#AR )@/@ +DG<*6Fw +7& >#%#2$ + 8 #:/=56B#*"  )  C +PX'"(:*,I+>7/-  $!  +#.1&#&4   D=[^_Wb0R$#8"( 9)$>>TfuRM6R/aDu93yY.@Gl X~ +'&5_( /0_ORU"T6* "- !8#84  &*. "/ +)2 .6-   1/!&2* #  $    +0&y~_W%5K_d8R"Nk8>Ig[iqWd_8)JΈu93@-() ' d:"#*%L!) /$:G:*45# $!83'= '5,6/ 69+5E   # -  !8*! &24###52 3 +!/ +7&\iT.\k83lTVӂANw/|Bc%%*& iq:mxp̯G[#Gs&GOLGCuQw +@o/I3 +*8?! ; +-("0 6N) +5! $E-  %'*%G* -$+ 4lkhE580+=.-1   "W"@/-" #1 /!'U +2L&8)!*##'>/!?i;:o6bANJXf4@N8KB5FȴGupFU'@Lh|uQ@V8 %-1,"!.# +(&#20(P*((F =$35$-0-*&* E48%##) E**& F#$ " &?( "/3$2/N%#%! & /  4 *  6Y8DLkoBJȷcژ8sג$iό~XufP*3mdY6cMlm@ -$ 5)<9& 1=4? &.*-,FI'5095&./2&(41,E* 4#*$ "$$/4&! /3aR##%" '-&    =^(+  L]ck~]Nkb~JM/[>J*&"TcE-:F8|OP7]\(oU/6wulI[%,#%$,= +%Xӑ0 , +.$)/ )/# ' + #8- 2#!2, &*"- !A;)* $%$ + "0 7Q), . + 2 # !$*',"%*4&7) b"Wl'gk5(:pُْpϹth~\OhKp\#>FBMXmo%332 9#%~mm+  +/0*7,@&-8X8;(+. $)'<+58&"(! : " "$ +"    *#& +)&(2, +>7*+/9WEM\M? ft~iiʲx!/UCIM^T?F8&W?332*V7 ]q9i6CFQhDmW&MYi!(2/DF"\8&Oκub  (7*V0Ig +-Q:B15*R? 3" 1&($ Tg*2?=8+*/%\[:* 8 Nm@8="L#  +D+ *7B*AW9%70 ) 8+^fU1a[ac%Q7+1s k^yX"!(-2o|<2*8x*E'( *To6Tf  7@==P-= 1;iF +, "Qw F80#&# J*/ + &&Epmo4 ) -&*()+2 +/+ !* *#>,"$ Jit]xoD-.ib$u_V]kUQȹl,dDxbYPVGW'/,+ M&uyT*"Q!2#31U8<64@?/B)K~Y<$:54  !6%:U7/ & =868/!)2"%׵2xlx]VwF&Ruxg;<^[lژxLwwx>uakV /F7 #* /&5PP#46$$%+A?0N;+8$^Y($ +  #3+? :"'1EI!  +  +&  /] +) +OG^xR;I"aVuxgBu/ mgqus{:>{d[i8# + 8N,?B/.94b( + + * -x!) -|GU$% /& 8*  + + (W>D5BE>- 1-7]&# 'uU1q@Ήq/6% *. 01& *0+#* +fUw3?,[o_PQ+;R$9&*@VpI476./\D6s{1Ds2# ..:/2"-R*&- ( 5O;.a, 4$4, &'$*7 uw~J{+ktR% .-N.8'$ ) / ##4A*'*! f2V2qa=Y6=J62DQR,4XKV AVB( _&yucMDA50 0/!) >Uq # &F]%,Y#$/ + =A,gbAPB4.-5& E##0 '&. +R79ܪ̗U#X|%'%5&+K#! 9".  *$  8LD$5;DAW 7815*W>o9Bc ++% * +% +R $LD87 &11ӈg>o,6MuFaAc.&&#x +>Vi"#5@CY82aUhO!8x@#gcKLXfPJ1.&"0JQsBÅ86<[E&P_&D~;%G$ +%=(!01473!'i687/#+ӈb57IUa"NV>o#+]>EmF+gEO*|5"F6N/?% 6<&OQ xws/i#FCO-&.9G|ΒW|D1l{a~K/#"'-#+:R_k7Ŕ=F,ly3;[5@I#:]94! .: '" 6585RaqQX.P8]/\~uAF= N:sg $:||f_<=y RA tM:,*PK12 ,P89yG# w8܉YNF5?Y;g]6\EڪE.=8c_wJ,0  .q*  >1/ ) lw2 1 I J4LuA'M#RF.dCMT4.&--EOU 9=y)%&97WLJE,& hAO](L 4,!B,Al8a?990YMB8[2,*?^q̲Oʑc^7]To^lA.?"s{^t;Q9]iug|xk :K,%88*  3%*8 ,d\X48 @WJ"kU.9.%/TM)>ROYb XNJ%N\^.yIXfXxkAk]=l4| FcYw:.lU\J#&-*%-5.5'<#&1 +_*=*g9]Jy_^~#Q*?I1TM)^cR1"8,L#U8-s0 4*& 4=8.\UdY63XbGD/LB+@\\J(-G5< &8R >G6$&GLx+Tu 4;;:|2A9,BIO1|\gV*VE%>){Np\G#6Ww2|c/CP>$b@_BTXdQbņ.RfF/[bCh:xKWP4&U=)yk8sLBa]>)='J*@1(  # .&&m;Qm3>&u5:hY貈6*4Iu;s9ʉ> $E8/%$!( ^M 4I*3EIO58Gʞ{h#/L\<_?i{%mh94c/0c&1cPI<:K8JquDJc +OxQ@b\D]= 1s(:5b_V5dKOBޫX)mxb~Důqll6bT9wI*)*"*/ ( 7'c;Q;LVM2N/3>s830q4p-0Ucs0K1@ $0L,9D90gp%q! /ya858"t;&=K@*O%F/[_7Bs3K=-#,T50cA-GhO3O@@oȢ>iKd16bK*\D(-@9pY9 Lw8DKyVyŨ=]9MKM\Mq*\h7 -9,#%6 $$%#(*%&1b^R;MPTtdh/GM_$LuPU;hw;8I*3R#U'1+F&'@Y_/#F^"9C0Lf)18=@cc>X?IE &.)A-;9"*U"{_L- 'k3Rq8!(- +YVE/WQMuu YWCW[k{x={^_@2Q:1M$3WfW;.BUW+RU;//T!hiI*3|%9.Y5&E9&6$WwR4.f_*19C@9:!''**/ YA'#uEI;9=E'KshO#*h[;Y##F%;yF +YV  4_ OD@Gy諌WW~g?AfGO{^]T7KF?#y[qbTB"C3*&5.# (3( I1 E^[\* _DD6!#AM/'"bh#-K;b|% ]C8##pi!"K[PK/TfOA0 D@4@Eya[mYN;R*sP&GMYKJA/8=E=DaAm),^A*./&** 3$BE 9Y9= ޕ\yކ=W~@GdQg~\fYxo?YlU%&:>%6?+X"C3"$ "  #3(JD87;@71)\=_C=*to( 2K%P5* 3& "7! &*$ 2 ]G6Q #p'٥\b211.:Dd:Qds-XPNfFJO)ucl &4LU,4%<8WQ==Dh8#?6I3@3"*%t>1 bQ6 ,>FD92Gl fE*BY՗g@E׉bY!)~]fYxXcڷ#P'=ck3P0C"#'42<A)*  + + # J0B&CmEE*1R&CR69^aVC=*x6%=A#>T/? 98<  : +EG6! w34b&0I]2qw1:DpN-4XPF,s,io]a6E/ CIYL?E:BcX4@h8^C:>&LUxsP ,5RsR.^LI2GlWp> '^g{q!ÅiY[A7FdXOKf{XcYyi9t9*,f &d#.#'(/* ,,8! )+3.!%Ig$'m:?]D*(1C\ӼD~xG4g/L 0D#';*J\c'@! ;?*.,6(a;B-JWP~pyX^6F,w 900/$CVg]VK4ŠdEAP^C:qג90-JpO# E"&oc8]W4*IhLPm5gQUtQC?JoCPYyJOYDa9JD9:-# %(/83( +_#$ %;$6! ( <CW;J ;U,X*]MG44 +05csR.# 7A1f1T"%A  ;'Lu#8YIk<$&"C< &pd&Ubq:3wt)R%C$G0T[::AՋ*o;#>Rq׵sAD#@l&Yx]c+~C5+Y28q6pQq9UiBàŞβK'*8ŅJO"~f~l.bx:E$6 83",  +7Y,2 + +#%GK%0s/7&IJWW'(;14a4 +0".;8"P8- N7=D@L22#=-'LumDausKE4&Q/7>g\IJ'gWt//VI,/V4iD$N5sl!-U$0:<8WwMfϛ;QmڔTd2m_XEULmJaimWP_W|R+Wk6Tw/ YbhaN/  I&-9-!"0 + *C# '!&Nji3a8Y|1OG-0D*#gll#*1@* 4 /=85"\KR6Y+C$h]^0-CMO-JM~~ h\U d6xs8?G#LN;3 +bYUu_6:[p\u/B&Ct6/,(+<=\;8K(V^s:\XE8WqAO1^Of+0&QNEU{uQJF*;Ikcʎ>:E6"Yś3<)&)]CG# + !  #[bIa=[6tyo- 2X?pw6* gll#((,$/quV$N biX#dk+$8K-~|BY#pb%dP?dA8=s81U7 #'N-T,\=WW+&,kB  & #6kc>"kp>p#oqABǵqgidxh%m+@+;NU{pE_>ygNFhGEuFX[c%&"YWy$ ##q2" !! *4 "+#[X5<+ W&3qY蒹8 +!!#E#4o|gL#'@ GQ*g>!8$8KD],.$f(9_L,Ksk#:t1)NmBTI /V~U:.8@Jy@ ,KM'!, O|8JfF-J0>Y*:4#Bǵw@>U ?'f$E|?Cp$48l7]yx|#RG<6@sd%@kU^E9/:+&O$!3 * ! *"X;#Rs_*%F5sd  , +*" 9Yo'.*! Gk (hN)"q&@3&LD)=3M-#:D&-$[X9#)NNW[!Rk9E65,g~uR(0KM'/[3:_|?4,YѝiPO>mQ7VwA@{9ܠB!> "i;?054# /( !98 "x^";QgK$)45 2a +,|> *" *@@ + 18W* !#ʈ#,PNw)=*&,B?VOff4"*3NW#aW&tM=uh?R_JV?A4#/[/Lu@h1 0qP[W$E>yEuuh??!DmQt$:tNwfʥRF>[3gW )^LhE1k;3x2[Aܠc?"'  +%D5  , 8T4& #98 kfa')PQg1{=/98W69PJ#&3&<&"" #;92E*K *@ ER[FX&!+#$ ==-%3dT;9P4Yk/E88#7_pdJ7{QRR8/:J/L*T88#EVlx~g^u& 4P 3f8>6%T1blJ'OKpVBD-W/*h{J._LX\"J{c6* +3A + -!GF  0yG1{8957^+.$Gpu#1,8D2 :6K#-]7 RtBX,7g(a7a& $"BsB%8ac 2>#=_q^A;=C8/*J# +26* +(#(+&  %"D=/9?YL8959FY)D$Yh<,\<052"-]A#&g/%5,N FIQR+8&:k*)R-)BDDJq@/ILi1O+B[fETك/w'y8#'1\YGoQ\?O,- #3JDK=R5f3$!>=oU@gw @sl]B;lfDQ@p,hsib9 P?.!  +9 /   *9"bTG"AT!8#98AJ=syB48"U-_N]Ewh4?BXBc{uC:1YYOB]Cfuc. +9 C $54 9 +6&kq#UNPIdCM-T@d80]WMӣ_*5 0)$F(9)0b%#A5kFV$+NLh~K<(Y6.X$^Mipq@,|gikY80IYUEE/N?*98E8/T^DD[F-:,LcV]_O1.skUqy 15G !/  *$! + $'=o^!=#:lQ511#Q0] =KmުkK=MD# . F/ %' K/IQAF*c|8RR" :Ei.X>@/[okiwUa/X;itR +N?4;d*>W=0I ckTyi>?s-:,gGN78h~LM/+3R6!AMp5$4)aX%/T$= RO=U;cg7^)<^kJ%,@2/6(!/#)(   $ܭpYkc|osT~>8?# =u,Xloyc.3 +;+;E "55]dWB:+B\fY^+/=/G6+=GCEaR*(/>6W==fpIJ4;DD=|<0"{y 2f6hU:K6?1%/3%Fi9:@ 0&/'*'gBAN 3]+&PRX8_:P#9A&G@8ocahhd, B%F#&M &T;))9M D=yྺkF0 YK*L8Ob:K@WJl4; %5&9/'/, :*IsD*V:K6\ȅ +NbM. &0Nf&)q=ى ;9kM3CXoG1c6Eu*L]/ yVQyW584-t'62Y ' .g&/ *O6LPK9*#' +5 !E^A/A#&5- &1I6  BFDEEEo  #:9䣕^ _MJc.&XՅ;.6Eu~1C/yL(|\-Tsx;KoG#l9%x  0<'WkM bMD5X\?/8kua\l** ;Gkkm(*& +  *)Yu6$/7;2 '%3DgE'c;* + * + %<$#    " ?kG^_@*bX  ++c:i5402)&3dgpfkcOں* + - " #   %3fu\B ,- F Xo ?h'M7*.&&# & *5   + &!!'% 3[O8$& +aX[44()N\"1=gBEA&N-=2. + +.V7[xOq {pmyRY7MR9g&F%?=DA M?*0lKIIlG0'6ADUV%.^B|#0/x^q*U,   -68) % B2Lt\B^wP/-6/X:D=)a^kQ*.&+( $ #M $    * -5/J:" ;# _Y qVut8^Aa7b6^3?0<  +8DP,̭f\;E+MK7iwmM3%1*Qt 15/FCat[#7$Q[pIl4AOL2*pC1K{9=sڋs,+) ,&  $+9   \99k^wR.2KK ly=WTFVc:+ %%  !/&)M5("   (# #F,&~ + _Y?uL;pLp&)'4% 30 4/:9&>%1I,4 (&$(3Ϻ0?uLGÀ^Du@G8410*I#< + + MEP{A̦T7bEN]:p%&p~C:890.7L?'&&+%FEE*@AMaVMY1=/O7Nh8Q>A,dsC#  (&$ ?6 ;;<+;WT.2KlVc&%*-M2@. + :4! .3 $.& :9* + +L>#  ' 7boBgsGþquY ,*,I  +9'uP@tڛfooD/&M2N;\s^0$+ :8^$5=8JX  7!8#Q[ 8BFY1E9$PQ8T_ʀR7== + +  +'"& & 6a6|xB>FiNdaOV:8"]I#/f5*" +&  :'!& '2/ $**  D=' /#DD6q.BqTy*/ # )&Uʝ@bpTB~CW7 (NfG_ +!O]8/F9Jk"  87##/F B6c#&=LN7ǞAdaωDk# +*2(6>74/!' 2-mL&]K3?.$+6/IEK+C("0<:@/b"@& 5 ,=:    O< I\ " 4'' EU =LAqt=ok+'%;*F +&-Q@Q>BMg$T*TUgJ,%JB-! -/F>E<6' !6(0+"y8#9#FBE9N7Aq]cmCMdiJTRoF*8*=4 (*!/&G 0"-.h>!P^ 0 8 +* *-5  #&0  O2 C ,WT4~c&Wpk+7C&7-^T'a׋2/T*L^*6p\k/&;6*7Q:5>E<&,&Q9 8)&h ,lI<8#AuaKOxEY]bm+_1=4K/= 7Q 4E!? 0EW1D, +E>$ 8 5TD*0%NY) &!,6&    22     '#FdWXh1#"^7)6( *! 9N*<9[PNukLY'kO2+YU:,;C%'"!2?:8 2pM\8*aL;XsBcFu;A=N8yadK/=PM*R$ N+'hfP, *-/*F"  *3  &B -E0)1 (%' $K-$'  +  KA{;Y:&;Pi~ȾP  & /1*hW &##  !) ! 8%GD$ %5&8;?N/*' * ' + $ *AD / Q914&4EOa<")( 8 +!B/ TTU%!qI:^,ϢCY6]Q-@Tk33? ;|&:<~+i_|o'29f&(;pY\=:&K1BhogX***Yʥ <7%1 .# $)*(4' (8%=C&**&LM8>? $8"##!+ %*  **!913fT8!*T-0& -B=81-&&4/ULWGV8]*8gQ5_7(Yal94B# +  3DG.&" Jo8o8Kc19?GN]ʏ*G7K&;@UmKb\fY{\D=>hhF<-  Q oU  + :%%%*&A#=C"0'*'!=* #(&+T6+1>Fsd #<&"* 'PP&F*/#+M+89#R%'.D*<?8;gF??G-XAA%38-_iKL\w  5 ]T" $P/4ULo[[mL?9wI\%U2Vb\f<25-NWmoO)=XhO-  #^N=oU- + -G4"$#"$=">/E*&!  +T6EglY IV) *%% G48 *$#1T|8* .;UVJ/NaV\5E5U0_08Xx_)!)%$)R? $ I@E^/= 6JTL&Wg[o/dJDE=sU8_LhQ/\YP&/8  #2X #-  )   +'"OE&1#(,'"( & $<8]1EgVK3U=' 2D,mq3*.  G'& # &)Ly=4 + - *QI(PGd[BqTk^((1wxbP#*$%#2?  2  I@Ft +&c*-8U2MM9[~( +0fW]sU451C2x\MfL?&IX  +   &&OE +*[p2F:&,+#% #-2+VK,>#*6>(";]gYJ0 - #'$  -    E& + !*udsQcIctΌ5_EpwKcQb  *,!( *  +!Fq97DL) /63@cX-T (A!>i B45FFhL0_1++,O1!/# L 9,%  > QTYX=*": 84 +*0 ",* # #"*$*7?&,>,38J !$ & $   $$ # "+3#udl.\8Wk#$ӰwORg3 U8&0+) 8cq9,U/9-cR0~:K/68-6,#28'=J;QFF.8-!* W.3 0->#$.FP#0'0791  #&##/&,  /K!*  ( Q #*0 4!+#L/!%%4i{lpBWl@_4 + 1*8T~5_ + 84 $--U 2@ +k_]b7,Uh.q3ofK0&Y&tR21 >(P'%%$?)K@[fhc''Y6Doxa'#&g37('W.  %2 #39@  "/"*&08& +J97-5 Vq*h6@^J* +1\G'* & **%-B   * +  " ;V3 J/N) 8*&'#  *5     $* + ++O #ELK%f9L!%Tg* *mi*RK4  #5&"0( ,8Q5F>DxW=KLh8FKX7& &63&BLE|/2Gg\=*mN]BP[WPJ# &*+ +1& 2& &/!)$"  ' +(57 &$&)/+  a?h## !9J'# %'#) %/ /*& +9" *8N< 6i*qlaOO!%4T2I[s63g)( #8>&L?16 !&K[Y!dq[WdN~8F4?/8 + (# _W55*5u/''Jf&A~WC? #N' +#-: + 5&&$ (-: %*#%&*"  +6 +#  "$  )='-ug2 '# *+" $  #>-+9*c8&Q& '?O]Mt2q,4T2*UpmFL/XEٵ97 # 8>&F* ,(5CX &*ty ,5&<[&4{P7 /=d_GF@Cg&Q=3lqC?(0*# + \3<%9"+*+  +AJ +!+ J  + $ ##'/+>~uatfbKK8_VT]b$'K7Ax.9%8{0#*, ''*   .6 -::$  (= @4) %-+ Vk=C;;&=~I.VJ + + +I ##,  =./%'4( + Di/L@./aIQlhW"8OEy.&-(,5,*;6,"; $ "&C(NtI7."8w8+ /E$#1 , +%7DE#<{8M+y/ - + %+# % +# + )34  +E &+cA]g/4#* % . % D=* 2( $0&.O;Q:8\#:)=R5E%5*Kܢ4xL"8 + (#L!0/   !EKm/LgcG\/,#(   :( m?6XP "8#-"' +#+ "5=1$(#! 92?+=-$7*#-%27!!&" 2 12 %RP:3QP9&M;(4") '&)8& +/1)B   /,!E  + +8&,(,*E% G> !DU6 '1#*%C>G .#1   - '/2 (*& -/ "  #,%   %)7+  +&/='D2CN'IQDF\9?   $ ) ++Fd(3#1o5;7a3$LKkd&='!  +)  .W=DK#  &7# #8%(,x5/M[=RsD$,/! *'/*LG :,+ ##*& "* (! (/EF 9( /)$/'  &$ +D. TCXL6W'JYft\3GWiCE% "M<.- &;6  */3J% +B84'))4%* ' !!/0#T +"<'ND#I(0 ; %YD, (  +&?b-" $/'%?2/J*1/#   && *&+  #2OL%2 5: 2C> !5 1:  !-0 >:oqpMfm3[0g&+) +0 &!6! #/5&   +# +B4 #(! (9"2Q//T +21(1!$.3':F.,' *+ )/&" &" 9R5D5#)1    +!87D$# * BF 4#81# + )<" &       8+5"2$ -[? &4bi9'dM,?0V81Y" -, *0 - 3  +*>m4 +=B$&'888 '#]21PQ9$"! +"3 *LA*+B6$@% +7 1  A8   ""*bU#  ):. #C &4>#*8RF8## >E  ' $&#$%& &4( ?[?&4B%CE*##OX + +$ &#9+ & #^ += #%*8,/!7 &9/9R1PQ9  3#&8<(E1)"-+.(#/;68 +A8$ # 4/" =) @<:&-/$ + &$!'&':[D06#dJ; '  /)$& + #!?> &'&CU/,/ )) uq +' & .Y3+& $1#)&13F #5&#6&( < % %**< #1 '"(-- EE$ # +&" # /WP#& *#! "*,& J5& /0#&* &$ &6! 7&& +  +/  =B* "'7G%CU՛82 *  8 ). +&@'%J=  )/&7;#-4,5!W@'#/$ A   %!2 &>+ #6 0  .#1C" ! "#D>#LwFC "  ##"#'% 5,$>%(%& 8 * E:# +    + + + +"# = , IQ9%;* 9'% +82 (# 2F&$& W@&! '( &A ) $& "'/+./2-!. ,' &1&  ) +%$19 7" " % $ + #! .  !!  #''"/60+2% *%# +"" 4d=  ) +'P# >#  # ,  +82"# -$0 "730 ^tb/8 +!@&3D#!%4M -2 &#&3"\7 G/(02," B@' +'+ 9C & C (&   &  (* " ))1/ '(+,"   C*% ' ( #  7 - 4  #*! &./'6+(-, &=@Cl5, +3D +"' 5(   * % +  +$!T8)(0 %  =5)2J )# C&1$( 1Y/*   4- + &( +# 7  +;C  "   "/2'g/2@-**$ 5F1)  3#,+ ./ 7"((*"_5#;=78 (D +  " &0##7 % ("#   B/ + >&6?8 #0& ",  #=*-+ 0P($  28'%>+ 3   *+! 73.  "($* +,%$)>?. 3.855(D+##  2+<$1, tP. #C\> E6' !*6'>3%+!  E! !#*&!# $4)1 *)2'&#(6& ' 2(# #)8(*&#(4$#.8# # +." ,(&,M&,JF+ (' !% /* +34E (DE  ) ,* %2))( E)P+ .c. +$ + %,$"! :='  +8.,.'"  '/0 ">7/JD(*  $  +&8* ++0)$+&(#*' +'8=*,*W  Gg<+  ) /7'1&N+&4&,6'(:5/'3."/%# 4E'8, < -8))4' /  " ++/" ! "! 'YA,K'$ (&>! *#44")@%>? 6* *2J2% + & + &'@F4.3*0*5' )% 7%E4! *  /'@P&C.  6' L-!%& B#>$ #! %kl$&9 %!C41^A+ BG# &6.! #48K= 3'9,  (E/ $#&&/D(4#T0)@.+ &/<'3)"&8 +  /. */ =>FD%<85'-(/ +)"- 09*  41)&#&#: + $ 8*$&8 !//8 2&  =,#"85 > 1 +8* + +%I<+A + 9 $C4" +=E;# $8 *#.RM#!7 .& +!' / /!4G 'O5$&#'42(+&*"1 #;9 +;@* ( &1 +26   $$(-2M^/,?"$) 2@5'P15.'  (  @A / ($&0)5*! '*+.$'&OF2!" 1#/&,!R= #%)!'!#- " /2)0/:;%+'UBK*& =!)5*"* # )/K%2 $87   (-2,*/4!<]2,#"GYB", 6=/+(C  ;11*3 5,=&0  ,2&,&&>*& +*  = >&/ + -25/#=K$(!=)?5  +4/ '2)#&7%*& +3 :;9@ /.+  6:)2<#%2 #, 981 2)I# + %4#,*&-@ 9-c[.  c@& 60'&86.*bYF6&05,&& 582  !&$,*$& + + 6 diff --git a/images/NZjers1.png b/images/NZjers1.png new file mode 100644 index 0000000..38bf2a0 Binary files /dev/null and b/images/NZjers1.png differ diff --git a/images/foetus.pgm b/images/foetus.pgm new file mode 100644 index 0000000..2d29282 Binary files /dev/null and b/images/foetus.pgm differ diff --git a/images/foetus.png b/images/foetus.png new file mode 100644 index 0000000..fcc40cd Binary files /dev/null and b/images/foetus.png differ diff --git a/requirements.txt b/requirements.txt new file mode 100644 index 0000000..7f2254c --- /dev/null +++ b/requirements.txt @@ -0,0 +1 @@ +numpy==1.19.2 diff --git a/techniques.py b/techniques.py new file mode 100644 index 0000000..e69de29