From 85526e749c8a7d5472b97fdb39ba26c8f5a991a9 Mon Sep 17 00:00:00 2001 From: HoangVanThinh Date: Fri, 13 Dec 2019 11:53:41 +0700 Subject: [PATCH] First --- .vs/HMI Label And Editor Control/v14/.suo | Bin 0 -> 43520 bytes .vs/HMI Label And Editor Control/v15/.suo | Bin 0 -> 83968 bytes .../v15/Server/sqlite3/db.lock | 0 .../v15/Server/sqlite3/storage.ide | Bin 0 -> 593920 bytes .../v15/Server/sqlite3/storage.ide-shm | Bin 0 -> 32768 bytes .../v15/Server/sqlite3/storage.ide-wal | Bin 0 -> 4128272 bytes HMI Label And Editor Control/App.config | 6 + .../DisplayControl.cs | 38 + HMI Label And Editor Control/EditorControl.cs | 76 + .../FormMain.Designer.cs | 527 + HMI Label And Editor Control/FormMain.cs | 67 + HMI Label And Editor Control/FormMain.resx | 120 + .../FormMain1.Designer.cs | 2422 ++ HMI Label And Editor Control/FormMain1.cs | 2497 ++ HMI Label And Editor Control/FormMain1.resx | 304 + HMI Label And Editor Control/Program.cs | 22 + .../Properties/AssemblyInfo.cs | 36 + .../Properties/Resources.Designer.cs | 83 + .../Properties/Resources.resx | 127 + .../Properties/Settings.Designer.cs | 26 + .../Properties/Settings.settings | 7 + .../ROM_WRITER.csproj | 180 + .../Resources/ISS.jpg | Bin 0 -> 4333 bytes .../Resources/logo.gif | Bin 0 -> 10471 bytes .../System config.Designer.cs | 145 + HMI Label And Editor Control/System config.cs | 37 + .../System config.resx | 120 + HMI Label And Editor Control/Word.cs | 45 + .../bin/Debug/AForge.Imaging.dll | Bin 0 -> 262656 bytes .../bin/Debug/AForge.Imaging.xml | 19015 +++++++++++ .../bin/Debug/AForge.Math.dll | Bin 0 -> 68096 bytes .../bin/Debug/AForge.Video.DirectShow.dll | Bin 0 -> 61440 bytes .../bin/Debug/AForge.Video.DirectShow.xml | 4108 +++ .../bin/Debug/AForge.Video.dll | Bin 0 -> 20992 bytes .../bin/Debug/AForge.Video.xml | 1190 + .../bin/Debug/AForge.dll | Bin 0 -> 17920 bytes .../bin/Debug/AForge.xml | 1795 ++ .../bin/Debug/CAM.tula | Bin 0 -> 20 bytes .../bin/Debug/EasyModbus.dll | Bin 0 -> 72704 bytes .../Emgu.CV.DebuggerVisualizers.VS2010.dll | Bin 0 -> 8192 bytes .../Emgu.CV.DebuggerVisualizers.VS2012.dll | Bin 0 -> 8192 bytes .../Emgu.CV.DebuggerVisualizers.VS2013.dll | Bin 0 -> 8192 bytes .../Emgu.CV.DebuggerVisualizers.VS2015.dll | Bin 0 -> 8192 bytes .../bin/Debug/Emgu.CV.UI.GL.dll | Bin 0 -> 27136 bytes .../bin/Debug/Emgu.CV.UI.GL.xml | 49 + .../bin/Debug/Emgu.CV.UI.dll | Bin 0 -> 117760 bytes .../bin/Debug/Emgu.CV.UI.xml | 810 + .../bin/Debug/Emgu.CV.World.dll | Bin 0 -> 508416 bytes .../bin/Debug/Emgu.CV.World.xml | 26108 ++++++++++++++++ .../How to create HMI Control Real-Time.exe | Bin 0 -> 107008 bytes ...to create HMI Control Real-Time.exe.config | 14 + .../How to create HMI Control Real-Time.pdb | Bin 0 -> 130560 bytes ...to create HMI Control Real-Time.vshost.exe | Bin 0 -> 24216 bytes ...te HMI Control Real-Time.vshost.exe.config | 14 + ... HMI Control Real-Time.vshost.exe.manifest | 11 + .../bin/Debug/IC_Stack.tula | Bin 0 -> 20 bytes .../bin/Debug/NG_Stack.tula | Bin 0 -> 20 bytes .../bin/Debug/Nozzle.tula | Bin 0 -> 20 bytes .../bin/Debug/PASS_Stack.tula | Bin 0 -> 20 bytes .../bin/Debug/ROM_Stack.tula | Bin 0 -> 20 bytes .../bin/Debug/cvextern.dll | Bin 0 -> 14909440 bytes .../bin/Debug/msvcp120.dll | Bin 0 -> 660128 bytes .../bin/Debug/msvcr120.dll | Bin 0 -> 963232 bytes .../bin/Debug/opencv_ffmpeg310_64.dll | Bin 0 -> 12954112 bytes HMI Label And Editor Control/cvextern.dll | Bin 0 -> 14909440 bytes HMI Label And Editor Control/msvcp120.dll | Bin 0 -> 660128 bytes HMI Label And Editor Control/msvcr120.dll | Bin 0 -> 963232 bytes .../DesignTimeResolveAssemblyReferences.cache | Bin 0 -> 182456 bytes ...gnTimeResolveAssemblyReferencesInput.cache | Bin 0 -> 9441 bytes ...tor Control.csproj.CoreCompileInputs.cache | 1 + ...Editor Control.csproj.FileListAbsolute.txt | 272 + ...itor Control.csproj.GenerateResource.Cache | Bin 0 -> 1122 bytes ...to create HMI Control Real-Time.exe.config | 14 + ...itor Control.csprojAssemblyReference.cache | Bin 0 -> 11490 bytes ...ntrol.csprojResolveAssemblyReference.cache | Bin 0 -> 458129 bytes ...trol Real-Time.csproj.FileListAbsolute.txt | 21 + ...ol Real-Time.csproj.GenerateResource.Cache | Bin 0 -> 1052 bytes .../How to create HMI Control Real-Time.exe | Bin 0 -> 107008 bytes .../How to create HMI Control Real-Time.pdb | Bin 0 -> 130560 bytes ...Editor Control.csproj.FileListAbsolute.txt | 1 + ...e_HMI_Control_Real_Time.FormMain.resources | Bin 0 -> 10638 bytes ...l_Real_Time.Properties.Resources.resources | Bin 0 -> 15164 bytes ..._Control_Real_Time.System_config.resources | Bin 0 -> 180 bytes .../ROM_WRITER.csproj.FileListAbsolute.txt | 66 + .../ROM_WRITER.csproj.GenerateResource.Cache | Bin 0 -> 1122 bytes ...to create HMI Control Real-Time.exe.config | 14 + ...RITER.csprojResolveAssemblyReference.cache | Bin 0 -> 198857 bytes .../Properties.Resources.Designer.cs.dll | Bin 0 -> 5120 bytes ...le_036C0B5B-1481-4323-8D20-8F5ADCB23D92.cs | 0 ...le_5937a670-0e60-4077-877b-f7221da3dda1.cs | 0 ...le_E7A71F73-0F8D-4B9B-B56E-8E70B10BC5D3.cs | 0 .../opencv_ffmpeg310_64.dll | Bin 0 -> 12954112 bytes ROM_WRITER.sln | 22 + ROM_WRITER.suo | Bin 0 -> 120832 bytes ROM_WRITER.v12.suo | Bin 0 -> 88064 bytes 95 files changed, 60410 insertions(+) create mode 100644 .vs/HMI Label And Editor Control/v14/.suo create mode 100644 .vs/HMI Label And Editor Control/v15/.suo create mode 100644 .vs/HMI Label And Editor Control/v15/Server/sqlite3/db.lock create mode 100644 .vs/HMI Label And Editor Control/v15/Server/sqlite3/storage.ide create mode 100644 .vs/HMI Label And Editor Control/v15/Server/sqlite3/storage.ide-shm create mode 100644 .vs/HMI Label And Editor Control/v15/Server/sqlite3/storage.ide-wal create mode 100644 HMI Label And Editor Control/App.config create mode 100644 HMI Label And Editor Control/DisplayControl.cs create mode 100644 HMI Label And Editor Control/EditorControl.cs create mode 100644 HMI Label And Editor Control/FormMain.Designer.cs create mode 100644 HMI Label And Editor Control/FormMain.cs create mode 100644 HMI Label And Editor Control/FormMain.resx create mode 100644 HMI Label And Editor Control/FormMain1.Designer.cs create mode 100644 HMI Label And Editor Control/FormMain1.cs create mode 100644 HMI Label And Editor Control/FormMain1.resx create mode 100644 HMI Label And Editor Control/Program.cs create mode 100644 HMI Label And Editor Control/Properties/AssemblyInfo.cs create mode 100644 HMI Label And Editor Control/Properties/Resources.Designer.cs create mode 100644 HMI Label And Editor Control/Properties/Resources.resx create mode 100644 HMI Label And Editor Control/Properties/Settings.Designer.cs create mode 100644 HMI Label And Editor Control/Properties/Settings.settings create mode 100644 HMI Label And Editor Control/ROM_WRITER.csproj create mode 100644 HMI Label And Editor Control/Resources/ISS.jpg create mode 100644 HMI Label And Editor Control/Resources/logo.gif create mode 100644 HMI Label And Editor Control/System config.Designer.cs create mode 100644 HMI Label And Editor Control/System config.cs create mode 100644 HMI Label And Editor Control/System config.resx create mode 100644 HMI Label And Editor Control/Word.cs create mode 100644 HMI Label And Editor Control/bin/Debug/AForge.Imaging.dll create mode 100644 HMI Label And Editor Control/bin/Debug/AForge.Imaging.xml create mode 100644 HMI Label And Editor Control/bin/Debug/AForge.Math.dll create mode 100644 HMI Label And Editor Control/bin/Debug/AForge.Video.DirectShow.dll create mode 100644 HMI Label And Editor Control/bin/Debug/AForge.Video.DirectShow.xml create mode 100644 HMI Label And Editor Control/bin/Debug/AForge.Video.dll create mode 100644 HMI Label And Editor Control/bin/Debug/AForge.Video.xml create mode 100644 HMI Label And Editor Control/bin/Debug/AForge.dll create mode 100644 HMI Label And Editor Control/bin/Debug/AForge.xml create mode 100644 HMI Label And Editor Control/bin/Debug/CAM.tula create mode 100644 HMI Label And Editor Control/bin/Debug/EasyModbus.dll create mode 100644 HMI Label And Editor Control/bin/Debug/Emgu.CV.DebuggerVisualizers.VS2010.dll create mode 100644 HMI Label And Editor Control/bin/Debug/Emgu.CV.DebuggerVisualizers.VS2012.dll create mode 100644 HMI Label And Editor Control/bin/Debug/Emgu.CV.DebuggerVisualizers.VS2013.dll create mode 100644 HMI Label And Editor Control/bin/Debug/Emgu.CV.DebuggerVisualizers.VS2015.dll create mode 100644 HMI Label And Editor Control/bin/Debug/Emgu.CV.UI.GL.dll create mode 100644 HMI Label And Editor Control/bin/Debug/Emgu.CV.UI.GL.xml create mode 100644 HMI Label And Editor Control/bin/Debug/Emgu.CV.UI.dll create mode 100644 HMI Label And Editor Control/bin/Debug/Emgu.CV.UI.xml create mode 100644 HMI Label And Editor Control/bin/Debug/Emgu.CV.World.dll create mode 100644 HMI Label And Editor Control/bin/Debug/Emgu.CV.World.xml create mode 100644 HMI Label And Editor Control/bin/Debug/How to create HMI Control Real-Time.exe create mode 100644 HMI Label And Editor Control/bin/Debug/How to create HMI Control Real-Time.exe.config create mode 100644 HMI Label And Editor Control/bin/Debug/How to create HMI Control Real-Time.pdb create mode 100644 HMI Label And Editor Control/bin/Debug/How to create HMI Control Real-Time.vshost.exe create mode 100644 HMI Label And Editor Control/bin/Debug/How to create HMI Control Real-Time.vshost.exe.config create mode 100644 HMI Label And Editor Control/bin/Debug/How to create HMI Control Real-Time.vshost.exe.manifest create mode 100644 HMI Label And Editor Control/bin/Debug/IC_Stack.tula create mode 100644 HMI Label And Editor Control/bin/Debug/NG_Stack.tula create mode 100644 HMI Label And Editor Control/bin/Debug/Nozzle.tula create mode 100644 HMI Label And Editor Control/bin/Debug/PASS_Stack.tula create mode 100644 HMI Label And Editor Control/bin/Debug/ROM_Stack.tula create mode 100644 HMI Label And Editor Control/bin/Debug/cvextern.dll create mode 100644 HMI Label And Editor Control/bin/Debug/msvcp120.dll create mode 100644 HMI Label And Editor Control/bin/Debug/msvcr120.dll create mode 100644 HMI Label And Editor Control/bin/Debug/opencv_ffmpeg310_64.dll create mode 100644 HMI Label And Editor Control/cvextern.dll create mode 100644 HMI Label And Editor Control/msvcp120.dll create mode 100644 HMI Label And Editor Control/msvcr120.dll create mode 100644 HMI Label And Editor Control/obj/Debug/DesignTimeResolveAssemblyReferences.cache create mode 100644 HMI Label And Editor Control/obj/Debug/DesignTimeResolveAssemblyReferencesInput.cache create mode 100644 HMI Label And Editor Control/obj/Debug/HMI Label And Editor Control.csproj.CoreCompileInputs.cache create mode 100644 HMI Label And Editor Control/obj/Debug/HMI Label And Editor Control.csproj.FileListAbsolute.txt create mode 100644 HMI Label And Editor Control/obj/Debug/HMI Label And Editor Control.csproj.GenerateResource.Cache create mode 100644 HMI Label And Editor Control/obj/Debug/HMI Label And Editor Control.csproj.How to create HMI Control Real-Time.exe.config create mode 100644 HMI Label And Editor Control/obj/Debug/HMI Label And Editor Control.csprojAssemblyReference.cache create mode 100644 HMI Label And Editor Control/obj/Debug/HMI Label And Editor Control.csprojResolveAssemblyReference.cache create mode 100644 HMI Label And Editor Control/obj/Debug/How to create HMI Control Real-Time.csproj.FileListAbsolute.txt create mode 100644 HMI Label And Editor Control/obj/Debug/How to create HMI Control Real-Time.csproj.GenerateResource.Cache create mode 100644 HMI Label And Editor Control/obj/Debug/How to create HMI Control Real-Time.exe create mode 100644 HMI Label And Editor Control/obj/Debug/How to create HMI Control Real-Time.pdb create mode 100644 HMI Label And Editor Control/obj/Debug/How to create HMI Editor Control.csproj.FileListAbsolute.txt create mode 100644 HMI Label And Editor Control/obj/Debug/How_to_create_HMI_Control_Real_Time.FormMain.resources create mode 100644 HMI Label And Editor Control/obj/Debug/How_to_create_HMI_Control_Real_Time.Properties.Resources.resources create mode 100644 HMI Label And Editor Control/obj/Debug/How_to_create_HMI_Control_Real_Time.System_config.resources create mode 100644 HMI Label And Editor Control/obj/Debug/ROM_WRITER.csproj.FileListAbsolute.txt create mode 100644 HMI Label And Editor Control/obj/Debug/ROM_WRITER.csproj.GenerateResource.Cache create mode 100644 HMI Label And Editor Control/obj/Debug/ROM_WRITER.csproj.How to create HMI Control Real-Time.exe.config create mode 100644 HMI Label And Editor Control/obj/Debug/ROM_WRITER.csprojResolveAssemblyReference.cache create mode 100644 HMI Label And Editor Control/obj/Debug/TempPE/Properties.Resources.Designer.cs.dll create mode 100644 HMI Label And Editor Control/obj/Debug/TemporaryGeneratedFile_036C0B5B-1481-4323-8D20-8F5ADCB23D92.cs create mode 100644 HMI Label And Editor Control/obj/Debug/TemporaryGeneratedFile_5937a670-0e60-4077-877b-f7221da3dda1.cs create mode 100644 HMI Label And Editor Control/obj/Debug/TemporaryGeneratedFile_E7A71F73-0F8D-4B9B-B56E-8E70B10BC5D3.cs create mode 100644 HMI Label And Editor Control/opencv_ffmpeg310_64.dll create mode 100644 ROM_WRITER.sln create mode 100644 ROM_WRITER.suo create mode 100644 ROM_WRITER.v12.suo diff --git a/.vs/HMI Label And Editor Control/v14/.suo b/.vs/HMI Label And Editor Control/v14/.suo new file mode 100644 index 0000000000000000000000000000000000000000..5f03047a342d0c2e57d1986f6f9728f4e0625c50 GIT binary patch literal 43520 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
1+#^Z^g&M`v*P~Zv9QqO`H5WxYgw} z>TYA|9+cN1t@3z*h9JuI4?WXr{&|tcwQ=z}3f8YyrSS5t#>-T=(V;6ko7ci+ zTUdnu$-cPuZ>tO%Uw2V9{<*rSGsvbe8p!9;`2o4=ifg)j43}K|D)QC1RvF$8^NG@~ zL?((?UVZr=NgO`{efeMd=b*1KtGp+oAYG-=vwg}-;hD%K6GkI2o0H*Yvk5Mn(w`mi z`EZ+aj)U9yJqvDju7Im99J<^d$seas(os29AtTvWz4B4{rz2O{rT1l2_db#SPsp`z zRcX%(a_JumSNn>8O~cu^JCMTI_^l={*?$|ng}-D&&s*vFWYc+&1~tAb@#>Rmuailu z{l)V0D7fnW5jYF3`bz$2RNpT!F8e=#hbWu+kIHr_Tzy{rdGyVPZ^NmY^IKPJ%FojI z3@-W0Kzrwv*T>)oi1p|1No(z*=Nzr=ZXvDmRoS*7U)hn(rO~l|+Z%5A66MOQD8~Yj~vR{r4QNGlM(+2ELq?5-15B^zFLq!3b(x8iF7`X zMJ{X$Bo$>9LdMPt^B)2@@&M9fXi31a}nIia2MRl@DkkYd;qt)FMz9WDDB&H zLe=pHus@wscH~<_%y-(oE zSNuclSpOeFURslATpSD3uQaE8f{wWC|3+HbS6aQ7LuD3U6a`%EbRI>hJ|jC@!6}}b z)AX!@xSkc+fx@UfvZ=aiJn9*i4{(nB^8>h?u$~c+&T=RyFU^NfqoDFg=Oe=UQyRs6 z1ym04epE)jlinb>+FpD#yieeIH=6R7{3p^7bZHl*;;Mt}^o;mm%AveerUOt`yDIH5 z@Up-VIb9@jWA*pP2;J{wl-e7_@$M zAKcpg0pb`o&R5SOm%eo#5t^sc`cN)V0N#9P6l~!m5|vn`-B44VUMmyf86+Cpg` zf@@rezXYh7EB6uDTsO!Ua4Z9|qi5MQpNeltz4+(Su0(-lQ+3_|uJVgtN5!Qt{tvia zFAYOMeM9owD1-c|GMtJNWb<%v4FyxYumPOpPVX}^vb^-nl=Ss?6p&nHyBGURe{Npe z0v#I{YcPTKMy|Y0VZt(gK5~^!@@uHO*8So?Bi9%gKRqhX18}R$OW5fXbnZdFEbwh3 zo1>|t$^VIcj(MnQQ4*=UpL4Hlh*VPM90c@EII>% zP8OYhfqz1IOy`y;-zt1aHJ$(W3jS1EG{V(h;s?=Q>U%nW9K-x@D&|%8S^_-*H zLgx}aBe-PXv#}#C{rQp2YQpD(O@N*a)N^zj13je(Cg1si~^!8V{j z@!xU$9+blu0X@Ojgueklf#nG68OW7@uDR|<_5gSg{2lxQJPR%dSAc85bzm462}Xg@ zpbCrw*9(W&Af*nB%!1b;kS&mDQ*9eZXp=a$BcNkEA+8(?J^lahc95tWlxlBDX zIS}aCLOlmM4D3wYu3#w8*pQ$1=BVfP_~+(x`S)a?cGUP+JNF0bL;nHl4_g8G{3vh= zI2D`)&H=B0m%zWlyWj($=UzvF{eYfH)N_7%CS1=|js|M?Z^3$SJ#)GNSOP2#zCivd zcnmxbZU?IWK42zLzfoQJ=bi)AGoRvmrZ&S-bK6|71=td(t*3)#a6C{us{PbnYXSLY z7#IuY0QJMU;D0r}+DkUnMw(0XETx`T)_gMw>;eu3^TFBRJn%Yr12my`D95=#bzK3h z0m{I7K>hr$KyeyB8-jtr%D5X`yXwSb}l`}xCZ^W_)GX#U;+3Jd=GkIba|j>Z1p_6o{e4yl!3lrbD()% zWBpk4RW7q9KOR#;b_BA;BR$LO9b_usMnLZ{n9PxbdvAyOfzoUaG>-4%cp0b#(otSh zfzpeskNyR8kHT?(wLUtQ_!B^!?$8jP!cous%SVde3p5a(&2cG^1^a^>XaipZmF-TB zcY|%g4nSp}2xfq8AP<&A?_Q3Vf>l5{XaZe9D;Plh;~cLCJAr)xqAst3QGqXmpb=Jfa75oNN zDD@omhd5pd)ORIQeXKvLf6HDhlb*(+ zbT>lxpB!%hZwA>W$ex1V4BiT|p~(IPzZGbFDeacXp5u5M(AZS@BXNDS0{2 zoFJ|~bYjGp2z)rl0|Fn-areOG@8-bey9S{8R)O(AbCT?;tg7pxi?7k8`{DfW&%ZxC z@TUj<^nmxkk@ZVQ-;KANGrrqpi>0r-P+E4l`27ohGnm_clo~6~r+ZHH9L=Px(m17Z zw=GiJF;W$0%(knz2N&2R{(4hX_AE&z-JY^XJlhWyPL{+ zV1t)?)Ufp=ah2cbk?zvTyRESewUs0HZ(~bLD_hvKgCxUNo5WfDqA{l38#;US1WSUA zz*2$l#A!;rH~2TuS$P?tH{?iHXH~7}wMtT0XH4lxE_;&eZ22BoE^w{Xdjzg4xD^7| z%5izP^4b~bOsuqr1Ifg{1zL$K{e1K#Q}}GS@{jqlgpWq9e8qJ|uJWmD*8rteU34c! zyf?TRNMCYY>4{5T57q|Kdlkrzbaa&{E}b8NRwpW({v_Am!@%^l(o$KJRx3>%Wm9($ zRt@}ej;e>^bhkiU_H|ql$d>X^eYJX!p7NBAd`S`)ud-{^A)T^tw6OfH_K|KGIDS^o zuJcwpyZ(P@s>!r8X4}=j)9GdYuNz$T@rmaiG~luCZmAnuQ?}ilhga-&&l1UNeQcLF zo0X>Nr8c~0ChWf&lg+!QqWpVz64RC-*%8Sm)rM(odeSDRYBqZ^@F!N6PuOXA^(NJ0 z%7<*WxrFS<%O$(jv}-JVtZ>(c=AlEJ)$uK6D~jgnw@@j+yU)G-LYvwgVS{N97wlII zd-xWn;W3Vz};aW1}riNDS4y zvekt>XS`D=pZ8m({bo?hZlOx9*c~+7Cdt%#*w{u9Qdzn?&cAx8L`*8ODkq6}yfxp- zp1{#OQWx(jC5d}Bv2_C5W7UDe7S$wS2{#n0Bo9A?j#nIC*^KepOz4kcPxRMxH(U?k(pohw_3fp)vOjNh*u^M==~mA2e0#H=11lFg3G2+TG|(AAT>1Tkfz>(6P6be$?4Ay!Bl%8&mvPjebo8fh@aasVymo@?>?1Cj z%Am925y*A+lJE8geSq|Iovt#g41Lj2UP`+KT>eq|V<~?bN0mYCp>+DY7#*!1q_5vi zWnVhC0LjIV0cuBaq;^!f`T??VXVsNCsy+(K_kw(?v!u$| zAIOf*+-hShi&iTGf$~?G1f^XEsILtIDxaYAs{cm7`jyJT-FO*d^G?x_D%q}IKP}8bx3r&P|r5>3o zjKDS%YGYfzVJ1%x#Kj|~vbl5&&ti0vre=00X(nZPv~fhk^oG`aVK$uA{9`{Q;&!cP zYkhSK#VSg}*&uPFJG&N!w5l(Zu-iHj_y_K^=(Y#5lBg*-uRaO+M*@-{kDA0h7n^i1 zQcGf;58T56zN=_WkwkK;E9^*qmQUh~FBXa-tR=I#q6l{dlgM}?gRSq4sT(HpVg-t!eMS`?%>U`4RA4>_({^+TP@DxUa&NX;X?`$Y7O)jEJM@J9v6)EV-tc0j^ zW>VJ1{}Krno&yb=ZB9}Zd_rH7Q$ms6q(9t?8UB6%!RddoP+nE&(d;G zk=)H4DZ;~8*jcwlc#Te->=9*!gSxeIQd$I)b8+;Pnif-*Q^R$qd$bP!vnbX}U%8GP z$(uG>+gL`Q+uauIx0nrV49R_eKym zN67C)=%t-Ll50+0{;F%^Aa)OzDY0eD6)@-h zlWzsmd%{`T&v;1G8^R^5e;g4RuhH~3*(_VyXoepLAw^-rU6fNejfi^x zx)jNYI_)==S~Ik{6$>ivri9*q+uWM=1>|Z`4u!Jpj7&3+ztzbL1p~ey5PV-C3l1wS zv)io&vB65X^AJ6Wn4FQcMk-!vt{KLGGN3zfy8&HSYE3U4?cvh3g1GKTYTYk> z5?t2<;)h{Ja@neb>$*oaw*gB7>AcK^iMZrHz;)dry`>?##u9%&lIxpYx;~M71YFm5 z;@ff|qwAF2K^>5eu6f1)U2o_*X)HR*OFFy3RW@;bcT3kVD#OcgtNRz|D4ldpL2lPl z{m7_KkUxc7I!ZeSuCgfoLxD@4jpSzquJTrylDIq7*J4L$ZGI6 z>6%V|Z=;NhT-~Qb#FcN3jN}9H*$8D{d~fu1Z8{Ddf!uWTY?E>A^H96Vrxlc6`bzuH zsLa|cVfP%$;k}9H;J!PgKBKf}gY^S{h~qke59DZl;2pU9E&W$8pzC4zE%Rd;dSS5f)J_lR_|aI=3HT-VUjIX&W6!p;62aI~cCVM}lbT=|Nhh(Xmw{`?6$^11Ashg{{6Tr!RKfnYU+@{Q!W z_Sby^m1RKSO8YqFRGjjC2X1xz97-S?#9zg^R?bV2+c>`gt~Qg-LvSnGvv9M2 zE#4lUC(dy)J~9pWj0+9m$u(pxR93SrFy> zFa?wT=3q^9Y%HzD1gdf>Z4bEF?;G)N5fYS{0DqOa#ywwB45>@WBz|5vfqf@>h&>l(`k?NHzHpv z{|yvU_Lc9y5UM=#&!On6ttJ023Z`>E`qnQ0MPKqP_y=;UZw8-O-<|`(@C|G%p zL$0*)`K35SHZ^vxgUeUqcf!@C;!nV3NBpfw=M%W{l3XVh*%V(EZfX0#^I5jy6FbCJuwe0~dZ%S+$8 zx4CO+8c6*|_FuuK)qQp3rn5fWY;FxVJ3GNOrz`DwaP#eTQNGtAw=#c2MrLP4j9c1! z(6KVihg*L*A+q@qWj4PZOF7M-mqmO9xV6`mNS=%M&)6}Y$FXm9c@DX?*K1L}|ACvI z_57ysHQ`pC!Em#)A$ggd`|yLxDgT#8I)3moIj6&Si4^cUnj`#him?k z&)@0s(U>`%z8Q8`o?*1v-3B& zwdvpC=7(>wZ#vVkX?;oWbCAyNU=-(<{v73>4d5Ds;tTMP@h0TTSMn9$@`?EQk^WJU zd}-!Pis5wbMsDkj)sd^cl=f@nwiX$PT)vY0CmLo6ltH5PPb?gV1eepUt z{~XUlWMA^Xz*Qdc6X2$QE?oIaZtpG-pNyP;PCf`_PTwxyA#k;Yc2^t$mw&`xisXwU zl+7%-54n6LoyXxSv-l|ZI)P{4nztqY1g^Fd|1RP~kZlUK0!M=ua4a|;oChueXM^*> zg+R}JtO4f1PXMO@y05zyP#@?EWUB%U2bEw)FcwS)_26)DB)AA%3?2p#f?t7tgVes{ zu0YSDY>n(ja1*#2JPY0g{|0Y^kHF2~JMb@{=U8+NqCLQRHbT!I^ai?yUKeP5sNbrt zs%IUrdVBy^UeZ(jIk^428iV~o4jc#m3eEs(3$>Z%zfHhUuo;*Hb^%LcKx1bLI18Kz z^n8T++7aU59&jhP3)~AH1OEjJ!1tgh`g)$CA6$E<8#wL{`osHz^}wNo$AiVeT<{Rk zb4X=Cy32B9;U<5J*c z@C*1E{00^wZW_nGfK$QFpc?2|u)#p}k^OQo5{v?)!5B~l_5gc=y}>@97Bqr(a4GSOTl|!aqRX0?pmCq>ZyE2fF_`^r|?eTDWJYCU+o3<1#`d$U>oojI2=g-D4=KT z$~ekL4}zP(zrn9SI%=#%!DLU}vnR{IyMh(K_MkiQ7jV?R0{M)C+b^&ANqjrdEAU|) zmkoRijvAxNrv|8P-sGsVUk0uKSAuK6ec%!BI8a$H2RDEZ!8<@cxeDA5r1MXp^eXGs z;977UxE|aN?f{R1e}E^zkKlD6Tc3fifpk>1TfoOa>6Fi{;BVkR;1eKS>D>lC1+uF) zcmuo(9ssX^SHX+mCGZ1Ky!`kAcn!P^z5;&-DwFE@4R{Vb4^)52o&-;W_rdxAx4Ah| zHC<@;xLJ9NWj6SdpI zTvcsbqe<&F84Rys4_fl^Pd4SIzt0!^4p{OR{P5#o$++~bsvW*r7=DEeTbhbL9hv+_ zX}?EyqL&Z37nC{vxsobcT!t^gx}RDnX0vP!);^8o_sie;a%m^Ir$1$Cs|}kz-1kn! z!`sUFIXisjMZ)Oa>;<8`cMh&@<(J;#kE$xHUx58ifWnegXKPxLpEwgzARW)XiX7kJ z$rngnC@!>OgVPJ_=qK0$LFM#j-j!S^(#Aes9BMCEl`VdJ4{w{cmY39*-W-)mI_gwq znx@iVq|p!DiD`UM-kiP(zerwO0k2&w)n5dDKIIm0-;N5^(;^|Vd8HY zHKCFXug~%h*R&5Lk&27D55eLRmk`NfLE8{6Y8pw3S_V<_o@Q-bNyB2!T8Pzbmtz|f$ew|uVJEJ&BI{Fu?Cd-|fNVeJ(O;_G@`%Ix+&p_bzFdm9jV`)&-j+-K_L?jix^*C$_s`J}bV(m_1mC*Ms z^#He9o0DBlEA`RN#7t|uo3dSmHp1EFD&9eF9~CPS#nsI=HPpJzDT(of@HvH)H#cji zZ$=xjd>P8UB;I?<)EGq<^pcRKr9~x7m286QC@I_soivLRGo+IQep*X|$@|4ih)V1> z_K%v(cIUom|8Jpqq&>zN*;JplWbDziPk0n-sMkfZ!d=E8SFKV~PX}STNvk+{fl2EL ziP8v$(@ZycBpc^KpUKv;%v}Sl!zg12hF5yG=-V#rV4TFq%-Lw!(4rF#gPMoY81OTB z2Y=1f20hmKy9!AovCOOE%XZrT=brd-kN4=k>%}i_$IbqUwrq>2+i2U|s#lN?q5iI9 z6Zo)$UQ^y!(;mvKXp61LkxwQ!wx&JX*6OxldTP4_l^gV|bytEcnN43lg|ZkNNVZsrs5> zs1;xEDQ~W=r;%FQ8{sW2d}>1v97bDX!v^TFSv(ic4^gb^LrjN!+-z3z5ra^%;xHv( zb3I>G$>w>dJ(X!|&EjGA0G4`Y9QH54FObk~yn`5Ky z&=J+Fx8-R_OCN`S9(iOkG7=Ybzf$^8Z(D5|$1SKVU+P%fef7suT6dBoC7N zXy1goRNSQ@*UFx1O;q{B_3k3FLrn0(a6TAG-}Z)*ZNO}&SLfAd;w!SV?O0qmlUr$A z*ngyfRK>eaLu@4_r+=ACO-hN2guYgd4J}i%HMu&ztiV^ZGBtTVpO$UR^6Y&}YrSV& z6K6Hh__PyW+pL|DR=h}NRd(VrZhy5;=D9{FCoG1d^K=}Qj1MoIm~jmfJzG&qULw25 z@U9JYRG{9^yS5zhW;#R_SW07QqN2KXj7yR>P0f~U6uvmxp_!Bq z^T8fY4SaQ^nU8GnUJ+?&IpehLd^tMpBrf z2B8J=lu zbl)gaw2yL?(VR`!h`+xQ76?g7XU8cQrHv*#Q|3VyR^~iN6m`ym)q^SONeXAv1h|HC zH}B`jkFA-S@t(Fgwu{pdPblePmY@sk(8g{tR7TcnT{vQZOU9kx14~=p4qH^^X_`)3JX*NfSeX zCHKggn^@y0U6xI1X!!#^wz~k)`Lwti?oL2yN82i?xSyH4VA6KwP8K!1YN>d{l<2_D z0P^T7fk{2Rad%OwtAkw{^17Z%E*=W1;dL9_ow^a(HuMVDOC6OGJ>!;#MyEr|W zS-M`o-(|vDLmjku1zA`=zeXwLE+1pp##)M(N*PX*;lwbahU@<_f2y_f1t+iaMy~et zcw1~i+zsC_hFHF6j#l`iJXW zQxp`v;~Bu!AuM-d6NQ@T$!j61$r+%8PN_-1gqoXw)9JZ0jn3!cPEwSbiaS%)Y}`p) z(S+QIRyrqlqEIj`cdC=l%$=xo7-^mAF+NI6#hs{^o>V(gE}B<6*J>-cIUM)2FuqGq zTBQuS38=Gv>#h9}*K|JWN@S`6yH33Tm(W0evZBo?ukMMI-mT+OjCB|LW}Z8 zdWKGJTAp%o(^-N2xv`V$gVHC?5?6dWT~s!4msj&%JSGyMzdhSA%Ae@Ng`>>q0qSBa zPS!!wd6|V@Yr&a8y)80FFzU|w8KyY42m)^S6J~TSdsY*V|Zdsh0}UxhONS;A_Q7mP#Tut>Y(fAJbjzxEFKyQ1Lx78Ax^g z>SIJryT3KZjZD3oG+R4^)na-%;KLP}dS0=@O;m#Z`YhYT1U$J#Z|xfqaotFcnmCH- zP#72Iwq(@0cW-cY5nRR#BJ|4xHw|GU`1NY!v}x@3$t&n)P}j&7Fh}HSX31KtkP3>F zd?S%U?|1O4cikxSjap!#Q-#Q)>2%1xLqv&0)ooKdO&7;SN!=Kr@L_3HP~KP;C7G1V z@O|a@&XUr{!l3Nt#fnCzf7i|~SXs+&S$19HB>cSQE(%9+LzA~`hSw?TotC~crObag z+PzJ&q%gXD$KDI=f6pfU#ZEF;q*0C0FL4U^lUhh8d_jFJt2_k@m18t=>TxGSL;kdX^p2VQCWGly$oRm>}(FxA1w9)$n@V>Zeq! zw5n$`w0OIG-aNiXG$zy7A|%C00-+cRC%=#>V0~vyHrFr*=hrkQeQQj0EjQR3D{69q zr9b12X-(fCBOWeOBgz|Cxc|P#1Q7ek-#lfyT1$qX-@*_7ZY9YJ?@HL|gB<78WGz7W$ z%BMdk7YI_NJaYYv7W$DJy@+&jbHDz$|EcpP85K%`rLg0~*6C5u6j-fI)S^6@W^^G_ zPFJ*JQV0obsUz<0c19jAmRSx`wTei`m)}Y4tm4E4QTpY%$ab18ii|RGrvoi2lKWr5 zdy!02EZcab)bS^EZ5N-eUtg_Qwm2{Pk=?|_H&kVon(AlJh=#hS?UZW8QAtJolFN19 z)N5fKrhDKS_Mepc&0kr%Yh3l`KU#&-iAbKT_fk`(bxj)eA72i4&a_w;=x8eX)zCD9 zXl%CDO$&LGCnvC~n%s;;NL`JGQEEDjIJsNi4W4o6hq3V<|$$Ra}{9M?qCho~{%w=oHYps)l!X=V!P%eqv@n zt}3D-SUSe6)-^C4u&@aIKXrRmU4x%>s@QG9YFLg*oL($5Ybqb`gTO|kB%>SKTk0*! zRU^ZxM8y3_Sf!A^Itr)HaA35j%r7DGsUUoL!pl>!R`zKqJmBDWJNnIFxhh6`J^SL= zKg6o6V8el?P}h$vw}ORXx=ajJ9!GDVneiu)$<6hwX?PWBva3wfepn`^C)fgknX&Uj z!Kp#lHYHCFZc{_M>KR_E?5|l10=hJ9)SEgvCwCf=w)c2m&&VduFtufJ<9Q!_dTkS} zKF3#w71sD!YW4rO(dN$wB)rxN^%^)aZ4!?F>75l^0ErhC9(DtSzs*ss0t26x45mVL&6D z$-P2O+PV#pbomlu%RQInvklslQ=^+j*&K$8ByRr(QunC>E(9WKmnMKd|sNJrF4Yd2}4C~KFA87|Q|cWd>p zlSFb8NyTB}4P1L8U_-3v8&mAU0a`Qn;xSZ3r@tDIXcCsId&Fl`EyOIH)U6jaM`0So@?bQU2`#oXmPWX zW|{HY@LS!&)_-+*mM0;^-0P$qi+&y{A+{pQ3<**v#eyOwce=2t-p%To^K(v|&X0+L zPEiG`m(nqoNjQagbBU@mZol^zN~7Cqg%O3@N;-?{Bwv1x_9@%~iU08$Ucc1y55nrl z7%lvm_`HB$tGEq;51I9oMZI|Pcz`>7xWNU}a}%kv)Pf9=RFLZWWmy_7YSWStp-yRB z(ym3KR8g&@{)s{(iyl3%;d~y2OBJ#}SHFiutq~>leS>Jb8(AF3h0ZM3v!e*R+p30qNRu)9O#g^=!bxX#TQp1 zHXq-dENR0OIx~`-LOY}`@|ESPS-pd_oONe5I?*XM<+F-<04wn1y4&0K=M?8?BJE;3@k0lt&Po)?i%a373RhwAOzj!D!M zE|{aWt(^YELARp#o(<2*aY7Hr#9sJ8-hP;O_s|O0#+^i&OM-!@b0(5-5m;cL@CI=w zQAM`pAv}Uz-AuM)So;QP@yfTOI5H|T$(lB3rt@MfC`uIFj^7b}ls1 zk|4;p=CtoIFPH7&FSqGNfu+~kyJn__9S;JxKKGh9u>XLuB(ZpsGE%xn|Mg<~1%2}Vw^1&B(L8?Y(uF$Xi{?nbh ztDWVFn%l7$3@1iDDn|La8;ms5+Qt%0Pq0qld2#zSg4@@-Hni6J*(-{UXt*sKx|K^D zMB$Qya`;OW_pP$@1kN4qsrscPd@GgB0qIMnDw7b`qWX1_Wp~&;kf$*E(V%WTkFE1y zP<>7Ed`6STQr_)QDE@`9;8QcYi->FN=Mk@~GfH&%t?oO%xsl;(YH9`NP&VA=?5i|s zw0)I^0_!>cc9)5kcG-NvJ`9(SznBdZLuJ_KRN2h)k}SODkPY9c&ARIFo`+f%x-?$V z05y+0}ZWR(M~wD z8Cwha8WP`M=N=v3NK1d>akt1-`Scq=$t_k2!N<+o{0}n)f$;h-f9Z@%tCRZ1qe>?g zB3)OvW9a^jm*l4>TOYU^@s$?h4uxJ^8vgWsq23exJ3l2llb3($ovg?39?&b{D+Yc~ zB!3dFcd1I}HMrjWD*kz-GnALSE{A+A@GEk0>GUGuQh~qK&C7dIo;8s74Dxm1O9nn1 zzI@e9G!aEa|o$kB{buv2qb2>MU_d2!6k49*A z&VpNB*TB~d`p?73+NFIPZsq@b#Pv>atM6yXshZP&0it@Tj@$5pSLJmi`A&zU=J-x< zk~_XTTzN@nB@#+!JJR;U&Jyrnkq>~Y4B|tG<6oEm;FIqN^RLU3@K+IvPvn2k0Qq4y z^2gz_BmQHMOaD*`puFV6e!Ps=+Vo`P(wF>9_{xD_4_`I#$KZNtjC9_CTc23~H=BBQ zx%qZwcv;Zj9NstZ-QdOPHnjHQBP=X`Z0I(p}>%46S9 z5!d%iEbX0e`9$)*_*rcvKR<$8b|k+MKl884ipZZwE-v{^w2}CgO4?0$tU8w9z zLH;N@6tBxMl&ujRtINNT$tR=00m#ii^Wkd8$>3}_MRob^*TdVFPxS2*wY%O`ed{Kk zkHhzGAy>YVUk$f<{SzIPUpoIqZa#UPGFji-9J}J`x5`816yKYUC!2czbywu7i~6U= zkLoM_D>f;fE9VxWz8VX6U{L;)f0m%bm~X$KU@Du+^g@*{&n4Ko1TG!T1Iwdt_r0QapO0L1 zSD8jSq%X&-~D@2OsI!PSnZf#t|l z=NHMJLasKFe87gD&qqFGQ_q_zb2TqKmres^-jK9bwyohLcXq1aRNwL4;O5V1aO(r> z5ifs!h0R&W&CU^Uv!id*nVrkvxW(DL70wWF{H{p;INa*^4BY(i4&3^H97}g{X_tqa z{jqS%_aeBJ^Jcj9w|4jjA??#}v$G@9?8<6)4{B-2jHx7VXU7mxR&)%`s+{*9;_6LWwGmu-E*C|WOa5zG<^WUhi zUWDAra5vog&vvA>`o4?Y%Df~-On+TCYOc&9;nruS!};gr+mM&)bqkn}(CT;r-28KD zS?Zs!kXydfky{#xd^$H?JoGhkk^aoY!dj#$gR#x&{3?; zE6~xcJ;oz9ovo2udu)o_%0Cgg<+TPC!K|y-4CFQj+R?Z1c}gU|B$D5SoS;klG=!kz zuS3cL{|33){~5W}ePw)WX;)_un*J8ZO@C|TW^;GsR>!@O6LfjajdU)7o6SeyR>wEt zX8(}L{;$Zb9amyNn*Knz*%=SFe$oiHww?>`8Om^UBtH*s=auUt`9p9Ut1rN9p#t(4SU3>~UI%jL1y%?@BJQ`jDH=9SmHEtzuigfgiBeL&uE#=X-io`3hsc-P8 zj*@R3xa9Yc)_nLF+{*SMd};JmhIips{vXHtbHCP7-yk2=)xaW#e{RjU2ZSic_l2u1v=%%TJ#n@5p7=q&l^;IEfod1&Y)!uA!%DdI zw>{wIlha5mJ4(AF3B|RpU3Ee#e|4Pq&(XxSlb_0_^>jUUtgp_5TieZrTis8Cm!U6z zevg9MPGuVnmmkD$jna0dva){!V`8wR{@-f`%`#s$1+jGNo z-d_t&)-G*#GBRKFM@~_^O)}Crx)N-Q+-&XyxAVu|aGTp(;a0XI;noMvhns&+#+KS~ z0-0Qk-1_RhaI-&d314?z*L{X_)F;KaLEaSK~WiA~AnpI@u| z7@0x1VnAB{m(Z~``V?;c^BO9ya_U~d6Bto_)kYV>RR-~WNNDHs#j&Y&R9;KL&F5>w zZGQL>eXH-=a2soDVv8!c>)}rW*L|F)u_gWP@VAjK375PtT)xuv^S{v%myW)#t1@dW zyet_Q1vZSzHUw_-#w;qLKBKz)1gM(pW4*?Eoudg)M&JB168q{8>hp(^hwSW6{-=hq zAbvhv{t@4gw5U3t{1&xQGji*z2SnvLCX$~4H^1$@nfK4p*nVh9?+2CnKXf*N?%PjO z=!D|8fNJ!`rGG0#eNXz|M*8Eato$bVB?Hp_urf|lz0`l!gG)#JHgx14weJIPYsY8d zR?au!O9q|p8>N0*3vO+_Io#&eiEtY))8IB@A>78}p5&{3 zC_8II269whzoBD(yBEir{)=#1*PR*4e++3>-Z=GVzfc#|aW)23FWI~z>ciKEw5rRp zL0@%WhkB`;Do<~0s-GzBV7U4GPSR>TD(#%0^8-2+aGO6T!>zv4;8uqH;qswu9u?_q zjHBdd`RXdT@)cizL4r>IEc7*>D6Kk}*}o9^GC@9o`Ys*#^~h~4_XNBw$UlYKy0jSEN!_&i$%9UlgB@K&Y{xyvJkHd@>bo=al`h zsd?-Z>`dh-JDjQg1be__BW&(2gM}1?jNT&hbE68WV ztqe!OtqkYFwvf~%iPem~sm^(x_x!j}nl_Jdo! zX2ER?o(#7!ay`5(L2Rox58C7@vF&0 zHr3ugpl^N|9LBunzT9}Pqj`LhO;f)t1MeB^uL`%d+7P(4L9N6J`HYd ze=|B(p1a}ZhYR8I&n$fVaHR8O#9xHldF5?5MRIw41ULVD4PP$E7o$s|qjP!4cbRL4Qh>ps9E_&j+UV90-omW1C+nVe~;#NXOYt~2Ms+agHaOEYgwYK`R zc(=_{zby;5x~~N{o14S?qOURxukw9cWxfN0>Kl84abzTZF!+gyK>S;<_$Hp~-1#_Z z)pj$$!8lX?RG;4s`_h;F2DtfZ7Tnr;9^CrOF>v$A`Ect4m%+_W7i?kL^}WZ(rt|XO z&@uZD!{rm@`v%I=*EPxhlvP~6&Axz+oey4xTOWH5uD+_Yr=slo3Hs;4C08HlOX1~D z)o}s(mha+Qr1`D{S6j%=7I3p)4!63Gg|8fRp2U{wEBjNCuM*_#aGMi)Oz<`zp&qYL zcboUVhnvks(9yV?NWP2FF6t*L!^&{0*D2UEekt6_Z~$dcT9siwTs{=P3mvonDPeJq z{YR0T{a4`DM!%pS|7flAF>)I(Jt1me$zMaq+PdeKsjpUpoBk|_^3s}MUF3Ei8V0xX z(6`vvxOfJedn30w^8k1ma@GAVj`IH~a3~F`c2V1%jgI;7PIw>W(tjOpK3@Pgn=5RU zwr@YUmH!dashqOEC311u84g#O-&fh-=BraEgM6hjyhXdn|1-cUgw-eI+kKfsRA!CG z{YkqTTsC$7QJ-{jj>=1G&3EWL^10?Q)lWW@T=|>MAh_CH@^X&S6Q|20@_Wcj>s{sb z3f%njJ>2TG*w$%VuK+h+Z46giC~XDY{I(C=%0D~OISy`ZdIj9u%!b4b90P1+MkdZ*Ywl@onL&!lkn*Y1L;`=5n~%9}iz8$fv>WJpL|zm)~@~ zabw^*XT3+KRrz&4^gH-+flr{lWM9`&&5@li$WQI4_MM5`%Fq(EbsKi%&m++}4=x?? zL*Xi?_{nhjUwk_nOYNn0`Gw9PxyHf_3cq^b50j~UF8R!eccW7BkL0@{mwoYbNV{g> z(~+w@lK%_2+DLq(NWMbE_oYnom9Bs0!d-dr)qLtJxqSWuVU2yAuX~}RJ}=%EuKpvw z8C+!+*Z0TC($BrrUE@VQe+F*;KNkDej%UHG?Jj~_o8AGJPgI8I;A$`N_uw|CeGj*G z>4iUKNBddYt9<{_{)knOOGomt6ioitm}N^(c2!O z@>2i#1|1vM@1di7&%(~(w6EGu?XEx7MSs7cZ$4ahdv8bnkdvpE26zTFZo zze&FiZgWB_-0FB7-0FBG-0E^S+JWgY>yx-35|wZ9i~tIG%+qP%py zeGGE5c{beo#vszFUMgD!`O4?I_S_t~+Ik**9Nhe{Tg1PiZtBD8dz;cZWk7(f=ty6Fdkk)V zz8azV`F-T(p9OH`CH=+9A>1xoBZSu`ymsJE4fDRcf;_fGZs*Nc$+ff8cMB*5=l)B0Gy# z_eRHb?IOw=(Pl?;Gs&h1z;=W@q`4X&nc`t&UajvS6nP-Z$_Q z;WoCX;8upu;AUq>xcdJ``1#jJ ze~r;;c?Q8ve;8bIqWm)jZeu48w>kH4xV7mS@ZLfH4!HUA4Y<|!s~}%M8CDvT$~S|1kIxA+PS;((!*Ra?MjJ^Polj9HjHs-f)#!d@H!hEWT4DAAy~& z$Tc^ej-Bqo&bG+KHNT&a+{&{U6P)a5&aFhp=CyyqHTOyX`pC|gaP!rom8qX^LvFr( z7H;#>3h0=8Al&3*;nwcE!@GxaUJ#XYYNXQwH-8=hw?1|u-0E^8+}iy?xV6`daBJ(2 z;np7(*)c8Kns6IycTjQZ%O~57^FBG6@FGlr>Yu`9=v#Tl!mT{h;8el2T_fD)%md)& zw{td2`@rI~G0o@pm8>6l1#Nm9`aOf4(<3{VMRt0kuk+%y7#JA1(%u7CUOJ!so1^TE z0=JXa`qeJfO+Fuw&Vz8t#UDb)=8E&8^Jp_h35NQMW^8&NWM%leLB2XV)~^P_tq<&ljdqa5BNLy2Y3p62o}d5J;4fK9nc%p0bL^=0uBSm z0bOf<0hYj*OMx}OIH39OugK-&ZNRo*1a;!n;`;hrjt2vc4ULH7H6C=oRC{@}b~_SW0d%dYYrS89o`cX_tKS<}0D89LXrN~z zG$vlh&U--jz9v(iN#H8-z7h;3zLw)uus(bPuoHYoFc7{msDh6L>MOcGejd=p)Hc|w z1B1}Hg!s$AwklW+tPa)%>w#^EyMpxFgKgo{Icl$ouHpND8p0cr-v(eGurJU!T^|ep zwV)1Mgx42}o7zp(`v3Z{ZqbdCf$& zaoip30WL&-0k{ZU3=So|&M$X^d%?G$0{OO}2UvsjtAn+`UZh`>W1i!##A*Gq5BLjs z1q>(c9>mWF*MSv~X^zvpr#VaWi{=&0C0Bui&{>lDsf^1KCfd!7x{o#_aLtPw0nLkB zgL8j^mZxjN|_uk*Rqz&dxX0d$UD9Sj0$$L+xOUDJw&ujaTn zs0WQ82im}Va6Y&ITnDZPe*<5E)hOSc9B%{ngZsc^;4SbG_!@i%egHoKIcia`80ZR? z084@aU@0Gx+K>IlRfla|yU?kAJ+bVDpy4!P{hhL_EYiNfzsPjjl2XRY-r9dk< z9^3%Bqu&?Za_|%SgOJVQ_y9N&nVzYi=zYv|5HE;fr z`BHP_|H=8Wcy4@^@@^8!`+xg9uQ`1kpzDv(;3{wn*or#Z8gU5z*7f~(ptWi^zG*XUpLS7@WwF@vi?-R#A zmu@;bUEykvli)gs>U^zp^*CfYe+>pR!2#g!;2p3u295-aqk9J!jr|$mA+R!O$AA-& z&qY^lzB#A@EnpUy1O5We1s8)mz}?_p@DTV1cmg~H{so=|&x04i%ivY;26!913*HBx zfiJ*+!EfLfunc8f4y*uH0V{zuz*=A(&>Qpx>w^AZW3V~c66_2nfnC9FU=Of2*cTiD zjsj=~pcies9MEt5tAoB^J+KiN0Y-yLuoF0(@-*R>-6`8txnv9Q8+E&e<96gX7hDYvz{V*+>rGVM+;I@{y$Ig}G#4oSR^S}c$7}F- z{e2kmD*(+q`-4M)=EZBljX-nI9pDEr8~d}s*+6sA<=|@YB=`jU3Vs1EqRT&L^M#1_ zC!NV(j^ryv^7kUS=47p3M}U!F6qpPqf%i!BK6nXz)j!r5fqchcb5G(_r*5DL_8ArT7eyrn*) zzN7Hf;AZeaup{{~ltFPffx(i8v=0!L&jr=tVekR?7A%fVH_!tN1S)qo@Cf)2ECAh+ z_XLB0<{q-?@=x$2_&2x+NcIeP35=x>8tXJ|m*>Fsq}vUJWe{8km;42=CcF%61U>@% zbLDz~qw1luEQN3-jw;h9pq%ihL_Uwb2Ex5DCi~L=6f6%{ofQ5OtO}pYkwcg7!N(y^ zTt3qIT5&%E>5Ff||2_fYL;2r^b;aW3%#Zi9L_&o?{47XFBWQ?NoH8TFWdyo5Z z6mR2y>ZhuU((ObVrJD!t07oL0&dTOy>^X4U$Vq8v=B5KTAGpb${woaw!)r4Kx>soqtZQt% zszx=iEMW59fu213dQepct>tx;u>y>y3qk93qz1%$*;q9RQ#j=xI z(r>Hk9r$Uey2U=)ybvAx2CI85zqdW9zO8Ahr>U_>xQo8LT3gfTzh$Gh8mDUdu#J1s zaU{|=rku!h|Jh6G@sp5hWJ%n(c~gT|2Mg!W*;sjHeSC znkz@5sCSl+(^p9vee)(MBB5ScTGNu}yUmH7f8%E)kk#szOf9b?Eix2K%~CA$recX~ z`BKWAg8ZSQ^MXEPjXUf;&IIQ2i1Ow3HJ$%VdC z)P+>AU^yHt5wEW0+hF<>wMLyt6)hZQx_r!?M-(Bi*fA|ADv79zmzR|QckmgD z+8O#1dOf5=@m@MDBqD3O@Sb&h`>-7+HMBPJg677?Y_>TZoXCCB!(PPhjs+8wo8JI0n#hNbL z{f7%vZLhNndu`MQbQ^y3I#6`aBBuzA! z3i64^oJDkKj{=*~0wnq>RwT7A5kw-*LHatmTXOh7SedwhKkZ~^yFj{-alvRc!YPbVMI~LpW~e{oUA?fW5#nomw0a9RZ#mmNjhBgj%oiz2luvVeWWn{Qk{1bI;;~L zrIB_N_pKwnH=6aD<4q9jDv5x}JkQA0o2+a3YQVHQA_**@*WdYXlE_+CT!3S$Tj*T>E3Ss%+Qa)%X*Ga#RaCMDkwt(=(6wn{LP z&m{20arX^SE;HySu{s^Mi8ExL*RwZFZzdGKW?xqpMIyap-+hTehAJoP{q{2(YBS;E z=l-?+%+p-#t*z_-MR|MdQg^yn$o|h=|D7?gSJ!!~T{p4AWg4qH&I<06+PVL&mugd* z8VB-K+5N*++9E@*IPbO3e(QSOm@j{M`m7yRqbSgVbT3y;&(l+v623xJfWU-ouXSuK6;zAiDt%S1dWRsm* zEM%N5#nkZoX9N4VWLu?>j?ycx4yn>MhqU?MiIsL*+ESKETkthcQ>v61O6*In+BZ{Q zg=Yp?4JDoK{4$&JDL$XneYy*0oS$mZ%Albd)x(;oQ3Kl3s8K`WC0XtrV7Z`C4{WAIW`aPGn~`DoG1DT2E*qzqI|blzBgFtFQQ8pjOHirBRIfi@cqqR;odR^S@e3(!xAq z?{+L@T9$UoB40FN!`EItOp@8|SlG8`Q%WCSL%eSZ>k~e#a{2aDIcKA-nl&QJIeXp* zk{7m4M~T|H#g(J5?|IM9c5SD;Q8Vn6-9PTu9AzUF5=jaZdf|5v|I zPfO>p*+Hh6swrp|=jltQ-x>es|F#Q7=)qBEL;Z;_3v?%4veiJ(5MGXBU$A5d>zA^D zK)X^nIXK;IIqDY*h1UQ(Md7vJyMvX1?!s%wP79Dd>6d{6fbQ5U+y@*7x&!_71E&F% zO}~IBtY30fX4%^iTm)2J{S5&6wOzjeDPCdyifMJ#FYEUMrPrUr{{X6|{uF){Sp5}# z52${!HyC^atbCime*$J-Vf~u96i59jtlbjwuhJ{5of4{#>N^CiPgwrYpMIUyFM^8G zpTgQvp4f87F)CQ&>AL zWsidk&kpelZwd6vqSar&EFVtT{IBqdK_BXNF#I*>b8zAFBK@tAT|wCVrSL6;t$h^M zj%ll(!rC!n`75j)dHlHJ{uI`(1^G*V3cpI&%BQe)Da7&m#ddWm^QZX5aJ2e4Vi#VO zu=#HrWZIo#zBK=8(?H4M=Pb0hnNBwCmwG%db3Tp?_a*E_n z;R^_xeT4<<@A3=L$#_-0)wW769gSQ0Rx25Lty}vOSQE%p?H>!er)2GRb5n%n}knR8SB^5fKqlRB%BNaSI{{BJL~V z28bKDuOJF9F5q|Hb-KEH7JT17zU%vPt0 zu+2<&+*1EINPDfbdG)b6wb69b?0>eocI^jg$H9%ISjIG4u|C1Zr0B}XZia=@+U&teiUR3rasoPhg|Zk6Ev|?q9uszx1k2KYzq+zux7!YhHTt;!j}jl5`!68CwU} zN3Z#PjQVvfXIX6~>eba*yz{F?!L{OWDqb zt9i@N`D9)93#T}z8Cu2*%UWOO1$n-m=UZKA=HkqDxUPQYetBMMWctsjF#`Q3mW&vA zMwUI>e@3sp%^vMP&y6ml%zvIwhm1b+dww!x6#GwItx)~^OwKLOf2J>ivR$6{LU|PP z{PobjkpDct6{_c#=egx;mp#Q1DUUYVW-pesLs@&FJxh{j@3Zb>A?uK3%%gt(9XPPO zw{w2W1pc@9>x#X_asew4>9^G8FYTCc^f5WG|WC5IN6@|9^-uC5jQ z;$4#mjd9G*8+yw6c~8IQx6Yh=gfyyuOepdLCmb~?{#LAsM;{4`zZL7KBPPJ&Z)W8t z%0K_d?`!g~d{xsmvB}-bdUYNxQs`HtY(hXnd>!5(t^e) z%rkm>nvG7}kJCm;X1TYwXW1NEUeMS5Uoy`dWY zUY*0wK(AiX%g?FSnWHwr=uJPPy)QBb*Pifh`cY?oryNFO z)#_$ne=k!9Mw$4r=lD%xB;6yRO~nqSTtYsr=S)w$)(#X&g&XGcT&UobwqzyrtJw54 zf>AZ1fWUD{QR8$1Y~-Og5^&hiIa=cUR|?(Uw=)-tNP zylXYa^6;Gc)^?f153u+4ts9N^-?Nt1u-mPcJG0~B-^X4T2kM??O@xPe{R6dgo)daO zpWW^wv1$j*aIth=xoNm$73yB;(j(VtPB7VFmyiDHvBP62Fukjde!5 z5{HW#qxhpS+=`;w$<_k%E9X8KUCWjQ>Rm7kmc;^lm_I~}&S~;<)rI+$1@oKd^6TjX zxgOED!`eDUaipZ_fb)uS>>9>*JeEeOQ8n;ZXcVypJ+xS9DPt`EM-g+Jl}1T&IOWIM z**DSb1dk#ylYKhUC`skGRf183^g9Lgu)}IZA7D4)YBpn~wjV7y)vvX=iriftWj!1G zHgo&BX=~cM2c5{}_E<2$)~;gqRcu=1X&*nhJkY+jY$boDnoC9hf*zDI{p(a~&Q&(l z0)IrhYiU>f%r-N&JYk|M_nybykH4zjy)K0kD)e4oe<@U?r&P8lbS+80*PJ3Fm(;=( z(QSyW9Xt&l&MXz>1h%ub4@~ZFZC_ehlG9{nZKGu5_F^>~b!tJFGtM9E_BYz=r&Sg7 zN_2%P{2STPxhK|=vKDUHdeiTG^Ef)@!9_2r_yg<zJu`FctnFyVR;7ZGI`YuFi87v|dZ}&e z7l)!kjs6+j;1Q!Ungez~wi>XNgUt-HdfPi|S*Q2)u5w5mgib8)j+A{eBjmwh9r6it**%bnGEr*uvTyUGG}sGCBH%Vnu{ z0lyp1B1Cep^_nFzM5U8qhvXGu)Aj2DQv+TB{zeFT66Jj z?Oo@MBGu?*Dzuti=*x0xIYX$;XHLX>dvuuFikaU>hm{eUvtZgc8GGrgNs`PYy1cz> z%3x>ba_*|j3^ooGjRu;-MzLmJ)jV+?X+?Cj(4w@>It?kpla-cbJq)L8dx|$BT=i%+ z0#9MG&Fr;)azt@9wYP&?7M4UJF`pK17X*`6D_B!3Bpjf*(y;$15{u3qC+R9zBrI$v zc$ToL6G=tyTDNL)XJ;SR)(}Is3cse`5ojf>nGA6V6Ob#7r9#nSgtblu@{`%!H27$z-O-6_}de&G^Cp|i8 zM0$A#lE<%+65Rg~01cY2uQ^gdedryLH*VJR<}#aRgvjK+WvPL=+3V_TCn!crETIRl z=^8aH2A`2x`ukC8mHHUD<3cp8ryqZ^OqdRHd$>&Xp2yhAV3lq(CnL$Q)ibxdGo6>7 z)2-dz)7H`>$jv-0T+aGK$I5(Cw3tCtXBEv#9sAQnhD~_u`n&q`+;28n(B!)Ee4!l0&U{5o8qy3UA$QUzFn6_=lmxlNaQD-lFhdwGJavZ2To&4g z7CybJ+1=U33Q7`AXQK$jIF&>qf``gPrRz4UktU2=xX+d0@_UFnW2NmZFD$*C-&aYe&{74Ou+<{-~@xa~2i**CY33x~C?@rsMuP-fA@ zbC;~(-de|XS4Db>nA_7$G2A{CEBC>vOi1fxIXR6Fl{9JIzU9T8Dq-5Wyb#AAkacn^n@a*B?)do^z&&x&g$hA zBVSagGva!v5|aj#%9cKE`sr_*So3)b zDP2xPsc1^6pG;oEU4T8mNY8dzKC_xudVO~@u4fB+`dNJYF9K<7bZ)VTH^>_U%~g@( zzp-Bh#8OMR)iNzQ=oZYAfwMGy(vOEGmo&SRw+gAymKEjB8SUQJ!jqHURpp#^NS66DVLJ~WyxmP@(>Ppy3YmG+T;B9P zt$!|$z?eYCA^xV@dPndn&E@TDx>$iDNLV;c&)aH)bU9*Wt$74X1?KzRoLIbpmeR`o zInfy9X(Xm4;?RK+^zi&TSD~tyTBf;sF0x2+!c{<%lalh;0xz!hFXytiYDw3!!QR3C z^qiyYnBgD>cb9Tgn-y-(!H|zFy{p%;Lb1HM4a_Or19TGQeJjg0$tf|@ADJUvvU;k! zj4WT<6*NLudi!_;m*`wdwW7C-NM(;yJGc0gS&yrhO>$vIuRFHrX6@a>7gDp30rNs> z#X9DQQeQ}(X|n1@$fpNM2E&Myaz(aLt-X|%xq)Cr4njYDX=Fq~8EjZFBGE~GeSIdE zk(k98A*MaKXRI;OE{4oVla_d1j-dMkSUh3fo&|Czxy@l6cgO%fER7+37^lC%-R@G> zXgh}`6gT;Kkcj0(|I&k!d0v#kSm&&c*7nvk4`~L$Fomu*3}ab$XNYOBYFL^bu1qTe zE}kNmZcg2*Jc~683m&>|(VtG`=ba6?mseRE!wSdG>5hrJwluD%DFX&Ex8d6{eCWdZ z4so>RTE_fX*{fX->etgE74-~(1H2|mgA}|}nc8^_wlzkoM(w;%vTm4)>NGS|=Se|z zn(hH@`gGf0@zeZmDa#M6ki!ivR;`}k(z%OytS{2{m}dHvlF4R!IRIwYELg)FvOdS(hGK zSX*DbPCGpfp5kd@3QrPh+ePvYpqLjB%r%)t`3iSh4UTDH+(wq-BT^j0P*W?yOD=cC zJPRnyAh|MjL~7C5xgc|0YWB6pYu)|DUZ!EGMOziuy)@Pqh0Pdb48sx5w2Gm3L`vz~ z+@KE6gM1OE9=B%EbuE4di`hkNuFwxY)G3wnSsMPY=0WMOfdPM}TZPn` zaRnn<`nhbe;u(KSZV8OB^r)@m7E-*&D6B?W>E242|;Ak^^i0?2KC5YJ$S) zPMK_QpG5)7(x@Ih>?}DsEQqDDMhsdpAbJVlnP7QW#Qpyvo#8>{X^(npkutA$^`IN0 zi?!O=tb=%*7h&DXx^gcau!$ip>pJ{Q63Y|CZaRdMC)mu8-NRO${<_2SZF-}uNQKHu zHloNg)%zJDBRkkwz)l(@k50x zeoZ{(y}EvvqCakKis@-fZ(pqcq`Ur7 zwwhI^J%K)!V&7oCh?K^a9G{uEZ!j)kt9pGJM}JTA@I@0lPV4WSaQNXo)245MJy46- z^&l>8UgW#_k<&e%-sIC~3@Xd>iO0lXUqlF|Ln$+}xi&@*6P)Ov$(r1=Zb4s{x=(eO74V!Og<)Vn%H|p$p@M(p#ceMjKUhzK zMdn6lUvp`{9AXh$*-WI$RRgXa)L^hXa+!_f-;}w`n_Ltfk*#>CC#FY7!BWftqwIz< zh7Z@UhW22E%K5^OtmO$owidHJRCin~X>}(KL7W1T+BN%D_pv1)bK=s~@X4C10LATi zKFv~IYv_3WEzI-1q4A`cmz1l_!KFAS@jmECQl){JFXU|RPMCm zgy_htSPI@Ml=Vl6fE z@{F=5X;Gh#diZqbFsp{}hZJ6<%-A5Zn$zaN_M{FN2?Zp(?hrPaG@B( z8hk<0>0&IBPhQHhLb|vW?4sh1IE`V|89L?jYg*B+)xB4v9571|Gx3qGjApI#hd6=_ z^ySc1%tL3Us+6yR6w@Bouvx!|2K6H56eRb6gwtp%A_G&|EKAANvS~gkA0idzbFGex zl$y&2Oy!FxBh$)!(YHshSQN75thLqkgN)O~lDR`(vsiP`ms6gqx znm~g`BKWV_o!*s9CRC}7{!y|t`ip|RKXoTQ&n-`1&MkS`HiBOi!1`(oglV5X1KiqmjsA$Txq}09 z{SdUhA~jkug#ouZRI~B4lhI_zU_{!m%P5>s=QOc~%^6Q9ibE;r;OkS2^!S4EeKUr+ zc1Iw@QgAbVcJ-hnnH+fu^co}Va-epD`w%M|#e!XW9L?GikJ8c>TtZcR&PvxASIrlEdK>p&;NVtLxe9^m@sUkjqJlgFWBY!RcDJI zcpO~a=7u!h(~7eMi-s)jZEN@9(N&WHtbvtHN?50xzmW;Lyf3}DQVH{|YHplHlXddI zON97r+`zg zOpQ$rBl*RS;M()FyxY>n<(XYQ+(o5_hAfUcab}UP)Hw<(cjIF0avtc)~kI(w3zu!4u+C>xbA&o}=f=({C?r~1d%GdSjR)f`JbiRG*SJ8(yT&hI$ zAoi(oaW39lYjk(E_g8siyGYCG)kF8E7enWH#599Z)#yX`j>)BiiDN3yYD-?Zt5V`| zmF^~bW4U#BVoV>a2Lu?Nck(W3wzE6V**5D|1I-i`j(olwH@2IG0{1J!=sVDpvE z=A87>Ls?oR#2V)icQNen8f849DW%zP)90gtQ4`Z#|AkW)_I5G3clumB+)wguiW|a> z%^!6&4VGTImZlw}u`#KUU(Oqzpt8y5vBxFdX{R|MZIzkHW5ral#%}hV?*8kPPm$`Z zTpN~MT++CD`NnKsB^xo6@!I@K-)tV4z>I?%t$g)tYne8=lefnho|-+wA4H@sn+6)6 z2v*)#g&ez4+CJw_x`n=bQ+qb%J|p)4r;AvbH|;zc$&OBxB4|kKr**;l-kr3(H99wi zV!mC#l48^5&`K3U3L{)n64M4AH>~O%x=|xIli3yL^X)>+iElMcE%Zl&wDrymFmIr* ztv6u7ar#lfVYU>@ncV8RPsEC+_iRc~BqS5uO3C7MdT{iD0`Yqay^Z2X$97ogpVF8! zb@AMJZLJL#uUiJzx}N034=<%Bh@8fUM207%jks=2TuCU;oik@zOWV}RZIctb($PQc zJn0N(cp{}QoIJlVc~0B(#;j>=joH&0g<3xx;*%f8iUuh z!OP+}pRZ{-h1yu7d2RC>R?p$9?euxm8?>|Iq%z)F_V zwiVB0`v!(yyk`-5c-e~7he|BTH|^Oor8d(10*apm;W|+GtxTn1mendAWi~s#{ugGH zqUE*1QQO2Jj8cs9VmoA6*UHVLRo2g9iM-5J6y_mq4=T>Jw|>rEhx(~f!&R7NIFD>4 z3+xoD3?+5sLA|mEOT!msz8QmE)%29Rm3|jSnbVa5jcQv5_vR%#KWi)*Q@guEbt})2 zI+i=V$&=fWDV0TKwo(xz8hve6`#Kg7N@nVF(OXI$l}VfJQjf|LYq!( z7jEv^H%qwmuFjpmrfXR6DJT;X>G8ljL0%4`zlxlV4hpdhKr8vdlrLBN+|~et{N#e(`K}yq?Wm} z%axftSBp!z_gyY5l*uz%BEec`92}<4#Rjn=%$j|R%WTCisJXZzUJ5mTnHp{DZlkzs zWp{YdGR~e{Xew0JCJmFh_o$unG{1Icqq~81?$Wpuo7~C$|6!edbCi*3lIhSamM~Hyro}TC8RoNU zFqBJgqj`9Mkq!*z%>C12zVtCd@{|rMwlg`;DtX?lMpt3EqOBJLvP05aKCFE7vqQ;u zv*TPF8grO7%xRg%b+GrmQWJ*FoL^U+8Oi2S42f!V@mHJ>E8;M&o0N}C4$VTM%u<($ z>u`Jmf@^QQ58~CVV`i)dq`6_h`M%pxCQuzBnptHe8WqD>M8+_V(Scz_$91%*&K&-# zvsoSWGt;PJ9xE!bqVJDP^Lk&?k3cygDRNuqmRYUtP8cZDkW2jwR&jd*C+2#J4d*rT z8#^ZEJDnjpMlkDHyawbum3ppG`Spxp5m~ZDl#jR19V|A`3{9~{#Xg%_LfjHhUbc)& zH#e|_K(WHLpl6U5o1z$I8O2vVieYdvPuF@^6^Z35E2u6qySPy#r+{hUV+7v2uFBC+ zGHMZ0^3n)W#8$;5x{Sn5^p35qx42iLyfob}0@0_O%NVZHBf+>@;fQ9>GS*n#h!`usD9ZE3VtgfW7zddw zUjMdETW@l%PgRSBhqm4_DAJfTdJ>V>!LWS>Q;^(384t-mf>~r7YC|yuIy#Olvz9ol z)LM$!a#=NYk)gN<$EVtOj9*>}igo$g*E?IM%`8*hMimRSqHzBd{9m+3^y-dv#c3X@ ziqmwtEO0UI6=y}57H5P`+_xDE#cHuDZr-013lMqxdMx7&6{PRUtDro^oZ^SlwFTp8(OX%9x!GYw7Lk>x&6uT*k%F*Xn3mrE#C zt)7zIU|6IX+5GmNm3-ZZ>3YZV(xqjp*+--n?kek0F5xU-Qk$1?5=LayrJT_c6VKbH zkxM#dQl+nd6kaUtlnF8JmZ!s(coM%TD&g8vPdb0W<(`!4ST<+HoEy z+>fSjzU09!cD3_yI{U3ZaauZXND9`mNKjuhU~pN=YNksEtBTj!(Oq!enR^(2*y)hGe8th9kM-S) ztfmkjB_(nu)0?c)jBfG^@rPv2WtAouxk`R0&!gO2P|)-OS#Nny?QEZcKrHwxx=H6<_})la$KI}+Ler0 zZD3u#*c+0pFWPRn(BhI&0*0T#)qYDi3QMP&$6ExoL24wY9P!Gm3wpZKo}SW6)hJxV zadEJVkjwW-jN|+^)(}=6w<~4E>!5S$-=oMqH~ z_a={+lnxUoq{E~m+j*v#Pz$G#JxH_CJz;c1*9GOpM;oF!%hoL`;|i+e6d|6qvzp_8;8z%{C0w05 zA|mht4>X%onoagDut-i9acO{`j-Aa@)-aY;4qiE7!r?|2mozzvr=vqo;^hfm2J+SA zKDL)C`E9?ZTp|e21@-0QJ_qbW;)gT&x^9(g#RFb17j=PIF^un&WZf zH}p%WJZTxhtKGt<`)hhv^zmAPU)^!$=&rnYfL=??xm*FF8?0hBXp9*%a7Gavoy*62 zUqHCnD?Qa8=~3nMUOyh<)1@M?f)PP8gq5ONL+at3X7IxkMhmNPF|7DV%?*WdQ!&|wQcxT3NBN<2ZUf?;JOl{387=h+#E9T`kB0L7 zG!5lP0^?#|FUyicm}wN`<4WvWO!N3Ty)#-Yif;n+bXF%W?8PP`#=mO8rSLPW60QjK zrVk7jFG}W_W`1unP2b%5H_C;N4eUO_Od@pfbmYk&-F+K>zcXzvbmUCD>-|tDbp4&G-@8kawhtu!p^`19*Nk5;I;zLs2m&RT0u&y+_ zt8=xl-X{eV!Niq<30HP-m31nZv;fb3MsnSPQE~G$mKb$Ipo?TxDz6c;s1)Bps_sG^ z<$M#k*h^RHg3o$c-kDWrkD{3lP;L+`MZ>2NpfxiHG%itm8zB$t>03SnR6J(=#cBS+ zQa$JJ*?w9QNLQIs**vD?OSw8Wre-v%FLIDG5$t5&1WRkB*~NM-V`2KHNL=X)rZbfx zjA+*(tkitLVZ`HW5P{Q`IQ!ooSDH*5F<*0w(sJfARm;pC!5RLdfak4z0Xlbtd~|{_ zxpT!}fBJBi-w01H5HRcKLssO;a<=`D?|)lAX;`4jYGDPzqt8uZC#YvbZzW0}nv`x_ z@)X-y#SxQYsu42`|1umb=xHA$hSN9ZhLyUYXL)+Fri$S5BJ~1E;px6|Yw^O^BI9OF zx0zO!Cr1yPT{xw%UE+qd8T;EC>3;WGe@L(R_aFX!ZBhK5-e>p`zVGvce*U)Jwfv~w z@8J7;d-A{B6~DVDKJB#l4M6etYI%Q%jK7{Ke_Leyoj&pJ;QO0|;{SmCjXv>aD=Iz5 zAaA+yk3XxzJJ)3Ps>$pFKkGT7Ci7S9;olMdE}**p&3VSJK+a$Al)n+WGJjSr|EchG zk20s%-;6y-zik)9mwQ59D8v1Xgz-4 zeqHB>eDEc~{2(PN#&luNH5WwQufjNi#wFXBF6!Qgo&H9qWi8w(ey{R5&AhP2Mevyk~*+vwA*+yf&Nn zUV!?=8}A(Uh<65O{)8I-Yc21!_-ZV9_0PTNx9_O`Rbbmf{ARFmD83o&F9wUh4$k&` z318v9#6R-D@YS=Ne;vN@ruHcpEYgtgYhEU!vCk`*OU9HZq27 zqkkS5zg8?>azyBP9GP>$+A01X@>Ds=?~c5`pQ`*VM}^JeOOeqY@jH;o^2dVxHDLL_ z0B4y$An&gv%fAqQ#yg_Z-%6GLPRh2vOQ8>fwMV=N`F%Jl^EGfTYYBNXK8SW#USG9> z<%Cc*?g#6C`B&HQ?O=7ve}>q|asHcwBZk*g z_fx^ffcTYQ+d}-*^oZ39h}$2}55D8!rmayI@!#QFFY))+R&n(Zm}-x4tlRM1s$Xvo z-Wt9>-yLlK62BGFhP|QP7z7*##CHMozxWSe`-S+vS4P|E^FeHO9MI;8HJvN^EB&9H z9>22vFmjiGZ6on}!M2_FjJ~k{Q0lVa%*d<$r;d-dIFB*&S@2fKei-@y=bLl<5;C8t z;Xf@1`*%mrt;+(d=cq}c$5^`Ju&D2y*nAv(^~k?>VO%fFd)xBr+V}pBXgkM{6X^T) z(`TWRsjqqU;Wxng?JnpZu-6^=^PAQ6`b+R(CH_6wtlzZ%Y51s4{Kvqyg?c*qX>!Zj z6q#=D4h4QK*mjgZZDtiG=Pn9)?LVt4uyt>n9rhb1uK}A^+z!^C;?*_&V&cl!kiQ0O z8;P%~;cwAK+rU@<41BmPSRX#SCSt>D+^$E2jIr^X!=v5B8^Tw=_#f2QzN4?cdO+~? z?a#neGx_-^Yr~($^UcHnMUI(-J@<7)Oxi9}rboSurPoc3x_j-u5^Npi@6=cMc{gyr ze*KiX*k0DLPwWjbgjlmw!M*pnA+>(09O?p02r%fYmAgw_x>%p8=a! zY=_PK!%vU;TJFoh`cQn$oM_WeQpmaO@yqnq@oa3iT>Hp_)C*OqUUR`)fKNr{0AwgG z`SXA1r?#~^H`$#w1UolaLc`gY|Bn23#zzc)4xRtAbF`P&)>&ZVS$r;Ss()#{fGJS^k!0DU6=L>h=HC;Y7o z!_H4r$Ab=ua-GY4jM!jEPqFb{uyr>!PChW=O+S1d|JY}*!ww zuB`cXXZ&Va$)5|tX7Me^*dN6+z+Ugf_wN^Vv5wDx_1m7vR_8j--p(odO;`rdtM`jGzb{GF_@0cTrw*)IM9uL+(;?E#& zS>pGDw=3|N+2J4C@!NX^zHLLUkK`R&$n0LrdpCUkCp~8Y$dd4@!S)69e-5U7(>S>i zzT<=Zm(VD-k@;Us-E*6MlK!Q|BrhE8C;K z%Kw1Ast>t1s5mUnV zJ+!^HX~W~q>Y8zRPske|hl1@J;s?-UxyJ4@)I}d!uSv*QFJ-2Hw=D4QkP$1h@z|>F zOX*`d{(8Y=OLWIKZrjG9$VnI z*Z2!-I^O{Hx~}}rU~PUAco5q*0$Zm`2@cx-`pJtX|&wew$)Hq523b<=;WqwUo@FY;>7EanR13;teh(ME%0 z`V=vsuZ)K~d#ZN4ko**x`t8#NR{!PbG{)5V>0@a(uytQc<8B5v&d&mqCE+_3hR)sL ze}HR=aiVSKAfr!|KX_5pxjAAypmoZG^Q=JHNVr*z6o)vjd|YpC#>;VB12x{n)B+eiJ$4(0hrCA^WoU z2FP|1AB})M-y3=h70lzq_H)Bdef2wHV|&uYTh9s`yw+Y$9kk!P-SjVQ&_CZkt-`bL zgMQYBN8<;vG8YniJAkd%YTDPnCjS_)Z6y94GM1~%)nE<@-*9f&c?akBBA4shEEHMO?81f0jWTfzFlHoYILZQ|=F*S@9=@8FuPyyMjeYWVW8;ZMhb@zmEi zvA#P|U$J#L8+n>G#p=TDs(+mYHkRxogW%l1ZUyK5br)EBl)0uR{{T4muit~m7BZWx zigK0T2E2K}-vgZD4gQNThUQEC?rn4~`L1isIxp(zeEp}`t^f7sTx672W+B)yM7#m9 zq0Qct+z#Bqw~}#E4b>dG!9_XXl6yf{l}Vz`rZ- z%gJ=l0l{wtZ&2WQ81)}?<~}lqis&ovVJ3ntSNy7N!cOsTkhgzn&t~Yc?)ItgUl=jw z{Qh6F16!{Ph;4mnJ8rN~_{6p4`v)WT)N>JheIozslcMb$mp)0mo7Xx%fs9z0ch~Sq zU~Nw8)%!+Y5bqDRFNlu=Yo~Zua4zec*q}~rI0gRph0Md)unAZj{)PT63jTv&eXE{{ zHU5XeIq$E)`cs(?wnd+Ey!sqie~RxqIBZyt%nmjA6*WEg)bL_#vyZEDEc{%rbKz^J z{72zud@p{}PW|>Z%Caw5*54@Gw%Z%poX%z65&sOnJ`|6KZ(kNKKxg*t0)$CQ_pWDw z^_%yx3+c0#YoDFc71*}krzfz!z2T(LGl@9ah#nXT}J?Jm9mY@Ca`aELK% zd%X%rsmH$D0k&S^8!(coX2QFWS3Ax7A!PKeGFJn3EbyJk?^57#$a9+HC)DyD3*MpN z&js5r)cHD;8$WwPXTUdpI#IyA> zp5HLOino6tZ@*K1<2B(Q@olXUpX$8l#Hjlpsnaeegl}Dwy$oz!I3Rxi zs_MG)_nL2iTl4L@+BndxjRT9}YnyFx3Vg9`aWjrJHjJy+gYEm`rwFP%wmc6u-fWi> z@F7)A{@ewu&H8hD$o!W3BGTbhWQRWkz+rExn&mI~!yXOA=bHmQNNLvWj&v!tN zo)h}j^EdD~c;dqcBgPzy<`6U5DZfd%solZjAZ@U$!@;YEi+1PLUYX20-vdlXfnH;NAum^XgvGFvpHfYQLnNaiT>#4u;*8f=S9}m{%2Z+2OS;!PlM;+pWOC;tjYg+ zNyKjQ$tyyBEjIiO8`Pr;pYBGDC z9P#S<<)e*Q-x8lx<3Cs9Klk#8b?fo~*w__c3Dzg#zts4*)%ZK$2isSfpVj#90&AQ6 zwP4#wd=J?EApX$_(dYHa{)dPBa{BN`;Hy*qTIy)qS;u!#$K4A&0srKFzAe5TTgcyq zoP6Wi zT}yT#XpLL1ZF>Q1U-8b!>{Q6iKQQz>%lU+vab0)q`Dn0t#nZ=zue7ZVEMNQ(L2g;< zd=yM5B>Xrym-_@*KPdA*U@i{{Z-79?o7M0MheYhH$3Lfn?Nj1z@~i)&`0)KJ0((9C zHjcF}UQ>6&&*BH*e+It(lz%A=XKcvt2HRfZhuR{xy;u1t_0^t<&>wpvPHdyk5QN5| z*XDzch*;8|vuGo#ldi90TSJfje|kaG*LlF_b_l*UOq>?{hskrq^k@t5MEbRQT#IZV zW1Pr89c&*I9|ty8#aoa!%RB<#zA1kd*m{X?m>PZ%?}2>Q^FCyZVfmj#hEPoSZL6a0 z)_28$QO9RV+wFkB-uM0x8T*kkgUDqM@>JfheZ2OA83bu~oN5Qx~;U{bIm#wYZtA+Mb zr|o5>EX(+uyG8g-{FP?-+XU=%k7DKjjf^&kKS%|QN$Wld zV11n@{T$=%kK!l6#<_SJpH}1VOJ4hed6$5-S-h&oKd}+^*k3-49(|}E=AlPy9R8vf&wCIs+GBtJ z$%5#EEy$dFLg?|n;&u4P>w@ig4LJAfvuKM=;oBC=itCH`%e8V}zGK9{ZFe~hXIt3T z=M&qO>-c#lzCv|+#{RQn40)V-{Rll|OZK;8zgYX{k=Gb7?sUtNP1JvEO)GkIpae z6+ZF#;l0NO{uuZl;{&@6wefK=etry_A3|mvdBq>aw}eFU?T2SY-Hp|@TD+ZI!}sAU z>t%hPrS8U|*R_493&o`R9{2JXLyUog;M;cAeVe5*j_LoI)azyNm6^_1B$j_7@{V=N zp9bEkz`fv|3;b&8wF%huqh*UC=8cEeuE6Sfh;y1L>3LBjV#9i!PrtBD?H8Y+jq*5i zKUkfX`#~lx+N^IcM@|{nK@OqO#rDn1iM`zSPr`xrJNwk5`-Ok@r2KEzbS^z0#v=R6 zr8T?`Y~0FUdUUi`^4rU+c5lINd3-*V_R4)^uSUd-^;%6w_WEdFI|palE?2?tt>J62 z+3`?cU2}3^=k3p*7%`wvzBMn#RonOb;7yPhuWygKJ8%3+O=jJxRs3%`DdfG+e0X~B zA141v*sv2v{dP1y)PC{FVB1vu(V{=P#&-p6q))WxirUz69enl3|JSt8qyEdlj$`8A zP7N9HJ@D%dxZVYd;eAAZ$}*+ib&*zde+Jo&Xp{#(Jemw2ab z;{H^b<6!O!U%VMI_7`QIM~_(kF39Xv;NMY}HYjsE@-#=nXMpvO{I4)3*w&5-tErb` zto7QD`iiallBq>}qQ9N^!ChmFpTm$bK9dXz?F+W)3hJKyb33tzJ5ucZ<3Ipgq0I9v z^lQ$wPkhaiz{c5B^xEIl`!U*HUAFzBj6s$m|DuzlZ0-2vxQLr8XrL#-wwd^OuznYB zfm1A3ycgIw6CVb~eF>jf}_@)}Z3g%Am z9V33;8nL3ycjA2c#?3b4!e-}BH;)Y&@#nz$Q+(N)u+#h7NB0jO`dsTx1wNVjw&Ua- z3!Q&JKWZah;U84sNj3c7Hqk$|;Q{2m#)vv0J7xaorNQ5u^KlrH>++4UQFrV0d)f}u)0%PTS>baEymy|nX2u>Dbd3)pc<{Ks>He;4Q9TM@D0eCTbEc^&IF z#Bcgmzx{rC#H#In=SfuzjKem^CCmL3`t^zWzgR2x;$tcs{z>~{c52_%GlH-F`@uWI z7e6z%x^BIAUbKrb^KEqMANBtlnQg%GAFGvh$b>3>u0W^#MV&te?^@tvkkJpunE&j9 z{+mQywBNeyTJ!lI(Z3OV%bi}U??qgY#=^e}{wv|@EAyUP!#5%`u8`T~m>56RGZh=M zA9lJRY&LImV#I?o?>Z#PT@QaP?LjrtI`?LziCwo{)faV4d-Bn`Fw)he9 zwvqDRq%8fZ{TuHRb#x5>e9b3U?h|%8*Z)AxZ-=Z3zWXNbhHq?W|M$U;8{$8JbL?#f z({^+&`=tvbK9%`TP3Ltqg!VXQeh6%wi`SkVb@bZ3=P?l{`u`Ykj<+{s59(66-=rY* zSjSVTzvYTsz}bh7!py$ia9PBLeSC-WEBn7aD{Qb&eTBKK?d3e-A+SCdx9uNo@hs;X zqBHAnG{PS99*oZ1*5{3nx_ghY3wrdGdNu&-L-F5dgl+bVKfNM+DE~)bV_4ild|F@o z$eCcOmT(u?@kIV>!MPuufDP7HpU(pCTHyU(8MayX`)c~fQ!jn%{l@Od*cQqxCT``c zXKAfoj}l9kyB_{OYUO?mrZzZc&OIpV?mp+`;BDcH7lHMU_$07)iqAto)6G=Yc8j7N zz23dFE3o#wn;1~Wc({&oZFlSbarm~8{9j|6zSXvS;9Hjb4!W>Ym!hrp$)`|mxz_8wq|sDqO#V7p|2RIMTJyv9yF`Dqf9;Qvn<1mlTj{gfDQ-uh z?d$yHNQ~4E;>X4Ywl91IVN|7ZufRY0+_rcdn9Fp+-=U7igLRxofRUW^A3{cTYQsxk z7T9b0@$j`r{sfdLqdkjj@-x8tP?;xBh?w*_$5Tf~3|rPV>#FPf-K)Zf+P3WMu*d$} z1J-8oq&ZO+*FNTgwO{|0d+)Mo28R2u|;bCHRPh`Yf;Y_+@ zs>{vz*7nk$PvTqLp76=YsNZpEF2YnZjTL)hk9{+hdsNidI-a&N^mr})%IT5UvOabH;7 z@Q;>M{L>iow?*FP$?rnOyvlzDpJ#m7uHh5g@jM1+!aMolX)=y4@X^TVA7ws!NL-J+ zf4&!N9mN~$9X7i*bSULn7g%FHggs?h2S(m!;m|dXUuYdIIxs;`hWgSQ$DI@+l0vmEv{&BFeD&FAm=$nhl_Y`((r`P32 z!N$D!F??mc^wo2RMBA;Wkl({Me&jz@!!N;~ng1{NIi5e$7j5UYzP&B_ve(}(#tqxW zdyQT2iG5t3Tu|fRiNmc+8fWmK@ngAfT3q?_yHlcEW@Bz3?iqu_5k1G<52# zN7sZ-@7*?|t&J<&`o3D;%WHXeSr+Bmca8uPa;eXr0@hCXKjCP*^y0%cn}iSd=KKv{ z>m~j>WSc5820!rcDBIO@$7%J7j{)2F#2>-Ywug0oD>&Ex0GPQyET;_P*fOpM=l(ns zJ(jJW&A{3!J{_FxxSRHamD=xsT3fyrY`M1U2agXwI(~ipq^PH3%G^f8f&G84Q=%;K z8DMP??=mySDdz`M;A_A9&v!-N_z&lME{HgDEZ72Ux#D@WlQ!EFA3%Fs66w4IAu-CxIPL#cxEvwyj0~Ed-W*)$7XNz{-e!QNw!@XWC<&J$YRC z!S}B=$0xhM7himI=v3wxFN?Oj3j74vb`dWE(=^G3eaLIM=6w#nF`&$cu`iEJ8*^dE zc{`~uNolROV@BlFpKop}{E41_qEI^>M@}Jlj74!PnEwec0qB4Eo1GVdE}{F}k{Tlx2ajn$+dY~96=f~kJO{{Zh^;2p3t z<0HWK3+0bO#x@eq1bfXBHz8b*#*_Cx(BVXETJBI(H;~lsB$+z{!?tY+p~K7!TsT zsXK>Mm$|1#AG9u4VV`m6yztvJg!lpVbQUp2?Cl5EPREBS;M9)b>%pnr!FPbi7BXky zFJn@_wctSO=9qRWSbvKDLRs2oS&xAAr+5to=`V3RIPnI zlxMu{4NWfUuFSV+TxBeGD!{sk?||<$Py9ESVY&Sl*SwvO_*1gKy9HTam3@KrUu zC(g+}{3&v_g}$B848HNO#i3EwdhGr3;h|G}$-!Z#c>fEc?)vc2<3q-A_;6ytSTzP# zfUTFf1+4wz)4}>jd?6U~65jr#Dt`8u7V;01Hj%N~`Z`u$ctXUX>-v90#<4<~N2WxZ zDzg`LkpBhZ=bQLW?0n^3u>KKW&==V8`N!u*KfQ~zvzHX(53;{UPW#of73X5}Hqmb# z<$n-8)t;YXOjlajbD9e4qkHXJm_=6Lo-JRe6 z0&G7OKf$#C)6*L03B;i`7>7^8*JkzfPp@L52jk^CFaH^i)o=ExJGYH{9&sNsj-P4n zepXR0_#c=YedHW`_^~Nb#|z;f4d1wu|I|t0Tk-e6_Al{n$Z$ybXEpwR;AffR&}ko3 zzMt6kI%sTP3Lo>vSk^(v>sw_GhHrhv6Tr%gpGGF@nF+RyZQ~zGb zWIbEe%~|;hR_fX7F=aJA!k)E<{E@E3>qQzXY~@<=+X;^3w|a+Vc*u zdBv^BrT5M0FEX+;!F#WZ7zHPs-;dAKe z?}@q_&o|fj>sCg6?bo-=kFnQsTZn(-MEP45hW)PfT(dl|ef+oNF=ia+uVcL38tmBn zq1u@IXU=U4W&TmaPpqo?*X7utA6&cK2s`bMmb(L3o#NlqE_ohu(zvLXK70vjS^v}M z%r<{xN$|aP|4)0=OZ<2Ze+Qh#1o$^B4*x52Uk!f@tWNoj1uelK{Ng8u{p$yek(Y-*G{1$^zn5qs;=v-hFl6Y({Rs<^tOtBR{v zk%#2;?=|?^zPUFvk9g1q>wEIJu-O=Ra%|LB{1js~hcs6I1B@#ZK86_E6YN}K3jSA* z{$IcxV`s4UDW}4xITC*b*mhCo2>h=e*Feu~4WHOYK324g{FhQkV@Z4+eElze9oT*? zJ_@{9fe!|wI`!*Ez{bBaUj#cwiO&ZcOX7{%LdJM_{mQUMKb(dic0k6uuL3((i1#4P zy!N~OYIqPC?NsJO+JdBH!!)q`)JBx6&((iAe8ML2?_&JfEMxfUSN?5>MO%n(0%w_T zf%!Kn>%Fa(b|*OVZ@)0=V0n)b-}=k={sl5LODba-<53<9{tiF;?zdolXW8c=WBt{0 zIrZEUY&~CH<6j1Lyin$LulgVqg2|Tf)iwMF zuzpeIv6}of=Z0-}koE|C?NsJ$_|{SW`{9e_H*5S))%e{t{{1!n=>*L-?vL1w=ZTNc)_t#`@t?@6Y@$ahfFRAgrUgJMCKI-B)vPny{o%gyNt0wdmIa1JTciIhM zh_&atr$(Q247wBS_$9vfv}ku_K8j9lQ0LQ>yBpYYzf-H@7tpDU@;70#{noPHip^sA zH!O=b5_d0+J}bWZj0&F(wr|Qm(V=HM*z*IFHqfuC)d3C{I8 z2b}eH*Z3EL?Q80MCpi1<(_rI4{u=z5@w>rU&p7Hul~TR-tKmaxcp`YCLS_yIo7efl zVlK4Cy!aUS8Se-78Z7_iT=2$%uObH80oKLw@K|)_cvw)wtHJg!{rstM;RoekLEq6Q z&d)xM1MLg;wac1;t>XZ(N0wCISI|b5Wg8tq9{uBWXeL-Y#h<6Gvrop%iZ=D0^EU^D z&0h09e^#~T(tB9g?EUI#V0DW31zWE8sCiXi*q931*3NbA1yE$N`I(vFLrffVM$K;z z;WX>6-@btSj)i=ax@)I(pAFXk;?ryRo?T-+v8)y2L*8}Ur}huOxo7H~1$NKWoAI+T zte=mk-`T$QyZwm`vHrXh|73hIG8-2%J;;caxwcvP|EQXtgQ$pp)}HGqE62~rkBf1} zInadTqm7*R+=vX-PWJo*f2w~yw%vD9$a|l&{*aLIS<_{Qh98vK`n)L1F?OFCe#@F@ z3;CNK9(t5N8Ekurw+GV%315Rw#{u~_VUIq)7W@mwNyj(G$*me8BYqaX?JM4Xr>Kk9 zJN?Qbt&_f%Mzk-;zo&+;0dH0CZvxvFlz9NWb%D2Ut9*M6esc`@EN%3A`1;o8NP`O^ zPQ*X%i*jA#cnS5=2A^>~kH4&oYc9V58$aSL&kkFi=j;S_{1=a_;Yl@o5ZJLrnFlG$ zdRo?b*hBS`J=dbddcB@t=tAe=%4;D>HXWVB7b*#IU|HX0BnQ0z}nCa)(_&>f^8%5kHFd^{xcZ02|q+*!AgCwmqy3csjm%CsPl6B-J{5u*Rka( zj(2nHzy{ZrrgP4%*qFZ(6U(6$&=L6YBcxA)e+qOIG#}!UIOclj4(KlEQAl4oueuWQ z9(xn=_Cdzy$&_;j)D5}D^L=PH%A5p!g>sy$%%}dZgjPVGCjC})eiZrwx_$uJroJn9 z9O*wI-xH)AKp%Y?o_i3!2R#P4CjAa%8Ro`Z&+#jy-w1v;xCQ)j(y!qBjnI|Qo1iyC z-^7O3Amej@bD^cs?a+3Vv6^EKc|Stl_d)N3c1Qjy=ylk$9p|qGAB)U!(DBeO(D^v@ zOXye7uc3Zq&p}^1bRy?-A(}sZ%V#0SMbO`%L$Kpe=+Ef1oecIDLHlxk5p*(o-UeNX z%ns-}n6x)RZ-%ahu7U0)+fSiQvEApTmqJ%q59Ak-ekyuaK_7!|hwi}U`5fPjjO*;L zgsz0%BoA`Db?)e#aZk$K1^OQPzYjeF-3z~g-U-k-oUeyYC*KzEH-~nl+r<8OWXj|1v*=p`{~ORoq#aEgod!(<(!MST#J|CXVc^CHIK%N_+_dvgdegpj$`Xlrw=+6*ShB41_{2j+8`g);d&~m5; zS`GE0YbA6Uawj9lzn8aR-#Y=YUJGV+Kd2&tpy?y#qZRq<DknhJ( zeZG*d>4WgsK+mJ&Iq2Wezo55Zi`QJQx48~pTkF@=2axgF>a}z&bvuXj&r$y8Ax_8K z&GA0ye&{a9G}NW^d%&N8%tJ9_mT+u`oP%!4`75C7&^wRgePsF?_<4@wNIwhZAL0BC z^1lbXCo+da7n8OnIu=43k@h<10{Al_=e<`c$8me)j>Ip&C;b(i{|+5XIPZeKP8oNh z`-{-^@CTsh!JWvR58j#dCpdS^J`3J`@Fv6Cf%C=Ca?(Bm-!^sL>l}9w?EEax%Wg;J z4$>x2{yFg1L(ZM@oXL5}Ii!27cq6(|k#x6nbnbNy^fcrg%6ZZhWcKFV@|AIp>|EHn zsdLYT@SJ0s_l4$dmfZ<;K$dwWWx!f0;yJ^q+DW{)2UI(&G`sIb} zGCp%`{%I_rmDU!<$O_@IL)kENfxitMMxMi=P2g<`?GC;J{(9)s&}X3ElHV9WUGyQ2xqlfSTNQl! z!&vD5(iiG6H5DB@qQh9SFXWi1$IE|>urC#8l~4jZ-c%M)%%`y?uc#n zu@#W(5MJAN#J~A^x-B}q2Ol6U+vM1J59gE7w+lzFo69KEaXjBMdXKmeJ>DaFzvew! zzOQkt_nslweGBrTCe`U;blaA>ZjLS4=Z-0^x%@ZZ*ZsZ(UB>;@E#%Gncz#1KMouEIX@8oEJ&Z94K0Cgf*yo+#-Ar4doHp!QqIlL zUC_PI=b`tK{}a$Bq4m%Ypri5E7bxSUpNdqPwGdNyEIi8D`L5Faz{!<{= z+&%&=Am0rf{|vQ|xQYxPgZDM)ap(`|KZiQq2)>u&WzaOror3%iNc$!93+Qp^XV8Pt zN0I#^$MNX97J3`>R_Ge&P0&@)+o7wW>!8DsoxyP?G#i=+oeH%=bD`m;F3Q~j-WAyTM(9S)2RLp8{Ro-wK;MSkYxoUlD|~$bGJBDJJo&x_ubcDz z(X|cduZF$~y%YKhv^BIXG@W{ML+>X49nkB^x03Uz`25xA`XDm5LEDh_Rn8Zn^Yzdz z$Zd$si=esiZ->4{Szm{~0WC)67}8!0wQ&ATbli%L=fJ;#UdFlqwjzBtx_0G!4`^5P zT#wu`XgALPjm$R4YyoWttweSM`0i=k8rd5-J`C@N(1+kZ0KJB?XH$oNkoUdjNA52i zpNDop$GAK)G!STqnFMu73#Q);>K*4t%dysPuW1d3)j%1z%y&B%0FufNs zk7?g0kGjRL277O3zPq7wNLWXnG?8_>mc=$Wz36^eT+iI8-cwy6?jM9X^lyUA{{*xh=fC0H>yGE9 zJxyNuCvrX)S^&A{`%v@2- zz=xAAdH!O~?;*{58_$n{{}OnT=WnO{uY(T&W5$>j;QdKxhi)RD{0{Pb4*c#yW~K6^ zFM)0@_?^gn9{gblm19;Ra}eoG=mYS+02rfH9MxQ=exdpsw>v}56I1alc=+H(GQ?=OBg$Ez@m!UC$hQRSQQz&(aS!Na(4Np(XdI+HwvqYHg>FE{wq)1=+6mePlCM2|9B&6`&lBM5 zknJhb{=w0@D|b9c^@!ia(K?B>|BW2Ye>3=l(3Qpc`@tWA^qsQTbJPxHx8t}yq)n#n z$WhzGJ9E@V@va>8yZBEW?K4|JDrtolK^tOcE4m+r#v^k9bTAH>3B47%9GPQ~Igs=& zXaacC7tmopRFC=1qx?ktx%DvlF-4hK{{K?$ljztM+82ECg%2+MaUSpq0>1 zphGDC8t6jmvJcb%9|Zr!$UXyIK|brPU$n(}huAWd5pTfpQpyrP4*fsuop*pTKk%jcGa~#h@q)i18NZZl`lB_3y^m_vCp{+KH6vc)w(7^Gif8pGPMLh3&Hb{2 zeDK_ld>k&KPkmNp*<89@DmqYQJYVzy@v!a~C)vBgBNAKJ5%ND#^aX+4#kZsGVoUtp z?<{#pRH;nly;I@np7hvb^?z*tioL6E36t+N6|jNmO`@HYhu~u}kpRXu?@!sbq@<$H-GjxY_HFO4bYu<+w=nn27Y?KSjh^3-`(T!~6ufd&zya+}JT; zVAe3Wnaj{`;bu-lKY$zguTR~`SvPef=Z&eG^xu@a$;a(!IdI=0+9(ZUj|>1XgC)gShCaGxW8^nm-nbYDO9$Gt)7 zepGIB0M916Z-`|JM4)ct4O_Y&!U*WUW`v}ixkM@8fl zH|?D;ZReU2PEDIRNS(%ek$3w6I-{&IF5sXP19z8?+N|BN5|K*S}%M^)IL zi-ELz<8+6ns+D&|iiKdAT6@5x!$i7tf%S4|}@h5e^ zT=Zy)AJ+W|(PJroME55}$==`!r*`T8E7$*b4V>}!{nlFb^p(zfVby(Rjt9&Equo;L4wN3U?_s=s?_g)xyw_Ydu|^UR(( zwS#+x`jiixWXK@sh}zu#;gQB@@Hx7te}) zkX#6w)aW1S@9i0A8b8Zakb(G#y}h;J;aTPI#v;80oJM4ZEL$XVe;l{lmlZoiwl3JKsZcj7j7}`-l2G{HXrg;v*Igjr0%J z4z3T6^bgHd)eh8p5kGTuc%(KssXjEPf9}FY4_=|RQr ztNP#qiJ09#&_6Odb^6rd`asV}t#9T?z0osQ6_J56d+Q7GemNE@f96P|)-#w3n6jj| zmS`vEKeN`mP#GIdHBu2eb40nCdU(AtD6?2vJFwo!G3FrIIG}&1r=j}k>8mx&eY6si zd*K{fiONVeC-*m`)_P-flF&$P3{F`hvmI9DC;rm$EY-!4BfauDtY>&65ta2yEoqF+ zus9af)amebeWda>nAK&otp$Z)0@9$dnvDC}k8 zz`(596076Xoq8WIs`yDl@=pL&f_5y|xX>*3!|FXj`FKpL_a&?ajT4yKKhBx+dKw9% zRYKyGw0V~tiZXTjSQSmH4a$lw%8Z_oc`EXO3kL>L=d9Y`g2;)?!!;P-HLG4ftUfe% zOwi0)ZT|E||J?o|6J~!=K&@f!L;<*yekt{r+x$_TagQmnapcfo&yYHlKFg&ktDg5x z(@T2d?HJT5pfWwgU%x<_>H0ThKE%F|Y(rT-et?lDND>L0RgFhwBR)y*11} zBTrmOSDo>k=zb}`C3R43NJ;lj?5!O-R9`%#`=o`#BlSTX>OE;=a*{#><@2_M>Z|7T z*Bb7CO)P`zuX}6LXP>An$dP1v49R24(89r*`t^EaEaibCdKORY9q`BlHU!9La{q8| zqee;8)xkmAtTQb2&z(0iJO-_pM=Ttu1ury~@o~*fS)^_#jM645=NSa%16*v*--QQj zHn{-@k&&NE3tkyPsi};0dLB4U?R<$PkT`>EgDy5f9_etI)1tIu+|MGWMyLj?3hhm- z&T1^nhBgyJOw^jxbe3%_pIPr28WPkX=hoCS99$a+y@pQ*tR#*?Va9yCJnoUrSDO8# z5iA^;r-{JQqzq)!Est4Hgk9joJpZKnKspaer6%^9TB;{IxhAvhmnAl2xJ6I1;}ZYG zdNr$EFmLpj2|MmNsn!@Vh1Z4?tg%$4NjZQr^K_n) z|MDm^Cyo_5Qm5F*yvKBL@U)4OplOpQa64k^j49J5@3h;FfSCtR+$p{9JYl!gwaXs6 zrmhJ)?VL=xy*e|1kyf>4_930fP2=h5*TBLsHC2A0e#cBgY_-0OAmwA0+Lh*FQ)ViY z`d?b+X+6X9lNOm+trm^*>U}eMhKIHE>x)!4xjQad|F3jXm;S$Uy`q6v zH1MC+z$LFLO-?tPcu_J*6aOWC6{R10*Ls$b`9dvso^U+1WXDt!C8Y6)*$ zXQ>9|9uj|#&R&hm)vJGX`68<(|C;tPYkGgkxf*)zG%TKZ^6Aw%t~ugv=sfZQ@sTdR z|GD_{l*W)!B5#c(C2}{c($1BCzi94Q`lf~13GWT-4Igzxosg30d{E_S zo;%_ZC$8smzq(G}4JDjCNxJ!Rmc=S+ql{~TN@V4tp3HKnL$nEh-m;cQM%Fsoku)rA zn$?zZ4=aBS<&ZYzcHO7a#JVbPcV6Gk+E8B79Hj$4Hc(Gm)PG(|USrv^by{~==|Wj0 zbvvRv_1rIOrRGP*+CVd%%u~tXwU*p33&Fw{B)&a5RZLvMtR+w@*%+2)Pm+U1!by+R zP>deMCFY{k)t9!fZ0ji6H0jqB*IGF3H(xGVA#IqP*Hv0dzECkJ1${B)!Mdz&&D!cJ z%Zc*qRTyo&G1jKhne{Q9wVQ_0!4~P+hV^WBSeoh4^W6zLuk8IJX)jb-*79hJ=qU7N z^yBn1{VD-a9k$OqTfqQ48jB|(OHx2ZeA2MFtNYjVNQxoplNaDh2fyPEF0 zC782PuFq}c$Gff657)LL&a3&k7%=a}`k9vPguf`vxeu=GMPE(%9p9V_zg?K~BOZRA zupT{+;ok_8A1>rQF3gz`E-)3b8FyXa&4eir7kHd7`Q-xdB<%VHPZ93coeRv_C(@T% z6FgryIj1N*UbIx$(+6`lAr8Mx82jNO9Kv3Z7u%)Sl5hV|H^e7R?1;Q`&W1cwZgfd{ z?nXBGe~k$DYem#2GO%CbQXiz%Eu!vdN66r;61+Tjr!633QxQDaGP1A6d4m{+KvcrdslSg!nA9)0i6H!+3NZF}N%Dk1RTSQwS95;Ew z)(PKSguj=0yVQSM-6_|KD{k1e#`gO2%Jqr{f(B0e;L_Kxdiv{5zohYhw^lu7aA0ha zdhJV}`P|@>Z}?@;j0=07KH`lVz47ypT=F`#GZq(2z-)?R3q}U#8t|Igm`)n4sBGdbZNB zDG}2_CUYUoVla(hA zn^HB>$ubjKG{$0YKzb(zON21d#0G4NzBJOEFOu7jku7hZ(&&>-FqI|`@lxI+lXP(&GG=-u$*A`HE|CncUxqjA2iV`E!kE< zSoBbL`FgKfAo)VfT8A&2vc6Vl{YmME)y4)TooTeS3O0aj0&g}$eJx4L%z}=*TPu#+ z92&8SvoE+zt}VT6>4pyb$I`P+8J2jody|{hg-M`=F=1!%MJllr>O5;dUSf;uc_$5) zNybgDLOsrtw4P*^Nz7cc$48xJSzMBsS-=wQo~ zC3-^2!LH%4A@b~LpSxz&n+EQ_@`*#cAN<&tPyF%?mrnok3Jj6MQZiW@Y5pVqYv=2BIjrE$@{phwYk8&i{K8ZiDI@hnTwnWBE_kSO{NTYJkjEOFauJs})DiNL0UtVokGP}-FMgB_nd}D; z$7NCHgrPI?MBS5D%1V67g@3x2wokTy4-=y7Fk5VM+1|FZfi)YqYOHBLFHFL-izl0q z6{r6`RVxn(x(Le^rjAU&8Bekc%c4&;Z#|vpAIlpx3VD_tun&$)Ga)FDK7CkixsBVq>-H%nGhAOkx>m%O(~Mqb2rLtdp3(m6dnG>&sGRqs)5Ca^v!x z!%D<5G2brQ=M3pGE49U2(6-B|lArgl&PkrLtZ%JKt!P)RIkUD^#b50GsyJOwwhpOD zS2lxhq!!ex)<)@lDsZap81mBmvAsAu^5zx%}HBfmif^ZX>ZJG zJUoof%IIOll5V79r{*kmM_?9)}mW+msz&QX(cm+H zQY`4#w3O{J;J3L&tQ)q$IrqX}+5meG#J03;_sM!ZYA9^KdN`@GL2fzdQytspx^G(s zzWla7mQN`;Hxkwl#vk@_Y_|k^we436FP1s>$*yUNF$l+gt?ha1LPD##caW9mM0Y-O z4qVLtvzqWt+^QB7&)7{)?8EBI=Y(1RA!*3#m)@o&kW{25zg>VjTJcpV5?s79a4$T-pZMm-?o!DRTO%ksc3?(Q@P1Ats{_ zCk^4U8Y#EUSU05TqZT8dw@TV(bt;T;d2W2N`>vhEN4M63nHhQsTFJ=vO8Jsm4^v&1 z5bh5o%i2R$D`gKI%X1l|SLd>Pwi%Zr&%t_y^_{H_izze85)PkhvDg=9Q^?LML%gE& z>^!b4Jl@at^x64m_EBb2?b)~4TYN&hEbZ+6OgV?GNEiXi>bhA@{ULEtuFbiF)w0(= zS2QAvZYDAGEJc|i%y;9P@l^Fp@%joYG+VZIW)ED;>LlLXDW)2ShIv?QQP~};G6}58 zi0ivI?eMf?1EgF&QZR2W8;i`pN`Lfp%mtarG^TUE#q#q{7MsUtuV;$W$geQsHes`0 zdPFRQI$=jH&%sQEc7YXF_n9^Z@&1DK_Vn1}2|1%zX_Y1=W>w#5UOiqsN;c<#|@Dj{ZATV+$JPM;9=!Kppg>;p}n zX5?#_xMoAPt_$;%V(Ou1sM=jDlkPhmVHYm6kYXB02(#GoIwh9vnA0D!UaTH{Y=;Uf zr0>Z0AGW7zM|Y_))=Oor%=1CZH9gs==l=dg%rJJzn2|+Qd35fgoq0&nHpm0BM*7yJ zy0c4bXJ|Z4L)B?oxVIgx|M$zrw0+dG2m9G(D$nM63O8YGozF!1?vv3#44IlK+{Vc2Sk^hxxAwl{CHMRtR24+IU+X6ZNZ z347$0T4%BIyWJ+EN@sZsRcreXT-$R%Nf+mWINQU8o3limRl<++LY)19mG^-Bog@6Z zMZ8PIIU&vkZ7JGa#Casbw-rqhaUKc0qiB}M!zai+Tf~_q=eJ5qkfKgr?yg*hij`QU##ivMxpzX+ob$^)jLoRBl6dnTN7l>BDK*1B_jN_46)?M^rQJ#jgxKd#F}R|{jmT;T5t(?%&1`2G}=->XD? z|Jmz{w(}2R>Py*9+R|&J80rK5Yekz1yMDhS%(Ug>5Vv^q*qTz820-5XCIe1)*r-}i-Y5T-211M?e8Za;V7C%mEVq<^>QVPW*C zTk@NrE2<#mm-s&utt;&L`?)Z`6XE*!g)qP6g1x{GK0uiKqM!Rj{O*MQC)fS@d#nKM zl?&V}OkN=H9AQ5z`hf7M!k#|(LSgKK>o=k=2vdIY59YT@y}dms%x_l^pX(1Iepk%% z5B{q#?Unq4SCH~N{zJn2c8I6{urR;HO*r{|L^M&@^ZU5)v1z!R$#0GF8$WJ;g!B6$ z-amlP5~hAg|49+Qg+u*vJtewQnEsUu%x}8F&jr3m7=02S{OdG6`Fk3_G+fT)_f7ac z#x()D{>&d4n#%`oB#eHD58g)D%l8-I1B8iBdSJef?e_Al@VkV`AK}l5>cU>%e-$20 z`Q=Q0-{CxA+7B1upGm_>AN&8xY^ zb%eeB5WcxE<>3PFCLG51w*pYjoY zpfKr^-akdh3cLNl)FVyu$O;D;md_xf8gtd$-kUk;M;|< zN7_4ck>95L$m4gH{v@pb$+d>?3u(BVUEtMJS+0M+o3Oqx?U``!_QJ03HHF_Q?BxX? zD(v|Kzg^hV1NRA|4>^LAN(5q`B=&?nEVFvWx}2xeiQkBguOmq zCw#lG+wWS!zZ9lEDL?qn!d{>J=G_{~ytha2`odnm*9&heyfKOE0v{~w{QuUqy^CEum=Y(A!;I9e0e!+JMd-~vCrc26{iU113op! z|6yS-GvS{Wb{hnLSr~b8CiC|n3hRGz@wZ36ss4zD6+ zw^7135RT<-#OjZ%}1>pAOzum^mF6c&f0s8E}uV>j%74*y|sBmavjY zF7QRdo`3M=!fw;xZwbfpeIL_ZS!me-lznkO#eJ=cY;aDFlsW7oVHx+jKLEZ#mZ=c{9!f}1f&GElmIL`mY z!m+-u5{~uxZDDVZ$p3+`hV|s)U9EeCear{{N?0mR>=FE=u$O0?@CzxHGxcD$E#4IQVp7RY7uX zCwxH~9}nP%k z>8&pu%il_v`70Okw-MI=!Tv{@Pdf?CQp=;IOK=<1!Xx`L^xrTk21$)B5lI@M5MpDi2QCXBEJ(w%|tkWDx;iT@T6esj|M_PWEjg9yI2iiqD3!GDPe zS+i37>a?7Mk*~=j^0`Pv{7;EU>z5+R^Oy*IUL&Gjd0&+JpzlBianR+(BI@uS5jy>; zh`Rlmi2QVm$oG(lIDZt8Z{}s_aW@g^?ju6p=S9SSLWEuhMdagZ5&6AVMED&d%JGtj z{Jd90dKZeo*bM1xC8FNOi>T)vMcD8mqLoE6Ma08a;M-P&UF#MMTBo7Le2saeD6;21-g?S^L)zjo)mvXclh@f zQLY&x!fzG9|05CkW4;c4hludYMa2832!GZ`Yw12tMEKbv9sQ?m`jz*i}TmA0UGNKoQ|bh>&xvi1c5jc<5~>5qelXP4{5A z;X71>oQp){gY^ydK1qZYK?_oN7a z#wOA|Muc6~McDNRMcCbSBJB2?BIG_NBK;{M{Erq5kl!MU?+k5pv%rBAw5Q zkpD#y{{NHWx9d(iQ$_e6E+W0NM98^CL_K|9MEQOoBHicH`#jy@|B#6KUtjqqpSOwN z`>}}dwdIeVzbitoKNQinewW_o>b{ZaMGATiijutFPWUH9G~!zsR0ciR7bBI2>Og70(@{&$N=hjlXfe^5kvqaxD#Q;Ppf zcgp=+5&2~e!<|f1F7`Q)ca8}8SBQ}N2N7~UAtFBe0px=<7~!mMsc+_Br2F3@?B%N> z^!_UmcK&M-={+Sv{ue~Z`-%uT>}$aPHPMQq&xy#-H$=$4L4;iPbEvP|MZ|wvM7&ky zPx=2U!vB9old3TCP|6UR4J}g4s??w1`OAhHhE22D)i^$JIBI@POBFev> z`0)RQi2Kh)Pgfy^((G&zn5{!7%h%X+2fz5f|GL$`Pw>tUMB0Od73q9q(30;;KP7`vbgwt50<#te%8LZP!6N)Jh!2r zY8F;rZXZ439z96Gmw5E&_~ysJ;71=Ck7X9((u<{wN2h#mYjMka3BqWL^cu7X^h4{V zJ_tki-lHIQH1(y&;=A_2rkFKwy3Kv!_ZpBJk5X~Y|T`xn=GS&jRH6CvJ~L z9v_9Rf1>BMF@u&sf5=xh>}@n!B_$3mi1c`Kq7`4ZS1CqFtg3v=5lu68_@_ix!zB_A4(XdV_u)1psVn+jY-U6}^rnKxg-<5nJ8c#zg!8+ZPE8!R8igT|WkSLr_=E8lWM zUtN{2e2l7;;!&I*S75yoa$nUKc&ec{U|-SFV2%^|qavYj-n;7 zLb5fW&*92yn6(vJv@r5n?753PWtNnmsrzchdkjVe-Zw1f-D=V2*!Iqitz4>jTa6y= z+67-=qK>k^4Hnn6y~*gBr!4t*ykqX-?Avwk-)xDw!wSLlY3;n6Bc6-X*Hp)_bp$!F z-E3Q1ROhTZB;I2(F6KbY_e~$Rw_rZ3yN31lJ*!T8^N+dBXtK_?-7!Y_d|&P{_y(7K z1sr|FD=g~~?aN%oo!z@4MOucnMcbJ)KWf%~VUzFAd)%yVti|japi};`7EvxEu1V&X zmRsI9Wxkn3hONgy?~WOFY$v7YlN}X{;pJlttsv~a_+DyRisiis`Q}>@p06^lvYy4_ zQF~_nlq&odsjW}h*P!R~9c$#EE8D|iFP8Qm_UygPt)%*jZdu~eCoWsMwrXrA_hHQz zN)-IE^TRTZ*t*N~N}G<~hxNMfy;Q!X8g>AJEzpx^cML=7`H*GJLtakx95zlHyP$t| zKl*F>9ouuHXR?s;*={z>$F0!6c`QOG7dxxjIPu;gsbbT_$711+xzRnNi?@2#2tH46 zKHtY;Ckty0{ye{-#|kB)9gwD#m#3G`&GS1OPtAuM(PBJ50ay28ReiVhHk75Rb=$KK zYp>-=oI9 zHgZ*!j9CFK$?MAIK;dao^_c0iC3xfUGR!D_?rXWJ;&*K}=c3;1iz!m3C5Z}wHLG0{2qpJ+U$~f8vP?99`%&p zA8LoU%=%1vs~K)Ay^6OT>DI3_&wY@e=PpYjJ5!|n_%17R49j=io10Jh3Mz#0Jd_oa z^`+UJr7|w+hE^Mo2gG7e-P%jp(`T1tbLcAD3pShOXM|*~W?#8%y>ftaAhAI2iFxu! z8L=l?Hhlx54rRw8?Q0J_T`jlF^7x+Ls#x|_4eA6A#x|?h>GM|oonRD z7Co)ae$l3lvi#l=Ww-C{`RH3_UyKB3CHt$>KJ$prP|Q!#%Kny8QKGe!(00Nc-?hSe z%H|jJ>YdncEP)k+ohDdT3Co(gSt~7QSyDF5#&fY{lj1dGb81=+Z8yyPTvwc}!Y=Ho zH)l8UoMmv%j^w)A~I&zx)7 z?9HCUbMAp&YgtQTvlB+vWhsY!A)j5De~|0M|Yb%=x*zFh;V3{h;#YLIda{P5q(}n zez?Fa6FJB~_$CqGVj_QB-w+)vO!{14zQyGF0nZjjKV0BJVe*q+ zlkgjnA9X|?!Dk3>qC3|&MVAS0s5{}{ZwjN&l|(m-z9)<=gKrT%Ap9oXse|u|o)`8y zy;FD%G13l@2i`y!esubM(JsQY3$D9GhYEZ8;5owNS7MX*%oYlxZ?2z+PD#TZpC?Ru zjxSBaNgw_%2)mB&5xz~>ZJzfy?oQ*w5B`lXb;R{E(X+x{2jG7RBM*M?`YM>$Iqz|7 zDeU(sYFm+D)zZUU*CeP0U!e10#S9dPn z)4Da~cl^U#_=CdO1NnjfU&7R!!E4fMU4L5Gp---=E9^8KX`Xx@{7E`i}n@39=ZN0I!u`K$S?Rv zVXyCh3D<4U2S1q3$NMMVU)xZa{)`~rf1M!g>GK}lWMQ{Q@U)a) z?8$pybEEjY2X>mU_n*9{e4#M9!hXOP348y-czK1e>ks@DVb?GCR$;eK-uJsp82d+m zyf^!Ru=oGGhxf9u*B5v-MSi1rxi%BtM40*|PvEW7a4_%d?k`M!z`QRxUD)-vwQwzs zui)f;?z%Absh|We754VY`>^K;lRn|#D}-sET)ZcEV;W9+;2#O=e{wNjxG&-dKPBw- z1ztskLEmzAjn^N($3%aEyd8wc348y$lkon+YC_2co+3=$aDk@^d;0*-687?d=Ll0j zawhyE!q^k(?JUm^3;TGttMI2Het!4(i^5*M-G#p@O#X=vzEjxkV^86q3wwURzZa%G z%h?5fQP}NyFX7jV8O*h}@OWXbfAADxmk&N74VN?F?-%y|gx_Ue9K{EJD2G2MOnq<> z{%v9JZ@~8nd;Y+G5%%`AukZ@$%w)1jdBAH3dwbqb__e~`-+|vG;Oz^%y|Bvz?;}kA z$pt<}7<-m8!Sf>i{pGnhhu<$Ol_nSA9}#wY1%Fo9>mPi*u>L34TZO+R;PV6UeZrm} z@UtnuoL%65Md1^LH&o@IKkNa#i?F9RNqAx!PJ)w#j}`XvgXiVK-6sEtDvkN>d?E0Q6 ze6lcO0pZ~H2z&a62wyDh`3GN@#)lvLHDS-+p~Bx0rarj9cME%a20tRanZmG7@M`>3wwDF7v4I;(}i~wrabV^(4Rep^*_1ZCd{{|x`pTy!2QCmpQD6N z7Iu3DUo5I9HxzdJ0dFDf?Fqc2F!_-)S%2>(?BzLLo(Dzo!F;QV`sD&2Bdq_)1wK*0 z<%1UqD~n^{X9>shFBJCv1OERO_Vx(APT0!_zFpY$3I4sX+Z*`t2){%4nG}y>USlHvgOZe=Rp9I05 z$c2AN*!AZ;-;|&Cam4wlurItTX(yUxL<2)j*z-=D)D&f$xN-KOEcQdn6`F7QplZX@8kg!O+c{I>#Xwqy8D z!d^%4KQFwcLgh^IzoC@Top5XZCeOWveGCL2CG2xT@bSW)9(aMUmmhpqF8<}hJ_jfK z7Gbw(@ZG{*hv55#Kj52% zy}f~N7giRM3;bJQ>W&Nipl~ej8Da192>)9Sud2o!rw0%1RkuVAdLlk)&{txM@Y4pd zGsX|vGkL;pB|a%1eTGaW8Lw&I)CqR8vxu<6MBSppMcB^_5pidVHWvLwgv^&j==1L) z+A;ew%mMaM24xD#JOcgq3X>n^cjOP9k=Je!^NHO=^qWVCDBrOn^7VERWqF5)IEzG- z_iPbm`;Z8IUMiyAt`eaKzT3hb*~lXf;rPLiF33-hi2Qt1L^_9vNN28yI15FjbFBzD z4~g(6uka%a|6vjG-YdfIED>_QBtlQ<0DbHrLeKk)(Es@&;{Q-Yp8g<0&*M{l?IAbe zM~g_$bw^s{0UhDqMnpch7g6T@MC5a_2pj1WA!k5@jQ5M+#}C?5gq-;z;(c30I66Zg zl2{{1Zg*%n~8zToLtpfe1bPLPWlQFCxG6LC8S|$lqFooZUq$i}n^Fe;*O) z)OCUloG!vX&kzy+3nJv*DI)%lM8yBGh<;?hG(S8~ zBL5qT$k*{A>fwDN(mzu~yo*GX=T;H&SVzHssEF`wMda&L5%Rw$qP+hrLeHCu$k*pY z=!bn=(q;XF-X@6>J?Tz54H5bu5y5x4hk76 zpAaFJ{X^s&DI#BkBEnA*A@9Q?^!*hP`JX7F-sXwm`?v^wep3YhZ6f^HCq@q+5mB!1 z;3ry=-sk8}x|@rS@bg5(n<7Gw|09B*{WkEZXeH5_!j$JE5&3zQF!zf^#AkmKTRB|! zjdVX!cgp=~5#@VIg#O+t|8Cux-;>YTBGNfVM7k%7DEF^K*zE^Il$-S~t>Wi$(ZfDWcr(6p{YBM5Oxz5&3;l1m9k1I{k9Pw?ITW zE)&5=qbL0pbcg>m5&B`@68xlybZ!=r{zmeroSW)SdUI30aj8H1J?Q5rBI;+7FzIcj z`--}MMnrl3TSR@VA%FD5zB~8Tbtj#3MCjr3BJwjq{-n!1g#O?L5q5Kj2>&mN$nOgx z+7*j|jc3Cyc(jbtn9Fx|7ef zQ~YM#N#_y~>24_u|2IU$|EUQ7yF`@h#uR^2chb3D1poGm2S0OOUV1y}c_9 z-&S|*WpCZFmko4>|Fyc4?mzGov0qGkWuJ%m$Lfw<^yp6fe~PH*6@}ld`w_ZtqC4ww z%H!Yf-6iGUIK6M8J9@QJ%_92kRehc#0*8$hkJNp*+&(TlKW} zocZ1r_nA35IJ-VDt5K^>9hy_$?}TZ!k)FPuk)9JK?RET&MtyFhXR!Og{(;(X_ts1H z*lpbLN7Uxj8nvO`TKB}^;o9Krf&SX?@zeTy8};G(oRQ-X6n|}Ty)pmz@rO^D70{wx z$L}_Nr{iai4v*9Z$M+2kT)oDsEAF)Wbq9Ta>r2*r;(LGk-H%s3ukXfp&ivu~&RzAA z&#f>f@TmUbg*^iY^bGg+9(BN^dS6X>TGZcHYfPFsucxsf{Tulo-9NO;&NF-F)DG?$ z>QlCHDo$^0c-VaKIA+3*drq3y(?1lv%ynF?QJ>zJ)<3jxc=}Ln>hRQ|MLh%keKYEd zYmI42MUjT)*7~L_stt`yY|I@l4KPuSv9RHpO1!^5G-aqSidyhYqXqx|p}AuT6@3fr zN7QqDN{%*Fj9z4M4KTRHN5=e%p(RZrji?DMxNRQSvVwSj?2^J=~GYmNVCrK@K8 z>WhcRA6Rb;4yPut!Y)%M^#5Xwt;Vl@`^A6T=ixuz`;k+3_~!w8s)@&k&g~O$_Spko z6)*dwpT7vh2fK>l99`s9O?#EW4(65d#UHdO3+GrMuMm`laR@v6LTfpfzhq!J<=`iI zUy>ZKTqOCts_Dn+QcMm9GdYGxKH}Fe?1k*`DnLF){=)&;a658oFXY-Q zw0xY6*UY^(Eq%(*N0!jCz4EYFrRP;|UW>3JtaiAw_^ASpbY@@j=}BVpf>!qR5kFE{ z6&@cPt>&?`C=K$9`XSeplDaT$+5u0ONcs7B-F$BBNGeBwDG{~GYa~_zd-cx_rQ7H1 z?B$dtT9}a5NU5!q*$*$kn^v(=Y<<2;f^Ioz%O}Nnov2(MAGDgQ6w5;?^@38Fe#Dma z&=;@Z4<(!dVG$!q>Tr=0?i^v}Z(owb1-f&<*W!|!5r)($r(OH*H>`U4+Nb}z@qgD( zPS)r<);-?v;f*FW&e;FXZ@#eJ?X@Wn-gd&Tp1kDEn&x@e!kf~Z|20*<|=F0cG}!Jm!k1o7l5Mcsx1D-odO0$GxwbE9-6&@l>H`C86RC`{GEuhw2KXb z3bdHTFd7L4?%x~Be_bvc>SpA=7?HW-ufi35yrJ2bFv`F4Ni0IF6E#!zPRhdaZ?XG; zV4*ZYI#R2fD!+VZQN~w%rze~)N8@}$Gz^tKYpQqqwlWL!3`Iq$RVP`8{o9WGy zJ1ljwZks!m`NgvUmfG}Q@j^HoCzLYIb4V4tzy_%=D2^R0m6prMgAK9p<6SytnoPv0 zZ>%wIU7f_qS`;yDCQRANN?4G!CY#+9$Mzt_c&)T$<3*O!7vlM{A;rU} zeMS_o_vTXb`ClY`+T7hN$xwcLAXj|TnI0_6cgrjtPTCn?aC28t8hK}V${X#pc*c8{ z&eWv4vUcOX)DN|9dA4tqSifpp0Tv56WwlWB^PbJyBz8M5jctDR&2iRmCKKO$Pi7(Z zB{ch*8WvgBPRKzuU%t%+Zfb}1gxP<&zi(=wBj4BvJxrX(qO|O6y%{fW!jlVci{*JK zPnVpzrg2lAVqX#@Hsi0>Re9R95WZ|r?OI&lW^0y%*0HMdQ5M&Ft>&d}CtfktL7js_ zy44HYKhz?={?0c&xPQlmw&%SHTmhr=c=RzTAw2FuvN5xIXD5MHO5f-^ASSE%4uSWO z*h!H;4)yO`Hs|8YQq**j%jX@o7ZH9n#QKEhdlPKFWq()5dM{sTl3M;-c$C{}h)}kv z>A8)QH3ebbzNsntV&5mBR`IhDp5K^>H-@d&`8%vwq4ig_uXgy07G|;dPM@W{a4heP zd%+hwuvMU!En5;ptw$0x=vv6nHIba3j}}vF&Qab9Lz*GHTo+aj>?_o2h#gvk+mn|i z{tklMpyfT^v&MaGSua%rr=Xq9Gp?DljPa)1u9>#5f1+FYk<9>v&Y ztEI9T-G4@UXQj6BkCDO0rsd0XyYf2CWquabN_U|Jc9v2+17b~J&+|G>y}6XmazsyM z-x&>MYSrhuO_#;(EcGx;URGUHOXxf&%x9M;A7$}7%LOwh-|4iNRl5pE`-|4gFJJ%IiOkOQ zlRf&htgWQElx4}$!ek8Wve|lpw=)+i?u4^*$9lZ^tUq1> zRp%(=!1&vpm4tZAH|Q(bal(Gt`C;aVpFQWI7qk5y-+ON-KkN!32l=cf8JkRAv;Fgb zzvOmpA!wwN(X%X8=P71)>zmKUW4nmsY5jjNzxT=SrrNPVe?riSrP(e}cw*a5eY75* zTF*j)9$QOmU%&CLck9-j-Rq9^+)N8`8rVE1{Mc8r?}fJ-XR~Sg-naG1HC zRlCQn;@KW&C%uPD3^RDosf~NZ{Xkzy7Gt*G)|$m_&mx*>mzKkxV5g(uvdHW#x2;+) zy#=QMto~g~zVqsu&vJz}R$W(d-_qGiJ&xI`)$!EX&K{8`-$Sh`Mfj?5E4f8ZYmd-+x@md|#jb(X_+R|B30=kFwy zPWmfLCyp_kj2d?Cpxqf)km7SS#vS&8mdC!yReSO})lOdOf@GhG^g7wCtS)uAyiRh- zlXpgt(0{f+v#@+Mlh9dCcwV?X`KXHDNiKNljb{?eQbXl&J4>B1Fms_jc5Wkf#-S{J zXSrD39XPX$Fk7nH_i8U!oFDPA5Uu#Up_93HQAU_kERP&3>9R_&*9%+CRDEqpD&dzb z+i$0>;+Wn)m!%y2td(b@Y@SPHKO#$%0JOj+7m|4-$VsO{7Q zn|0p!w6go5QBHRtx9rS{@p0yza#y$GGLEv^V2;4kyJl}bmGhKK^ZhD*3(U@AveRU{ z?qy-EP9!yp8$YRmZ#2<|@0_6?t3Qf!+9?1+COhKKaSx*7^%^%$`_N^K`u2 ze_7>ue#-l+kS1xfuIE(J(xlAP5tfV{qWAdCG4u16Uuk`u`hf$DT4-5sl@H0=D&fAf zU~)k86SmjtJ2(FRpY!KAs^l79+~Q3F>rQ-qy=dC9GeU8%QdOqK(p0As%JZ0))4KGn zW3-nN?TwQYd0mDTaJjCk;+3ZwMn034eRfl=-zvWHROlf%CBUyG(cd(aTg6$F%+m=-ONddju{KSH- zM+%|z_Vi%Iv$BE5WMlj23Vrz6(Ca?logUD*Nz;^PvN?2z;2Y8Z|))S zuAkMT=a+bKC>G2Pq>ZJ+DwEH7s6$@~P@~y;vOW4TzoI6wiNQoNckIDu73Dju9va@6 zDVu{e=gPMDJg?6j@@=CPUzJpJ=4%{V6}TkRDCM@+#yKKebJII#d2O_`Udg!WJLX7x zW}|3}x}qhN``S*7mCpM9@a9>F;dAVwPkZs1SJ<<*AR+j*CnH!hy({}aNa#)aT6;In z-^((6Q6^?2%ncWa%RY@m|3aJOG-COiNv%1vb;{Q)Xz}xuhP$XsOP%?YYuEaPz~w!K zKZA(p9ig=4y^+W95j&4fR@TDuJo)sQ^VySUY|!R>w8T-B3|+H#7dX6cX_i0xC=l~C z;yWsvX=XXR2g>@=_Gk_Mt~Q~p%cxy<*=jY9>GK$wh!5q%L)!@`6l z=I0IegbMkL;MwO@=n~CkeQ6i8l&mlFD(~kQDY0;RChEv7w#=|pKe=ZBh9+;cW);;E>4$)iemmS&cBU^l^sOs!{k%j0A1l!jW# zk6rD@$lFF)p4yl1`DjNfHo}a<+C9B0WkHj)OlAf)B6?Y{7c9m4E%%Mb$uhq(eX<`> ze8U%CH0rxEST+5E*Oz@>E}jJ=oB2I?w_FDv8yS2JSLN^PQo_T`54q^TY}NWiKkse3 z9i&Iet@i+V?~Pw^24cRvCz-Wd#w~kukl9;&Zi9Lucg(Lnw!J@vUYPwd7q{B*aAa98 z9DHKk6!k@~OD{m3dQO-#&?^KP=)t}jMK6(^i5eFg2x~I;!-}W}%2L!R>kx8_X7lfc z<$FLRhLwl+RcONc1UvI+_G>$6Xw^nms}I|A2xGsO-0Z}D{kLCbAf;gY);>Z#ub|PqzoAYp4Wqy6HKu8o7H#90#mVa|v{tQ=@9mQ>!01__kdXOC{lgjz}IcTCUb=leQY6qkhd zO1X@KFOQhsY}Jf3ayO(FOn*T++5P4_9%#2Zr0PkNSq`aI$*hW*9hKUN4-dKYajlcI z^Ksixy{!KZW2MvI^1`oCVH``K7|M3ZE+j&4! zOJoB!g0mva?ynnheuwXWfa51Saf`Qok~lQ{20E5XX<1u)|7{~X zYbDyES+mVZm&%5{Z(_GJ>}OF%MlpNxVefMiyA@B>I6&M{$;7hBAJX}xr|Hr@25X}x zUsXh-^iN(RVLb6L)>8hZAm%S&4(1$HZ78$=OQni0UqgYLI>LtOHH+=4IbUn3?MQT< za%t7iIb1hIj&e!ZBhN2A9@b@hCHUB$LHNc^ziPxSER6UzzomW0Gu{3SiuaX#Y^P4M zEjAk`9)Yb#Db_~bKU+!*rO%+Pk(TS#ZKRr`OcMJ!jFQZ#^5Z0<27A-=U+(gf7SnCU zlT8`U(WEWd$mDL?JiA5A9b=yIv_dS`Ky@nUDc)ms8ws`%R=d9Pa2`f{+uJHzz53Gv zzf%j$hVr;fyOfl#OR&BpQX?Pv@hC_tT7bn0b?dyrN9+GX z-M8I5huE!RmX{)obi@Z0-%`%b`O5ix?}hOtaPYM+M^d%JU<~dQ9JWU<_@j zT@*QOl&bP?rwl$O6uJRfr(PdSgv+M)Asx4k3xq3q0`?0LF{`Ra#W3cj!}kwtD{F^BoZ z`r?}~MGoddJWaFnY%zZsx9>`pg=L?NWI1Sygj=hl_1GK`E}mHM`~|!49|fU>6zv3` zytSemB$#CCj=enMnrhjIJ% z9)K3fu6a01RULvw+dedHJ7~7^7+yl(3BtzXQ6_e`;`Kc?S|H;k8VgSuYpHOMbHDQ(8+-8cU)IN#`LVMY|6GloS~2UenO)I` z5|EPF4wlcZmgPRLF+!Lz@IvL$z6Oiqh`02&661BsfFC*4T&1Z9j728vn>QH)L#uU#zWsNPL+*|B& zU&63w=gO8go1Z+F*8hjOmh#eR!KP(vYqUh9(H_|;LsoMhYT0&sjhESs+aqxUF0)4C zpf0FsTCG37qSuanLH0}uR}~lfwG)7r8-G4ZuVT8NotDW%!dahejNp$x!f)faPKxoZ z{>U4nCoP-O1wQ7+gxGV3e5k*}lJ__Lmix9^KXn$XXzg+CEgxnZ+0|}7mGIq_PV?6~ zWGym29t=+{d~C(;>>L7ii}m>0qu6UKTkLF}gA8xA*bTWV z?w`{d_~oBY;*_OE`K^6dm8py)D~U0L-h-J!STU9R=5>p`#50WYSos!S&K2qse)7aP z&N;*~+oVUK-+|Y97hLf(F=FG#%#<;mGSX6MrQVYfVrwZYyUB~6mHD@qnR(htV(tAh+e{=v}6;GU#qJ;P<9}=vbW+&zQ zEkzsZG+y4am;rH0Dc;>+q$~QO6-EK{T^3F)#?R5|!QA$%;>73I%top?^E-WImQj{3 z>LA-|`jf8ew5SPcH+-GEyv&Oe>*CZs&n|5)NxrPbn|yn|h8>a%p1vW=eQ9YteJp!^ z!WhOEk$qg{H}aSR`MCz3iy)D+$l2Mv>6O(bJII_dG&gObILnV~!DkfSLy`x+#2n5k zdOhWR!kRnor9z)kltHfIc}0=K=Af1b+h?$E05Ti5`Fb_{^&dx{WpZDeS?BkHn;wh!&op#}J zy}f7i8;`qXBV?SGN$~Z3F@%1?PX06tvsO#5z&<&D;ikO)BpaMvmll1>`l2G2r$V30 zoEr}67dPwWxF0l$tlnsQzMl3LY^!Ut4t9aOzjMCOn&8CZ`K>cr1rnGauu3rQIMn;w zVhH)P9=I5WG;$Hr3h6UDq1Lnemh2{$`^Pe{8rvtJX5u)k_|RUq-*lPbEtYI)TZOli zc90!(Rg@dTI+Gb|xhORbZAUH=XtVM2ji5!_Va|ur=Q6|d-C$qo(GSq$5XR`~{_xw3 zj~`QJ6o`U&6Ptm2J#IIDPkkCSlhoV%@@vX)ck%L)g(_I;TU z*GKwrGC72KAL0@Xqh)40*4yQGtn#tTx$}K=HifdWpo*ipq_Ep(vjO@-?16c#&HWwQ z{0u9j*F-AqGCU2;^D_^#pKG=dEG?g!wRFxs(|cf z_Z8P7ZhAQz({M3zm0N*_X6JzRy-Mc&%=zM{&1I)A!-(r`+E#VNr>*9LO)_p;D!9pE zoQltD0ta=;T*RLB**t?a1G>R7=#S#xNpgRCAJ5`i-(ex1Q=8+L`LRCo6;)YydH+I6 z?BBE>BWoRH@rtdjIairPZ^1s(GYQ_Fv&hDKdj0SgKU#KfAD2Bm8#|1z<>79rHVWE4 za{Pqf`gitHtDm}9isYl+m}NRC#-}gNzn@apCacnCZA9BcPW$mfKUFR_gu8Ca`?Gdq z^Bjg=Gi%*>ZG=>97836Wl&3_wW3Ki!z$`RA3tBF}$Ytw2YsIy-~cZuRV>h zy)Go%x-{e=%gyZ8-m*8Xa-xN?iJj)~oFe40N;@`-vl%ZI#f+XOfsAy_Q&@H26GD(= zd%F2|M9`Vd2-7gbt_94GpnWLIXl%#Rf@43t^W@Xv&L3>a)~x? zp?5%s#S-M#@~t^Kx0ZYw&Fe7FZDSqdSlPaA>-?6-Z>7KLTv%_-E)RB;x1FkZ*0+cH zt8O9fO6ar%#U20Fx%bsU`<%;f9gG4zNiU}9ySkLbc80RQ!cZL}Zb$9Zfu~d+ua)LK zHZ9J_y}X@NYt}zACG|TwJ%SlDrPI~g!s0b89#$6)}V8fH)dJv2heNt zywdhtZ53;Kmwbt?s-*2oU{-2lrS((H>Z)b7Yl&WtcC4?++pbQtGi-Y{g$=hJmp#o^ z5<1TbPc>~m!j4t7F8!?^dvk;D+*WCw-CJ6R&AsV`t9i>?aCPtNdMJdoV~$_3i7_eqO-ALJg;Y%c$VxGWa4z2ZsGZ27{Jiz&30 zl;vpM@09bm(qJ5`+TNHmqDe*z%2HPHB2O&49cyS;LaQ=`XI;&0x}2}`*#fnXUU&}E ztj8$l%kEa%H)`O_xB2*qKvuJ5wc-69(%IF@OY`vRxhy+MVU25uJqMqy6Bh4#lSbap zc3ZN0);b8~HYlxYO^Az`22;nOm;hh$^ z{VW%=qdYF}b+U0xv!0r*r?VWiPi%~N9<#LauUF>NZXPS&ma0-@-D`O(YssC&YMx@K z0bC~6Px<6AEj8?WW_g=Ef71GYdQp0LjPl%ij#y#x#q!W|W^+-kE0+*Bnx~X~OWmIc z<~5S#vYqX)H(V@pn4=;Q%eC`Y+4q3*sf1W|eyQAYIl=9_x%ru^@9kDUp|B9FobR|X z@~|QyWu(&c*zaN#R~Q!4cBJV|L-~WQ!@RK_?rhEQ^%YJ`k&oD2lwKa1m&SQP+fk<< z^g3X?b=!99;$5WpJvo0W5&Mdi#$>!^!jO*;aTMy4l1Al*CqpCl&9*I+5 zVGrH?e6+B=Gxzm5S-@zN@srk5R&yrD?AM=r4yT;dgg-6t-V=G`KkVMxjG3=eSkLMl z@k!BqSQr<)wQ{G{kxOoDPr^>zgcQnnyv6!^>Gll2Tpn5oD^B~qVlh?9UzU=!4#xLI z%40a`YGY&8FMF=R&bIPi+U%s&+4D;DRp#f`R~E+89omTNg!;2{cGOk*{^Rn>$y#)o zG_;C7X!G8-Xmiy2KxrBCZ~f9b;f{Ca%Tj6cyTA+6mWo z%igYx*14e_@Z8VNxzLaEZgtT*;qx~_=*2?qmT@yCAt~6ejeS^q{7$(2S{?1s+JQfj zrA?VN(@&Z$V9`jW2hGX|v25Pvc2~_+{C-;)!Ms1UXS^I_eC2vY1FvY{Kcj)IS2nq? z(QRCs1n#v&E2MrK>;4AODxz&fJBbMA+Cel?^jd%}@O07ZMZ^cs7CHZpayLY4i&hhX z&xr8ua$hKVwTSfg6MaSm|LUSiqA!bHB_jTzqHl=S6mcCPx?Qx6h@ydiDcV2;&rzcP z6_Fq0_lQfmq zOkwgv{L@7>;f-|XI!APxFgjl;#UB!;{JM3WC;E7bDbEK*R|=yK(m!8xqcCX^ev#;A zVf2H{kBjaQCO@QqmFPZU@(=&DqDO>Zr#sj6qUVH(%LQIRih!RB{5oM|LE!a-$uIJ5 z5^W}oTVlFy7QIE7vgy|KEzvkR&?n)yh;|i57Uj8Bw09aVXHu633VZsu%Wsx2_60w9 zZW^C7ejpkWUQc&)@*~mvgxA*{o%~F6sqls={;lpe3S-~o>2c8yggw1yh3^+$M|Upp zQ^MW4VP{{p--QHFao-T|$%KR$f9%1w?XV=>LGbHT#TSvGd zO#M*a*9)H}jIF|ht)3(7?PVk3j|uCVflSiCelM3Fu$=6chd(;eCX$KQ8cOVeAcl@GN1s zx98;K!CMG>dwWQDA7Sc4&aTJw z=V)Q{NBWNo&rai0-aiUAgq38%|7YP*VeE(N8R3rzGY5bl{CQ#Qf$J~AUl%5SgoE!A zMn7E73I9eI{c?ey5O(_oKQD|tIlG?MpVg#%^pCt3gx3;q`7a4~3nL%?zv<5|!Y=>s z!utz*eSr@bMpx(;JSz$(kzQfSpIpKx3VVAde4((im|QCfpCasI8u-J)o<8^!!sJiR zF7UO&-hNgQ{0++55r&K9Qq5g&Y|@K$o8qs@iy7T!i~Ig|Ou3&O~Qe_MI3 zC&63G&9$BIe!|-tOmM&OrozN0{9NHJF#1q3U3&>XB20ag zpUJ|1P2+T;O-+!p{_T{Skhhu$LEnM=t(@!rhX!LMm?sbyl0n&2@(OHy8H&fcF=6 z{eX|p;Zb2P58?kM?D_|PP1y4X{(~_3k~2x~bsGG9{5w;gn+u2~$=^A`y9xXFbFT1o zVe&)%&l4UH_BG1~g-;h|{GvWC5WYkhdj(%4e66t8$0fqwPx%$x1^&IT{wEjsIRWHz zfnOzI-rs<`g=NCY^-19!gk2xtX~O73&MxqfFy-O;wD4KN;|(VGtHL`)_)%f>M|t62 zONo2?_>Azr!fr3%K4I54_(Q_jgPdL9D}}xMmkZx2?EMk=SHj-jt`Po*Fzui8!COkX z^k-b36`mnXI2U+HF8m5%FF)b83DX}T?@Hmvg}ddJv+FATSzVd+^gl1Wt+4A8JXIKZ zT;LOhyAx#i++6%?ggrg@?-6!=T`l~g@MdXz@SCIz?=Qjo3440r6NJ&1oL%500^Mo+ zFA85Q?D+?OLs&&j$_xIfu>L34HNsB`xP0)d)!4ngfyW8EJ%aZYewAX&*#$l*4PQa{ zI^nkqtBXmlF9{Ds@xkvERu_ssV+H554^rG?Mu#N ze_^XMd}ZOg<+-~s`Xqn%2+t5^t^xk3@Ug;5BDwAr9v1fW!0!?E{tm3`ZJ$Wv0P*{( zFzHdop9|k4jE=Y-5WYj0I^hD}BTSyr3;6fKuOU#^?}Yy-Oc~`&@IQo+O`ac==gP{E z*Wn+8*A+(RgoDQkBMQEpQ{Pigk2uEF6`;AF1%FO`;=D+e<+797xp$p z_!orHhn&ft-PeR&f3KD29m433{DSWn_Az`d;irYY&stmfd0}sZuNPiX#^&_}UR9Vr z1bw_g_|?MRp4JuKP#F1K>kE$;)-aXugC`4nAGLw-F~Zm<*M`D%Vb?$S6k+U(^uVVJ z)BeC4311-W<=t5La$)pIIQSZ2Z(o}T-!AO-@@C;53w!#T2|p_A`T##8O#9&4LU{FV z3wOMZu=fvyZy-$hx z<(eS8+NP#|!olkadw;OI@c-lOJ)r9-lCW)&qsdDSPGk(mCYk7L3!JcQ@&dASZ3|1f z;!1KLEIDUbSXgon%aZdFmmHUzmbm1cbMW^(Gu?OQUdw#nIsZAoj>}zdb#--hb#+hA z%+=K@VEwaxOK>l+>%*U|!TrH;J&Ol|jlVzQ?SnpSf_DSQ{mW<2MR3eVac9uC{Xp;$ z;Fu5MlfiNQ3<948Hox_6F!)@s{m%mp1z!%UKVV=&jXDD_XNj$84cbP9Q_jy3;M7%;t62K z=Xl0}_XNlFGyz-$>;JsaMDYILINv*ij|9hj7M~3^e_(5N;lG=}T!NAu*d6>dI9?z3 z2EPlA>#ZLA3z#LA{D@cXmG(C;67iZ~{S`NWHv-4~u>c+dj{b?qfE~Z_5$_3(>tQmu z4IJlZD)<1f`q~#C4>ta=HT&@2-@(qm^)2Ab!7)FJ;OoJ$fAO8*I3DqT!ErvspMYcj ziN6I$du`y~!R`$MZ-#cqlmTFXBDGalLea_XTfATYtpo zgX4UNZwc*V{Zn9$K*^8wAAw{3ioXq5g--D7faec*(KWOEYZmp(f@6E}>R|m>e?Ra> z;JBav1-vcT`SV9S4!i)o;}=g1`o`-Za3k3DVErNB8Q{3z9SS}g9Q!{4d>T0JuSbH< z3Hr7d{}UYZ=_v4BVExnIqrp#rX*#D{ETfzG0c*T!^WBgA8 zzZ9_b;`hO>Z|(mTJn!0RycYzY0sa%%>%BkcfY%4d{a@T49POV69vrat#5;nce;0uF z0>}7>o5ALT{)qnqHXh;&!RLf}?Og=E2JBo}e+l>oaI}9Z_+D_FAMrEbxL=9i1IP7o z8Ti*+y?Cj0(t7P*4qh7^^Ysew0B~G?;xXXZpLj2DJP(Q6!3$%{pR2(8gJXV*4+qD5 z6Q5Xx&jiQ)&H78g-ec*X_-=5F=Rd%Y=k&!df#dv$-v>v3#Xo@K{wrQ=-88=XD_#b{ECkW_3Dey z2FL5=Kf%|4%@2RXH-Hz0H-E%;faCbD1wRgs{)k@!$9RZ80h=%OC!Tk`)F1J6;HAJZ zKG%a+1200IKjO8(u7CB#L%`kP_2&j~L(muB1a1b${%-*v4Ax)Ui%$VB6tM5Z&jiQ) z?>6wo;JClv4!#@gdh$p78rXRFBYqbg?TfzyJ0AVH13d5g+4%1SuLO?qz6-noI9{K` zL&0(W?*{J*j`0;2z;QpJi}A|#4{aQy_+)Ur=H3Io7Tl9Mf5gv#*=Ca;@%LcTxQtid zAj=`^`-0;d5N`*LXJqj%;C{LG$AUM_;d{U_ht+=&9Oqp8EZCeiX5x3jF~;|SKLy7e z7XKXd?LxeGpVXe?7q0|f)JlH-4ekYw&sD_RfMZUHcLSSqw!a_TkZb<{xFyu?EZo_E7+4T~2A$35aP@T%ZAe({<){5W_+@M1d0&lBJQVAqg8;(_28Z}Ilv zxJQV02ghrMxCCAzZJxA0xJv&Na6Gf9e+jr-(0>wqJvfd}dSlh z`!Dzca9oeCfo}!J{Zaf3IQA!g3+(m8`4Z0t$NpXiFUsa0_aE^x;JALpYl7o`^9FeH zDqIVW`EUJR;Al@g1-x{Khj=D9_AfpR9QzZW0bVNTzX`q!Y`k3`;v2znKX@B_4>;zR z__-?l0XW9P`tPgS&)Yxq$NFwy&k*K}cpY#&lfMrh4vy>j1Mu$Pc#k8V3GPl?f5c~k z%Z<6&VUKbqWE8Y@pJe+Uw7;udDN8nw- z@r)$y052Q##YcgSzwJK;{|y}H_Y?3x!Err_Zve-97T*bWKeD~}1#nzXpMu{2>yPs( z{sQSi?4+MLUr$6F7z%kxmg7*hU z`{EftxF3HF{w1d`UTU)}{^Iq)_OE~9&A`iP zoS$#N+k@kJ5|0PR{ZqUvIPO2+talXY*fMYzwZ-e#6`4xWwj`R5=_!n@TFY%(AXZwqIRdBw3eQ@;O`mMone-MuX zo4@{u_X5ZDC_Vt(ojS)SJ_j7*^%MB2P)~J@_%U!V0YBo;z$>IM!SipC-BVcK6YM>J zKjJOH=Cl2YM}T8Ieg;njM|;15o568@#U0?dUc?82gW!;J81Fr-Nhs z=LH`Qj`J-(9vt&ad@*?CU|)O}IOdP|DRA^x{6BEaC-E0x?Yo}EKY&*Z_T~pKxmBhw zUKQ;AKxk{kYk}kS!q1qm503te2Y};#CEgAkXr1jqRi_W{Rz6K@TU{)o2+ z$NX6uyc1ae`0>|HYLqo2i+k`g;7+jq`Lir|e{h^L@$ul;r}%8J@pg{H=YeCNevbbt zaGX=|t>Czai|+%+oD@F;jxiH|3|>`d_z^F-O%@aJO5iZ2q<$lCjFI(Qg5w?}9t6(! zw<9=?$NIgi>f6Bi@f-kNEp;d9?<{cl9KO8@zXHzt{~b8r{{q`)Ibi?2!Rk9d;(=h} zAzmK5D|j_{e^vlb2gf~Hdo=*Y-wGV(&-&ruI6vZvRqgA+aZOua1n2voQPuuP zaDIG$1Lym@2psn??cEMugIM|_ei@wi|6Opt|F6L@-_@TDj%O6{as#tHM!Xt0?or~N z;JiP5!1?xr!EwITp9qfYSG*@UuCJBAQ^7GF;x=&fPkbOa_AfpZ9QQ!+aaH7q0`3 z^RX&;6L8FT@lbFak9agV?l0oW;JBW|hk?7}i$CIv!7=~DH-KaQi0=o-djjzb;5c8a zfj$!M95}9j@kZd-UOWmM{TJ_D)qY=aygpff3^;G^5^&rvt-lo< z^G*CH*!j~x@yFoa@cyg`USed{zqltjUq8I6em8KOFZE}EW4y#CgJb-~7l7mZi*Erh zly;x=e-}7j53GL#9QSwev*0*B@q6GnKJgD#^^4YK`@Qu`f)~#9w*olt-`e23y#e63 zf7^aIIPcFmaNgc7Rqgiy$NaMW{@^%Y;xoXj=lr>;s{TJ!^`C)b{@MN)aK8Wfwy&&T z8l0bxb-*$IZ9f>CAOCo;{+b`wH-KY4t_7X}j`0^C3y%3Hz6c!0C%y|D_ZRVtRqa0l z$M{z8;}aGX!^G;qv6@gd-ObL|fUFPg(A zfb;gw0q5;q1NM4sytH>mu6}Ls6X0l1{33X(2t`$9pk2 z@83;T^>>5w{yqWjowNTXcX^5-G2bNf$U5i4Ig_00#UW$lIQu}#HiTTa8$ph*FQiU? zs5`U?jubu0@s8R$Dd zZ&5mbU((L`)0T4Q!Fe19>HC17=kNAw&px!jDWu)aA#-Xpq+b_8w)1zx)qRyx+p{UP ztB!uy#{QfSW8*yPhx1^&fsp>~3fa#Yko~VpGTQ&il-luGk8<-v`H7G*ycn|nZpc2r zhm4Ki`(WQ|P%cmTA4=!K-%ZiR(%3Zyms9G8^RJz;kp1{O;rjh2>h-HTrS>O6+C2!e zp8|UN;qN5d&jQ%jKYxeOcK+^?{T)wx$G;0?d>%yK()?6z9vhbi$bPSY%&UvhGd_=E zNB@4NRBt^NIQNvhkA{W^##cGerJUB?-5_^o(E}X zFl7DN)T=*%Quz*$_)JLqKL)#fLi@ug&4XExp{`o9JBj;A;AvA^RX?ff0m zeoyLMFC!uIs|j-5{0M2s?-bC!zw7Nfx)D3B&z&LH&os#R6(QRn1G#qo1*!iW6t56FHVhP3-EWdH9%+WiF5-e~N3&H5Yu8Lxhj z_J%_GKLK*Sr$Uaa1+v}Ykbe9O>HloVc=@~T_H!4daeSC^b;_$CuNiki`tu^BpRYjr zGcSJV|EHAt{W+y}PQ)| zdfP+Vodns>X2`Yo4dr5#{tlyfJIH+VVZ3_pQrd1E>a{ln(*B{4@^c~E_eIZjvm*W4 z-=?AcAWG{yC~bEA@jEfp zI~LN;o?!dmi&8r`Qaa8DD7C*a_ROo>A?+r=V@Y`?_LScUnfL#L%&)~m`yD9NzlG9# z{EpJRAB#Qx@%JS4&)>f@Pd37y{q6@TZ$;nuEJMA1tq{iV?=$M}%V7PV4yk_-*!6Tm zz<;5%pWU(JIQ;Gt{XI1J;qUh9-wl+uYp1>QTBKe-E~T{nO4K_aQ>Zt8{VbgQ`56S~ zV}D5fGttw}Yl6L>;El_0?3mxTQ990rsn^aCkn(Gg8<#hbJKl3B^|uMR_K&1=yr&`8 zpBk|JOrmrizoIk_>r$`&DwNjm16h94EkOdmZNmNjihw^ zXN7TIAN=sMwO$XNrqmCgn_K!m!TETIcFx0Dl#cfwl*Vl$emP#>bD9UILgL-1x7|*Z z$}gmJJ{LnD)tZAL$F&Y}`x#4V9G<3hoR8y&o-@ss}lhV9C1U>Eh9#4O+ zMlN16__Z$e_HznkKSxuq|94Spe?IhVcNSz^H%G1?=LEg`DfMS^u-Ak=^XXSeyECbG zzSao-t{Lj@}gS{1yt3MLC?axDQf6Id%*R^2#`H(X48#!#vIgox#1=#K)O55!~y?!1Gb{w79 zx4%Ki_2WO3+VT0k{ceYz{Tz;-^7|q6K7!1*EvR?B97Ab-J_VVdZ$j380GX!?Qs0B} zuh`e$V<{c)NbKs@?~wj(0@lAhDfRC_^z`Gc(C!*|`@a)%o*#$w>t#qkzkuv-GW~g8 zx;6Oq8Kr*Sj$PNw^OVl-v)EPdcj~owE2Q5KLF&B+^@je5p5yZ8DR|eE?~Kfu`yks4 z!lu5>gDuChBBgztgT7;0Hpo|^RDU%}$Jm3?cD0n|@^;v9FZw&}Y=17LzTHmg7=EN) zpN{}1K2jRf2Owkh8l=59AY<|aWK7nlo&8=I+TTKH`%P%?++9s+zjskGw3<60{W%W5 zw0{bv_8tlT{zhr+-^Gsg4?_C;7^I!AAp7fvp7y^-PyhYAw|1M6JFfjGjpGB<+x{Zz z9mjtm?fwF3$9JU0b$Rs7=_jD>kk7UBcRu8n^M`T)N^|RZWzfQ4`+FKv{sN?Y5#&87 zpP{thS0QurGf2M&hViXQy?*~2|D4Y+A^q!(-1u&Qo;h+crSo$urTu+JX`DBuopITb zQv5Y!|Etj6as38q|0uBY_a>$752U^Q{EK$R+s_kg-*=|Y$Mfjv?>mroCsME7k0Isj z277)k**Jd)+5Q{IaV$i=_CJU0Z%MFzEKO;gzmtdd2=X>c{X2=$IIcx$yZQ0c`8y=| zyBKo&+nUn$+f!<(^E0J(-=@8J;dgE5m!Ib~KbNIcz9n+){RTEZyV6d7PouQ| zD=78n(P)p-ed>PNc~D)zu}aK zlHa8jzXWhTenPJQgK4i{V<@%%XG;4&J=p!0QoHZaPXAt`o&Ekd=r04-pXDgk`%94D z3D)k3w6mN+X@B!js=qCz`SKik_WK#7^Kn3sA4h2%U#4_ETB+Bs+p+IFoQqui1f}t8 zq272e54OLnD2;m$emufYJXp__Ft#8{d(9@ekJX+ z`xbKjJ}T6=h57jpJpM_CJ++<909D@wA~Q?jH1yq16AsQfg;^^z`3%%Ig0u$S=i?aq#n_u8&ud zJC406m485KTtA?_{yrPpy#m(H#c8Kst0K3*`cQvRz}+aVuSd`RJ1FhH2Xg(brL@2E zD3$v;LG||oYrmP&c6}+ee;nL4e@w+Ir z^D}JXj~S17J|f6lDedQF*H)gvQ2oT+q9h(tYIw>eauB()v>= zwL1@`ev~Nn>nZe&&vdZmJ z^=E%d^Z3Hh|9+IpucK7&ea4}^(dgOV&XoGKP|!byQh)cRw7=fe8|O_a9p7|H+c#71 zJe~noZ(p!}|3YazFGp^FCs1mC0CL-nqSXJEU}pkYKXwUrhEQtf=+N%-p!X4ap4WDx zbUxmvbbnl%ddK@ISo>>)_9sy~|9b}cGhp|jS166ggUB7vpTPRF8>N2lL+O01LcQZY zjM6-~g3|FUKy_LcGw-#7`HUr!L zwUqYvFs1TuDUI`4q1|js{n(yTd&g56hjq|%9K$H>w;yuL{*>DN5V`IC3|8-PO6P4m z<^opRtt2aUt}q|BQZ& zU$3CQ0j2#c8T7WIL^b&iCHKD%(KoNoLvH?dqja86qV)V(q}2ZWLB3_clPT@L8^&z6 zd#Hb&(m35sX`KESn)V#{bQ8Q!v~c5bvUK*dx4UFHS=TFvXlSpXMalV_}L-b_n_4Nk;wJ$XG;C^ z_XQl+D`5M3CzPL4>YtzO)&FO}#_u*t=i>%Ss*>;MH(rl|_0P}7+Ro3Es{bo;{asvT zmPf~+(vo8=DKIii+`t`gW9NwRaR+5~cPDO)Z7e zu;%)<_CjMK(bycqU~6J~p){^km|Q3oS{n*O>N^Tkiltdq(y8^WQ*yTEUfZ=%n>V#i zDf`kz`&bRSsPyA@jtLrR54#@)G%veYkU3V!kGGwrs;*zg^sDk z#`fCL^`-Wy_04G%hL-AQU~lKbq(SX%V+tK3i|rlYafMP#Qxefph3SRnxzr8n=qNQ! z>g*`Yr9O#cdv$d4I1C|COtps=+8atuZ5>Qz+5C`V>*S^>oh61*Y-PBGQfqy4Z7LmB zDiuq$t&@v&4O0s(g}OqA{ts)0Z|&$xHl*0xTxihJ#8OjT%GH*d#u1gQVQph;FfpjD zjX)+n2ixs~>)T^L?W2nIjbXOKSfW;4{dDbBq+;URko*)^Hmayf(>iIA??!P&K!(k1 zC?xT!kVZFB;Vv!BLyHZa#$;$yGWhz^tT6cCLTwi#9akz&Z)z-*Laf6KRJE(@Hd$M> zQ(B89VwCh0?UPgOP3;{+iY;wqDwC5=ReNn@VsCYY()6Z=!l+_Hee>|9=5nlK{h0ce z!cO(gorSbA-$}WuvhUbKIis>5X6$G3eqiH|Z zaaPw>Xh2v!0Jo#MF5?v4ukfL+!b()hFCem~qcAguw;dnb3Z)KmGfn)6vsGJNQ`^q2 z-Z-|kc~*HLRI7|Bb__3ewl>aHA(_?cR*7)#{q9^UwoaKatF6$L)nwJ=3?_I^Te-m3 zu~{@1Ce%-<%-no>hL9xrk<3G0Fr>LDx2A%T;6d2R=IB4}lBu0!yxFc7y*IjrQpF-K z+skdsWm()^D_R79Vg|<2M2LLmT~{rWL34fLLRD96m{#a$PX}DaRd8&wBesw1=x7_o zrc-Dwlrq&c<;u9s3~4U1vv<^Ybhc-*D&^#QQ?4z~eOWS^g9vNT#3;+g7a9s&fX5fw z*+|M#J1UIk{E;jHH|F-XVtbQUrXbNsPAYWSw~sC~Hr1EW1eQ-OO=?^0o)bYk=agZs z4aG(>Yjk~6^PuMB!r4*Ssi`od0%W0Q`PVm0^)lhqWGLe@-BC@g(+Z6Ys@Pd#x2`~$ zR?>50V~Mcj*sOkNp_$N>X0b+_CWi}cm^}4EIAzC`nu;a%wYoxUqZg6pLPyn=x21!9 zGc}hUcItAH;l)x*eTR~;RN%_fr+7GhIG%>4HkZ;L)wNet4r*v%behPHP1!zLAyz3( zup!090{J|nSeoYPMc7YEnQp~Rh4v`PdP*(<$;mCp)NTi#?%ROo66D~m~h$t_w1 z$l7PoP0y2FlFCPn82Hik-2dE*^p!t9 zbRqJVwbxR;!EDuT{h$k(yt;v5d)WXnp5 zJ|sg5mebgdZB6c^lH*-F=f-g3pGF{+GF!#;Qj_9b;;|A!$5lRtyR>n|rq+%$zC1@s z@4CInh07LfSl{_d?+PY26&lAiHB94Pr>TTCPg0^va=;6KDM@E3c`A?zgNqeG%BHVE zoMlzDLd;0y6FZWdrszVUq0_TQE{(Y}>?jrLTXG^U*vYcQ!El*Q;20hY@d&1aqofV$ z+QY+`G{W7+or~3qZ?A++&rniVOlbOIgPqPc!CiX z=pyu$o{iHZa(QP98|3i%mZs)ewPRUZ9qb&QKx)TT`OYzJN}-f)gXN263b~SPRwW8k zoA#}xVneYx?It33?$lrAq>wt6yWE5gcMf?fNdF(yKC88%y!(6n8%I#M1&EWC3_3m4 zrPru5veAW{mGZ?jl_fKhvcsF}d5V}=N_|SEGB5Dxo#MKwogIzE8LcUDgkBGl8!(u7 zzmc55Tbeq2N)d+1l^|7vskkX%9+DyDB2!!aEUz;0!jh{Lrq8?DyAq~zP%K%;F?zo= z!HUIcOl{;&oV+~5R%UOgXZal!3D0M zIP@6o8?U(zh z2>;B4iB~!{>W=cEI=P<Yxag*4q*!U{@37pY%e!C2e88fU6y$Lxn;r<)I3X{%3lx;!j*UFm_@ znw_~QvR`y@^F5bZ8xCcwZ00#RmkF*eUAF!smAr|e^&RzpXkbnSn@?=}zw|$Mg{=9U zro*jP+IY_Dtf{+6mu{y`=d8|}rU$Y=Xxx>8&0|POwJ9#jF7E#RNG0>&4-BO4ccox+ z60W>N@_f2`AQ>4REyfEEqAYjIPf#kP0@p5OSh@+9ZYZ$f7?Sgctx~_@u zD5Ckgi6njjC9#3QKrMbA3}w`_NgfoT?he7nxuMIF~%@W$jj1Rb7_nyb`c` zWUsmAtgg6!2%AcBAx%%+*;Sy6x~cWtGc~&}xdJQD4hZMk*&J7^)Cso}yydwacOJnn zZz>y-^FJ|&PpujXt@S*%%XyT!IiWbM&>CDy&QLjAd1WYPQElsV569V_T(0qu9nPOV zoMVJj3WJ(?J=@eVwIy-4scmYZR3RE!-#)cMFvNp7tEIke>a1Nh?K>cMDQXAzkzn>zu?p#T^ROo%B<4IP(!(pCax!+j@p=|PPf(o#iA=tx&em0iUCD&tkw$%0kK1SKyujg^;+4#fCxiu>H3wVB*F%O_|!kBZUA{rSUvC%S4@xO&t}Icp%J_2SuIqQyXKG zB#mmBtC=&r7is04MSb%K-*RQQ9Xqp;6lb*8wzhS4@B+W3g%8B=*$*DLBu57J%J;!G`(H`FK^6I#8a8t)l$zz=U{ldeaoSv8Ek+UY1 zni{h=@3qM*pIMn!IHA;zE%CyUpR(#Xy)!GLE<1asnpEWcG{&_V&fLyqHkmNBL<-=0 zc|#doUn+6g8ppluxT$EA&qJXiZBdq%v$-pI$l{&ro5E-3#`9pA2i)QIo^FSiSX92T zba5qbuZleAP3~S-Ck> zX_9*79gak9ZLBXfj%_Z4kHMurc)9jNW#vf4-7z`XkdoAy zAgFdoXM0B)j(9szJ9Zq4sa;?B?A^2ipEgV0WNS8k2$`5n*zjO5yJbmxpR+DZSX#|1 zt91XYg4JfqdKGUALnC}lIcF#1=Hih`6;;upj$#{E15+YC4$84^Z#kGeW@XZNq!ON& zkJzn=2Xth5OE~V^PkCa}eV9AuzOyUPZ z(k@e(ryGt`j^598BzLQ&p-uICpe}jkpBw;ij5nX&=Xg&syi{yaJfw)5oSDo13@&n4 zS|2_W>k%2q6CppVk$xg(NRb^eeU=rT{|zln>YOsXxwCz0a_c*&y`5V;KN#U5BlRY6 ziR(roVQMFraqZ+<BoHY|Ca}y3KQkBEQ@4CmkCJzOFB;;XJ=4f5|lcTu!-4}3n8ok*#@78!$bdsPyJ5W zPyKM-r_qu8=gkVUUT>^ww4cIcf` zlAfTukjJz9oK+P*&kx4Udbg{LG z`Q$>})$S8Fsq{F@XsTWi&nbx?V4r)9v7fUx`Z=m;a=`<_oEl*_nX>{(_+0rP)umJU zhZEUblOY}O(UXMrLNh-3Z3nNl$>*(; z`wB9rX-aE)X)nJ7EPo(7oN_$YpyG$Hy~pJ`gyn{5VMDKIjQ8pD&bZ3b4hp5@gYlfk z?2bFhId3*=V_mB0>zOV@{iJScDQG|J2IWEaV5YPp1k$4=#iSY{Hh zVv`u1^!QcQsn{n3xo9W*UsDwAO2V=k)H2D>WLMtI4=R=F zIW>mYP|2r+Ow8RQVyJaDXWMI|1Dr9PUO37wn|wY}$V>!5U1ysgCkV-zem;&JK46nG+}mZQN<8YV zv^C2&^&vPzJc2iuW1NE_81XDvc7>IlIhqYWUGV7{vs#*&FF(CY)su?YQC3%WE}68M zVRXc`%@4yBvfo82M>5A`cR+C~%9~3LJSMkyi(xVeM*KiiU@8{L5N^dgOFY(^T+G5& zevrd%6fXXr-;*Z|6>rp&{hyljaZ)*oDyO31O@-!cL(Syr2W7fwkX9rs*HazWgR)z+ zP6T5oPi`;xp%b=Ro>%YzoTip~KG#>q$#1Sz#x?u3uyCA9XDyyGf-p?N9LkjoFa{<6 z5F~Ef*@(hbagGd&n(QIT6(Kp;?9|lWl>YkK|E0RhzR$(0M20Lems?=|HVv;fJdS1B zMPA3|f?IU?mUDS%215p?%emY@Te*7x82VsBLNK%r!61UF{fN?iGwlxT2=Gjwe**gG!Q?m5U_2xpEO_9;Oc_W6aZl zGzQHIsR8nqf*q{n^3J>oHyZK&Bh4U2w((}=Sp)U&mq(jzl0(z|bVPC`o62t|7CXKE zc4RLF!t+$Kko_w8ZQ$}@zjk~*(W~Vba>>YrHVT89wk)b!>4aIENuvR=T46p?UI40PA?I^q=UeD|ubAuXo?VEt^s!sU}o z;z*wRrnj}xU+;fQQ|vvabvd5N$HSXBo2G9z%b8iV%*J#!^V?0iJ$D=rNxb2R26d=x z6yY2nU^CiX$wS1Wo$3kdO5RnIcuyL-Np{i1R;;LMl!YetkV&$Mq|R)ND&+z4oF;j% zn-er}>z#Z~cu@Ac{`u)H-$|51jHFa(Prv#?xAQo7%L}ve#*_8c*_s_!E050TcU2Xv z)eX)cFyk+Wn1L0Enf_jL+0ClNU_a=npP4*)@N!+pm94DmJ;S8pOt+-;pjP&IjvAMh zRBjvZJCbbAeJY?rDYHk@IAN@>Fi*+m+=aNyX2nE1S?TctJF#--7Us5YVQ%lH%()WOorwYr-c5PMip@rmDGY`Tm z6&3u#j`Su=3(0jjnhqd;i=a+=v`>4dHD^HIA;w1OcE?LKJ_E$-{)a_&F-(a$dR`F}Zm3rKJH1I~VzSE~^D&%0^ zjbtO@Qy=4akJ`eUwhyOmOTgb@~f%b{KBJ zl8vi!5b?Jgx|;G>mmaFB+QoB2m*VM3M8YEmL4E+kd=r-bVnXueK{}YE%3S8EvWGmX zuv*T^ia;cH$a66~f?qAGQ0_9lxm2V{SD`wpeiBd8`0ayS*8BcCo8I&M&ITTRXCOC zr@u56m9t^x2U*=}?BvQ=sasB;XeuYDZeI>X?uxFBvOLAj$@?W;~Cf1VwGFjG*2j%>0x}+wAG2uD4^L8M|4(A1yUsRWV%UPiW z!@uyD1ddN6@%1C+(EGJ%BO6wzdb_Xpps{c%oyG5FLHSNjEy{_%?6wn)F!@k#KK1JW;&l-~yhzufUGY(BeA`bCg0fIIkROXV~9 z^36lw{lZE4-nq8pko$#^M6d5vM-WC}Uw!TG z3BPjSXXg4n65cP@ROd3r#lK{{XTs>4W4{jGc*=jWWBO&9`hPZU{Q^(hUX!!GEOX=+ zZsJ1CB`B!VAN{YG7i~I^tMb>#^lfeE)|^gXzVTFl{F3bp`8H3#$n_QIPWUwg|2Dki zRX!}IzZ<-A+fIk?7Wm`%R!_eebUylh1V82Vc~|D$FA{wg`9S!U0{;Ozaa^Ba$1erl zh`}t0!+sH{{Lkn(r`lO;%k&FKifmaljbLPeMVT9pldEtE2wUd^4(Fo@>92$o-;JL=@w`PCoi_a5fmFLZU@ z$Fmlk-&dg_B#HhECvV5Y6Y7NjJ7d>pbGR?DGWTqIM6Wa-US=#CqvKo{pQT5pf81_5 zxGy}RPX16>E&R%XZ-Cbyb*96+zT{7Y*B|+d;c+|R|DDr$6~1SX{|awTs_!5CHs9p? z!!IBBT6p85e0O-qDDNNej=mk1(>Wd9d{E~Cc*iU6AMo}M&B%Wl$&r&xW^OeK-xB=;!6|(fMo7%hrKF*PUXglV~^YH%h19iTFkMp(Ys4PA!z{jy{2p{um5PWRAC;Xzp z&Q$nl|4{gtOP9cJ5Og+T?CLxAr;$hdAHc_)TyS){o|2fr$9@OG$FYxrk1?MNA7ga@ ze2n2K@G)+e=Hz$4cMJYJ3?F@X13u>bPdR?MG1)x!g^&IW$?-eE$C$Lk$M_!xzeMQk z6!_@#mGIHGyWnFEJOv+pm}hJzUj{zP`{ekKayCaI?;iS^3LoQHyH*-=|Ioo_Yp4F) zj^4#vrg3``{&skCK>k^H^H%Cv>3PF`d%`b5DSr`t>8E}D3tm6vUxHsb@L$0@ z7s}VCZS;Rzc>B`M%LCHBlfa?zFxZ5`Nsf$fHxnWg+7FLjPj4Ilg6q$I!$Y*bL6}n0pE@CMQCX@MtQG6dxvYH z*Es)(gmQhmo`5e0|0?t#ynCtqc3f{<7xM4qbXFsn#!&f0bR4hzKJezDd=D7M_zJW& zd_0rX=j8jasO{Hl(^TRR=V)Je`!y!rSnSJC`o|B}fL|=|=MpP(z*rrI@`CV=>lk=r zC4UyYv68jLb9++i!-@38 zv?TVwr#yb4xbB+awIlx&c9wwG&jUA2$KoHdnhNiD)%g*dF%Bzi zlg_LCzD8Spv+e2VJ9hQ2fbS9bN8#Dx68UHF=7~B#!7m^9?XVf=dP#gUp6aX(-!t&z z(TTaS7V$CvU9+b!*ZO9xx|2(e<#uR))}VHbc{6Qe+}305$h(dn!U0SqbG;^sp-ty~ zIDEIj_l4I_!GbGjR6@UM&l%JHd zdmj8U=-7vU=*YF1!0JQVnI;1>ydx_{W>>LB-z_%?eyb6x&yd~iQChCk-wv(UELI_VA{*Z=GIub=w=F}!1!|2ik14bSis`SKg3eW|lH zyz!AA03YM9BfRTGc{6-$dl-C=Aio4Y#_;x>&Z2$NoU`rkxv}g@(yLEsYPMlLbf??} zI(9_r^PTX0b7P#nTI!qn$B{_-=CyEjc-PO%(8ciXS<1h|N!Qz@@U__K0q@)$&E98h z-TN-3U+35RuA|1L@t+Ppm$u5cd^m%)h!TH3#ChZ99z7GeI@(-; zwp1l;FU-lWfsa01g|hSL8hjAmSjnGC%pHp{zXIM|k}r^-3sJfsjqaWL_CEUGjZ1a( z^9^{qNcw#-x9%Q=*EiSTohZ0|^>Y+{%G>tmv1uH<_nr;!*yZv>dT@ojwZ< zVeZs%?q;A9bN(p!xc`2Ej`4gOokK_rV`9$ylmC=EmV-A-?YKvu1g}5x7w6<>;d9J^ z&FM({!=Yy}$k3Ab4__&5>$pBbpDivK zXYP!fbA4HEPH%yaIj}r!qtEvvw_o+Y#b=XO!O#tq}O*kxym3_T?Y0dlrA33;p>FUVr3oAeTskB(ENY zckaxwci@eK{1E)s&(*PWZ7x=i!#nTB?T4JrHJH#ikLwVVm~Wfp;xo^7seOHTfwf@1 zElxknBX_*Yf6C3#jp#6y$seWs5#L-R`ZmwznV-wU8*}Ar!gmXNKX}5P$baaU_T^b> z(f+Cb@~gw+c5=oVi@v;eHbHJ%b#{bbJ@Cbx{Fhw(2j=3x82%eW=cRy6b3>a8jZf#x ze7HbAkQ>9^j6LSeEjgP#b2k5%lkb_6&rf`eoB6y9yknOiPG2$iX5d5ILypVw{pr{F zGUn$aH_rO`W^R6OMeaN*zaM_tzz?OZHf_5gYRbjszLwP z-f3U%12-U#`VYZ7@7jC~eucm{ps)X<@cEmZ&LRUd{ZDf1@dtSAxHh}>P0tMS7cee! zz;UfX+nDEla{N|#9zA1aZk)M(dVcUa{x9Neo~%v1fBevKZI5rY1GDo(|25LJOp4U3 zPFu%l+kMc9aae}jU`ZzX(ud>>)d@cXWdiaUs@!fM>qwn9bNu2sX21G* zIGviq@~1Lr_qrFM#qiA-+V*33=T!b%>_q-I8rs(@&^$~^lwXIb+X@{h#nr(<7qi)@ct0baTKmxc8^9Nl$t@~O<1Hr+Rt zrC-9B_^>$1>DtleEd$eBwXc7{8(aA&;hhWlPvE0`K+cEXkUQ7v3`cIB=+7j0<1fGL zpmZM9nSoq=ZjvfjeZwGX1~4RO!gyUrpCUJx)R_(M zwMKr`!D+1I*TY~BO79taGuP&lbKM7>*w-NV?#R?{!#8uoIDZUpZtLfF@cJpgCc-H1 z3**?8FHB-Mu2-P8-s#@!zPCQPXU;em^@Fo<&4iD+bS!-IXNhrX9(qn*7T&ST-#a#q zq5O&1XE=$?ZSl?6`n=$Dbez-a(0SO5^ZR)Jv@iG18{mzD{0ZbCPid3!n2XoY#yVr+ zkGbg2BDuJ9$LVg!9A}@t>Dq9QzJ#1JM;&J!3eJc7MH@UzF5xd^kdDW_=3)AZxwQ%N zDxd6+@Xo9JHVo4J$T`~u-kgwMmGK)dx~+KyWotk|2M;VM2SCZB2=zFCH!Ml{ePHP>9etF z!Ju}FoFeQ8oy!y%~z{lJ;3O?rHU*WZ*&iU}hS^g0QwKTlXP(CIm3&1DtTYhKJ)yxusLtKjuV{#JO`ul!T+=8XLR;Fk*g z*E#*!IsN7PWplLZkleljZ*DlhV{`H;Ir*XRj!T`h;T@O!t?@p{DL)-v z-{c?5?K7_sL)#j|r%^WFT!U}G8z1@W=+yZ&SKq^a-0OZI`OW`Vq1iC%yHPF11Zh)# zCm7|gKtFRHb?#gvC$iR@FR!V;VRLDCeXB!mTi4(dY_{gc?NA@&j#v2-L(?2qzc0M{ z@{f}P&adlwF!DIw@$l}$>Rd`3VqdqwJ1*t_8k_p#HR*kL<0jv8T&g3#HN0by9|>KQlW8QAgSRAjPA$qP? z>JKV4@538s`3K;cf`tDOUjLPE%>d~lIS*}4aMai4sq3Zo-Fwf0H$L*W!aElE-^oMc zBfki8^HzRMc$PrIxA#l;6Ma4l{cgy;ms^{8u`lOkDEj(l+d6ptk#Ek~JQ{w{AitA1 zm}A%%X7a&J{T<2` z1OE%9eJNj>KJ-(5J$U0OzZHDc*)gZH54?S;^C268{+ka=fweFH9kDRZ@&}Os=92sr z_^4B)ZPfXG!E`L@+&47aGv{Ry8BgUuqVL${mqWit;5UU|Iq>V?Lp-OMb5Z^rI>y1a zW8s~5`K7TR{qF%E^|ylW6?FE5k9{2kAMN}V-rUg6jqp7K{{nop*+O5&R-N~dNBjTH z`F0)i+2|Ns^^c@&9PbIlEy`adKI*$Rmq8xK`zQ%)UU@$-E5}cPH-D5*%<+f8 zo5RXahPN;ItKmKW$iGWN+v?lL$el;!&%xWT{3|E`6P@qjjhp&E=JZ!1XbdM=kE;*_ z`!!dakh>?iPJ89}TKMikz7hjhUz-Oaw=eZ~r=f9>KRPF09NrvO{w+G@oBU}x`6ckq zk@7+KBdoxIQc;)imbhwYnpVm9|`AF=q z)F;hz&mL>$_>FV?y+QwW+J8vU;@Y_gKF;-r#Kf_Cof=INx)0E0%?|i%zsfJipLo4~ zVvE#I_m(#HE@R?*j@OWzSIWl?OXXkDb`5k$t>jtc+VI+ZL0T`ByQi(wFO@r%PkW?u zmBmi}mHmgm3cU)c5B=>a^pY_SBAPTlbHvdS`QY9=tlv z;}hh7F);`3r6b3s4=*5(`S~((W2pQs_-=upJtAFGcY;TeFm#zbW4&~2%G>X%#Kc@O zCX?~sdDs8F*Gc>G`ZyEb{ZoEJc>S^M#>|Uzs{T-T{gEFFZ=TB^Gd|_jUlLjXx$n7; zp^hOWaX1g&aTyce%NZ;6mxEX)iT-@U(zRwhmkN34HOr0BzLGQQ@HGDFEQh{rKKK}~m*Jf=b>4-KZNJFz zdt*djeTMNCgEw~0>tk#LabIY_>2Ao~Bl@x)jMod$5XPYVNoXp(*Gu`o!0Utj>G0hH zKVXye+T(h=8M)(9XO&*r+UO781DWgO_nzrqEPp@x?rZ9QgP$?~eudXhef}($XV0T= z4Ap-p$A6vUm+hA3kU6>`{F>;>w_wnDa?d>~$3IVAn$zBE`I!V`Wqv$LB6|HWK3Bne zU6h|6VU)j@li!cfYp^;O!8>00Aa$ln6*zAs;Zk8RI^kM@tCPX1NsGUQ9ew!|f#nVx`mEXLkmhZ%2ZO%uZAFP%7?DN;@z0;ie3pTc4Jx4#? z>&&b5v408sf_{2V{erz-xw)sV%aUn zIsNzG^;!7<_~_d&@UiXqoX^MMk3Q?qme2x_F<+Y4s&8!f=$+-;rt7A1ug%vGbM;+o zcfy;K@;AcMUBcfF?--TuLBC8#GT!O%{7d*pNH*i?_4pcib>z1tXzIuh@0sS6{CwTh zn8>dIAN2?1_~p=FDYWeq_}$Sz5BtXRJ7_xk`l+3R;FZgt1Rrf)nd5(jcRi{zCCAsn zJ73Co&-uIpN!a{O7HUuAz{08Vo=q6}E=wfVcO8pm5f7%X&217%k5zwc|mqG6U^bUqU2s#it z2HFPsb;vh{A3%8(bS-o~^bqtObSHI>LaRX6p??uHA9m-r4}9uPxiKZ%Q_aulUxwZ= zbQT7$1Ku3+^OC>GQ}ly70<7w8S@ z?xpmz<1NrWP!rS$6`@wB9cqS3&<*I{hyIO}w?IEZTR}G=bG`lyZA%|tBD)pYMzlE_ z{22UTWFw*NpzEOL(R~iO5dK~0edr@-FZAo7M`-gD^dIP1=q2bA=nLpM^qz-afCgY= zOXy~3HnbXT2SWw)icmXrDD*bEOHlp!deF3x?{CfD=NZYfZ>!42LN27Nf<)0}% zkKaN09(DhQ?*YFOZI*_Xf!;#C0lL3KXHoZeXcBtOPz%%s?F$_Mxeu-f^@ToxK7~Gm zzJ+|2IRf%?i>Ffh*~iPFtDt{CS401VZh_XPkN(gV(C66Q5gHF22aTkDb8L)+CScd! z9~cA;gFXa*1Z{}UQM7#${U;#z`T4=!DQ8jc5B&xCL+CvW^#N}PZ4C8;Hi0&Uwu0ux z?q4Z4fR0A@7-&oQZJ^7cYoJ%4H=sA6hq3z@^c%D)GzHn|(6-RA;BBFYphuuzphK~D zAv7J@4r+y7N4^}sdJXWra2IXwhVFspr*1cV+7sFf+8e5eCP7o6sZblV2hNbH~I|HC?p+m57D0CQP-knbwbHiM4-p3>N`RzDpEHnnH zgC;O^@~ED>HAT4CN?(1#*vi&r2b~g zAE8OqJqO+iJ?*amZH(-1)NP8s_iI;Ee-q^oP)}%Q@c*ms{n%RqdWm)$WA9bk8teV& zV+YDTD2?S4$UlTWf=}6@WW&H; zp|h85q4kjuhW-cLhWrZX8t7u^FlcM^PljHE=0m>@IvhG0ItkhW|F?o_p(6TYk-dg3 z&qaOV_l7or9|FAtZH?YIWN*M5uT{X~DLKB@ybCRcjn$~10UZTxL;WO5#L0Pn8T|2^0BqVGz~SQ{M>f0g0XCp7hm|axl~ly&I{pz5q>zra;r64rms1DYO=C7D4xJ z_5VQmIZ|GO(H|Te0A@ml87KN6C%!NNe%R{R}YeMTleV~ERAgBZ_ zgilLCe}WpJW@tJz13CeE9GVR+h%bxkAJhQ71$_;D3w5LZHt134M`$TzZ$jr|e{pCH zXif03l;1$+vgd_;AY zXj6UN@|xuJrx$%}1$iC02f7#Xn&EZAYe3xF-OC@Rjr()ln;)PaQF%OGW1c|fxhFry z|F7eV*W~{{$2OI5xYx8Yz#>$FyiRO_Y#vIglXWp~;5#YbM8-5F_vpP~4kR8ILa(4q zk<9fKFt1kO5drt5+=zOwOPEWpUq>SI`sH;>nb)(UAg^Z+Li|f)U&6SjS?8JZYRER8 z3l~G)9qIv1!+t#Xc@8@sdI<6i=2^-!(;r>yw#9~Lo)6H!pYnZZH~M-SdI?$#`<_D% zhR%h$BYO)P4!Io!pVv?R)m#Zb1m+*;o`TL=loaJ__v_$Qz+TV( z4gUbN1#LEgy3uYSXc1^h=)cshL*p+g`B$?UI*TDc69Ai>1MY^A_dKvmkjozg@BGIz z!auMR$81b(QwMqGmcN$&x>M?_zO4c6gN++0-CLc59+2_h4{{H8-I-IiKa^6E_Z-rP zdj8eSgZYeH`Zb2~WANwDBjE2)@ZQ5S z{5{A#w|iFijPCjTkNoibPm`Jn=uL)phU{+_N}rXBIsrNjx&XQix)Qn?x(2!%(jWUBz&O_o{Fd-%Q=xoo z_)lRx3*`4~?={?;&w<=u-$ci}_#3=+|1W1vb?w6(_F5os+j$}L&U+d6_POop?&t31 zOWB4po+TEdjkY{j3=FpPr>i};`dTt5*otG@0jw?0&7Z>hk83*Glz_^S$u*LDq@4qayO2^_}Bk&;khiL#t4~ zDzqB3A^q zFeJ&sR(`_v_tzI(+?| zbB250TkEZLd!2o{{#Cnn?b@{~baj8-YnI{f6L!2ci(|0kuH)@9#L4Tmq1Su-4IECy zUkU67nYIMyeIWHRZ2UpcaggQx9HzZFJ68XK@XOGzpx47s^uSvDTNnB!ar_PJPT1>B z!xK2Gk74yuuME#304&D(1313|Hf>e@U0Cw1O;|mQUypz4fk_IT>iWDunzC|UQD<@L z>zTho_tQAP0XhOY5;_VR1C52oLo=Wgp_$Mu=v3%*=)KVS&f}c9fcnPs0V3!yNEx2f0 z!Wh3k;SD$&o&fVgoRxC`@rI2*gfOCt@KJ=9DZ?iacDqBKvufdwqQla}tqC28`?`eL z1iBdo?B??S9iHVm-wkcCL@ZA)B77)ek_!DVM`r49Ir=M8{ZBwo>!O}F60bhSUk!iC zzl(Ta5q}?H#1`R42rFOyrwFIamkDb(`?x8=~y%XM|z7iRUBX9hgVk>>#vvmLG1_Xt}T z!*5+YWUBw_2si$5=zB1yop*wVzrqgB5U-xQLVFWwS?2w1E&e!kR*w3+e0RyB%pGCY zhn)uh2|s^D-e=KAnd;|yaMpKG7}Q_+ZzU|hc~7Y2_0a*US@0ZE%R7z8rHQxhr`N(4 z)@(8w{*-?O@#-f3b%ZU;@IgdccXjvz@#<#$c?(u!h?lL78`g1C>Yg^-5^TJF=yr|a zO`r!5uAF*q^H;>5 zK*08uXK%=O^%(^%Q-;?-AM0>`9tj_ZM zfpFUMMTE$&{E>u}Z}>P!e)YMN`dSz3`)Wr@Ehg}ewQyULDW+@8xwCI zH2!=@dm4XE%?=k5&NjM=@RFok$5Ro$0B3D`6Y=V1{JV*#iHrCb$A<_f&r^ie zU!IpB>t%Qs?C?g;+TkydHZgv2;xq3Q!YT7)!s;oH+m7mH*e!*WX*oGo+*srH^47BC zcN;l<-pk*V`7gq$!*aB>z9GN2>WqIJS_>m+b8Y2TYRs8gh!CBpFDz{)n7Y% z8MO*$Wo}1!wK9AX0+pj47h`k&3Oip(z&LF_1!dI7@GZn=TReq)nE+rs2Z~ zuT_Shg%AlvV!kae{$?h3hWcnS0+$gz10^mRzvY!AH+S|8dFng-nk?E!rg`Zn|+ z^bqtN=m2O7=q%{{(8r;xATR4b1AP{H9@+~!2zmmtKduP5u5|2O71|Qo3fc~OGjt4e z95fa>6?zx+Ug*QnM$j72TF~0i2GGXPj?hlffzSkK26Q4c6FM3C0CXYrA?PE}7ohu~ zpFux|4uj@{^s~v3ZFMN5&+iP`j@o8^=pE2(Nc%4YeFOR-Gzyvyoe$|7^4I)(I@_k#9POupl6`;QuV}ziol9EWgr1XD$854R$#A)Tv{pPw|W6ezj!B zWBGW|=y7~#;@I8Zax`C(n8@eUM)>W_StB+$<;~k}c=X(_tBlxX)~xYU$4udSaYyer zdF;&Tv!+j&ee_5_zs4sYPdIwh{r5PeLMLs#>9(70addn=W7FMdjy{>M;%z!^%9NWH zTX_C0wp;&>ZGL^$l7}5}@sZb@F?yw=Z#(#gcdxkc&2I?ylAG@iO`A z#?7AT=H1NQ=kSH_Q_4?k6ls1XZESo+ln-l6oIGt-d7As7lTm!CEx&L$YBZlB^Rp*K z;9x(fXUxIHw>E0Qf@S9TllWGy*|plJ5~^UOP@zM7QM;vT0e7E1w)i|psj46Im{NSP zy(c0{L^j%tpREaI&DF8mo2;o=i&Q1Q8I!`Rr2JxIZhV%-`sJiruryT>Gk52-LUX^D z8BH^4{LI{%+) zv!{-p;pd?#cKXa+#vRXhL+7WX6{5=7W6Rxl zA3bZ*Zlh;JtI4y=Ouo-X%&t@TByVB+GBkAzpAn1?&hh!HS$ynn+Qb$-a1Nhp_U;s| z!#CV!`-$7JRP;}yh8L!KQ$EkB?lr~H8$@tkF zeA=rp!}wXdB9M>vjZ3SxvCYC5(~d5`Ltc1G`EQyZQum9sMa#~$!fw-NoLac<+|PW) zAXBmnV)Cg)#Agf3h}296j;=X|4?_B3GW}t0zoG|>-Fqy(7ea?nrr_U`FP=@BGj+_g z(UYfC0wOeRGGB(9KC=LGbG?1q^planSVj}_H>+sg;@?~zx*zMWiGGHx4Ahcr)`O<| zp~R6>CeP3bTt`WBnGT-Lr|gS1h+(~KjsQj3vm&g4%Ai#%gKAaIE79t6ouJ6eSL~~4)H~!6KiN(^~whg%Zb?J$d$= z+2a}iXYxTlR$H!4f+b3-hl?RCA`an0np5%pK(@UT4<8sTY?94y{NB5>-eh>87I4h1 za_{Hjs_)L#J~!9;lHA<2gMDm@jWoBKd@<3rHDhD>G12s=xp{UQJ#FmxDRb8edSjIv zz&8qK`@wIfP6o)+;&X^|5rU&}tA#nAqMtmL5Buha_YQVz;8|}^%m+`a8^K5p6eB+6o z3dguY(iFH(g?l_ZPUafNSv{t(J2sl|3CNv}-x*FKJ^vH*45mvO1~flp1&XP^5I%u9v4@EoT%P3B>+ww?R)4o_loX}^;w`2FFIPNmm`PXsue@e$;dI+ zX@$HTcg5z2bFZeE;@BHJ6AF7Y$In?sOR3)^xU@vJT#QkZvE~@`nS+!`P}s|wIc8V= zD#~w;qH;&Sn^@MMKF8EkyV|LqJ`UZq>TEQagFdE-qIcIh>vK@Q_z753Uvw6$G>p(x z>K}Hfr{$P9t7wzxf%R}@AzP%L5;b#%YsQZwW;C-@mQ^3u>-onsw~nQq^_XmV{UUV8 zk)tVla@o$!SiQ~p+MK8GKhJusW3t{I+Jq-m9QxzE$FD;)G=ebdPhIb zw51-`UQy*bPI=8yz&RsR$KwkkCG?9=9=++*V(hHupOkYlZR#AKD|p9Fc&Q4)J^)Ufy9SXFKBs4e(wh_f#TLt{SSiHC-6GX@*fOs z304>NI}F+moaK3+aU?kHaWr@oSpCf}J`Qa8=06Ua2G+KgKL+wA_})VmkB80zTfTS_ zL2QJu4fXw2kLPidOEAfF~?cwoh$e&?%a{KP&^N%2Bc|U5{Sa*b z^!Os=s~XhbL;PoO$`dbuV%pFAw?qEaP=6DD30fPR_VYQC&1?K(e+r)c^G@){5}RK< zs^nMSFGK!BF6;jl@C2~^NB+AZ4}a>$UlDf?XMgIQI@}9B3#<*yBmOWrWqcLJJKk9Y&HeZoV$8F-}v1s(~u%{)v$td;IF!tz@m)6WH`{0G1v1zSE% zUp!~^8L;*B_zrXjIDJ6;4RDtKF!*V3wwd@vus-MUUFa|19CO5rFaTtI9sw@}P9GGn z*h*gwoPFN(O~5Hnyc3we;&_z*djQhD;!$AbTYvH4;I!9c;K|@@Kk>=nB{+MC&jx4x z#2>8X|33I?Fn`4%z7CN2#XkF=eNg<(TKW&bkAdye`iuDK8h#x7vob%y;+d%b1Y1A( zpMd@i&N1tU;N>yy(wsfSYlG9i;*G#rfAJ3B^at_YV0}S*iT4F(eSQQ!9K0ZB5Ao4p z{)$697LfKAPitYHw@&>`KM!nsdWf$8<1)n|{v?S1H%!-49-|mi{!j zuFua~{C@^#{gvk{mD4`rWiVc@QN$a8)80>kcLrzqVt<2^?IS)Coc`)FR8zoNpC5xy z17~^S3&8vphxlSZ+DCjnSbaRi_kpuNik~X^^$+o{z^U&~!2bg4&mQ7MaX!=K7yB9J zZ0~2l8-lf`>EfNh*}tC!9|Ru3*+V=Noc0!<4qnAX4)JB+)e02YXO5NcVfw>h{)$8F zbHZ7F@h`xszxWT}^at@@TIv4=r@c-0)6X<VNBk2of5q_v|6c;6{ltDsDC;l&8#w(zya0{6JZFy=pq0R> zuXsIhw!hfl!_={_-LIGLZza;c^6vw#>wgruUcRpNLyiO&LOeSQZ1c$rSHc;3`F?JK|iUR$jJ>2vzUB9P^2Q~Ra5+1`@<#=QEM zyxP^g)^`I)-VGt!a~o)7=nBaCegRqyat;^)JqfK2{RmnUa%{66&J)&8A5yMmP=!K< zI*o$VWfr8aCqb6`2xMKHYs{-G$vVon31t3LA?2S5DgSY31oU}G8>qW{t3u{`3nc$l zkn$dbEYCRgP&e~w8^hX68)-x3YXjxI0n%prigj8aQqPSb=5w zLzeRpq*Wf|U0S$oO?2`A0&= z9|tLC0%YAj16i*dA@#fovcAez-o}t}c7xWv-Y?g(r))d=066qoY9c>JrJ^-(;&+| zyTsdamhW`P_|HP}>ARNyPRRHvknO0CtH(}|dR+z?e;Z^uj_LBh2U5;1CBCD?YjQT< z){yzOgS6B3knOo6WVyRS>a{zhynP_+{dUN54u-7vB*=PCgRJ*QAoaT%vK?N4Ebq|r zydP)feh@O>-jIGU6;j@JAgQ$ov;V%6}eGkE0;V{{dv*cq^pc#zXq+#~|zRQ^v5mVW|ddw&AbZf8KtLm!4r|1_jNH$av%2eLljhP2Dckam7A zq@BME$#*lP+_NC{_&Oxt`%3&M=lP%uAoac&vixfy^WP3>=W8JK{vxCvKZb1QCm`kB z1=+68K-TN~koElzr2L;j=ATauRO0`C$8%e*yzp5oz4z`TdmgVoc*giCQ+As)e(VY3 zXa0Zqi1mD1bvLEMEHjy!kqy^~bk4XZ-l7xQksy2icN zaf~ss%kTZBvBOA@`xbfMYA9*mk@DFV@3+UjkZF`+oqF%Beebuo#k#cd{+ajU;(kwt>VB8^V=BJ5 z?_x_;aZ#&j)I6T#i94kA^!7cYDlP8)wQ+B`@nn#98NH{Oy4GX!&TKt3ELFwWV{F5? zKUu|l|JHVxMXI(-i`WC~8TN%rR`V{TQkpTzJEhPx(!7tJPt9a{m9w7Od=^3;pF#2- zw)axiF7D;_PYG{m^68=R3`+ZXE#+8W@7(G0a_V_;r_IzEi~-e?TKP0cU6UB4w1d*M zm%U;JGVS}5TBy47rypB)@9kH2wQW^z7^?92K%}N9)R6M_NIf+n=?|(CONKa0$J4JDWMGbmQ|$Fwbh)y!TphglAYY zH62}ejP{6UeH>5P_r|rA_0#e>zf8yC$HVJ$V!frs-PS3T5!SND#j_o@d3soQXFgq! zXQj2DL93@V>y;@J3fp^+_f%?R?Po*L9$oqcN9A9cC!fLS%9HJ@|7$%*fvAH%s4qL} zjGbG4rIXJJ&MG|B@nllbR$~hN)L3b4KW@)jZ5;a9e$k738czLYAU)I;TeVZtM$S;S{v>=MpWUhAD%(z?J!TiraydHKGjb&{mfG7A)qVPSs-)fi z5$h9!QSaW?@d+Y5SB~h%;b%UBVwz8r`b3B;mzbGslk7EGA!D;G>aAkQF@tESdP@6A z6g?s(sHIxz5&0}oSE?YyJF02KZoQ~Y=b?6=qNgKZoAvc(F?0* z*|J@`pJfT@`i(7R+cx>y@|&rSX_3o5p=ay$F$&mote@%4r%O+O*OhsU{;{gc+0a=e z`kOwhht96`uEDs{zR45wYNF#Q(U!E$Eg@R9iF$n`(w&#J=NQJ;=)LvPU!JJ*DTVY5 z>w96-_Ds{pKHC^0b&f1;j`~wO?X;YoGrq|?2fZBuw1#b?MtZT&3fe;TnmA%QlG~>C z>+t_r;TWD>`mN8J_Rf;#R&uNut6pk+ctQ1?bjCPZ_lQCU=tIjo@ImGLYX5K1x z`1$KvIbY=UpQTmvN0&DyNA+}kwgs2_qoMI$H@d2|eSPNBm12&Gt^sW`?b;n%%|Ne( zuRSs~%W#!yYiYx}Mj4-;SWk8R6KiwltiiR5bZ13ZNcM%4qzAe(2+ypq;ap|K7?SIX zdY-!1)}LmK)!Fd!>Bae6_2Bs?7n)SR0vJBGtH(<3x|~eu*D^j)9cx!@6sSEur{wUP zc;Y*Mw-FZw=1>Fhw8b*A7easw5!W-wAA;8+so=@&0AZybNY<>%t6Pb zycTL+uiKX0DgAu8m)q5%Gk{m$X^o+|`pK`)$0@BDr=`M=2J=7Xrd(C%bFmijdL!b~ z`~TmR(XWo7TdW+jj{23BjQK_X9bB{Knt0y4r|rYB-l=Ayd6Oo0^;?v#@m?>hbLC1k z>u#EHQS0ox{YRl$_^j6j_QLQvJuv3;_PpKX9n7Xp&f%7xE1vook@Xr(M%P%_&tDu@ zyt0|Mb}?7n0kGDwQcSP!ubHcNM>TtxSN4vU_GWd9Uxajz;b{l!-hb_rTzW)rUrf6V z&DGyh@f%X*H`hzC#!Javt<^7WsIvU!>0o}9a(hRlc73}!hAO|;E823qIp$sNaBA6G zR`*)N(Z&%k_g%U@qQ9TE^Y@n9Pus3~x8w5Hds?!cmiI7RRmI(zYL|U5-fATpSKxV1 zML(_9*>&kv4zIsmdC41B61^qa?;JbxH_KhRcbDl^nj=Hrh44Bpu61G^U5&0$b{$)u zqs&k#UHaDLILf$-rPlTM-aZj^sPowN*1;?NDpgy>@5Z7o?qxM+zSxy@Jc~Vx{2g!V z5Id83eQJsIm}nEdK;O+-tKPQ5%hB7m{qkue%bS<7+Ifa9t;^%1P3pDp^0ublT>nqd zHnF2t`9~#XI5nwwhSEG&73szG*3v_AO55?PF!tj&o$3SoG3)z1J8s zvNLb?sBQ_pd|hKlzr5|0j`i&3)%x{ucX)j6&Dz2<2C+e`r)^97YueV8)I>%k?|io3 z-4I&F-O%)by7#2jdTkT;(yMw5FITrkhc3U%X7LMdSK?l8xz6-D-I?2#&iTqVukKYv zed{q=$MIYK=ofYGH+T4r<4NAhsrKShUht$>SFzp&inWCIIgIz+0*?RfaF=E3yuJ0v zRA-y!DqGpno0|7QoL%dqg4Zlj^J-r&))cuHtEAy^b?IN_jOTXZ{&!PmGsO|fu^{x0 z+1*jWnND5fT>)MtxL(nUu@mR+QFXV_>xj5_;N75RIM(AaA6Iu@qRiOMsNSifrtP&& z^&COAwz}EZTvfWerPgUby{1CdnnnH?)%(rkDWSdx(Ys>k;;QzUhR1Io&mE+B&rw;y zyv}U4iZ*mM=vtwq&iy%?^Ih<(qx%%mbDFKv=BU4ur?(B&$rYDRX(%o3I>x-!mK&w@ z&USU1%_`(nJL~a0PVC0DSAJbjs;NblyS_?juMeA?y(`peC#9<$>!mc;qeE*I{HGLG z;@TwVil#;}es;ajqut+z(yuv_4ZmLf=YpoDLraViDDSI!#Wl5PXXlvMEz`Sm#u>a^ zx$F&&Ro;QsdiK)T?T8V#d9|vx^)V%Qx~=BAES^p>PlPRNaBexG{Mdh2x8daIU8RSv zRk?K!_Kt7#kGf_RN4uvtYv3JfpY>DMb}4mx*~i=S&tUw`dA`lr-;13utcN|^Hg)X# zpXDCf;%#k)*RtV{?uXTP3fj7MbH%eUmRq$`Ua`D(34^zE^o}t-*39^!TG)BI`#Ipc z#yNx7cFs}SC+8E_L9W*3mA|Wfx@1(ouWPpstq)QIhR zf~9{-r3u&n6LUw!>mA>yq|Lil0`W9Vjx)J3k<&TfT>6FWsVBx7Jjb+o&)c?WQ$oy< zu3{YphqFR_ZTSb+!mAZmvR*;H7CQ_#f0q`noPG0Jx2@Z$Z3)hJ`NpYy+BWA{dz{bU zrfqFeTej)}ag`RW?dm`uj`VSJ{atBZg@-rU6I=_l*EZ3&;yR%6%Jj&3s!uQ4hSjry z^U7ao?bWYO_e9_BwPC;XrWN(^>Y6H69rnu@F;B%J_EfJ~;)=oYeL5@qb-O3GaaW%X zo@g0Mvh|JA4^PE9dSg7>L^qv8>-Y>&9+#mj=CQ?J|3{&X|}hnpcli z8C|LN%Jyof%F!&@cC(GDbbEGqO+Jf~nm7v9cX<9w#=?zqbm`zY#kw}G8meEG)SrQOUX0&imV}G+s>E9NX(p~RnO1;+k^s+YgZN0W`eO;Ay&Dw{xUt2Eg(w^rWU1DUk zjU5NF#=ZXC)Au4*LN%O_c%VYXWO}c zYFbfg-RmpgsR@leqoQB zGFPvDoOQqJma5<9{%oD2X|Z0Ot{E%y4>npQPjfEM*si&3u(WP(tfVw+;m(=s8D~3t zM(&cuu9~}aUuVfk(Vx}ZwNcc_^`bpb z?24d%Uo)?3;+H-?tK0p%OXoCg;^-lddnzaKuAKCfxP~=F%VzqvebZwN(z*@)*!h**pAONWt3Pw#TM9+K%42cmR`TF)1D7g6ZN)NSMA^X zBvj0Y)S~mru4B6Z;}^yAqDlGrhSx zZJAZiY0l?^=c}#+lCS;@hjET#S~u2gu|8`0WiLl~Q&+revRt1jeRy~MyE&sz=9QTi zOh4+fUZ&NrhGR7vEmpNgHJ;cL^-||;XNBai?#cDWRO_y`CxnkydE+|BwNdCE}9WsJ<+&p93x^EXIB|9PgZ-_wx_<~{FJL1 z=N9EvEAOU%H#Nv#PB&w7q|Vsh>uyVlnxuDSZ!#s`T2g6XoTH&5M)R4Cb}eI7E2lm% zvltC6VJN=d)@(~^bF?MK{Xj=3Q>xZ%kDYl1($4RwY?@wZ&0}8g;w%lm9m>H_D9+_8sd6yw9rT5yta;UL6t7ix;w@P;ok+a*<-CFmyNVO_gPIK0+ z>Q(t`x7>WPr2ET2^_7`@v3e54rx=ttntJrk=XJjD*J@XBFq!>%Ej!)>Fr#R1arD?& zYq`dZ-_vy0GkC+7+k4?T&cqm&a)UQ(S(Vp}x2>zyUaso8Wpwd&#r2k@?=^+E@}*x4#ivZ?$=IpNyNGHwxL(>!%h!8yZw}Ya@jDbXkKG{K)w-DC zx$ZeRulJ6N`hJYr_J*!`yldySy_ehV&227Qpgt34uNfX+zcOO3)mOsv)K?4YYx;xv znpZgbWc`}j9KE}xIdVDoE33(qo|dy*TyMH_7i-Y)Dep>~v+5JxCkel_)q2b5PCTj$*mS>u2@U%3fy;y$0{qy*aK|mh9$EnQfb% z#Aw%EBU<9N^Hk!t#fqW%rj_~{-lwmfx%G~ir+v>ub>(a?$u*#Lj&+1j4fX%RUN2X7 z4^vk2Eeg$XGvw4)P+jRc-n(yO8`rguF*mOGVn%ho(1)U@7}vJ39_l(FMw99)FKiSg z2=V$BERtzV6|ZBgY@ zTcw8g^zQaloVk*(O0@=hrFZ-Ld4j*}2tI2Z*O}Hj#=hoTrzUsoO}2L{>lR6VT^eK8UORSMLe1(UXnp*TRh^y?68rHruf4muvwvl3*9?(q z_BF3~V$7(n3}PiUJg&hkQ^}7Rr@m%zz3KWp)(N&}eP=(syuQk4?=*V75OL{2=Bcm4 zdVMH!IDQV+TJc*s@7QPC#+(omo2#te*0xW%W0B{$lM&wLS79Ty8QW#WqieE}pPb{H{H}mMUNLohsDNUcu+eO5bw4jlDZbs{LPcc=Z=n)&}k*8SC@l>Bmjq?0V|TxzRrE6@||q zdAB(B$Lja>nyWTbVl@+<<`~?rdB3Ycchs8eV{^LB%clc+Ibsbt^m9G0J!iM)v^A~I z&{bKEh`9r2ztbAZ%jZ(K{y$!CkDU)&sJ@TbRdW6&B7HFZ);`-i(f2(%O>|MPMri~PM0#kuxA|L+!F!3lthqvpYc#K89m8A+*l*(gXIIVVWtZQ! z&bhC;vhBWhs(YiJr(SUtAHR5dt@+y{Tcv-Do6&MH_QVR*D`k63lt1*Gs@1$M$XPhX zy0B|VuaBYiaCH@AtS#e=UzgLq-f&0K{UQH%%?^N z%9t3xL%v?>Y;8TdT4i4HG+QEbR`{IcUY4c(n|v z%{`;xl+=~4KDWJg8SOhNuT@fvU&C#=uKH9Gy2hH}=;fGZf42Sfz2W3(`b@KBeA;6Y zzG&ZyEC1#-bley5y%*KWe5f&OIK0h~By;qxO)|yNEoVM;4s9G)98c{_uI#Nt{Hif} zqN~lyQuceF@{rdZORp_s2WzOga`-vg^=g-7>1ypMhc$aj_ZiZkl|NUkbJ7f_OKAqhQ=QiTf@7h9rBW*CgF<)@XBdl{_4ttVx@9xGQq=S$2NaK|hSA zNsM*Gam0)#k>h@4ueFuYyjL4}>(>y$qlZ=g7IFS}XR){c^-FK|wkB88H{$;K&>Y=$ za!fd-Xv+wNotzEp-kRgGr37EK$D3=v_+?A4UsrjWGj0{{wy|ZBenBb^liOWJ#Fb+GshmDS7}wRjP*+OoV3#OT0pO9kDmR~dt0x5 zpVBp`zM!YXIHa5|j`|v;na@ltM=T*-j@o`cLi;`RQCa!^UiSjv~_#`rJDb%{?+UsfvP?7 zHVzB)&g$|tNB5lXwSSeC*8s-ZFXH*I@Yr@t{d!biQhskff5YWohdcNEcwDVaq$Ru_ z>6KuNzf#GyxY+wsgL!McRc*V-;gv)_fo7Z<=M|CI61>*PXC}Miw1pm4{pP7Xvd&ws zUQJUA^>Jhf{d;5QO_NGm|9t&*iTl~P0<71tof0!$ctYwNSE%*tfVza<)UI)7_&NI5 z!Z|6fdbNh@N?TGtioIaR15=``DqV{??wY$j&o+5;?&{tEs&;uLCwK<nq;$;Dm^RKF|i*9YtM>*gM;_2aoBb+R97=jy(4+Y0s3rO8>ZOLsk*SBUX+ zXI=Al`fz-$oyQeq^tS40=-#WpcCFe{;+~;J1xW2wc2~>u1l3Z+?K6!45ucJ6Xs}+{)79enpV3QZN0_0E{Qv6 zaVM;4|8B0K>R7c>d#sEa#0tFk%A!hjAJDs{^%}Hm>zm7BC7V||_D$p5rFKsxX8wrN zFO7BP@@`FaSI$wdo5wYAyrai22L?}<$3%)d9F7HEFWReO&p!2dt@*S;Z-0sso6j?} zZ5=#a*Wy{1uC%VU4N1+`NE!CgsH;0O*4=fiR~J6z;9M5A$eo{VE#r#4`F<i>(s&nbV@%(=8-bgo}`&s&fwT=~Bov-dk^{YHrhIwBpM#Jh#v!1_Q*QySdnb$P+ z*xr_|QmbbO>Sfqx>b~4ti*AnQPF`JNJwh9XIj{M5K zPg8pz$hB&fmLt1yUgPMI-7Bgp-L}*N>v{C{h>2OvJBq#!&6bld_r>)3>f0h!eBE+& z{`yL{>N{R-$0+PblRYY)oM?{7{nNTE=#%bsZ>{^CHm&ZTXhFT&SmU)vtPQ3X;n*>V zei|!GpW-l2{kPujbS1`qiB@w2cf~bk;CN!4o7(*LBl9%x^R>CE`6YIWdiRgwiH&Oi z!Z*P=n(GPvLQaYLxvMv|NL;;FFk-YoKL1{g5HXfHzr<6{6>qoaCx2IJSE~)iUmpdU zE#z$O`k;F~5!V=*p3l+do?eyO-B+q~Yn{I_RCjxkzqs;u#_hY;O<%9BAG_*YrB*$s zi_h`h)^((G2i_UNQQtPu)9T@B7O;gYo~{|SN{!yCkJt0mW8)du`s|P~u4$Z=t94iR z=o|bw?r2kcX2e<(Yi_^KXKBSTMme`;U44&atT?*bTnS#&<+*yAE5=3BnsLs9uBCeQ zs_x$R+OD#4J^@?5+dmk8b46Fr6`ov=ah`Q<^S@(!J^(UsSm~T zPL9}NA!}Y;<7T?H3eFe{27CYZ(46fWr)2f6!o$60&OFW-@!pU2n%e&9UEgWNNT*My zW&6d)b&>fThsW^W_jPF@uV(coTOju;y7}sJ;%mv1bGT)NM^>TmHm?7t+J^2z#yHUC zFtt}sU9&1j-Iub&-agPTrMvGXcYQTwD`$LtO;C@m#=(enbyL48ot!f>#+o)~j{YfK?H<0>?cK4CuC9tx^6SGqh0;CA(q>F4fNV_b@k?y6wd|fk#c1} z469b<$8)vKJdVJ_%@ccQT2dK#PuI1kdrU`c4!}ag@k= znDrQYk=LOS*WA^LxGc*$HRn5@zHp|{e|n!Lvxins@(<1%*7Y8O<4OB|+H1+%Zm+>K z&Cft>hI|eK(_buFHBi`FxwYyJhy^;HY1jX+QT~V}7c8cNMlJ+q(o+ zYFKKh=Zh--^pBHR2P;_(+Uu9tXU_Y=VJTNPzGYW0anz zYWEk~lJ&LN`R+>V_0e{I?QN~%{%d+_uPj^6EBd_SQ>|codDAEB^~hSLb=)PW?(~L? zW?ZwiVh7XJZWZe4FZRy-JwtFNisusZ8o%19sY1@A6>^pD+}j(|dsPV=yig&%3f}t?X~8-O3)kfZdUUvG$|=o zfAx{2SyR1mDs2(}9r1m#*SSqyBeoiS9i?*LF!yrgv^M{DycP>gTrhGi$?1)y0KEDY@ceHb$Dve2&3 zC6MWhKnFvgg4DsdBcZz>fgAOmT`dtZ404r~P=vwHE63c%*bSc>K<-ZBK89ais z`rZaT3SO17<=qYa3aswRyC3=k*!&AX-+~q?Y+cpo zF=)S%UwJ=-jsn|$>h}~h9jtD)$#c*t;N>_k0lf%a0M7RRJ^1>PU-^H7ZYlZA{}1RJ zVD;lvIKg8CtdI4bpSrzV<6j*7Dp>tJmI5z@qWYcr#T$axC2aj{%l*OH&-$zgKAu44 ze*^eEWxD!_KLOU4l(#zgM({F(O&0oCdxH-l zknO!6cubkDJ;YPNmalye2EPZaJbmCO@I_$jZ+*vuuPph21IL4JDbuZ=_#UwBMR4Fm z{yh%1zLqx={EL#`^i%lvXRxv@?^N*Lz}C<7v-!6$iR$NZ4tQm-W$AO`HNe`(z0$H4CaXM2f13broV-@f{BaQe^3!8e1m zeZ=>ISA>_~z!m&^9L!&Fd;@o&KTug6v3g(*ybP(ShO!D|q<{?~xF0PA1k z&w}>>+usNde35_S!0K;(ZwH?YcKq@9GWa5}`kOAk4y=5F1NZRnn{-}HZg?*v;vf&=qY zsfWRqFJ1urGFbnXe?jnnf^A>Z7Y8qaW2leq^*Zp{;2i&!0q+FP@ohQqzTmXy3gF|w zIp3`WJ`tS$zAE^AVC`pp#aEX3Eq?^~RQw&-??lXu>K?emi*fvoc()i@KIpx;jtZfCfNSrAwCzJ z^2DD8^H&^i1%Do3`IaYs0K8Tt59|bf1-x+$FORdDUwfFoI@t2{ubsi$fbDM{&b^0# z*C#B$_+8-CZ+GyAz-dqMm0;Ujc_YDJ0;fOk4SpDGdnu1&x^d4FXB(SmAMk&aJTf@n zFG`2eW**`dz-cq_#$fxrGR1qASb6({$AGhs90)!GoOKX?q=l~oYjY3NzX8?6!eQW5!8t~Ww=2_aL-Af^y7h5=Gq%QmH24f~mM6Xx zJOW;V1L8Zu*@o`~KMA(YJ;cw0Q-AUAz_yX)i5DPIpH-h@!K;F`AHjjK{ChK4`^i5Z z{B|%+R-{h=zXNQaGXEs-cre|h;GY7X24+|&@Ko?gU{olMY2dTL*}mc{z?ihKzxXrY zoHI`Z-vzcjf&+8-_aJ!95}yoy1#I~qr-J_kwtng_UYyKXzth0$f$dWs?*{J-)*lEK z_!zMD7oWku8DRDCI1_vpn7?9-6Mv*kx4d(~*Mf7*dLQ^MFe(*?_yKVCA@Ory{YC#f zAN*>W?ihL@cv+k?{q-Z@O~Kh7;_bouugAsUy#a_Q4)Nh&+k;?{ejGT*h>sC@JlOUz z{Zjs&Tw=@rIQSf}{_b%V_~T&bJP+}m;2Zal0ODw;5aSF3M@fZ2GDj@yqOW@7Gwy)*g z3EmfMdx*abJ_4NmmKk&!2A`**TB~TvOUFLZsG5O zbB$p7<6!%X^6mrw7M%Kj6Z~&*`t!HJE0LIU;zQug!CBtJ;N8Ktzw*RKfXz>E;8Fga z2*!lP_~P~0S>UYy6X46i`lj{~Uk$cB2oC&^f46|MydQz@2RmL`p7>|r^uHg2{|eTh zl_y@F%sKx41iUdAmLk7+C$RqL@l)_PaE>qHGr{~7`aci81d!$Z9Q;{uwy*e3u=XW5 z@Dl&N56=1HW$)+zP@oyrSzv6fmd^$jRwx9UJVD%OMH~2>IS|$EF_+fC4|Nj8L z1h)Tsi2nf2`Bl6W&Zj*H7U`>k(?9-2_FEYI40wcvafts8UYoG`i&sba5rnnRqTn6D zri&K?j|N+wcyaIyu>M1E;C1{v3+(vd;r_?@;G7S{H-MdQJj7oB^H<~-KL}91_F5MF zqcUCnRsjDVoc_2Hcz&EY`?vV@VB6c{4d8XlboCW)Q)1Is0q+4;AIA*we&Fm6Yk-dh zJ0B7p7{R~EVEtQpYlF`KtG~xO;7h^kZo2piaJJvN;2XfX9$OE58(9C5U;K5j{nh%e z5B@&b`AV7YAN?4d?Y#;36)=CrA)XKC&G|>XEZFir#H)j?ujPr?E7L7+Q}9+`T%tHO z2k!&U@k4wRSo?U0r-HNo;&Z{-pT*aJm1lY4FN4=C@fP5x!P?VfOYrYX{=^F+Ed9;& z<-oa~+zPxZ*!%?YR^9jST*2zg@r^gKbMmyg4|>(>=gDmgyu9h<632e&R#G z>EGgsV8;Uw@#)|!Py8Wp+E08HILE7z;Lnxm=HCl^H(1-LzxeCm^uK+;57qeh2R{YY zzpRh=B`~ML9tRQlB{+edr>*#00s9Q+Azj!#E`KMhX%h;J+TVIMdW{0(sWulVUQU3o`=Ujb+T zIvV^Ju;Y{I;>8&Ja=bbQyc#&|D_#q1`P%PT@D|{dHx|4jIM?Iiy-I$91LOF27&z-U z5j+u`^XDY+Y2aM%y1#rjIPEB1VD+*6#h(XfeWro$tEEo|KL%EJ`A-Bt z0Z#v%1%4Tv{we+kxU|O%vJ4ov3>_@zaPg{O`=~aY1KtL#Ov^b5yjO`$KMi~oIDPD0 z;2B`ttT@CM*7(Jr1ZSJP8+^;?aQfKk;8(yYPrTrWsyy)P?F0LOczJNnG2(T=b^a~DIcAx@8#w!z z_#kl3ftP@f2IrbUJPw>bEuLLs%l{bo9B`H={s=hjBmN}V`p#GK-vmzox|H-gYv~^c ze*>K5Uk?5b*!Fjv5WfUYeXjxk9-MQec%ikze_$UFuL0Jcwx4)wu=Ua2*MoNlr$2ob zd>lCYn0Pig%ex7D1~~mmd=WUW>BOG^Yw!7>&w+0STfX@7;QPVZCvOHn2~K;7e-2K6 z6aOCU9BBS8f)`#p#t`xC;HAOoFJA($15W=FZw1cw5$_CUSS$|lF<|wX9}>?1XMemC zd=5Cr4Dl5$d@ERaBn_DUD41cT(Dy6g-+;5cyTOaDQ~AGmIdJMP-T<8T6ThY8SHF9} zdw{b&z6w47ob?sIv*g!4;>jgm5d1apY;fB9e(+h~w2$~AaLN~74o-WBZ*JjlfYTpL ze;k}^7V)oJ{Qm-{znH%Gx|KhC6TBKY%M)(_)_1Lscw4akp*_9@-ldlQ0C*%g*H{mN z_Xpd)=6?u08l3+09q_5(Ebn3P2f=yGD!v$;?PJHV-r_&%`m2o5~LzaQ54 zz32H7*#4$I;(_%ldwn0gGC1`SZw$^ggm_nQ_V*uvj{q-J$`ik{#{W2Yc8Osbcmn(Z zu=e*5U)oClJa|Nr8tIRKv;Oiw2iAYIzxcN$wmwgS|GUJB_z`%~^{e&}F9T)@D~_kY zn}O4R#XEx2KH?+6YnJ>^gWm;qe)JH344n27f40n@>E8zD8r$^e!0IlEUjXa>>i-k) z@4(sLp8+qhK~;b83gBGxi&qEdc=jxK3vlWq-UIA-;2|Ch&i*By3QqmR?*nUZ^%H-* z#O8kvd=prI^AO(w&hbP1a0@>VRzH#o{y&55ui~HaZ-EV~^~Foz)xnFB<{@4WoNG?; z+e&QuFTjU@Qy=lMt@M+?+5b#Gzn1BoQXiJs^$M9_-b(0|4-ms!Hbmq;xCu^RpHOz zZ-ceB{x5#AOjrJYf`1N9{r&>}GdSm)zk(OvxN0x)D&VZYcyqAhpYp^zfEO?E-@qfm zS)cy`A5z1wg2#Zfy#EHD22T5nF9O^D)n9xqIPLup@ZDhbH(mT4aL&j70zU=L@kIP< zulHWAMUd`h4K$!RZg;KY`Oe;zc)&boCXl0#5zs2X6|te`&u3 zz*~WH{#XdSD|jjMLgG;+KX71S@S$b8`Ndm z{Nk_F(iaCm4$l51eg@2`IKDF1cfW5G*< zt=|&hY2ftNrNHlN;j6(pKAV0U*y|1Jvo!b-aJJ7f;GcuDJ;Z+lFAcB9vfza`Z{iie zxLt9WzH%#leQ^4h={uC^mM?xg*z!DH4?Y&0_7YD4uNlcj`Uk-*L5jol+rc?riXSWU zD_{I9nBzppIOCQh?svpxn=cRkH#lu5UTKSJ&J=G6&N9UNgIVSkhj|d~At<#dCx+z)J}@e6H{eaN1Y=NpRL*d_6erCB7g0 z`p7=83iyZM+`|$79-R8T5xm6K)qNiErr`94Rl$3L)1Sm+OMZ(Gp9@a^65j+)eZ}7e zGc6W}_^;r!pLm&Vsx^gpJ#eBYqz29PT0h6*%W4@n66>28;g% zR=$ULfo-dOSn=ZE)L*<3ILAQorr_lxdy#)vaQ1K04{GHw*{AuCkAKZE%(+-lmm)AUNw|`gm~GM?43dW4!nra9!S| z;Osx9Uk6V6i*E&||A`+4XMM#lg6;p-NBrwr{`J6r1!sBUMc-V>7cURCeeK`k)xg=l z8-UjWr+mfc0oc<*~8N5~`7wMO`@_!DT{wMz(VC|i;%}+?mv~KZ zjz8kf!P!2WgGYkxAI>r2(ctXgTY--U=N^Oje6aeculQ7)e`lIy`?*&eO-vN9KILjAL2PDT{wjX9#=i^rZ{W0tc!8ZlfBjv&DmdG3 zH}FQ_Y%lSi;5AEoh$n&5e&VyhE7j63Z>8T3PW#IL5P0<(|I6U4zv+K%j^ncT@EAe~-lm)&Moc(nq_?zJDAL8f1 ztHJBBC-@)WlqX(l*UG=dtAbNM@mAm*uf;opbAA(#Zsng2&h@?NbHJ&e_$+Xaui{Hv z_$KfObe*r%_u*Rpz2JWeocf4g1gAfX|5T>WPk!+~z}a8-0WY~*)!*I@UKeb-hj?3X z`ippE3%>)L{$u)daL&i#lfc-@*e>H4LJ1^zY5Ow7B91VWl!-M;2clH8-a7a6K@U9^`V$! z=Jv#89gW)?oMW7LG&uW^cy^g?oy8Y|a}7HRd(tT@0dL*HyMxoFrjG(= zpAo+Uocf8!gHs>zso?Yp@j0#h9{|_oUka|vyS~h?zUIHR#(yaIUU0Ut_}k#LkNBr$ zezFgUUjb)(iT?;r`@aMHPjHSo;-yDc`*z~xz&QqrR|BU{inj)5`Qm-SIY){of>U4d z3~>6F_-wHDvcBREfzv+^17F?3w}2Na`AxqaoO90M;D^AekN5@f!ti^DUk2x#A|BYY z8e_!Eg0p?ZtASG=@h0GGZ}BeRy1b*nb$w=lQ(yV#fU~`i0G|WSJ}>?#IPD?63Y_*o z5_|(V+fV!@aJGl|yWrGc{1iC-QT$>H{|=n>GyR|7Y#;G5do|NXfa~RN0=9l0@^9Hn z-wB*+Fw+kO*Y%wO9#Q0u{1<|AO(OqI;IxnUE^xN5`1{~BYx(~K&NNg^0osnZs8oqf_DL@eZ~8O7mMT~{V;HjN2X5(r~SpJfL~Yg9|t}g zyhsgy0G#qnzZjh5i?3?o8^GEArhgfn{wjVHoc0p`2AuX1FR^dfUlqg~f!C_(vmZFe z2h%5lb4?>Y1za!hL*N`AOuq`8{w}@)T(95Pz}Y`ce*|2w?~hvPFM(f&ezuYPe*our zHWs|VepP<)lHjzDcr|dgk9ae%vOL6Ff>S^7Tfs|2a*@7gEB_JT^l$m6fS0WCp9)U< zn0^sB`-k{4aE`a)&x5o6;yb}iwcw>ndE(nz>Gy!MzNS9{&hc6N z1MpI{{Lh24|Cs)AEB!yg_5824_y-QC>|y@J!1|YmczJO8zj#w{j?dz^gR}j_$F=xR zYw=$OUOL1V@;?LC-rCdrcY?FL@!;>b@UOvnjbQo$qndbCaJHZ68-ugG#oM&f_W;++ zJGO;S1utFdYyR_E_%g8Vul}Zg4xILx0DcI(WSL+5Bsl$7{M!~@;J~WCnZ7hQ{Xske zoc0!P(@Gx+&i-opLE!A~;&Cl}5;*N+`g_3HpTyUIbN&;58(c5{C*T}EO#dl3{YU%? zIQxTGay_TLmVvyMbo@|;cG6evFZ#6gaI8?CIxY*DX4o|Sz&zH^HnQJqTlF)%6y#WL z`D;VA%SMpA+d;Pb;gIcj1mwJb9Hfjfka<1|DdSSedHMxN-3~_a5uE)!r+Wg&Q33U% zdWC%JsE(Fl{VZEO*N3e4*CF*>6hm14>o}|Ln~`Vz9zve!#wkbLtjDpC{4YVu{V&LJ ze@cG!_8kP){k~F;&kmY?24p@BZ@y1+R*w(C=UI|(1Z0_;L)z(WkZrO8{OUEGv-Q}J zeCl-?XWPeTxXu48>Dea6JNMdV>p=4F04e7OkmVdwmTz8dwk2e~Z6W!0f-HX&q})>> z%fA*f|92qu{5NF%7NC4o8Q7S!ZE*r;edr|4wwvz=QJ)`jR*$_X-?CpU>!EFoUlX$Y z9U=Mmf-L_lkmaobzvWw)dDK}_2lcb9%)cvSz6p@!%!K557i2k~gp~IsNO{+wm+k%? z&bG<=l%uTktrT0F%AO1<>q^Kn7lK!rdvaEnBRMPE{-F*dA#M0YNE;kWx;7cZ*)lKZ ztnI(a*}6W)S-C!EsNcR5(vR06USEHnv*r2QUd#I$XUp6zUzlpOpyOi?u`Kviwj}0LC_J>R#4{7^9 zLCSd(U9p~Y4-;?E9ZFRnEob6eKv+H|2)XC=tGeFABL2>BXZQs-=eF}r#b7F2NSP--ax&L z_x(b)9rEN7e29-AOv{ujW?*$`6BCXn?%0MZ@@LgqUdQqCtJ+xtaGeb*tsXh^ifr6CvfF45{~LAocw`WV^l!*2D=$`fTKwzIIt3pHZ-!{UFP~ z3o`w2$ol*ovOa$;^*9uH*5@QhzV|`u=X=qt$8DvacXC#qzlFEn%cGCwc+Xxvc7c?C zI%NKjL#96oDfcPJa(@lkj+>YAeV>{2ol@5CCeF%xJEXh|Am#i4QqD^7E8q99DetYE z<=>aHeBa`%{LRo)e&1ao|Ha5v|KF5)9|~X5Pl&U9-VbSq-$K^!&7|8Ni;-VD?8ceD zcrKswA&~8HH>CbQgw*$!kbd$Cq&_1`efH+89!nuay}pDV>c2>7zh{Xz|19I6iy_lT zmicxk-FmH3>c3`LpB*?`{*9cq!wRLmJIE)#46qIq`cn{Z#~{ky#4f6$oky|Ilit! zy5rF{oE@)5bGARcp7NcC|H;{L>M-)#f5&jP+@m4e?{dg?x&yLak3!~u400U$J7l>> zAa^Cs-{!2G6_I25cfsoapOA7t0#?pOq$_`8&f0M*WcrzqcDxFb?_%_`9+z>pU2lZs z`y-@YJCyQAakjj*;Zv^90x9<+ka~R#vc3z#XMMNktlazISI+T}_M8Ek??gzwuZOhv zEs*uP6SBVFf|UC`$a0^DwD01`Rqv~jYdt<++VdU6tN&%3m46+io~xDopX6+LH*vOp z$Cdfr57vKPBwl}cnX~Qv4C$7$Hdr~6DM!3A@#^J$9sS@UNdA4`Q_ha0TOZ#^B)%UK zKR~+m|0D6ryBV^be-A0ocT8y~-?d?VccDD(;qL;h=M|9UzZW_3-B9ZFJI>bkF3#5P zUy$jGmU2dOHs6lOvAm-=TmF)z{>zf?xUv%Q*5h1AJD!d__5F1z|8JbtV`1`Xzcn~p z-d`Z~+=~3>+W#=Gz0kEpPb}kK}Cq4gD-f?A{hhOZ^-W0qpDgolN4$D^ zKi+iTsboHXho;=S;ZskKn@btT!K-b41gZP{@Tl|7oVDH9l5ZL^oU`tQls%nz+w`Nv zo8Nns>NbOX)^QKgEpt!Kg*^C_|3sPZw_wM%g{i2*W$bwcm(H(oUO(g78dQ2Z=UB84 ze8yi0w%#A(Y`JfPPyLoau6B9>Z2E^um;Y_VJ63K9wjKXPx@(lBi5KsRTN!y6TbHx-JehRuxINhVyahh%`5Df(&p%5%iL?6s89w#? z3uo(hIPuCK&slk2DDkzWJnwlccXi^`|3>1i*S(zW&o0>2>v7Vp_u}Xy-WDw1v0&Tf zgJ9e5<6!OguCn~SIXm{<#aX`d{vY6jRSPHtD{vGxfY%XZ;^NS5LgF6%XD> z^`U5N=%Z{ppkaMHg?XI+|DPk+$geRQV%o9H_F zevQt^iO*uwKg%}P_fomUe^h6}*V1+B%d;lv;ZK@;&exf8Ptlor^86k3C9r<6^TwhIzkn6!Z)BnpW9`*RLc&5&WiIM+v#q{4YI+K2Z&dOq9uJY5{(RYX| z>cmB2{hv5ifwbc)1ycW&#MJYBI@9j2>WrLzq;Sgnf*5&kC8pgU)|q&VD^v1$wK7G{ zKh~N2c5L$dl+KDev4+mXo6}r>yUxh{Vg(Za0x@zsNzC>b15aQ}2gWKiYXqQ_q8&_?PL-^)(ca_Dbk;4N`yrXm-yYx1lNA^!=%KfU+QIC&`so%+pPyH6?OupaLb@KUXlWs{}M=qBu z9qI4ZnS5t8<-ADokjoczoqR6UnR9{^q>8QtgI+O4Hx~~7D z?=8y(Yg!be(*jsWbJuMrZW> zKa>tVzFLfZxl3pCcH1W17CI}+#MktP@-Aue-COa{rz>?PzYTSreqT&XyWXlZ?fJgW zwD(S(DQ|DZqn!8aOg}uJGwr`w;f#wrbSC}tn*0vcne;qENIQ2@IPy7BXYzlB!imo_ zI>h^!n0o$9^(B0lCcjm6CjD=99r?@<(~oB=K61LUN%th>!}#4y;auNHXXJLj(oxPE z#ngXI#izd8=}f!+t~2BKA5A_FH1gU@@hSJo%9rxqsc>ByeP8P+e=*nRHR;xE;=MzR ze4o;!-=+zFbrb*Hx=#Ab#ng*uTB!%m|I)tW6pkEz-kjIe8TqWzr2nkW#Q%n_(+}Se zE9u0;V%qyMo%MfWIsHN2+bbMiUVq4c1u^ZP-(3H!uIuf@BFY3kJVQYJKCkQa?;T?L zgU|oKztnZw{aRfof1Y_oPCMv2@h;JsdOWDJL^-i#!?!6u?fQ$D^ATe5xk+c_aJ3^>4)cZ^^_58G${MTu&FRe4<_enaVkKb+L-PfeQR@c$1ujq^%o~kqT{fo}z zyLD6F&nQ0i`KQj*=eJGxS_()1PZSgWIGw4-3v?!*J9S3R*DD?K+o6h&el4Nvly|ev zv}>mR5PzGyzp2i;G;ylV`aiKuliz+# z_(yc6yf-xbZJp`gV|AuK?$Md@&eoZ7o~ZPc`&^wV?+BeKXa6SNfjZN^!*xb}PfCSKBKV8>p=O@L;_47^m*K|gYdA5@C?PAK^Sd2WMsWavAoe26r z`YtNu{RhQk{C!bp;ytyAH$!Lg;aO(|jXozt`c=j1y3u!waQ>qLIX|egf=1u5LHt<) z`i*DVsplp-lYSSSsXxyUkw4F>Qa+zU7|BCt`gswaNYMX2sd2?QJ!tB|59(TmNXT4(I<7dyAv+Gf_4?lMH39s07hl5{q!n`9-ICSpJ-H)C# zd;ZLgPks7!n;g8)>?3BMF#EW}XV2Va{`}c<51VuJ?D+@3;ON6om^Xjk5hotJyW-D2 zW!?$L9=yfgyS=2)$=htP-4zIPw)pdGG%{;f-X8;;)v<99RXv_kle$T^BdY<}a6-yP!@&-ksw zBbCO#ch>!N;pxTpZ{E!s< z%IudvKF(07{AL@!`N^;R&Q;!XR13;Ed31$erKg?Li+A~zU4BV-IArLz_Q?4#c0B zTt{l+-vA{4<42{Rs5|idN^K-C^!vdJ8yk7@d*b}+Ir_A4=^35qKO@Ay#>=ny@t%>y z7@sH2L!aom;a>xvUhMA3NeT0myZaZZxF5%d%~jp#X?~g95~jBNI&^-W&?BOKt!O3E zYKIN?a9^t3E7MEY{oU=M@yah=9<6#6Ye`S?3)KE)$o%#zzfVpq`WQJ3#fk*ShYgLJ z@v&?D7$2+KE0e_>_iNLWwP)deb$Yrvb$@+&vUFHVdc?o)JpGvd{aI!|ehoC~cz?8> z9zz@I9rV5MAQ8XVIMF)dI%qZ2jxn z&WsRSufs;Upy9`jtOGW|`Oa1iY`w7uv1W%oHt+I#*ootL5uX4H!|X+^57j&S1lGb|&VaGOl=r|_~wwsa8Xq(r}sol|Xxbk2$c@CP>)RI1C9?EYD*M2AO+oveQ*OIOC5rGf3BPbSOH_5~YYDewd)*BkCk=A4&Cq&(mR={9`H8kM zZiZGw^*rWy=p1W3G?riS#?nwPG?@_?e_<#$THIX|4aMVk$A{}v|020Z`%wC>O<KVcEr{}}QEsaNJP zJUn(0hHF7CXmzY}Jg#zuen0Xt-=$p7cxA6-zQQBZ$;z<@g}-@({*g0wm^tQX{qsD+ z*tO3_2=C%UF`hiD(m(e5eT^1$xjUbGv~(?IHy!J5dL7G)Y}&bYL(4qejfp<9;--&= zX4|3oj6UWrW@)4u8!=U#ZCB7i{JHeYPzlGYE@;M)vPhmC8BOh72YMw^J$$5>@%O0H zqYNTDNn`^&`~t>BHd|-s?GaG-}&195PGVjh{cYT$o!}XEXoR zBYJ!t;=7W!*I4e0smr21$Q*gGzlY_?S``~)2~IwGu{bA=M#gl?qeYB&EdL2wWlf!? zJqs^v{9;k5C!QqM#omqkDSMvmI9PMpft)*f@0Q~)4vo8REKA)pnKcy2+PdKdc(%)| z-!El2y*-Gj()M*=`sMc1jw{ox_9j$KcSM$Lhp;-b1-%|G2gexz^oNMhDwFkJFDqpY}a%_ImMHsF`P)+75PG z>K#yOLI2t2#P*|2cyQ!JztHwvTyiv%7bcEGODNos^T8gxdJ~S;jU}Z%3R0eDk-f!tZ$FjC`_In z5zG_|M)@%#b@wOBPAy@0sO^2(!$$HuLH$EMNYA;SB$;~uiE*CySZU9<$OJ#u`=UA1 zGW3c)K3g!D*^#v!_OP(l|EKili}=^w*zDuYR@*ZY9X_XNF}-lAN^M^~d4TB=R+-(H z_|>$mT(|X(LiOsC*d$7#1-r<-$1$H(u*zCjOkO3&;TYrm zys1;pS1I^;)Yq|H&y!Scd}ZtWEXBm4TK3&t0@7lK3FXXRd?P=rfh@firKZ;N@v-TD zcC1K+F4`XQyn}58b+zxsID*KrcuDPXT3eKi%QF5PYAYTepIDw*lB>h%+d4iiI6=EK z-rGoM>OxEV_wbzqYbWNc5Yi?Ww-*^=Zwa-ui9JXCL@as?EwB`8Yf;}#@SRSNV?VRv z9Y{aDQorx+)YV}~o*Fo3#%l?U6{6kLhn$Pw)eXfzCMVAYSQ7eeXbh6qaO~tsd89?U z-qVc5Dp!$}_hQl8dSA`$LFe5=nGuS8bneL4dp*>;+w=OXWbAz{jm9@X*CAofz|PvkgR?pVnF-4}B8 zT{5pdOC3^P?kT%Ziibydp;E{0wc;HO$EQ!-TiukAFZK3*&tz7fp0E#rOd$XD?8C|q z4VY@JSW@QRcI1!Uq;H00Ja=Tp${yA9Mg_GjPni8r(qK`sBGwq!zV8kDI%7Ha%g42% zUxzY2sck*yc0U!s4sDCvpp`U0dp5p^+=#L@Tt|c==1dAj_V<(W{zSN#2kkIik%zU zi%E^WGf5ism@zqLBulSIrY;K~f%%P@k{mpa=m}eC%O$1IbL~0Q;q*RrK2h~JX_O=O zp1RYs<7+W_y5T;<1F{E>RgE0lSKAuQylDFyZ$GmDwI?jQZnO?Bkls&^kE?y{i}gp> z_*SQG(HctopVk3y20J$HnG&Q!Tl({7`x@)-y2aeN97^kvhi^lv=nAdCQnAa49X??+ zX1NPGl>SwUHGA|L3a#g7>fOHc=~39;k#sKIc&w}r)hy3!Z^<~`(A|=5h&8IdvqIa* ziQS?@wW`E-8lUrUY~=BE#G~EqJ;8oi#7UdA{y)_*ig$`0hlVXl31=U} zwymB?yE(d5SbBT1bqU$`X{Tx1_+c-i)S|tg6+4hNq~{7V7U&DKYsg0?XL_(`ePPBY z&&Hv-^u1SdQ|Dv-F3%QuCBvLG{XC}f-P`q!pKl3IT|+!Z&zk6L_Bz|+vdAH^vD1t$ zG>W|$_id!t^$6=4k^(89jh=h!-Ri09ThFyq$39+qie;tOyZSP@FJIT0wzi)L^IEdp zPoBCajA`=32WFpvJHd=e?C{j7i#A8b_J8{OK9l8zjV$|}?ltEVJ0HqCz^*0nTz+;> z+!9v6r>GT0Yw(P{`sVME`Uf95Y9H-vTZx=;lww!eQSHa$d0cvcojGcXt}!}HqxBv$wCRNX$u zp(p*U2_vJMLwDU+$MF2l_+Wpaq^z%(T{irU+RI=LL#xnQ&R#zf%WFF{jS$kr|!lrzVBqQkPq@_+*o5RiSc#F=t9Sb zr8_=t<}m7pCtW;^wj{c3NiR*F&SRX?JyQ?OEkzdS9GZsaMT6UI_o@n=N7t;S*|SZG zy55t;M_Y1-Jw4<7N?Ue+e$sw8dVr3&KOCEVa?izGp1RfD6m<_~6m{doSL$A`pBU_h zA^8O(Yd&A&f_sh3B(^(s?Ri%D2#qh_r{nnmW+G-v+K-Mi7iW#x@5MS6z1ZdHd@5w> zG}a?}y&ISLA4`SrI<$w}jnCY|=OYnkVl)QGa^XsysSTk z`ZkR*U;A+`EvcuDU*8vRr=2|KZs_#$>DQ@UF4oBUi><-K$G&yT`=6xg*O9VPf^&=) z0a2#s!dt+;jxpy>~+u<+o!g7h-AvH zw8wYx%c!B}OYX;FvwX#CMN($A$5z_A@hr%?jvAGfn7x72spQbELBi1sT8YKV-jn?) zYJkMDDxqhwi1fJkQCw4}BR#g9wI5a&CLZN*&J1h|I&>}f>W0ERrqFdl*$F>UIb%`j zOP7H>$|{n0?JH$=?uJb5=k{}}*NsTlJ}vcf9ouCO#b8``=ND~2uh3-V%}7RHYpL~T z0p?Bm0h^nghQ@;9p;N3K$dlGsJM9S(=6*r5m;pQ|lN%$s?Y$>7J6W+Tu_{hm)+Fwo z=sF`OE8Zc?+O;S{E$YTWy41h6Iy`+nXQYYP;_)jO*3aH2@|rX6Sx49|@f08TcF{Oi zD7FAan{s73T9mk%=XtJ+bq{~rE5gaG1@Vi7Gft@=A*?>~X@fGBYfsgBHZJy1OrDD< zBY(DZ!uJ^JaWK@MJe|tQ6dS-^W06}Of{n#j%F_r~54VHW$JEcM*uMKdIGWAuK#zGQ zE8Ye3TA}X#M0d{ark*N(JzuxePM&i&bYb%8)~Q`Cwq$DGht?ET%sL?{G#PPi)ar<^^n-Ls%DiR>L}=VMDTF9Z6bj2fLrr$GMWud$r_+T_^5wkNHW%SG|(*Dm}X+(~pUDWK?@cXsFbo z{QGmqaEaxfgyn(l@e>a8EISciTVb`)>+;M8eVTChq<2BuGiL3Zc}_=a3RT@h1Dq;saRh8IqI7ny++8l6x7#gA!|Wrk(Ah4|DT3+!u~`zBlUVDTJ~stH>VQre)rvScBQHF!o=?CST`*>*0Z#8clr1`uqBR6GiLKyn*Q@< z_%+xHY%HF2J3YRNpZ4tL?U7FY@j584lwJHEEChDPHN^`obNi_Z!|u>3-a8N1f>nj> z{?IJjohh9|(##v>m!~}2HZMCPlxV%f3$W!WPdVTTmo=D;!Q_gjb%eC$->)MennpmEr zPAWzrUJc&!knc3zctbUsD(~U8Q{P%wqygVxt6 z_e-h{+vB&l}h&&raRmDYIQ>w2~6Z zIQ{V0z?R~ZvWJU&vBTvllBK;Xywc;F7W{mQTf~U$U!mXVId^kWrk#Pb@5tKL5QUP9sW6i8xZcIHko`*imG z7@?77*8)#JW`7JMEiFX;?9?*qeBC`U)wfKs=fjIWbb7C>y%XV83*p5_WYyH>w2kYG zO0W5Ai^J25?6gvfSN+4KklJ1i_s!A|lCA z^}WgOeeY$+yUt$5`1oy~wHt4?>R4v5gbv+D zi;khe$jG0p=YC-J36i=yZ&<3dhIZhYWKCZ`Ta{S3cj??h33V-)BhY88ytTu6*Kf=8 z`*=^l?KGI=QX zw>)w;PN&C@zY$O(vesK$9z0(d>UZv-pKPl@w*;@a< znmSuz{$#;q+SYFy^BGch{-pITJ>Ow(`InIX?r?VnxiE1f4a(&EPS}mbzNdHjTo1M5 zxtZkK^^9mYG8q?c$?`?!fC1$ApRmQ_`-?Um}5){YNvm*aURY1@8wa>9bzJ3!Yd4-Y;eFTodHyHoA)Dss9vFjd z57VFQMFy-Ay+hajG@RRsPs;ijjlfUEo=}T+Xxjs-?R#uE>Amu&mfV%2ACrrBYvzn{ zW{u605eehdKG=lXPEBSv+Y&DO9POE*#6mV`FLEtATLW6t5(?4CkGzU75K> z$o??3(yRY=dF?Q_cJdlJ1)n$W*Un*+)xx`V(Y?vaTbNPgxc}}IS^?qRcTMF|@N5}TAG-HKPz?_a(+O>ppG7!m?{M zoCm9rtVWQ9e=CDg#;;I}4~h0A2K`p-Br6&3#Ua@;?EwSD!z9dqOfDvkckd-p88 z;}Czcn{Nee_Zej!qd2jAr8j8-etph7b-3+gL<%esSGStjZeq*FLj1h)Rvq42X}9ZK zd)ma)wU?ayoo-v@wzaPL$!dDjcZxFi(?j$MAxL>#JgxsvZ^x}i3Np#F+vt4AdPeSL z#X8jUPCFF4uYZ%}jqcUYcO)+QSKl8SuKVP%+IQZVn`^()^J;rfuNx=hm|eX3^S6}C zjxL{|^~w~Rie{ykSmSt4s9kg7=bK{LL$Nm2S1l2Lx}&~cMtHOmYsH<^e5WO?<1T;p zKdH-cBOUGT=~Gw6Ql1Ixa#kpmi3}*Eo5K5S-Rs1~N_lPMQB{}J4X3|7`?vE)!hSlT zp9k|2tNM7z)B*XE0CFl$ ziFAy*V!1rJ>_-+qd3=1N>Q5Q_Dc63Q*xkNOOsv(bPs66gw%pzDwso@QNeZOR zsJ30Mb+VodY7O)CI$isBNhgoXNb zAHv*S?zEMsbcq?;>lFD`fd1W6!u{zgEb&y|uuklHcOTnmughbg4(obZLu0ta@6J7S zIeoj(t_O1fHic1dAEzBY*{7;m5wO6z$_TjoMc{mvx`d^Ss4;OZv$?lJ0mwbNMX_?Ii5!!TnjmNTH%}3z2arhdP`K*PY0)xklzn;DvgH%bLnS62pVdSos4F9h z{ji~V<~V7EHJowc8LMu2e}9)bfIQJw<}%hsnMs(Xtc9#eZLzbv!gcGH)1h}qD3{ob zwg=)*ky%Tz(3S%&@Vb`NSToNg{`6RX79Gw7sb*JnSSBZG4?)Lkwi~ta#L<0RYJH-1 zAhv0))t`1n(%7neCf0G0Yn}?R4$;Q+DRLp6?F`yadxrbe79n}XcObR*+}h#M%gOTc z+L@WawWw`Qsl9Db+p~5(Z6itLT@?Hw+qZt|p=Wrywh=8HmqUAew?8q~Esaq|-=ZH# zCw?fehfY}<J+v*Is$8T+IY`v{HB}1F zzy2OI^kZo37fFySv9fDDK7Oe?J%qo*7%BD|f25YEcMbdtX6+C(vFo#wGFnl*w)(22 z&AygBsoE-LE-c=;KSzRQqg9ricUAj4R+ccjgzjXHCpK-y^7G!7+|u=Lolzr?cJ6&4 zMRR{`QToL5zn}HO-@vl*oHP0K(;=xk*3jyrpI7m7ENLWVZ@SHqb9B);<(_%1bLp94 zE6Ay~CVgMgxz%w>Iq{OoC4K<5+bba?IrWac^RIV!$t}C|{m^`3&3fefxxP=!orUsz zW$hKSF0$kpG0`LYT|D>WIf7W|v!yh&dd#jT8pbz4`6++X0*xhdTf63EPibiXb2@Q6>a(Jw9j>+g znzsBslhwc7(T?38Ur8}}DU1o`QG0~+@K9@tuUJa;SRc-vRj7LsUBP~#Z)x;M zT;!hhmH2#=F`XQa8O4fcz?s&Q*3XOD+v9r!%lata@sB@etKhQz{iMV!D=+f#^;7jO z@rq3-YX)@IEy25Uy7AupWWIiK@-8*?A>YY!9GaacE2GS1(~0GIu)PYOygtc)C?zAT zyLy{WEzm_^>0gzj z4$PyhKB*PYy7?OOk5jT*w$9te@WgfEFps$yV(#1cs-IcTGfwnW{HsV8-`F<6Pco6N|HR%n33J~7AA#?wrWb8l z$zwQVtC7@77(ONY{k26IAKLbc>N09u+Adw||JSnqwGG8H_I=qpwMXz!-P_}*)C@1k zbA6fPOK7{EUWYMqk$D*%?R~kSkzMcgF)EO=zl{S8C13Q8ez*401ODDkdV-#&jt;jT zQv-4>z9(bE_wb3&d$0APx#bGEGqd-vY+YSrruDanIUjRBhG!Ie7nV@T*J+qPXtnq2 z%6?gYmQS6>rSm=lyHxQ*x@EQZ1}SSOji20#cS8Sp7WAj`&>y@9=3i_YvFoR1ozDAn z{O!*;q(B!vtKc&r8J-oVC);z~G0MTa>-Ocns>DX&)t;bddD`Jqf2Y_nsxcDu{vp<@ z7gyzl&J=}hJ%{h2PF#gd}biKP*lX$e+&$RjqV~%e?^mowI zD@gQ-wQm_Ew$8_@6x(FhU0qEqVN>fgGaGfGfAKf$8)qMgYp3aI&R94sLs=Cw?h;yC z(BcIAEar(2hXEMj&mnZY|6}6^BegQZ;4C%wZ#uL|dJW_WWwj8BpN6Iz!-~84Q zmYh|X(~x_;+hiT!?vA|zY#aM{$dVSbTIAQWELlHA<@vC$BI9X8)-CZLEwu|0jm4dg$h(xxv-$^`d1m{!rm#1X?mpypA zAvCl-X1l%&`Nev+=ew@8tz&w8xlilsrAJDx@s+&)fDTeOG=n`lr}i~=(O45OTCFp6 zs7I;SK3p&R6a77^Zv7IMT=`yh^n+awAudi)8XwF8|QWwn>Ka&GP0%B(bx3{JtG*s7biZl6j*niW4b%>M0Ws_6OsU-Wx4k4sMz+^I z^%E@JQ9F0k0_-c}4J$)0(x&WU^kdjJ#qKcXs0|Wx?`!@4y7rwl(i4u2&b!*yvWH_C zmeB5ZMwOJz)A^3Va+RK{pWDy;JiL}8_KA{Zcb8&ZKQJ$HPuzZG=62f7K8-b{Z$;|Z z^^7=FSL9D`mVN2iGoGrWwy|Vo#mjXh=AEz9J>CJcI%Cb>4ai(NR6{hXcnafUP-Eoo z)hKHV&mH!f@`P~rsTOkcteyK4S<_%cJj%Rg^XjEP!W=)A)mG5H)R3i_Oe@DqyuTDis_nZLL$xd`u(Z@|x4p01$oR6yjy92wH5omK7vlX?0Bvz}Affvb$B~~}YJ_IX?;@5UZvBRt{y!Q@1BX?-zv3i?T-P>gx(zfZ1 zv~jULHxKCsquh4@hC`=cZa3!mGRt=h;}gYxA(uk&%edy53pw>@LUJntn< z>b(~v=UpML^4)`$CuJh1SRwDru?DeK3R5n9F;`#LBTdKM9BX8}d1VYZS1gic zj!ttI($7>Q?Y`Z!XXrgn>_`8XT0Baacgdf|Z z^WwdTTsv9Lvz*tELFc3`}wpj?YQr}ARXT_;}-c{Y^JrgUsm~4o4scA6#cgc z(6$))REEQNzO}r=-$ARo&t5QskZUY8y+sMkyWTtZ3K0v&{6r}03GTww@9PzLe^uz1 z?3Q-NKOwB5*!A&y*9CdFC+SyK?Jyd|sAvA&y7@c(I}?m!{LGv!`{J{;uVaO|+m)+{ z7q&EAOWxz#<*pm0Fn0O$&UTOG;44oX)!a4l6+XX{Tz$nOCD(ipI>emmXUN8T_}#e7 z!d`dyE)jW5Cr<7-bmQ71h*#{Hs~cx%1k$&WDD^>N)C~^=pU~sTIVHUPz1|5cR*oy} z{UrP6lg*k=!yMI?2kV9Un!T4=6S^^mS~-;aP`v(VpKi*mYlh;-&qTWD;n0{X-WU32 z58KzU*J!hC0IM2mi47Qfevb0<`Gw(BwmNtOSgq8pn~wak0*v^2zo{F~HO;rPPWD~h z-IU4QIWXHX^U>S&4pcvt?_ZRsJEkLr{zJe3{rzWznp?f8smJnN#(Lz1r3 zv}-hfWDQE*zUy2w`VhY>cNc1DF%$7i##jbMI5Qm@QS^ft%#6$=-Rs4|)n)qX(8yu+ zMQivy#a)$DnPMmh@+ie=kb9iLe^<>`2J(q3`=$rb^OE}?n~LHrL+>xh~)~lhE<~b#&OsS;7Q8ttwf(=UxwvGX^aI% zDEZXv9Pov>3sY-!H|DV2tMeKf1MP51z_-qQJ5tbc#+m()cI~{zz^33ckFP<-0HyKX zo=CZC)V6^horyaxR@zT~o=2%6dlZDQV`U!`!Y}kwBSY(+;a(|eTp#j@Mx!&a&GZ}X z@!qJ*#`4p1%t=U;`asmRvp6yS1oy z$?Fu!3)xa?Uv?#@#IX+3AKa^o)$gb5=8Zm4c6xH^6!x%)=e24#$MzkXZYXRIqV!qX z&~H_F&b*rsqsCqz{gE8%8LGZsKY8w)yf@DK;b%1JkYXF75kpcsLVdNhzOnBadf_2q zjnT#U__U7i5@e;r=Z#sLw7Hg?zg4@A-43PgUSoTV`1hBXH_A5-l7IV3$wTY^H+a_! zi?}fB9i&Yg*jHh6@poa;6Q6ZoNn<@?jFmec&Ufl~STIYQeDO|M344~et@H?I{Ybn> z%RNXhxunTcj!WeoNm~i~xb!kLDSOikUze%Uj;~Gj!@Vzvwr1~YvbLA<`sv1%)sH#U ze^bROz32P;?55EtHQ9n=*SuTMw%Bz{Y@qMdW1DIpVQ9S8DajeXg?ZUeFM401j^n)& z?gx*rf%hcsy`c$pdg`B@-|;zMce?9A^cd~(j#|9XI`7!M@%h%z-k}TKJri`66>sg8 zmfgTQ-x8Ct!`(nzB39b$`e0-H8Su$UN!rwW`f2MYs8W~g$qvmAy_ z6gkr=hFde?*7yNT#1JeIBpJD;n>I;T5J7`<3O{9%O90+4pslChOC7y-CUJ zWB(bylXiPP!3Sl|!iG8b{>UMB;?y3?&^2mLJoY5Z97t)554Vk0d6#df9JJAQ#o8;5 ztYnZ5^|n_}US8p}ucO7;QJyRgHEZt~Wevv(z7l zlYc9S^|46Y^WkuBCMWJ|c}3|uIgRfpWQViNQuSxkh>!l4ozU1${0QIA^Z4jmMW<|g zL*5@rNS;%r1aigOE<0}CrSX0o;TbcY_vvvgCwor$RZ3eK;^8l_E6e-rTUjTF&1xKP zD!OcYV84~RkiPG2<8N6@tk-S@{f#8t+te!05;0e#uOj22S|?uF0~m^hmf&TVeMeh# zf9`_z_CsoE(q^6{qo(9Veet`}gWkP!o2(b{S?w>{qVm_)YS?!}dSy4lxs_i8i{^Mv zMpDdR__NqgdWIU=3Tpj-M)^+0Iw$VK@{|svvfFbm%P|P`=U2&ftERnMsTA)JGDgX_ zXuI1@&u7K%l=TS3+vci&521cP6wAMm;8=b?6wAMv;8=d&jfIu>>WVWmqCdT3P~Ru^ z*r4U@cu7fV$qYdF7@K1cPWqeXj+k4eWk?0 z0{$S z$4h>CwS1N8lDiTvqiti0CU?h0U&65)MFji+3hi?GIC z!IoJ5=3$RC`){ll+(uSg!_WVh^j_Q8Zy`N(X!`|@%V=S?V(vx{y{_r{g4W04p$y5v zamW>2&Kikd>n-oC>1{t^I^mROn^W?_s^v~kok#J*uw-tD$5(mZeuA-%Wj{9S!FCRH zm}eaHtmI0cv9ddDBuQHjhnBsD5*t}~ZBnlF+Z5a2@6uz8mAh|@#gdk=vJch1PR;3` z^1M>n1)4ghpQY@U)z8!WL*01oXQ9TG+l@6`W;@on^6DDY?`sQHTHV(d?1%lYj6Zzn z`r7ooBg$C#bi-q-n^T@M;rXLzX}hfH`c?f}mS;s-rSg44teA>+`8ij-gM72gxH^|7 zVp*vSk019?iOCwoTJCo79BteGtyqvru>Bf4nmc;+o(Q-607Ingry9yL1W_o`Vh zmX)?=29Ff4{`)c{my)`>Z&rsEeIS#KJyt7D&=rOuro6@GC((_D3VltMHVY#!A5bqOuWKlwxHs{+A z5;ylsx?D8SIW|t<`)!qY$6XD8%j-gx`iwRQCO; z6>~N-S&4xZeMb*VND6AiyAq$+Uh|eD}JZB zyZcb&?!7g80oH{Q#+XHuv77BRB73La<;rJ;yc6sC*WdiszcT%uXVTgR*PbCGqxM?H z#X>s$nEtjfG@EqxMeJRm`+mmG&w02Ete*SF-v}FTuGWd6@$A@{{YxtB8KWWA#G@A7 z;fj51>}^ue0@v0#@}BzG({=xp5N5fg%#J0wp~aq?9T#@{6WjMWZ0m=v)q3na%H8S` zpZc(8<8N}{*Y5FBht><@(=ZYuw<4#+uh)#;-$n1cQZ2DF)4I-#25UUFq3t`5@5Okw z$(5AYK$qISYK`*_Q(Kx&MJX9q^h{rhj>r9J`@rMc){ZwWA6q8tN%?e1>fV>HbFEWN zR?D<~s{9gfTrGW9ajIM#YkVHmG&`4*<%NC?&u!KcG|-km^`Rrwc@C`WQ`TfDhT?fgIltc6&!?X2 z`=RCDal6Iia?OltZ`T%zd)=u$ZRZ{Xk{I{PG9|X_#!SXHoh6U-u$euZZV0*CBkG2D ztYj8umd<--=)7lk&U-v)YV9Y!yLSS|UGMAixS0No+VRpsbQLQ+E@pj?*v~{T<|zrC z!mBJRI_CJ=6OD%-ABS}gG5DN_y$}f9!as8_@#F=b1eVBmqzNm2Rp0v3xA>OiLT*E& zuK!f!!lkP7cRkB9fnJj{(^6;dkfLem05zd?esAq_C_Y1CluwipRz63_%8s?9wVSZo zyJ61cnxFd9`u{BQEOvt48PbPtF64VDu#zfN`R_BiU6oAH!9 z+I8^mCv9McGSnpV=s%jE|pA zU2<25-Mf6}6K&|H8uxknIyNIH&kEDp+{f}NhdBz1MGcY2F*?)Vbq?kEkw|p7*X?Qe z+mZ5JF44fD6nt8pQA#_zo`tX19#+ckTPkvxPRwzoSfla{HRGOFz-AmV`sK_1cq3$c zNiHKUL9Z+wGyYDSEQ_IQ^*sP~9_hpGuc(|Ni61WCh2Lk|THg%5rB-y z<<^g1+Y)R$^He`pdoN%*`O?PnJ%Z&)w%UilPBNQ&=cv@T9VcsCu$+Z`!H2XHSXcyOP@Bp7YXclZ7Eu2E{FG=k?u=p;FPd{^2>@(k{%r8FVo41KWPotr< z(PP}Pe3y*=;ak+YcU$-#FMJRBE|w$n@=zFM z6z{bgfB2Is<8mL4-7SIMD8F{w9o6=J+n=n+F7$Nb_Wg>ao}OnR&-#Cl|CPZ1O5lGb z@c*|2-uVA__5R=1ZqKEh{|uehZ;IkQFM_zXvR;qVYcahx)oU%ime-4Gn>Vjz8{SUm z9rPkS@t>{NbM;zDFRndDub1gXdcvQt*O7Xysu$re)a$i+J-&Gzp!2zUk^iE4&DQHZ zdJ%UCy-0gW!%ONsN3T!oMSQ|f(CbTj5uev7dVNzb@~3@o(CcQslK(k+{|mjA(Q9eF zDEqF4$^Qbq{-oCv^dkL5dOfNa@fXqSLwe27o0R`y@v36tlK!K5tt}=!b)c?K5wD;# z^0->Botp5)_5K>Y_7Wp6j<4x;keK|*6F#a5C;oMMohl}b{I1vQbz)?}aid;mi7A@{ zK3|Od$rJv#n6$|2R=qwYCXD>=(Ccb3I)Qxd*6RlG>N=C=e!cD#uhQ_Jb$&!l`>4Z1 zdd*Nr&TRN^I&UhbEW(lHHsaNERCw%GYUP3Go4XL)pY%N_?o8_E7%g#dF29 zpZYE*K2gkjj+Mlxis=gu__bonBR}}vV%kF)tBJ1=Q$LQG;xCKQXUchnJF zZ^X2h_#YBKqBoS!n7>rKk|Jh&UM^l=OgIO;Q^VvBzf7F`t`r|9o~baMCaw~nr#G=D z*NERMMjxam6W5AAC1!ll{;!JvP5dOiC(ZTZ{}5Auy`A`p{@f?l|55vXD*m$|{c(%< zzs2N5{=X0}rH)DaZWFI7MnB2px8g0u$P2ztyptH&=OEr=+b~Z|{-Z;cc&(WB=`^a;g?hvIB>s{L|Fn2*y(iCQ#n+2zFZEwVfBsWU z{Rv-H{Ff#@by`RK1ZBh=Mt+-!H`5#9(?45^cN0@T(mzdnXv4yZ9mTH^XFS0diZgz8 z7Jo=g{b~QM;xC9dB(aV?#J7rLZ{R;QO!y1Lk5j>g~kY`m=--1Kl9}&En+*w1@EX^=A_?V~gVg z@it9(cyBTC2+wMm`Vs#$F?Auo3-#xs{DsUKW{Lc|<%{Onu&-BS268{ zmlj{sq$mFw;_r#+55kub-`a#z$7RL$i0M!2zk-;|9`m2Xt2eBWiJ9W9#nDfAS26wy z`N8{%V?Q@31Z|;|C}Q}LmdC{&Ej{9=^w)1F1}JM zl^pT;;;)L)H^Sc`zFEw8)mx4?U7$BV*R|*X{_Zcu$b>$5xA?bWHG9;Ki^P8s>;LHZ zfOrX2Fk>8EUQ8R13A~}0{5dWWKShiVbHICwnR7Vc!^N31;ny|c)aN7O_li^gW#UhW zX*1#Q7sT`tZT^_}J7WDG)#2mfp9zpT@h=zOA&yKwE55g31y6il{E!%#>+OgiCxK>+ zvL0AhO#29jHx^Sr_{;jUy*M`LE8^#fktfI3#4i#vhKLXEFOK}bAwEnTpX*!VQ^ky7 zj_-=!BaZywE5-2v;G4wgFzvlje5Y7V8p-Eo@q z|4{tghS76)UoqwD?ZnUYXI{hT!>!`Ch+{Ku6JIEf&AMHDr5GQGar`Usx5dbV^6wJg zEY6zeZt-u#GZjYr;6;@<^1nyCLc@gLE1oG%f3hCireVVWB;G@eesDY>-cOu47CuCb zJZaB^;*-SayWUPbtUu?9qwoJMeup^ngWumU@&B$rAFtv+D!yDC8v%b?%$!2}MO5f* z;^_P0;(Nr%hx#n3KM#n}FWNIhyoef0e{(!uyn_&ws-uYJWI73=@#fUgxqAK>qakq-xaTf=%g;y;Shzc16pr38`R{^C`{ zv>$ysK)j83!-fwMA0Sp1qx!#GJWnhY7{xzCe5M$ECH*VK?-FN@JWPB^mHu$?)#6PQ zmt&UrS517q9r3;5wC5;Yd{mtL;T1GF(0pJ5;H!CKTrGu zaq@qa_?2Spk={y5i?%sFZdj>{*R8+#2*$=p59KtpAl0(>hoIhwc^bh zex3L(G5W>vdhz{Y8jJG$6kFEGk;{IHnuPW#?2CbBM#_ZaQR-k5H}StEo+0DR{LFEkcx7??0eBrT zZR7Zkcs()slOEnwj6C#q;=B6u9C6xvqj)dzx(cKGo5gd)@$cBrJ-y-|h~FxveH=d& ze^i|Mz@HVz-};gG8gcCXkHy~=r~lxeSLuHu{*9RWQJ&@y{p&Z2sV~PJ;)@za z=J3ax^m;pSm;PKSMjttTC;pB&{tkSLnEs`F`1fM!qqh^k*Plnl(TDrROK9?nzx7A) z6UDI?@H*nmU+}g~IQ9FJ_*vrU$AjWs#2Fv(0b=A!oQK3mh><7qcv$=zG40XYiNER3 z1!Ae_sQ&*HUtXnuRD5m2iZZdNI^nzG^cVaaaqQP(;@^qMn*;uXnDK{v;D^N2mt%49 zvNLTD!kdZHKZNffj{M;litF@8iZgx*e}h>6M+bb#OxI6uN9BD|jD6>LoGxB9v*-tW zojCSwhWN%NT+t`s{}dx%4)~s#MgQP`h?9O9@#5>2@dB?XmP(A|0dFbRX~d7$n{CBu z-?HKth-DH-{Rtl>j(nFF&k-|TIp9;o^d|>=p*Z#i{y-=GC&Z0>&qim6^Hp7=Ob+hp z+#;sV=n(uDacssa;^o$}3<-zV5l81&6>lg;=8NdHns_TQV}xUM@owVS2zYOCY|I+s zgT=8i@Ui0b;giItG)(>BGaFu1yter5;^@#!@nvGhFmi;yD9#w(KzzLzo58W6_*QZ1 z1K%x9`S1f`+C%y9QtP`ti;6cEFE2)C;7!GAiPI-f5kI*JSMUV9jhOt97rci!eZ0AN zUvcIj_-JwZ>#5?i#HlZQL6silVu)ED_bTYOo=!iinP|0+&-@HfTuKlOc%_($T*NxO;f5i=e*;H5S!J}SJL zI5zQl;+f)^quAQV6z?pie-_sZ-dmjV_7Wc=jt$sbe6l#>2|is+T8GAzygLM#Y97 zBwk&d@d9rs&YTBtA&$Po&k>_Ply|WB`C{4zzg+yHCR{jii1lTJMqXnc}~Sqkm_K7vH3`=WOwE4HF+;L!ACPN4&W>{qtt= zPE9!F!7mcW9==t4q&W8AZQ^6a)Q9-+eDUM-9vPl5KD`O2eeV{ZB~JfdBz~_r_6@#T zobd~PON{)eKYXj0ym-A={0lMlC;VdZ@5R)IcGja3> zezutY;ehuPNB`i1#c2=xD)CZ|K8k;;ct*u%boi~}_@Jb}SR8u+UnQn}wD$wz>%zsDSJ zQR)k?FHZUYF5X5=eA2^vG~x8$4dMgDlt=w<79TB6c|Q=JE=HdS|B3j#CcbduXW|cv zHvn|N-xM#a_t+=+`{MNfe~RyG!if+6O`QIPS9ogC2Y799#v{Ca6Ha~L=ZYhbUyApy z;=`{JXZ*r%71LiF@I~S$=sog)KPEHR2Olq9p3HRoPW<{R9DaKfPJQkZe@Gnt`h)nYCYfT%_-EqC>wfX?#IYCf-^KAa;U{iYjQy%&MU3_d4E}ZzMctI5(K3g1lJSx6aoc@BpERMY4 zAB!`d;J=Dv|KUf))PHnnkS+JLGF}*TYl?N8v%=`4Kf1QLuBA+PS26a0Ho?!U@>oRt z60wHm=zz}qMm;?!pe@pr`WdEnc`58QPs zS@9kX3n!i+-bcJLpaVWajLjiF{04D+mgU6fh|_-fLk&}(<;7nVr@vMd-zZ+G$q&9= z9GzK7{D^o(g_9m$X4~Quts-7Uj80P@cmr{Km?w&#DP|0CtSWwvrucPDIOV}-i_`yWi7yf-fA}&nI!&L!Ul6aX_q1nS@pr}P@Abt$YvL<- z0=`R3{W#!<#gPxZ;&zrd`N5lr$)96G@lN85QTPBcJ{$FiPZgsNq~Az=))`Y_ki0NU%7=el zh3_i9w+Sab{IHn%aXeSN=niGP!z+pF@U_J0Pr^4BXO4rnZQ@h@ZsKQ)W51p!-dh~~ z+e3U{6QA<;6weYPAM6Qyia7S?1>$qWj8EzhzeBu+-gE3N{Q*@L!AD5 zq4-9zrsmNB|4?6Exhc_3;-Vy$6aeNf`1!D3? zUtcUfR2=!fM0~V3^Yeb%GOZZlC#t(d_82O^FFBjh{&YJ%f;$?R7nt=MjPZ1}-SBjq_ zj=bOl#f%r?!?P+rRD7H`?LSQXW^v>RUnJIPl>TtN`Jg!VaF+Ngar$ev_*IZAwlIQjz56UUw%EnXm|Y>s2auNKGOgU=DC zKj4eR(MR}FG5M1R{26iDH&^`iCO+Zt4GkmTdE%dmGv1CD|3(~p1>Y-IQk1;C|-xmbikhz zqYoVLH#+9UcCQIP(|bkKeiY&nJpk5~n{;7OyEzf1DzIaua_-2fT$i^@X1; zCOrqd$IcF?z3>5I^a)-dK3+`w>91Fd&k)DHo-Tf$IQ{<`@ugzqP5Re~KP!$tzCrw5 zar70wU7Y;S5dTTM#)Qi|Q@qSBj;~7-XNlJnuL;Ty%#-?PQHh@)Tduf&XpMf8Fn6h}YK5ijSG?47Oa0y_ zUQ-(IAi1^;`_wd2;#&46zeqNOZ8^)-Q4GdUnX9* zVd2C_#ZMHc&)}J2bb|Qs##Q`}iMJA`Joq`{jOmYy4-v-(z^67$d7ltpAjXDpz@HRH z=izU5!fzF)y@cP>iNEOXr4I>TUW|?}*5tpsICIFS6~2);KE!9l&lImqWpuzV7jI@9 z@i`s-yf`+C_&*Y7j)U(L$40<^7e`0oCp@p{_`izR6UU~(n~5WT_-W$k&*kE0H{nzf zex4W|MnB;F#F+y=E1n}>LSgjh=ftlPr@uchezkbsS z6d&F&;qXb~$nRU?^Tg?Y_#@)<*SEzV6GtB35r48_uEC!XXHL9c{B1FF2IaxGiqk*e z6aSYu`UKxEj*kTYtqCVRy!gKqeZ4`vk~sOn>xeVn;cdl_Ys!b8C0<(0aie&5appAm zAaUdiA1j{W=%e^2b@+AS%rV4&YbX5O;`lU#UoMW%a+CNg;^@Q8;_r)*Kl%dSA&yV@ z1M!368BKlQe~Qz7c*b5Oe|R-9_L<{{;;qGzFT9gD@_~03r~N+?zf?@$B7gV*G5W>v zWAQ7+>0kIH@yt=E?t_WnCC+$)Kix19yg!2LyhcxCb9oAUlsJX0L` z!n=smK6oE-#tVE@Cwzf8{i39$QnDIva;G4xM?>6zB;^-Uv zpqTm-AD-B|^#3o#%Zj7V@RP-n2fU-0WE}7=;^Ys%Se*L72a2DdxReJUC8j?af47TI z5vRVt7QaoL_QRKnBX9V#;>Z{NhIrW~fB0r`^x-$+Tg6XMI0t;USf|ke-zQFf@IS?| zU+|JIEb}3}mN@-&hj?2t?cso*D^7pG2Z+-?c%E3Nkv!mHU_icc5E{=jb%r#|_y%#xhkq?jf5H!mqYv;RFDl{xC0<3G{NRnmsUN(hnEKJb z@QxMVCEi^e{k&Vew>abRx8hfdlRx|_@p4W3;Ma?>-{cQpD2{&JBYuAqP7?SE@$!HU z_}|3n2M2tkIQ<9TDNgzDL*nQQyx5D|{z0KcIV{#J3?L->2e>0kH?G4f+hfxp%;@VmrW4?ZHkQk?Mte_fpN;9JF!5Bx`QC;cnMvDb=rE@|fIT4V$-5T{Sz*NZde z;Pb?Foj%YoG9mmk4bz8z6JIM%o&F)dNu2!PUv&5$ab!;TpT!x|@Ur{)*$2vlw-Toh z{waQeI6exzk2o@e4;0g0(!)oJBa=tP^Tnwj{04FIgWn`xL1{VQ_lPql;48#BjSl!K z@hTO6PaJs@{_{@!+dA?8EJl_b#D7R!m$&Roiwz@u1u^Zxrod~7V*?ja$8Ic+Jm4+G z(II$eamFaTXT^((_i32=EG9lk%$P-<@NBV8qhoQsnInE;#b=1o2kJ-oJFD;|#h+@z zNdkXGyb7QL{-K!qQXc$kG5rNECB9#r`Y$bhSe!ZdapDzUR%|M~ra1ixZ!TV0d2ztI zh+}i$L&T9ke6l$D3BN-en+;#w3IC!v`bzkZ#C3UhiR%XTs@+JLjG4kPnUn{QbbDlW*MED29vDfgY#hE|gFNkAr z;ctkeukelH=m&g@xX$k`aor#HitGFy5!d~LFX5|;>++u>PJ0P|o;c$f-d{}pXfHfZoccUbe3p3aratgT8YVvc zb#cbqs^ag7qi^sno$%j?Qy;?rA&$=uFa3(L$FZ7t6LH!P?lr#Qjy}MTHsRD4Ugoe;zxBlHien$)EyR%ryt6p+hWG2lKTMqQ zNcc%j`bAV8e6~39SYP}BapVtQE{^=*>&4N3_>NBcN5qjI;Y%N0<_CBsaqKU=zBu{@ zZ`KLlQJnS@zDI}m6YKKmApGD?`Z?mri}2TqBMj zs`&70#HkN_u6Xe#J$#-x<8>qP$Hkf7;m?VwALYSc5|bbNWbt)X_{QQJs_;$3w>063 zKC!9zmrZ#1_u|C`i#6f*i;*w+Z?5=@%`W=2g?L3V@*y0aDJCuaRPp-a$a72aCSvmE zfHxOMAK{%k;k$^V4}`x=ypEHP(w{7D=GV6*&$sDXUFL=2jCu0-fH-{se@a}};Tmyt zj__}aV?*GZ#X5}+_@_-cZH9kc#otPNpE%{ie-&p<2TvSP#>m#<6~(C^ypA~Sfj1P# zr-HW-Cx7_q;^+*#t2p(CU)TvhP@FMC_*`+F|H+;7XNV&o;-4$7%YUbs{E!FX9~Y-S zPZNJmoH-T#nmB#Djrb=W{+&2uobZ1(>6QHiJmbhxKD@HH&Tmt3+DG_K;-eXO(|?4&SseMm7m9Tn9q{|akq`V)ah?8i;=2CViEDY> zDz3}_b%*Z}XUviRec~llI{gFxSsWX;tyn)j_gH=58REzjp4kcCR2=yczMVL8BD|M4 za{&Buu}-7%;aTD(#T?s-j}d1)!l#K-K7777<-zao@F&D|ewT|QPvT!IPJ7|&#gvCU z;9JG<*|!(}QJnsR|0YiP@RCQD_Q9)(>+lW4kq6<==;PL7JFpQ0MKQ4pR79~mP!JTyPa~ zJ74un!O`*18GJK1+W+E5z)}6;jo|2b5N`z=&x`mwu;()`;-A6M@h&buu4Mk=`rzG? z<_Y`e;8gpz;HZA>+k;ctqy4D=t>EbR6h8v4o?`!8 z&^u4{?}DRw9|qn6j@C!~c`5uYIGVTm?WO$7=auxMzA6}&SU>R|Dfn=3{eUg;2yhc{ zRKK_#I65B0eM{LN1CHjW{=`yvWWe^TeryWv1|FYc-yJ*&3`<oW`9dF{@#+S@bToW9fZ+n27fusE;ZV8T#UvX=& z@$FxH1UQ;kPw-LTs2}lh;OO`gk1SS|H$!iGen}SpI`+-yYZ4cf(rJf_fo-drA z{wD>jNiXoY6npVhaP*pm_>xlgx0b?dO8LJ8j`oB8AAzI!h`$3z{faB+mmDwR`rv5Z z;%4AzKZ!emqw|Nj7dSc}icbVb_h;fFaCCkVFDhk!4LF*Y`n$lX^*&xo|1vl=|9hqM zUxHKnD_>BuKE|&Bj`p9pVJX}SoEpD9*z=j|r+t?cd?dJgz^-R+@KIn`;vyadj^c@j zfunhf^Ge~_;94pE7lG4K@O|KDUiv=`j`oXqb1D2gI67abuU}X)UvVoim-C{TE9-LnA)3SCsOBr>nl64WIw2H2CkjbUq|pBDYzdvb^a%SQ{(5AvY!c#_LK212dB>C7I1VQ ztNspfbc~DFmckpssq6g_I6B6)-vLgIUwzW9>)8+-orASM6r4K0LEybo`ppEV)|U-V z?SBF|bv$KRgtT>ioUx>i5Q&-E zr?K7tX^?Yn2D#t%g^YC|f@XLC$Lk|5K1#n=$OodG~>w;V8&?t%jWQGm!Jx0XeUq zsLy!*wn#K{;~K+w&RqY4A?xV{={Eq<=4Qyab7?417jg9O0BL^`q&$bdjo$*&e;}mY zSjc+Lh0NE6diWnZm@DH?hMRu}+&m|f$C~EDl|K%liXFn0_Wn+x@twVP2SKju36Srt;so((eGsJXb*4y#yKOSoGRI#-`BDJ*fOtNc-|3?o>Gc zV~wfb{o`-fSf_i}`aE{5KNG!m`TKXq8G@a0oS}J~k$Iej`X-Qmts&#AgsjispEO^G zknb3{`Kl97zx^ToE{3#!2r}*`kogATY`($R8z(F9)(qeJ{rsE$w?W4H7}Eb$jEy%n zYQE>fQLgwoV8Sj3`ID6o4oYU~fG&Yzk>%Se+?@q`$y$>1pY=Y|l zJKVb4<8Pdk@iWf4pg*76+J6ceCkMH9H^8mqEbQ&CGo<`6Ncp#raeso0=Wo&K@AG@} zc7m+03uOGWAnRKMxeuR!+@tFt{Thb3dJJfv;#aNH$K;`}>f%(6L zn|CB+zA-4(-;Z4T2jR-QLDqE=O8clsKK=Tm*Z!+u|25pYM$n{uJEZ?%*xScQxN&}j zW12X}TF1MPa~Vle_h@rSyH=3>9u66=C*<*eJmenEhCEhtA@_0tWWE)U`8rda=K+70 z*LwY)N9W{YW&1c1(*798dd`7dugf9xJqkI8jga-d30bedDNPHp!6EL9!2La6$nK+JXT}Z5I!IBoYN4y#_(bA2Jp+_?wQMI-g$L|?0+=m zoW6$aZyfQQQ#y9$yO_AzABw+u+EcIdYXfO_5oDZ7=#As=@M=F6rSWco^qUprXN36k zkm+}L@Y|iB#(kA5`=13lm*(i*7rWu-JS$U=bGi>Z`Cv%9lOg9>1i4SHf%JP4GTw)f zb9|0?-WTWLZ+$}{>$?)N?z@QZT$j=(rm-4e`x*gR?>CTkSD@7I#L&-q*z-T}{e13& zosj#dA$skGkb$z%Q9;r7`RZeMeVYrm&6XV>9g zh|sa?&?n{!umA<#J&IJP_{O+QFS;HrzS2z)AgUkoCMx{mSbT z&v{m&Uh}?AT=mN#<%^MPcPMjpK4T#JJ_EAv*^u*E2sy9kAoJHGuXEiKZr=Oh?$x!# zGwv3+^Xf!gm3H!Ph0BK&)@D;z6yWmb4#eFD}K)74*cXz&^xF5k=w_;$n~EF z8Sf9sJbPnjymG|1&g{T1gypl?tbJm&LrfNzJ_vW8 zeFAr$Phsc&^D|e3O8l0%`MM)_KE2?^oeUXw1Afl6H*)KE7_Pm)QENXn;m$K7%-!Fy zvc7r*cc09JTeqLNwmv`mXTN!nbGif>gt9h_2PUAeMP-_P$pm`6PIH{-AULjdbM9((n5z{WidGVerX&{L50 zHpAb!6vEvP2mbbT1>E}l%~ki)61ej^iXy~|A^kppls}KX`L98*Uq$je&wC)} z{yU`IDDr5x25y|Yu(SR%z#i{U!L5HAT>rAf)!*Nu)vh1*{EvM~9_#-Za-R&w&i-b@ z?RyQ}J}Tm8|5M=B^)Sx%S)KTf=h|-t+y5lU z`J4%v_i4!be}T+1jyT$14R;=U;cp%O4a)gntqj@|-U|e5YY=p9|sox1t`` z>q7c+UVfLg>+(DO$@3xePQ>4O&WAgP%i#8VIC1RjTDW!Q6Hh(>z4hEgJoETB9_wC= z+6vCdm{KZ!p}Ud;P&Hh99aK}A?`G|{Vjmo&lvoSTc14Ey#={_J%`*n zJh=3~5wg!o!S52d_3nvYfBzQ9&Db0$F&DV;uZQ$MBIM~E_E|mbt*!}#>UI4d_ z7W8TU!Z4o<7NzY{4=zqyd|1(54-E#z^s z0kY02sxbuFEy!JDS`aQp%1@^qVfVlSY2Hg3ag1vG4P6X@u71Hlaq zx{Uh@{;pfoFo&VYafw}v9id|TflQn4T-pCekbTugZ@vfM&colB zx1L7ivClWa)_DPB-qv9I+6K2CKVPZerI7RAOdQv7PxQv!7oIqN;LdY*;(Gr1n4;8Y zg}ejNdmOHTj1xz$-M%4SE?j?q6W;!=C633h%~{uGu=Sh{c8&*w`5${7at=%I*Y6TY zKYusRy1z$m9W607{+Y?h>bc^rPu{d%}_eFyHmo3Spgx8KQO{=|E>;E&@keg>YXlQ`Cyg`a&sP9FVEz|VLS z(Yrn?L%!SKuH*j1w~oDtBc1@)t{ic!^AX}$_dAgD-ygmGwT7GjNH`|3o8Zo2JKVl= zh;QHhP`bbFffF+EyRO==g4DkUX}=Ud^UTIb`z9z|hqaJ-UWM%Qd&oY!65o10!PvZS zK-ygaR^AkU|_x$%C+UVW{Q=Rs~8_d2k7%3!B`RqE0HTjb6m6S?uyk?UVQ z)Ll8$u}{cb6!P4TopXBxa$avi=Ba?ac^bjpXMIAxcd_?4e1N#-`2jtuSUz$}h~19R zx%305e;zyc*KXLkKc9rV&yL2)xOc;iHw!!S?SbBU+QO~l0QA=NH1Unw0=a#^Lwx(b z8El`o1bIW^=(h&0-yztE*F%ZplsMvT0e8U9{C8rf{atYFE<~=~RdDP58g3uop!fJV zpSs-dpTe#CsW6u#g8jL0%bnr@4~e!OWoEno;V)Iz9+zS zn+)cEtUZ3>u5jnwAMU)Lg%cvS74Eu}1Gvu%;e?E};L3PK=*{1hddxeAp!WY5a_3eR zx${ngo3ABu<6lWq<+p*IOF!c2cW$tI4`b^(IoORrZoGTpTo!3Nh+6c$0bghKDY2}r zGFR3zAMTnQKrDOM1ev=&c8Oz=SoSm^^t2JVIV*v!bvt_F}M@P_g1e^&u#>DPCr1-=QQl??|HcOR|t9bhwFb7+1w!hSV4U8cjU9r6N2CMaQi(v#QOlQ{o&X-{}18r)n`Kg1A~1B>bI`XgZvNd ztgALn5F)k@cJ`AV^!}!+_E{*kyBxXmeGG10Kf&#L9(5-67yjbog8c;a_BjQ;@~WYZ zp6H#^z);T}$n}31uKj}{ZsQ;y68xsa^=pQ|^H>JAj`eW;a)_t?1MJK1lu6vlz@DR5Xam+h|IL6P#&bprjJEv>0*Z*~# zU57L9GtN@D`bHt%F9^;52k~70O`-m^#54Y$*xAQ}*jZO^>^#0d4R$|=y4Mj`|JCT- zmk*-1pDy@m{{?dEdmk)69jtyMcIN3$9OEw_pZ)mzEbg0m$em|*u=70uZv2b!Q(qo? zkHb^o+BHFM-&f(s&BSj=nCA%WjXxyRH43i%t#I?-4R;O=@N+(Q6Hk6D+&pig_qaR< zz4I7L{fTu&Z(Wa(OnDph;(5$N{xo*RpB&$Yb3nqgQ?i@r`>Ja^tOnyH3l9ul#km@dps!b@>sj zUwizWV;uX$aS2!6mpsP52yTDV;P&nJuG!D=_}gC`fA#I)=KBP0y<6e-(Fc3&>W97_ z!cYIhkn=xwB^Xs~8ur>f0(RbY!R9+0Bjdb)+&pJepZ<5i&GQR(_ID!n>E9K5`?)y8 zxd^@SR$y=68%buIau}Jv6>{w};P!uDsPh~A%(E|8{cFTi@9!7scP&@u?~R@3@74G_ z_f6E{oEHbXqwur-`skfcPvq9S8~)-o_*>6%Jtk*3R!a({3kz z@)JUwviR$FS@2s0cfZ^Q*RB9N{>Oge3e&`IeOrIyQ2#)<{k;vhf8RH5Urn&L-*1uo zm?x899*=&1SQ`9w;5RzQ4r$2OdRE>BX?dcuyf9b2Hq*; zzX5K%9dPToi#oMGlYH`-#8Lk~T>UEa#;HiX_I(%mn!szoonr^$yT87|&VA|ogPi9# z_$xmMz302}H+`nf;&uZ5d;w_x`qT)WSxQ@^DlPBrYzGnOkvvESj&Kg_EZL5z1Qey+m{aM$4@jKpKW_WJ>T*3}4m=X4U>cpt#+>qoeK`gs`Zdde!QAI>1H8Zc74AOW554t& z5&Q;$t+zAw&b20X<|#vR*VBU|QGck*?~t;dZrIC<&|Bwc_*u{6VEe2}T;u&5_~;;i zB*aUH+yCuw=QM)&+TTkY^NmGrU5kT$FZ9m$>5z91;+pqpxN-WTH~))p{a?XO`~LXb z?@e&+Za{B;bI7CrH01U%F7&+|uH6f8`#*{J#`F6ejq?WnuGgDz=lU4_=II1>9ooXh zdn3msb^zRY+z23KtQ*+;zl8WVgU$ade&%}*x%s|@TgSqH_oY~IAMEYZ%O4?j4!+Lr zlrW27L4F;+h+2a&(B6W(-ZM?uf7U*wzII)eiU`6e+z$ZCcabJ zx_1DaS>uprA%4#OYV541331(1L(!XWG+g^(_+c7*Bh=+*pT*wgc1qf`Hvxve#a9x zQ3qK0BDnosN<8x)kDv2w3DE8)^v-1u^xCfrdCw(|@)=;`K8~Mre1Lq;^+UM(xfXim z?SuVW>L?0xc5u?^2XF*UcV>BbN6=QS=Ypd2G=kr3S z<3;rPwFkQ%7s0LfP2}d;lYG|waLE51+_(pYI4{DD{|olo^#gM=_7GS0GZcH{zDPah zeF;6H*voL^w37sMA|8|pYL- zLOsUKhMT_^!HoAL_TIPt5%AMsOkyX(jlUQEuKR`%?+KLJw}jhg8p+MKGT8qX^cR9% zk4uByXyRL69^CxpkQ;X-akbkYZXfsKXT5XLyFL$KZ~UX+&S7`Bbqz$Xz2A$eU30MU z4~856I=KB04fef>Z`{-1#`F7w+gl! zeLo$!d!1zY=_&=jF9IX?3{aNIR9gJBDbDb0NO1hp8A;~->YEj zct7MBid?&4aP!rJtFJ&D<5ds&Y9dr#A8fqm;r7)K?%bxp&3i9S+>F(R>wh{|iGFZ) zUfsaq0Z>qzqHpA9zN!C)T`Y=m3a66DtPINbH^6Xa8ae;wj!es)ji4pm*P|NA7C`1;p{ZGaGK4OW^9KqUUC816R1lcBc>V)_|LXt*;e! zo?rJ1byWk~*FkXmxEbyoI-++D-@(Ou;%|L>5ic=E?2P|IsDC@aJ}wCQk3!rvaQit9 zx&Afa)^QJV^F0d}uSIU22g&DioZG>qjFk!Y!{OSuL9cxrY<+(Jmw0lhvpn2&e;Mw) zAH~jkuK<%ORs~GSv9+c-uy#{VyHzW5rt%IHX z*ieVx0i=E_*f_*4GRyZxHHU4YvM$ z;jTv|?98)w$a5q-ab81jeGP*A2C#E!0p@1ncRckQ2{vyI+&mLes^3g~=GhVC(-0c> z4Y=|&7adG-wYZ?RXu46eKka_3qTEUyKp#l&x?=|323{cpmZ z*AVRGPr%K8AKd-75WRJ+hU>QqxpTQS;PM1jepZO%_Z(ZtF<{s2G`Ra>4u0Al1NVG# zGu-@HaMz~?+`NN>d?(!V`7dz&KPHa#6oTDvXTy!RKIor=8!sPj{_X+43)k*AxPG1B z&S5XET$ePk`~%|4HwC^q@DBq&5Ib%rejk>bvH4sXuL|6}-H7M@{Vdp5LvBBnkvrGV zz}8U-?0Sp=^FMY;kRJ_q-JS~kC%E~>1^ptp`I_PHJiY=O=hDD03w%Z3*TC)P9=LJ+ zt`zN`3Hr@}e+akk3PJC8m|17pvJGSL6S?}|<$n`MnZP-n&OWHZtiB67bR9Bz+^D>q zq4`-^eRD_W9X?`6UQvEV)`(u6hqr6fE4?tiU~E=a;qab$#GtvvQi}G@Z56sIP zRa7wiM=hzeS2#E_zz|K=Z-1pl{GrOD5r36 zRzYG;1<{Rx>AC4+vhsVPE6UI6J7h?&?1J$*>61gqzPZ_j1JWnw72!E1yPz;DKRLs} zLysdzVO~aFPNXOpQkb4!IHWLd{0aHlg;_($nv)eNsVuWkUQQ;$NK|k_UVdip{Je2J zCKqOP&(BYv9DxEQL-UU7n_Jkn!_d59JsHR3r;kgn(Vq%DI(KN+q{5zK({smUWgeY- zR9<24yo{oPqjLx36+}1tXHD*vH!(LVA&hBqaO$3!nV(fqaC~}BQC9D~{BZ-*vvVCs zUP0DADSL1ymyw@!S|ADr)`zt7_Yb3d}v7TojZPcxRd=8_%m$|QWsvn;C2F#k z(lP(q$_hv0KLWp^M2uwRrL&ZdmW5wYqN80a&te+t3jdV9L{pM8i_ddpU_T!F>_itM zs3seUvnZXjL{k#Msf|fwbaEx@kVCW#aL%8iI7e4P`;s_H3;E`QyhL7C%xUi`-L=zH z-CxJaCx(--3S$|&h}+4?C8%_ty~v6Dch*InxZ>@yPk z!QG$SukPtQYWQbOw0r(3LUR7uiT&lyh-f0bHlDtB3VAYcqU5v zCU-zdZAq(WFF7rb$JFXQSN>VzoH-DYyTWWBWY zjHu2D6!5J%Nnh7KsT)g9Z+YC>cTzr)h@Ov(m6T29w)I+na_y6HCt>ZS?>kB&ISHq# zoo9W|Jrl@yIw*Oz&iR`Np0PbU6=7{=?_CS=@eK9nb4gTjG+irA&M|raTzWs0zR&*i zy||So=V>?Dd>%Nt?xj7g%QL9=N$!h(*8e%GRVMeW=kVyZQ!O3I33{Hk*V4KoYH%gp zm#)xX&uDz2lhWrxbCx`!NyfJ0RJ%+crWGY0508vhzpU!kstc>^jE$`PN9AiPeiDB@ zepb0}H2ME`nOAA{rWrG4@KWfa+KDGx?cS+!!*|Q>?w0Y&em7imbAwOU&420Dj`1?> z5|4yilkC+q%60G7uWeEGutila?fF!tCD*=H<;taRFVBoWu>ZyF@4a!y&l?uaIDP6L z3%1?Rs8X3SHgG?bT~O=dldk>kw+n`}ZcusRUm9HFt*cI~n_1_S`{_5$rq3Zu-sG{uL!s0-CP>-)9dx_Wnt3dJUCGA9> zzQ=SmZax?E60h1bJtw0mhgT?i4(=JRl*k*E%cwW-`d6HK7OSC4P6KSvEr03 zn=T%6(!;fTw0*bn8&f;CSoOdm2mf@{5iK(g9M`L6sYFv{AopN3QL1-jHYic;NBdQ;(mreE8*@ z=1wHJ0przndG+GI96M(a!ZQog`Nk+yi8MRx5%Oihf{IHDk(4Dl$d;pN%6s2`RLs6vJM-QTYt{!AIqZt;+0b7 zRVhA>vNI|rUvIF5A#?6XZpE|rOK!y(FE<#{YvtAr=hRvBeZ3`boPF~Lom#mST?L76 zD=Il#rruVUdYM^i&hljF+2LNNY1Vh0r(g5^=8wO-^p@}6d%1AM>W{uG9okWO543s1 zs@~%=J~;f2@1IyXr{$S1=iRfp)};^5daq&Cx5wwEwYX*Z+zq+0xrev=e$!{`cdddV z!^w$5l#LT!+W5CSuNzM5AYaJw5-;zoV#z%c-~Zoiw~)|xx%i2K=uA1Q{hafY^O&2P z9Cf!YRgOA(;cW|M9J_Vv?BBooYMI9?^?wN`3OzW$mFhv{&-i4M9Ub67ebLH!>;OlD1){Y^6Tyh+Jz z@x)gXU#WCppQ571_qA((R;6?1zgd22v@LvT@7^zlJ}|t?xECsa*RavtYnz3=;R~@x zO?YPL^y}|C;GpSUhOgN8^(R;T-f&4#qw`wy{JeFyrR$EZHn;tTpATAIX+xbQckR)2 z){5VACd@r$TF)u_wwZC&%7vf&aM+^xG zMynUE5k(F!`xie7>c(D=UM?-ZC#cW^{~ys5S5_km9sYWd@E?fP35+4~k5^2MuJ#g+ z;^Om2IsVpA?Dq?$`I5Dlv*WX0O74J}yC-)*lOE$1TwHeVRcpV!_`907f86)owB8${ z9pL6&c+~bgyMORY!>5L1co2Jlw1V1yH}<*3$1iDd^(kv!zhz9V6Mw$-$tL%`dfba| z{CdFT{bvr%Y<6Pz=8fL(ll#^#Yl>s)WytI`|F?Gf{$hKFe%rQfwkT_Pv(!4LZ5@Fb<1NpWuAEO+25*9yK%#J*S-42 z#>?I*yWh!M4j8z2`Azj3&OCo^yFFfcVNUtYmp)tV>?LXYwtr&lZ!hhbyR3h^*K^XY z{bVf9`ALiAtGiKD32zk+Z! z;X!uduWqFtz_j}}dwkad+})Q!(e5nXw~0qE52G=qm%n}l^?nR%wJ-RJ zL0d20YxrkJcU`mY{J9t3-}T0g1@kLkUVZ2Mw)?++Vz(c@p5O89_sXyMGIaqGnZuRG zNW4!KRze%2hzOUC~lARf~ulcP^)2A9tQ}Nb>x9W8>N7XO}IOR!T}IEV^>rj7=Lyl=g*{i)^xA*;iQH~zkc+cS)&#XIk@?)2X1OUa`l#J z?Rt$_xn|C}>B~N;{oIFVTyXoj4M+d+MuS1;_1u2vJ$Jo2zhlo%?dR-relP2Zn7432 zi96Uz(R&a6%Ux@0f)t40WPG&m$}yabHSIPGf1-8v&97Wh<)!S#H74G)?*@MomT5U_G9*Z zfA077ZmRrY*;-TIeDlcHA0Kh^p?${{9rW0Syw=+en=o=i?=v6nJgi)c&QHBOI5*z- zwF!6CTK@JO+i&?T^QxA=*WW!1dna?O^wcve&uYBmtL^jOdUR&ZvA@!87k1`g6x7t{?~k z#7e+U%B#FF)ee`|8~_@S!UG zuAXsQQT~?C?#|tR?SS+vukST>Mx$Ro?XmK}dGC#Q^tRd8_kME!F1@c6{Lw|&^C z#>Lm{_wk@*kJalr;;yN8HCZ=*?MqKBoBU*#^*bKlHvFgarZo5_zwGAK%NuvyK5u@f zIhp59{N{o$XQythay%F-(>%Gin!w`!`5e#_hamDa9sCc~PsJy(K#EZqgnzspx9=4?(@x1LWnLBz7-DBR*Q5PTc@f_cC*CFu? z&~z_Pp=-F8cv9K1SXtrB6lIn1*%`i9jaNTQUcNsZi{huZN%!`}?h{kplgbj$TT+$P zvl8$B3-2u}F?t1~;%5;xGIx24T!~d#-o8`(5Vw?7yW(mNPPN)KVTn-&Mt_&^;Nnmh z{(YztqbL3$)FH*8zW@7BB}UDr{(V&?;~s)l@fdb(u*7IqYN*{yO|)dBcVp)Jy}iUs zo0W`f%RiZwjH1r8e~4DnX5W7@D{0}(e=;lC*{lA^tYnXW@K0u)ir1;;^nYmK&|#M(BHf`2t1>LJ1`0WM9Eg!St+wRBvfc~80 z63>-miEl|y199=Jm-4rS|L`}^ckwKKq_$VzL3xGQqbG+a&Cxqi;c2q&&xuS12iJ9M*o`$p^n){vX918-)M> literal 0 HcmV?d00001 diff --git a/.vs/HMI Label And Editor Control/v15/Server/sqlite3/storage.ide-shm b/.vs/HMI Label And Editor Control/v15/Server/sqlite3/storage.ide-shm new file mode 100644 index 0000000000000000000000000000000000000000..f64c4f61b5579e3ab280e0ee6182062da2ce6106 GIT binary patch literal 32768 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%0AnmWl_iIk- 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 a7$`$Q2_OG+KPX%PB}&yXBS;5tyX2#LyT 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 z

C)bd%hl8UPP%7nEw<6E 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�$w;V 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

Psc3TM7h6)r2Z(H21iin6t5`d8hk7<& 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 literal 0 HcmV?d00001 diff --git a/HMI Label And Editor Control/App.config b/HMI Label And Editor Control/App.config new file mode 100644 index 0000000..d1428ad --- /dev/null +++ b/HMI Label And Editor Control/App.config @@ -0,0 +1,6 @@ + + + + + + diff --git a/HMI Label And Editor Control/DisplayControl.cs b/HMI Label And Editor Control/DisplayControl.cs new file mode 100644 index 0000000..dacb984 --- /dev/null +++ b/HMI Label And Editor Control/DisplayControl.cs @@ -0,0 +1,38 @@ +using System.Windows.Forms; + +namespace How_to_create_HMI_Control_Real_Time +{ + public class DisplayControl : Label + { + + public DisplayControl() + { + + this.BackColor = System.Drawing.Color.Black; + this.BorderStyle = System.Windows.Forms.BorderStyle.Fixed3D; + this.Font = new System.Drawing.Font("Microsoft Sans Serif", 32F, System.Drawing.FontStyle.Bold, + System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.ForeColor = System.Drawing.Color.Lime; + this.TextAlign = System.Drawing.ContentAlignment.MiddleCenter; + Label.CheckForIllegalCrossThreadCalls = false; + } + + protected override void InitLayout() + { + this.AutoSize = false; + base.InitLayout(); + } + + //public Register Register + //{ + // get { return _Register; } + // set { + // _Register = value; + // if (_Register == null) return; + // if (this.DataBindings.Count > 0) + // this.DataBindings.Clear(); + // this.DataBindings.Add("Text", _Register, "Value", true, DataSourceUpdateMode.OnPropertyChanged); + // } + //} + } +} diff --git a/HMI Label And Editor Control/EditorControl.cs b/HMI Label And Editor Control/EditorControl.cs new file mode 100644 index 0000000..ac80708 --- /dev/null +++ b/HMI Label And Editor Control/EditorControl.cs @@ -0,0 +1,76 @@ +using System; +using System.Windows.Forms; + +namespace How_to_create_HMI_Control_Real_Time +{ + public class EditorControl : TextBox + { + //private Register _Register = null; + + public EditorControl() + { + this.BackColor = System.Drawing.Color.Black; + this.BorderStyle = System.Windows.Forms.BorderStyle.Fixed3D; + this.Font = new System.Drawing.Font("Microsoft Sans Serif", 32F, System.Drawing.FontStyle.Bold, + System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.ForeColor = System.Drawing.Color.Lime; + this.TextAlign = HorizontalAlignment.Center; + this.Text = "0"; + TextBox.CheckForIllegalCrossThreadCalls = false; + } + + protected override void InitLayout() + { + this.AutoSize = false; + base.InitLayout(); + } + + protected override void OnTextChanged(EventArgs e) + { + base.OnTextChanged(e); + if (!System.Text.RegularExpressions.Regex.IsMatch(this.Text, "^[0-9]*$") + || string.IsNullOrEmpty(this.Text) + || string.IsNullOrWhiteSpace(this.Text)) + { + this.Text = "0"; + } + } + + protected override void OnGotFocus(EventArgs e) + { + base.OnGotFocus(e); + if (this.DataBindings.Count > 0) + this.DataBindings.Clear(); + } + + //protected override void OnLostFocus(EventArgs e) + //{ + // base.OnLostFocus(e); + // if (this.DataBindings.Count > 0) + // this.DataBindings.Clear(); + // this.DataBindings.Add("Text", _Register, "Value", true, DataSourceUpdateMode.OnPropertyChanged); + //} + + //protected override void OnKeyDown(KeyEventArgs e) + //{ + // base.OnKeyDown(e); + // if (e.KeyCode == Keys.Enter && _Register != null) + // { + // ModbusRTUProtocol.WriteSingleRegister(_Register.Address, ushort.Parse(this.Text)); // Max= 65535 + // } + //} + + //public Register Register + //{ + // get { return _Register; } + // set + // { + // _Register = value; + // if (_Register == null) return; + // if (this.DataBindings.Count > 0) + // this.DataBindings.Clear(); + // this.DataBindings.Add("Text", _Register, "Value", true, DataSourceUpdateMode.OnPropertyChanged); + // } + //} + } +} diff --git a/HMI Label And Editor Control/FormMain.Designer.cs b/HMI Label And Editor Control/FormMain.Designer.cs new file mode 100644 index 0000000..84dde85 --- /dev/null +++ b/HMI Label And Editor Control/FormMain.Designer.cs @@ -0,0 +1,527 @@ +namespace How_to_create_HMI_Control_Real_Time +{ + partial class FormMain + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.label6 = new System.Windows.Forms.Label(); + this.label7 = new System.Windows.Forms.Label(); + this.pictureBox1 = new System.Windows.Forms.PictureBox(); + this.label5 = new System.Windows.Forms.Label(); + this.label1 = new System.Windows.Forms.Label(); + this.displayControl5 = new How_to_create_HMI_Control_Real_Time.DisplayControl(); + this.editorControl5 = new How_to_create_HMI_Control_Real_Time.EditorControl(); + this.displayControl4 = new How_to_create_HMI_Control_Real_Time.DisplayControl(); + this.editorControl4 = new How_to_create_HMI_Control_Real_Time.EditorControl(); + this.displayControl3 = new How_to_create_HMI_Control_Real_Time.DisplayControl(); + this.editorControl3 = new How_to_create_HMI_Control_Real_Time.EditorControl(); + this.displayControl2 = new How_to_create_HMI_Control_Real_Time.DisplayControl(); + this.editorControl2 = new How_to_create_HMI_Control_Real_Time.EditorControl(); + this.displayControl1 = new How_to_create_HMI_Control_Real_Time.DisplayControl(); + this.editorControl1 = new How_to_create_HMI_Control_Real_Time.EditorControl(); + this.displayControl11 = new How_to_create_HMI_Control_Real_Time.DisplayControl(); + this.displayControl12 = new How_to_create_HMI_Control_Real_Time.DisplayControl(); + this.displayControl13 = new How_to_create_HMI_Control_Real_Time.DisplayControl(); + this.displayControl14 = new How_to_create_HMI_Control_Real_Time.DisplayControl(); + this.displayControl15 = new How_to_create_HMI_Control_Real_Time.DisplayControl(); + this.displayControl16 = new How_to_create_HMI_Control_Real_Time.DisplayControl(); + this.displayControl17 = new How_to_create_HMI_Control_Real_Time.DisplayControl(); + this.displayControl18 = new How_to_create_HMI_Control_Real_Time.DisplayControl(); + this.displayControl19 = new How_to_create_HMI_Control_Real_Time.DisplayControl(); + this.displayControl20 = new How_to_create_HMI_Control_Real_Time.DisplayControl(); + this.displayControl21 = new How_to_create_HMI_Control_Real_Time.DisplayControl(); + this.displayControl22 = new How_to_create_HMI_Control_Real_Time.DisplayControl(); + this.displayControl25 = new How_to_create_HMI_Control_Real_Time.DisplayControl(); + this.displayControl26 = new How_to_create_HMI_Control_Real_Time.DisplayControl(); + ((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).BeginInit(); + this.SuspendLayout(); + // + // label6 + // + this.label6.BackColor = System.Drawing.Color.Black; + this.label6.BorderStyle = System.Windows.Forms.BorderStyle.Fixed3D; + this.label6.Font = new System.Drawing.Font("Microsoft Sans Serif", 32.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.label6.ForeColor = System.Drawing.Color.Yellow; + this.label6.Location = new System.Drawing.Point(12, 9); + this.label6.Name = "label6"; + this.label6.Size = new System.Drawing.Size(1094, 112); + this.label6.TabIndex = 5; + this.label6.Text = "Modbus RTU Real-Time With Visual C# Application : HMI Label And HMI Editor Contro" + + "l"; + this.label6.TextAlign = System.Drawing.ContentAlignment.MiddleCenter; + // + // label7 + // + this.label7.AutoSize = true; + this.label7.Font = new System.Drawing.Font("Microsoft Sans Serif", 12F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.label7.ForeColor = System.Drawing.Color.Blue; + this.label7.Location = new System.Drawing.Point(137, 411); + this.label7.Name = "label7"; + this.label7.Size = new System.Drawing.Size(206, 20); + this.label7.TabIndex = 10; + this.label7.Text = "Mobile: +84.909.886.483"; + // + // pictureBox1 + // + this.pictureBox1.Image = global::How_to_create_HMI_Control_Real_Time.Properties.Resources.ISS; + this.pictureBox1.Location = new System.Drawing.Point(13, 386); + this.pictureBox1.Name = "pictureBox1"; + this.pictureBox1.Size = new System.Drawing.Size(118, 75); + this.pictureBox1.SizeMode = System.Windows.Forms.PictureBoxSizeMode.StretchImage; + this.pictureBox1.TabIndex = 9; + this.pictureBox1.TabStop = false; + // + // label5 + // + this.label5.AutoSize = true; + this.label5.Font = new System.Drawing.Font("Microsoft Sans Serif", 12F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.label5.ForeColor = System.Drawing.Color.Red; + this.label5.Location = new System.Drawing.Point(137, 441); + this.label5.Name = "label5"; + this.label5.Size = new System.Drawing.Size(335, 20); + this.label5.TabIndex = 8; + this.label5.Text = "E-mail: hoangluu.automation@gmail.com"; + // + // label1 + // + this.label1.AutoSize = true; + this.label1.Font = new System.Drawing.Font("Microsoft Sans Serif", 12F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.label1.ForeColor = System.Drawing.Color.Blue; + this.label1.Location = new System.Drawing.Point(137, 386); + this.label1.Name = "label1"; + this.label1.Size = new System.Drawing.Size(269, 20); + this.label1.TabIndex = 7; + this.label1.Text = "Designed By Industrial Networks"; + // + // displayControl5 + // + this.displayControl5.BackColor = System.Drawing.Color.Black; + this.displayControl5.BorderStyle = System.Windows.Forms.BorderStyle.Fixed3D; + this.displayControl5.Font = new System.Drawing.Font("Microsoft Sans Serif", 32F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.displayControl5.ForeColor = System.Drawing.Color.Lime; + this.displayControl5.Location = new System.Drawing.Point(906, 197); + this.displayControl5.Name = "displayControl5"; + this.displayControl5.Register = null; + this.displayControl5.Size = new System.Drawing.Size(198, 50); + this.displayControl5.TabIndex = 20; + this.displayControl5.Text = "0"; + this.displayControl5.TextAlign = System.Drawing.ContentAlignment.MiddleCenter; + // + // editorControl5 + // + this.editorControl5.BackColor = System.Drawing.Color.Black; + this.editorControl5.Font = new System.Drawing.Font("Microsoft Sans Serif", 32.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.editorControl5.ForeColor = System.Drawing.Color.Red; + this.editorControl5.Location = new System.Drawing.Point(906, 247); + this.editorControl5.Name = "editorControl5"; + this.editorControl5.Register = null; + this.editorControl5.Size = new System.Drawing.Size(198, 53); + this.editorControl5.TabIndex = 19; + this.editorControl5.Text = "0"; + this.editorControl5.TextAlign = System.Windows.Forms.HorizontalAlignment.Center; + // + // displayControl4 + // + this.displayControl4.BackColor = System.Drawing.Color.Black; + this.displayControl4.BorderStyle = System.Windows.Forms.BorderStyle.Fixed3D; + this.displayControl4.Font = new System.Drawing.Font("Microsoft Sans Serif", 32F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.displayControl4.ForeColor = System.Drawing.Color.Lime; + this.displayControl4.Location = new System.Drawing.Point(704, 197); + this.displayControl4.Name = "displayControl4"; + this.displayControl4.Register = null; + this.displayControl4.Size = new System.Drawing.Size(198, 50); + this.displayControl4.TabIndex = 18; + this.displayControl4.Text = "0"; + this.displayControl4.TextAlign = System.Drawing.ContentAlignment.MiddleCenter; + // + // editorControl4 + // + this.editorControl4.BackColor = System.Drawing.Color.Black; + this.editorControl4.Font = new System.Drawing.Font("Microsoft Sans Serif", 32.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.editorControl4.ForeColor = System.Drawing.Color.Red; + this.editorControl4.Location = new System.Drawing.Point(704, 247); + this.editorControl4.Name = "editorControl4"; + this.editorControl4.Register = null; + this.editorControl4.Size = new System.Drawing.Size(198, 53); + this.editorControl4.TabIndex = 17; + this.editorControl4.Text = "0"; + this.editorControl4.TextAlign = System.Windows.Forms.HorizontalAlignment.Center; + // + // displayControl3 + // + this.displayControl3.BackColor = System.Drawing.Color.Black; + this.displayControl3.BorderStyle = System.Windows.Forms.BorderStyle.Fixed3D; + this.displayControl3.Font = new System.Drawing.Font("Microsoft Sans Serif", 32F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.displayControl3.ForeColor = System.Drawing.Color.Lime; + this.displayControl3.Location = new System.Drawing.Point(502, 198); + this.displayControl3.Name = "displayControl3"; + this.displayControl3.Register = null; + this.displayControl3.Size = new System.Drawing.Size(198, 50); + this.displayControl3.TabIndex = 16; + this.displayControl3.Text = "0"; + this.displayControl3.TextAlign = System.Drawing.ContentAlignment.MiddleCenter; + // + // editorControl3 + // + this.editorControl3.BackColor = System.Drawing.Color.Black; + this.editorControl3.Font = new System.Drawing.Font("Microsoft Sans Serif", 32.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.editorControl3.ForeColor = System.Drawing.Color.Red; + this.editorControl3.Location = new System.Drawing.Point(502, 248); + this.editorControl3.Name = "editorControl3"; + this.editorControl3.Register = null; + this.editorControl3.Size = new System.Drawing.Size(198, 53); + this.editorControl3.TabIndex = 15; + this.editorControl3.Text = "0"; + this.editorControl3.TextAlign = System.Windows.Forms.HorizontalAlignment.Center; + // + // displayControl2 + // + this.displayControl2.BackColor = System.Drawing.Color.Black; + this.displayControl2.BorderStyle = System.Windows.Forms.BorderStyle.Fixed3D; + this.displayControl2.Font = new System.Drawing.Font("Microsoft Sans Serif", 32F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.displayControl2.ForeColor = System.Drawing.Color.Lime; + this.displayControl2.Location = new System.Drawing.Point(300, 198); + this.displayControl2.Name = "displayControl2"; + this.displayControl2.Register = null; + this.displayControl2.Size = new System.Drawing.Size(198, 50); + this.displayControl2.TabIndex = 14; + this.displayControl2.Text = "0"; + this.displayControl2.TextAlign = System.Drawing.ContentAlignment.MiddleCenter; + // + // editorControl2 + // + this.editorControl2.BackColor = System.Drawing.Color.Black; + this.editorControl2.Font = new System.Drawing.Font("Microsoft Sans Serif", 32.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.editorControl2.ForeColor = System.Drawing.Color.Red; + this.editorControl2.Location = new System.Drawing.Point(300, 248); + this.editorControl2.Name = "editorControl2"; + this.editorControl2.Register = null; + this.editorControl2.Size = new System.Drawing.Size(198, 53); + this.editorControl2.TabIndex = 13; + this.editorControl2.Text = "0"; + this.editorControl2.TextAlign = System.Windows.Forms.HorizontalAlignment.Center; + // + // displayControl1 + // + this.displayControl1.BackColor = System.Drawing.Color.Black; + this.displayControl1.BorderStyle = System.Windows.Forms.BorderStyle.Fixed3D; + this.displayControl1.Font = new System.Drawing.Font("Microsoft Sans Serif", 32F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.displayControl1.ForeColor = System.Drawing.Color.Lime; + this.displayControl1.Location = new System.Drawing.Point(98, 197); + this.displayControl1.Name = "displayControl1"; + this.displayControl1.Register = null; + this.displayControl1.Size = new System.Drawing.Size(198, 50); + this.displayControl1.TabIndex = 12; + this.displayControl1.Text = "0"; + this.displayControl1.TextAlign = System.Drawing.ContentAlignment.MiddleCenter; + // + // editorControl1 + // + this.editorControl1.BackColor = System.Drawing.Color.Black; + this.editorControl1.Font = new System.Drawing.Font("Microsoft Sans Serif", 32.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.editorControl1.ForeColor = System.Drawing.Color.Red; + this.editorControl1.Location = new System.Drawing.Point(98, 247); + this.editorControl1.Name = "editorControl1"; + this.editorControl1.Register = null; + this.editorControl1.Size = new System.Drawing.Size(198, 53); + this.editorControl1.TabIndex = 11; + this.editorControl1.Text = "0"; + this.editorControl1.TextAlign = System.Windows.Forms.HorizontalAlignment.Center; + // + // displayControl11 + // + this.displayControl11.BackColor = System.Drawing.Color.MidnightBlue; + this.displayControl11.BorderStyle = System.Windows.Forms.BorderStyle.Fixed3D; + this.displayControl11.Font = new System.Drawing.Font("Microsoft Sans Serif", 32F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.displayControl11.ForeColor = System.Drawing.Color.White; + this.displayControl11.Location = new System.Drawing.Point(98, 147); + this.displayControl11.Name = "displayControl11"; + this.displayControl11.Register = null; + this.displayControl11.Size = new System.Drawing.Size(198, 50); + this.displayControl11.TabIndex = 12; + this.displayControl11.Text = "40001"; + this.displayControl11.TextAlign = System.Drawing.ContentAlignment.MiddleCenter; + // + // displayControl12 + // + this.displayControl12.BackColor = System.Drawing.Color.MidnightBlue; + this.displayControl12.BorderStyle = System.Windows.Forms.BorderStyle.Fixed3D; + this.displayControl12.Font = new System.Drawing.Font("Microsoft Sans Serif", 32F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.displayControl12.ForeColor = System.Drawing.Color.White; + this.displayControl12.Location = new System.Drawing.Point(300, 148); + this.displayControl12.Name = "displayControl12"; + this.displayControl12.Register = null; + this.displayControl12.Size = new System.Drawing.Size(198, 50); + this.displayControl12.TabIndex = 14; + this.displayControl12.Text = "40002"; + this.displayControl12.TextAlign = System.Drawing.ContentAlignment.MiddleCenter; + // + // displayControl13 + // + this.displayControl13.BackColor = System.Drawing.Color.MidnightBlue; + this.displayControl13.BorderStyle = System.Windows.Forms.BorderStyle.Fixed3D; + this.displayControl13.Font = new System.Drawing.Font("Microsoft Sans Serif", 32F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.displayControl13.ForeColor = System.Drawing.Color.White; + this.displayControl13.Location = new System.Drawing.Point(502, 148); + this.displayControl13.Name = "displayControl13"; + this.displayControl13.Register = null; + this.displayControl13.Size = new System.Drawing.Size(198, 50); + this.displayControl13.TabIndex = 16; + this.displayControl13.Text = "40003"; + this.displayControl13.TextAlign = System.Drawing.ContentAlignment.MiddleCenter; + // + // displayControl14 + // + this.displayControl14.BackColor = System.Drawing.Color.MidnightBlue; + this.displayControl14.BorderStyle = System.Windows.Forms.BorderStyle.Fixed3D; + this.displayControl14.Font = new System.Drawing.Font("Microsoft Sans Serif", 32F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.displayControl14.ForeColor = System.Drawing.Color.White; + this.displayControl14.Location = new System.Drawing.Point(704, 147); + this.displayControl14.Name = "displayControl14"; + this.displayControl14.Register = null; + this.displayControl14.Size = new System.Drawing.Size(198, 50); + this.displayControl14.TabIndex = 18; + this.displayControl14.Text = "40004"; + this.displayControl14.TextAlign = System.Drawing.ContentAlignment.MiddleCenter; + // + // displayControl15 + // + this.displayControl15.BackColor = System.Drawing.Color.MidnightBlue; + this.displayControl15.BorderStyle = System.Windows.Forms.BorderStyle.Fixed3D; + this.displayControl15.Font = new System.Drawing.Font("Microsoft Sans Serif", 32F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.displayControl15.ForeColor = System.Drawing.Color.White; + this.displayControl15.Location = new System.Drawing.Point(906, 147); + this.displayControl15.Name = "displayControl15"; + this.displayControl15.Register = null; + this.displayControl15.Size = new System.Drawing.Size(198, 50); + this.displayControl15.TabIndex = 20; + this.displayControl15.Text = "40005"; + this.displayControl15.TextAlign = System.Drawing.ContentAlignment.MiddleCenter; + // + // displayControl16 + // + this.displayControl16.BackColor = System.Drawing.Color.MidnightBlue; + this.displayControl16.BorderStyle = System.Windows.Forms.BorderStyle.Fixed3D; + this.displayControl16.Font = new System.Drawing.Font("Microsoft Sans Serif", 32F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.displayControl16.ForeColor = System.Drawing.Color.White; + this.displayControl16.Location = new System.Drawing.Point(98, 301); + this.displayControl16.Name = "displayControl16"; + this.displayControl16.Register = null; + this.displayControl16.Size = new System.Drawing.Size(198, 50); + this.displayControl16.TabIndex = 22; + this.displayControl16.Text = "40006"; + this.displayControl16.TextAlign = System.Drawing.ContentAlignment.MiddleCenter; + // + // displayControl17 + // + this.displayControl17.BackColor = System.Drawing.Color.MidnightBlue; + this.displayControl17.BorderStyle = System.Windows.Forms.BorderStyle.Fixed3D; + this.displayControl17.Font = new System.Drawing.Font("Microsoft Sans Serif", 32F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.displayControl17.ForeColor = System.Drawing.Color.White; + this.displayControl17.Location = new System.Drawing.Point(300, 302); + this.displayControl17.Name = "displayControl17"; + this.displayControl17.Register = null; + this.displayControl17.Size = new System.Drawing.Size(198, 50); + this.displayControl17.TabIndex = 24; + this.displayControl17.Text = "40007"; + this.displayControl17.TextAlign = System.Drawing.ContentAlignment.MiddleCenter; + // + // displayControl18 + // + this.displayControl18.BackColor = System.Drawing.Color.MidnightBlue; + this.displayControl18.BorderStyle = System.Windows.Forms.BorderStyle.Fixed3D; + this.displayControl18.Font = new System.Drawing.Font("Microsoft Sans Serif", 32F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.displayControl18.ForeColor = System.Drawing.Color.White; + this.displayControl18.Location = new System.Drawing.Point(502, 302); + this.displayControl18.Name = "displayControl18"; + this.displayControl18.Register = null; + this.displayControl18.Size = new System.Drawing.Size(198, 50); + this.displayControl18.TabIndex = 26; + this.displayControl18.Text = "40008"; + this.displayControl18.TextAlign = System.Drawing.ContentAlignment.MiddleCenter; + // + // displayControl19 + // + this.displayControl19.BackColor = System.Drawing.Color.MidnightBlue; + this.displayControl19.BorderStyle = System.Windows.Forms.BorderStyle.Fixed3D; + this.displayControl19.Font = new System.Drawing.Font("Microsoft Sans Serif", 32F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.displayControl19.ForeColor = System.Drawing.Color.White; + this.displayControl19.Location = new System.Drawing.Point(704, 301); + this.displayControl19.Name = "displayControl19"; + this.displayControl19.Register = null; + this.displayControl19.Size = new System.Drawing.Size(198, 50); + this.displayControl19.TabIndex = 28; + this.displayControl19.Text = "40009"; + this.displayControl19.TextAlign = System.Drawing.ContentAlignment.MiddleCenter; + // + // displayControl20 + // + this.displayControl20.BackColor = System.Drawing.Color.MidnightBlue; + this.displayControl20.BorderStyle = System.Windows.Forms.BorderStyle.Fixed3D; + this.displayControl20.Font = new System.Drawing.Font("Microsoft Sans Serif", 32F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.displayControl20.ForeColor = System.Drawing.Color.White; + this.displayControl20.Location = new System.Drawing.Point(906, 301); + this.displayControl20.Name = "displayControl20"; + this.displayControl20.Register = null; + this.displayControl20.Size = new System.Drawing.Size(198, 50); + this.displayControl20.TabIndex = 30; + this.displayControl20.Text = "40010"; + this.displayControl20.TextAlign = System.Drawing.ContentAlignment.MiddleCenter; + // + // displayControl21 + // + this.displayControl21.BackColor = System.Drawing.Color.MidnightBlue; + this.displayControl21.BorderStyle = System.Windows.Forms.BorderStyle.Fixed3D; + this.displayControl21.Font = new System.Drawing.Font("Microsoft Sans Serif", 32F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.displayControl21.ForeColor = System.Drawing.Color.White; + this.displayControl21.Location = new System.Drawing.Point(12, 198); + this.displayControl21.Name = "displayControl21"; + this.displayControl21.Register = null; + this.displayControl21.Size = new System.Drawing.Size(86, 50); + this.displayControl21.TabIndex = 31; + this.displayControl21.Text = "PV"; + this.displayControl21.TextAlign = System.Drawing.ContentAlignment.MiddleCenter; + // + // displayControl22 + // + this.displayControl22.BackColor = System.Drawing.Color.MidnightBlue; + this.displayControl22.BorderStyle = System.Windows.Forms.BorderStyle.Fixed3D; + this.displayControl22.Font = new System.Drawing.Font("Microsoft Sans Serif", 32F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.displayControl22.ForeColor = System.Drawing.Color.White; + this.displayControl22.Location = new System.Drawing.Point(12, 247); + this.displayControl22.Name = "displayControl22"; + this.displayControl22.Register = null; + this.displayControl22.Size = new System.Drawing.Size(86, 53); + this.displayControl22.TabIndex = 32; + this.displayControl22.Text = "SV"; + this.displayControl22.TextAlign = System.Drawing.ContentAlignment.MiddleCenter; + // + // displayControl25 + // + this.displayControl25.BackColor = System.Drawing.Color.MidnightBlue; + this.displayControl25.BorderStyle = System.Windows.Forms.BorderStyle.Fixed3D; + this.displayControl25.Font = new System.Drawing.Font("Microsoft Sans Serif", 32F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.displayControl25.ForeColor = System.Drawing.Color.White; + this.displayControl25.Location = new System.Drawing.Point(12, 301); + this.displayControl25.Name = "displayControl25"; + this.displayControl25.Register = null; + this.displayControl25.Size = new System.Drawing.Size(86, 50); + this.displayControl25.TabIndex = 33; + this.displayControl25.TextAlign = System.Drawing.ContentAlignment.MiddleCenter; + // + // displayControl26 + // + this.displayControl26.BackColor = System.Drawing.Color.MidnightBlue; + this.displayControl26.BorderStyle = System.Windows.Forms.BorderStyle.Fixed3D; + this.displayControl26.Font = new System.Drawing.Font("Microsoft Sans Serif", 32F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.displayControl26.ForeColor = System.Drawing.Color.White; + this.displayControl26.Location = new System.Drawing.Point(12, 147); + this.displayControl26.Name = "displayControl26"; + this.displayControl26.Register = null; + this.displayControl26.Size = new System.Drawing.Size(86, 50); + this.displayControl26.TabIndex = 34; + this.displayControl26.TextAlign = System.Drawing.ContentAlignment.MiddleCenter; + // + // FormMain + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(1118, 502); + this.Controls.Add(this.displayControl26); + this.Controls.Add(this.displayControl25); + this.Controls.Add(this.displayControl22); + this.Controls.Add(this.displayControl21); + this.Controls.Add(this.displayControl20); + this.Controls.Add(this.displayControl19); + this.Controls.Add(this.displayControl18); + this.Controls.Add(this.displayControl17); + this.Controls.Add(this.displayControl16); + this.Controls.Add(this.displayControl15); + this.Controls.Add(this.displayControl5); + this.Controls.Add(this.displayControl14); + this.Controls.Add(this.editorControl5); + this.Controls.Add(this.displayControl4); + this.Controls.Add(this.displayControl13); + this.Controls.Add(this.editorControl4); + this.Controls.Add(this.displayControl3); + this.Controls.Add(this.displayControl12); + this.Controls.Add(this.editorControl3); + this.Controls.Add(this.displayControl2); + this.Controls.Add(this.displayControl11); + this.Controls.Add(this.editorControl2); + this.Controls.Add(this.displayControl1); + this.Controls.Add(this.editorControl1); + this.Controls.Add(this.label7); + this.Controls.Add(this.pictureBox1); + this.Controls.Add(this.label5); + this.Controls.Add(this.label1); + this.Controls.Add(this.label6); + this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedSingle; + this.Name = "FormMain"; + this.Text = "HMI Label And HMI Editor Control"; + this.FormClosing += new System.Windows.Forms.FormClosingEventHandler(this.FormMain_FormClosing); + this.Load += new System.EventHandler(this.FormMain_Load); + ((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).EndInit(); + this.ResumeLayout(false); + this.PerformLayout(); + + } + + #endregion + + private System.Windows.Forms.Label label6; + private System.Windows.Forms.Label label7; + private System.Windows.Forms.PictureBox pictureBox1; + private System.Windows.Forms.Label label5; + private System.Windows.Forms.Label label1; + private EditorControl editorControl1; + private DisplayControl displayControl1; + private DisplayControl displayControl2; + private EditorControl editorControl2; + private DisplayControl displayControl3; + private EditorControl editorControl3; + private DisplayControl displayControl4; + private EditorControl editorControl4; + private DisplayControl displayControl5; + private EditorControl editorControl5; + private DisplayControl displayControl11; + private DisplayControl displayControl12; + private DisplayControl displayControl13; + private DisplayControl displayControl14; + private DisplayControl displayControl15; + private DisplayControl displayControl16; + private DisplayControl displayControl17; + private DisplayControl displayControl18; + private DisplayControl displayControl19; + private DisplayControl displayControl20; + private DisplayControl displayControl21; + private DisplayControl displayControl22; + private DisplayControl displayControl25; + private DisplayControl displayControl26; + } +} + diff --git a/HMI Label And Editor Control/FormMain.cs b/HMI Label And Editor Control/FormMain.cs new file mode 100644 index 0000000..87761ba --- /dev/null +++ b/HMI Label And Editor Control/FormMain.cs @@ -0,0 +1,67 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Forms; + +namespace How_to_create_HMI_Control_Real_Time +{ + public partial class FormMain : Form + { + public FormMain() + { + InitializeComponent(); + InitializeRegisters(); + } + + private void FormMain_Load(object sender, EventArgs e) + { + try + { + + ModbusRTUProtocol.Start(); + displayControl1.Register = ModbusRTUProtocol.Registers[0]; + displayControl2.Register = ModbusRTUProtocol.Registers[1]; + displayControl3.Register = ModbusRTUProtocol.Registers[2]; + displayControl4.Register = ModbusRTUProtocol.Registers[3]; + displayControl5.Register = ModbusRTUProtocol.Registers[4]; + + editorControl1.Register = ModbusRTUProtocol.Registers[5]; + editorControl2.Register = ModbusRTUProtocol.Registers[6]; + editorControl3.Register = ModbusRTUProtocol.Registers[7]; + editorControl4.Register = ModbusRTUProtocol.Registers[8]; + editorControl5.Register = ModbusRTUProtocol.Registers[9]; + + } + + catch(Exception ex) + { + MessageBox.Show(ex.Message); + } + } + private void InitializeRegisters() + { + ModbusRTUProtocol.Registers.Clear(); + ModbusRTUProtocol.Registers.Add(new Register() { Address = 40001 }); + ModbusRTUProtocol.Registers.Add(new Register() { Address = 40002 }); + ModbusRTUProtocol.Registers.Add(new Register() { Address = 40003 }); + ModbusRTUProtocol.Registers.Add(new Register() { Address = 40004 }); + ModbusRTUProtocol.Registers.Add(new Register() { Address = 40005 }); + ModbusRTUProtocol.Registers.Add(new Register() { Address = 40006 }); + ModbusRTUProtocol.Registers.Add(new Register() { Address = 40007 }); + ModbusRTUProtocol.Registers.Add(new Register() { Address = 40008 }); + ModbusRTUProtocol.Registers.Add(new Register() { Address = 40009 }); + ModbusRTUProtocol.Registers.Add(new Register() { Address = 40010 }); + + } + private void FormMain_FormClosing(object sender, FormClosingEventArgs e) + { + + } + + } +} diff --git a/HMI Label And Editor Control/FormMain.resx b/HMI Label And Editor Control/FormMain.resx new file mode 100644 index 0000000..1af7de1 --- /dev/null +++ b/HMI Label And Editor Control/FormMain.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/HMI Label And Editor Control/FormMain1.Designer.cs b/HMI Label And Editor Control/FormMain1.Designer.cs new file mode 100644 index 0000000..9f75ac3 --- /dev/null +++ b/HMI Label And Editor Control/FormMain1.Designer.cs @@ -0,0 +1,2422 @@ +namespace How_to_create_HMI_Control_Real_Time +{ + partial class FormMain + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.components = new System.ComponentModel.Container(); + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(FormMain)); + this.label6 = new System.Windows.Forms.Label(); + this.pictureBox3 = new System.Windows.Forms.PictureBox(); + this.HOME = new System.Windows.Forms.Button(); + this.label1 = new System.Windows.Forms.Label(); + this.label2 = new System.Windows.Forms.Label(); + this.label5 = new System.Windows.Forms.Label(); + this.button3 = new System.Windows.Forms.Button(); + this.Y_UP = new System.Windows.Forms.Button(); + this.button4 = new System.Windows.Forms.Button(); + this.button5 = new System.Windows.Forms.Button(); + this.button6 = new System.Windows.Forms.Button(); + this.button7 = new System.Windows.Forms.Button(); + this.Automanual = new System.Windows.Forms.Button(); + this.label4 = new System.Windows.Forms.Label(); + this.label7 = new System.Windows.Forms.Label(); + this.label8 = new System.Windows.Forms.Label(); + this.timer1 = new System.Windows.Forms.Timer(this.components); + this.SAVE = new System.Windows.Forms.Button(); + this.label14 = new System.Windows.Forms.Label(); + this.label15 = new System.Windows.Forms.Label(); + this.IC_Stack_Start = new System.Windows.Forms.Label(); + this.IC_Stack_End = new System.Windows.Forms.Label(); + this.IC_START_X = new System.Windows.Forms.Label(); + this.IC_START_Y = new System.Windows.Forms.Label(); + this.IC_END_X = new System.Windows.Forms.Label(); + this.IC_END_Y = new System.Windows.Forms.Label(); + this.SET_XY_IC = new System.Windows.Forms.Button(); + this.IC_Start_choice = new System.Windows.Forms.Label(); + this.IC_End_choice = new System.Windows.Forms.Label(); + this.groupBox1 = new System.Windows.Forms.GroupBox(); + this.IC_Stack_cot = new System.Windows.Forms.NumericUpDown(); + this.IC_Stack_hang = new System.Windows.Forms.NumericUpDown(); + this.label18 = new System.Windows.Forms.Label(); + this.label17 = new System.Windows.Forms.Label(); + this.groupBox2 = new System.Windows.Forms.GroupBox(); + this.ROM_Stack_hang = new System.Windows.Forms.NumericUpDown(); + this.ROM_Stack_cot = new System.Windows.Forms.NumericUpDown(); + this.label9 = new System.Windows.Forms.Label(); + this.label10 = new System.Windows.Forms.Label(); + this.SAVE_XY_ROM = new System.Windows.Forms.Button(); + this.label26 = new System.Windows.Forms.Label(); + this.SET_XY_ROM = new System.Windows.Forms.Button(); + this.label27 = new System.Windows.Forms.Label(); + this.label28 = new System.Windows.Forms.Label(); + this.ROM_End_choice = new System.Windows.Forms.Label(); + this.ROM_Start_choice = new System.Windows.Forms.Label(); + this.ROM_Stack_Start = new System.Windows.Forms.Label(); + this.ROM_END_Y = new System.Windows.Forms.Label(); + this.ROM_Stack_End = new System.Windows.Forms.Label(); + this.ROM_END_X = new System.Windows.Forms.Label(); + this.ROM_START_X = new System.Windows.Forms.Label(); + this.ROM_START_Y = new System.Windows.Forms.Label(); + this.comboBox1 = new System.Windows.Forms.ComboBox(); + this.pictureBox2 = new System.Windows.Forms.PictureBox(); + this.PUMP = new System.Windows.Forms.Button(); + this.VACUM_1 = new System.Windows.Forms.Button(); + this.VACUM_2 = new System.Windows.Forms.Button(); + this.LED = new System.Windows.Forms.Button(); + this.Calib_System = new System.Windows.Forms.TabControl(); + this.tabPage1 = new System.Windows.Forms.TabPage(); + this.tabPage2 = new System.Windows.Forms.TabPage(); + this.tabPage3 = new System.Windows.Forms.TabPage(); + this.NG_Stack_hang = new System.Windows.Forms.NumericUpDown(); + this.NG_Stack_cot = new System.Windows.Forms.NumericUpDown(); + this.label22 = new System.Windows.Forms.Label(); + this.label23 = new System.Windows.Forms.Label(); + this.Save_NG_Stack = new System.Windows.Forms.Button(); + this.label29 = new System.Windows.Forms.Label(); + this.label33 = new System.Windows.Forms.Label(); + this.NG_End_choice = new System.Windows.Forms.Label(); + this.NG_Start_choice = new System.Windows.Forms.Label(); + this.SET_XY_NG = new System.Windows.Forms.Button(); + this.NG_Stack_Start = new System.Windows.Forms.Label(); + this.NG_END_Y = new System.Windows.Forms.Label(); + this.NG_Stack_End = new System.Windows.Forms.Label(); + this.NG_END_X = new System.Windows.Forms.Label(); + this.NG_START_X = new System.Windows.Forms.Label(); + this.NG_START_Y = new System.Windows.Forms.Label(); + this.tabPage4 = new System.Windows.Forms.TabPage(); + this.PASS_Stack_hang = new System.Windows.Forms.NumericUpDown(); + this.PASS_Stack_cot = new System.Windows.Forms.NumericUpDown(); + this.label43 = new System.Windows.Forms.Label(); + this.label44 = new System.Windows.Forms.Label(); + this.Save_PASS_Stack = new System.Windows.Forms.Button(); + this.label45 = new System.Windows.Forms.Label(); + this.label46 = new System.Windows.Forms.Label(); + this.PASS_End_choice = new System.Windows.Forms.Label(); + this.PASS_Start_choice = new System.Windows.Forms.Label(); + this.SET_XY_PASS = new System.Windows.Forms.Button(); + this.PASS_Stack_Start = new System.Windows.Forms.Label(); + this.PASS_END_Y = new System.Windows.Forms.Label(); + this.PASS_Stack_End = new System.Windows.Forms.Label(); + this.PASS_END_X = new System.Windows.Forms.Label(); + this.PASS_START_X = new System.Windows.Forms.Label(); + this.PASS_START_Y = new System.Windows.Forms.Label(); + this.tabPage5 = new System.Windows.Forms.TabPage(); + this.Save_CAM_Stack = new System.Windows.Forms.Button(); + this.SET_XY_CAM = new System.Windows.Forms.Button(); + this.label58 = new System.Windows.Forms.Label(); + this.label59 = new System.Windows.Forms.Label(); + this.CAM_Start_choice = new System.Windows.Forms.Label(); + this.CAM_Stack_Start = new System.Windows.Forms.Label(); + this.CAM_START_X = new System.Windows.Forms.Label(); + this.CAM_START_Y = new System.Windows.Forms.Label(); + this.tabPage6 = new System.Windows.Forms.TabPage(); + this.Save_Nozzle = new System.Windows.Forms.Button(); + this.DOWN_ROM = new System.Windows.Forms.TextBox(); + this.DOWN_NG = new System.Windows.Forms.TextBox(); + this.DOWN_OK = new System.Windows.Forms.TextBox(); + this.DOWN_IC = new System.Windows.Forms.TextBox(); + this.label57 = new System.Windows.Forms.Label(); + this.label56 = new System.Windows.Forms.Label(); + this.label55 = new System.Windows.Forms.Label(); + this.label13 = new System.Windows.Forms.Label(); + this.tabPage7 = new System.Windows.Forms.TabPage(); + this.button16 = new System.Windows.Forms.Button(); + this.comboBox2 = new System.Windows.Forms.ComboBox(); + this.label68 = new System.Windows.Forms.Label(); + this.WorkTable = new System.Windows.Forms.GroupBox(); + this.Installing = new System.Windows.Forms.Label(); + this.textBox2 = new System.Windows.Forms.TextBox(); + this.textBox1 = new System.Windows.Forms.TextBox(); + this.label21 = new System.Windows.Forms.Label(); + this.NG = new System.Windows.Forms.Label(); + this.label12 = new System.Windows.Forms.Label(); + this.label11 = new System.Windows.Forms.Label(); + this.IC_Stack = new System.Windows.Forms.TableLayoutPanel(); + this.Pass_Stack = new System.Windows.Forms.TableLayoutPanel(); + this.ROM_Stack = new System.Windows.Forms.TableLayoutPanel(); + this.NG_Stack = new System.Windows.Forms.TableLayoutPanel(); + this.Manual = new System.Windows.Forms.GroupBox(); + this.Speed_choice = new System.Windows.Forms.ComboBox(); + this.R2_UP = new System.Windows.Forms.Button(); + this.R2_DOWN = new System.Windows.Forms.Button(); + this.R1_UP = new System.Windows.Forms.Button(); + this.label39 = new System.Windows.Forms.Label(); + this.R1_DOWN = new System.Windows.Forms.Button(); + this.Camera_choice = new System.Windows.Forms.Button(); + this.XL1 = new System.Windows.Forms.Button(); + this.Nap = new System.Windows.Forms.Button(); + this.Recall = new System.Windows.Forms.Button(); + this.Save_all = new System.Windows.Forms.Button(); + this.Pause = new System.Windows.Forms.Button(); + this.Start_auto = new System.Windows.Forms.Button(); + this.toolTip1 = new System.Windows.Forms.ToolTip(this.components); + this.CONNECT = new System.Windows.Forms.Button(); + this.Camera_connect = new System.Windows.Forms.Button(); + this.Toado_X = new System.Windows.Forms.TextBox(); + this.Toado_Y = new System.Windows.Forms.TextBox(); + this.Toado_R1 = new System.Windows.Forms.TextBox(); + this.Toado_Z = new System.Windows.Forms.TextBox(); + this.UpDownStop = new System.Windows.Forms.TextBox(); + this.Auto_manual = new System.Windows.Forms.TextBox(); + this.Status_Home = new System.Windows.Forms.TextBox(); + this.Toado_R2 = new System.Windows.Forms.TextBox(); + this.Req_Y = new System.Windows.Forms.TextBox(); + this.Req_X = new System.Windows.Forms.TextBox(); + this.Tocdo_dichuyen = new System.Windows.Forms.TextBox(); + this.Dichuyen_Truc = new System.Windows.Forms.TextBox(); + this.Req_R1 = new System.Windows.Forms.TextBox(); + this.Req_Z = new System.Windows.Forms.TextBox(); + this.label3 = new System.Windows.Forms.Label(); + this.label16 = new System.Windows.Forms.Label(); + this.label19 = new System.Windows.Forms.Label(); + this.label24 = new System.Windows.Forms.Label(); + this.label25 = new System.Windows.Forms.Label(); + this.label30 = new System.Windows.Forms.Label(); + this.label31 = new System.Windows.Forms.Label(); + this.label32 = new System.Windows.Forms.Label(); + this.label34 = new System.Windows.Forms.Label(); + this.label35 = new System.Windows.Forms.Label(); + this.label36 = new System.Windows.Forms.Label(); + this.Xm = new System.Windows.Forms.Label(); + this.Ym = new System.Windows.Forms.Label(); + this.dR = new System.Windows.Forms.Label(); + this.dX = new System.Windows.Forms.Label(); + this.dY = new System.Windows.Forms.Label(); + this.Checking = new System.Windows.Forms.Label(); + this.Rotation = new System.Windows.Forms.Button(); + ((System.ComponentModel.ISupportInitialize)(this.pictureBox3)).BeginInit(); + this.groupBox1.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.IC_Stack_cot)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.IC_Stack_hang)).BeginInit(); + this.groupBox2.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.ROM_Stack_hang)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.ROM_Stack_cot)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.pictureBox2)).BeginInit(); + this.Calib_System.SuspendLayout(); + this.tabPage1.SuspendLayout(); + this.tabPage2.SuspendLayout(); + this.tabPage3.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.NG_Stack_hang)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.NG_Stack_cot)).BeginInit(); + this.tabPage4.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.PASS_Stack_hang)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.PASS_Stack_cot)).BeginInit(); + this.tabPage5.SuspendLayout(); + this.tabPage6.SuspendLayout(); + this.tabPage7.SuspendLayout(); + this.WorkTable.SuspendLayout(); + this.Manual.SuspendLayout(); + this.SuspendLayout(); + // + // label6 + // + this.label6.BackColor = System.Drawing.Color.Black; + this.label6.BorderStyle = System.Windows.Forms.BorderStyle.Fixed3D; + this.label6.Font = new System.Drawing.Font("Microsoft Sans Serif", 32.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.label6.ForeColor = System.Drawing.Color.Yellow; + this.label6.Location = new System.Drawing.Point(322, 12); + this.label6.Name = "label6"; + this.label6.Size = new System.Drawing.Size(1022, 77); + this.label6.TabIndex = 5; + this.label6.Text = "ROM WRITER "; + this.label6.TextAlign = System.Drawing.ContentAlignment.MiddleCenter; + // + // pictureBox3 + // + this.pictureBox3.Location = new System.Drawing.Point(911, 132); + this.pictureBox3.Name = "pictureBox3"; + this.pictureBox3.Size = new System.Drawing.Size(433, 250); + this.pictureBox3.SizeMode = System.Windows.Forms.PictureBoxSizeMode.Zoom; + this.pictureBox3.TabIndex = 113; + this.pictureBox3.TabStop = false; + // + // HOME + // + this.HOME.Location = new System.Drawing.Point(176, 27); + this.HOME.Name = "HOME"; + this.HOME.Size = new System.Drawing.Size(66, 21); + this.HOME.TabIndex = 31; + this.HOME.Text = "HOME"; + this.HOME.UseVisualStyleBackColor = true; + this.HOME.Click += new System.EventHandler(this.HOME_Click); + // + // label1 + // + this.label1.AutoSize = true; + this.label1.BackColor = System.Drawing.Color.Blue; + this.label1.Font = new System.Drawing.Font("Microsoft Sans Serif", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.label1.Location = new System.Drawing.Point(21, 154); + this.label1.Name = "label1"; + this.label1.Size = new System.Drawing.Size(16, 16); + this.label1.TabIndex = 50; + this.label1.Text = "X"; + // + // label2 + // + this.label2.AutoSize = true; + this.label2.BackColor = System.Drawing.Color.Red; + this.label2.Font = new System.Drawing.Font("Microsoft Sans Serif", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.label2.Location = new System.Drawing.Point(62, 154); + this.label2.Name = "label2"; + this.label2.Size = new System.Drawing.Size(17, 16); + this.label2.TabIndex = 35; + this.label2.Text = "Y"; + // + // label5 + // + this.label5.AutoSize = true; + this.label5.BackColor = System.Drawing.Color.Yellow; + this.label5.Font = new System.Drawing.Font("Microsoft Sans Serif", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.label5.Location = new System.Drawing.Point(104, 154); + this.label5.Name = "label5"; + this.label5.Size = new System.Drawing.Size(16, 16); + this.label5.TabIndex = 53; + this.label5.Text = "Z"; + // + // button3 + // + this.button3.Font = new System.Drawing.Font("Microsoft Sans Serif", 15.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.button3.Location = new System.Drawing.Point(58, 236); + this.button3.Name = "button3"; + this.button3.Size = new System.Drawing.Size(30, 40); + this.button3.TabIndex = 55; + this.button3.Text = "-"; + this.button3.UseVisualStyleBackColor = true; + this.button3.MouseDown += new System.Windows.Forms.MouseEventHandler(this.button3_MouseDown); + this.button3.MouseUp += new System.Windows.Forms.MouseEventHandler(this.button3_MouseUp); + // + // Y_UP + // + this.Y_UP.Font = new System.Drawing.Font("Microsoft Sans Serif", 15.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.Y_UP.Location = new System.Drawing.Point(58, 187); + this.Y_UP.Name = "Y_UP"; + this.Y_UP.Size = new System.Drawing.Size(30, 41); + this.Y_UP.TabIndex = 54; + this.Y_UP.Text = "+"; + this.Y_UP.UseVisualStyleBackColor = true; + this.Y_UP.MouseDown += new System.Windows.Forms.MouseEventHandler(this.Y_UP_MouseDown); + this.Y_UP.MouseUp += new System.Windows.Forms.MouseEventHandler(this.Y_UP_MouseUp); + // + // button4 + // + this.button4.Font = new System.Drawing.Font("Microsoft Sans Serif", 15.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.button4.Location = new System.Drawing.Point(15, 236); + this.button4.Name = "button4"; + this.button4.Size = new System.Drawing.Size(30, 40); + this.button4.TabIndex = 56; + this.button4.Text = "-"; + this.button4.UseVisualStyleBackColor = true; + this.button4.MouseDown += new System.Windows.Forms.MouseEventHandler(this.button4_MouseDown); + this.button4.MouseUp += new System.Windows.Forms.MouseEventHandler(this.button4_MouseUp); + // + // button5 + // + this.button5.Font = new System.Drawing.Font("Microsoft Sans Serif", 15.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.button5.Location = new System.Drawing.Point(15, 187); + this.button5.Name = "button5"; + this.button5.Size = new System.Drawing.Size(30, 40); + this.button5.TabIndex = 57; + this.button5.Text = "+"; + this.button5.UseVisualStyleBackColor = true; + this.button5.MouseDown += new System.Windows.Forms.MouseEventHandler(this.button5_MouseDown); + this.button5.MouseUp += new System.Windows.Forms.MouseEventHandler(this.button5_MouseUp); + // + // button6 + // + this.button6.Font = new System.Drawing.Font("Microsoft Sans Serif", 15.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.button6.Location = new System.Drawing.Point(101, 236); + this.button6.Name = "button6"; + this.button6.Size = new System.Drawing.Size(30, 40); + this.button6.TabIndex = 59; + this.button6.Text = "-"; + this.button6.UseVisualStyleBackColor = true; + this.button6.MouseDown += new System.Windows.Forms.MouseEventHandler(this.button6_MouseDown); + this.button6.MouseUp += new System.Windows.Forms.MouseEventHandler(this.button6_MouseUp); + // + // button7 + // + this.button7.Font = new System.Drawing.Font("Microsoft Sans Serif", 15.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.button7.Location = new System.Drawing.Point(101, 187); + this.button7.Name = "button7"; + this.button7.Size = new System.Drawing.Size(30, 40); + this.button7.TabIndex = 58; + this.button7.Text = "+"; + this.button7.UseVisualStyleBackColor = true; + this.button7.MouseDown += new System.Windows.Forms.MouseEventHandler(this.button7_MouseDown); + this.button7.MouseUp += new System.Windows.Forms.MouseEventHandler(this.button7_MouseUp); + // + // Automanual + // + this.Automanual.Location = new System.Drawing.Point(22, 27); + this.Automanual.Name = "Automanual"; + this.Automanual.Size = new System.Drawing.Size(66, 21); + this.Automanual.TabIndex = 67; + this.Automanual.Text = "Manual"; + this.Automanual.UseVisualStyleBackColor = true; + this.Automanual.Click += new System.EventHandler(this.Automanual_Click); + // + // label4 + // + this.label4.AutoSize = true; + this.label4.Font = new System.Drawing.Font("Microsoft Sans Serif", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.label4.Location = new System.Drawing.Point(26, 353); + this.label4.Name = "label4"; + this.label4.Size = new System.Drawing.Size(70, 16); + this.label4.TabIndex = 74; + this.label4.Text = "12- REQ Y\r\n"; + // + // label7 + // + this.label7.AutoSize = true; + this.label7.Font = new System.Drawing.Font("Microsoft Sans Serif", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.label7.Location = new System.Drawing.Point(26, 378); + this.label7.Name = "label7"; + this.label7.Size = new System.Drawing.Size(69, 16); + this.label7.TabIndex = 75; + this.label7.Text = "13- REQ Z"; + // + // label8 + // + this.label8.AutoSize = true; + this.label8.Font = new System.Drawing.Font("Microsoft Sans Serif", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.label8.Location = new System.Drawing.Point(26, 400); + this.label8.Name = "label8"; + this.label8.Size = new System.Drawing.Size(78, 16); + this.label8.TabIndex = 76; + this.label8.Text = "14- REQ R1"; + // + // timer1 + // + this.timer1.Interval = 50; + this.timer1.Tick += new System.EventHandler(this.timer1_Tick); + // + // SAVE + // + this.SAVE.Location = new System.Drawing.Point(177, 147); + this.SAVE.Name = "SAVE"; + this.SAVE.Size = new System.Drawing.Size(66, 31); + this.SAVE.TabIndex = 88; + this.SAVE.Text = "SAVE"; + this.SAVE.UseVisualStyleBackColor = true; + this.SAVE.Click += new System.EventHandler(this.SAVE_Click); + // + // label14 + // + this.label14.AutoSize = true; + this.label14.Font = new System.Drawing.Font("Microsoft Sans Serif", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.label14.Location = new System.Drawing.Point(80, 96); + this.label14.Name = "label14"; + this.label14.Size = new System.Drawing.Size(58, 16); + this.label14.TabIndex = 96; + this.label14.Text = "Số hàng"; + // + // label15 + // + this.label15.AutoSize = true; + this.label15.Font = new System.Drawing.Font("Microsoft Sans Serif", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.label15.Location = new System.Drawing.Point(174, 96); + this.label15.Name = "label15"; + this.label15.Size = new System.Drawing.Size(46, 16); + this.label15.TabIndex = 97; + this.label15.Text = "Số cột"; + // + // IC_Stack_Start + // + this.IC_Stack_Start.AutoSize = true; + this.IC_Stack_Start.Font = new System.Drawing.Font("Microsoft Sans Serif", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.IC_Stack_Start.Location = new System.Drawing.Point(39, 43); + this.IC_Stack_Start.Name = "IC_Stack_Start"; + this.IC_Stack_Start.Size = new System.Drawing.Size(35, 16); + this.IC_Stack_Start.TabIndex = 100; + this.IC_Stack_Start.Text = "Start"; + this.IC_Stack_Start.TextAlign = System.Drawing.ContentAlignment.MiddleCenter; + this.IC_Stack_Start.Click += new System.EventHandler(this.IC_Stack_Start_Click); + // + // IC_Stack_End + // + this.IC_Stack_End.AutoSize = true; + this.IC_Stack_End.Font = new System.Drawing.Font("Microsoft Sans Serif", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.IC_Stack_End.Location = new System.Drawing.Point(40, 73); + this.IC_Stack_End.Name = "IC_Stack_End"; + this.IC_Stack_End.Size = new System.Drawing.Size(32, 16); + this.IC_Stack_End.TabIndex = 101; + this.IC_Stack_End.Text = "End"; + this.IC_Stack_End.Click += new System.EventHandler(this.IC_Stack_End_Click); + // + // IC_START_X + // + this.IC_START_X.AutoSize = true; + this.IC_START_X.Font = new System.Drawing.Font("Microsoft Sans Serif", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.IC_START_X.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(0)))), ((int)(((byte)(192)))), ((int)(((byte)(0))))); + this.IC_START_X.Location = new System.Drawing.Point(100, 43); + this.IC_START_X.Name = "IC_START_X"; + this.IC_START_X.Size = new System.Drawing.Size(15, 16); + this.IC_START_X.TabIndex = 102; + this.IC_START_X.Text = "0"; + // + // IC_START_Y + // + this.IC_START_Y.AutoSize = true; + this.IC_START_Y.Font = new System.Drawing.Font("Microsoft Sans Serif", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.IC_START_Y.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(0)))), ((int)(((byte)(192)))), ((int)(((byte)(0))))); + this.IC_START_Y.Location = new System.Drawing.Point(193, 43); + this.IC_START_Y.Name = "IC_START_Y"; + this.IC_START_Y.Size = new System.Drawing.Size(15, 16); + this.IC_START_Y.TabIndex = 103; + this.IC_START_Y.Text = "0"; + // + // IC_END_X + // + this.IC_END_X.AutoSize = true; + this.IC_END_X.Font = new System.Drawing.Font("Microsoft Sans Serif", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.IC_END_X.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(0)))), ((int)(((byte)(192)))), ((int)(((byte)(0))))); + this.IC_END_X.Location = new System.Drawing.Point(100, 73); + this.IC_END_X.Name = "IC_END_X"; + this.IC_END_X.Size = new System.Drawing.Size(15, 16); + this.IC_END_X.TabIndex = 104; + this.IC_END_X.Text = "0"; + // + // IC_END_Y + // + this.IC_END_Y.AutoSize = true; + this.IC_END_Y.Font = new System.Drawing.Font("Microsoft Sans Serif", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.IC_END_Y.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(0)))), ((int)(((byte)(192)))), ((int)(((byte)(0))))); + this.IC_END_Y.Location = new System.Drawing.Point(193, 73); + this.IC_END_Y.Name = "IC_END_Y"; + this.IC_END_Y.Size = new System.Drawing.Size(15, 16); + this.IC_END_Y.TabIndex = 105; + this.IC_END_Y.Text = "0"; + // + // SET_XY_IC + // + this.SET_XY_IC.Location = new System.Drawing.Point(68, 146); + this.SET_XY_IC.Name = "SET_XY_IC"; + this.SET_XY_IC.Size = new System.Drawing.Size(70, 32); + this.SET_XY_IC.TabIndex = 106; + this.SET_XY_IC.Text = "SET XY"; + this.SET_XY_IC.UseVisualStyleBackColor = true; + this.SET_XY_IC.Click += new System.EventHandler(this.SET_XY_IC_Click); + // + // IC_Start_choice + // + this.IC_Start_choice.AutoSize = true; + this.IC_Start_choice.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(0)))), ((int)(((byte)(192)))), ((int)(((byte)(0))))); + this.IC_Start_choice.Location = new System.Drawing.Point(17, 43); + this.IC_Start_choice.Name = "IC_Start_choice"; + this.IC_Start_choice.Size = new System.Drawing.Size(19, 13); + this.IC_Start_choice.TabIndex = 107; + this.IC_Start_choice.Text = "=>"; + // + // IC_End_choice + // + this.IC_End_choice.AutoSize = true; + this.IC_End_choice.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(0)))), ((int)(((byte)(192)))), ((int)(((byte)(0))))); + this.IC_End_choice.Location = new System.Drawing.Point(17, 75); + this.IC_End_choice.Name = "IC_End_choice"; + this.IC_End_choice.Size = new System.Drawing.Size(19, 13); + this.IC_End_choice.TabIndex = 108; + this.IC_End_choice.Text = "=>"; + // + // groupBox1 + // + this.groupBox1.Controls.Add(this.IC_Stack_cot); + this.groupBox1.Controls.Add(this.IC_Stack_hang); + this.groupBox1.Controls.Add(this.label18); + this.groupBox1.Controls.Add(this.label17); + this.groupBox1.Controls.Add(this.SAVE); + this.groupBox1.Controls.Add(this.label14); + this.groupBox1.Controls.Add(this.label15); + this.groupBox1.Controls.Add(this.IC_End_choice); + this.groupBox1.Controls.Add(this.IC_Start_choice); + this.groupBox1.Controls.Add(this.SET_XY_IC); + this.groupBox1.Controls.Add(this.IC_Stack_Start); + this.groupBox1.Controls.Add(this.IC_END_Y); + this.groupBox1.Controls.Add(this.IC_Stack_End); + this.groupBox1.Controls.Add(this.IC_END_X); + this.groupBox1.Controls.Add(this.IC_START_X); + this.groupBox1.Controls.Add(this.IC_START_Y); + this.groupBox1.Location = new System.Drawing.Point(3, 4); + this.groupBox1.Name = "groupBox1"; + this.groupBox1.Size = new System.Drawing.Size(440, 225); + this.groupBox1.TabIndex = 111; + this.groupBox1.TabStop = false; + this.groupBox1.Text = "IC Stack"; + // + // IC_Stack_cot + // + this.IC_Stack_cot.Location = new System.Drawing.Point(177, 115); + this.IC_Stack_cot.Name = "IC_Stack_cot"; + this.IC_Stack_cot.Size = new System.Drawing.Size(66, 20); + this.IC_Stack_cot.TabIndex = 112; + // + // IC_Stack_hang + // + this.IC_Stack_hang.Location = new System.Drawing.Point(68, 115); + this.IC_Stack_hang.Name = "IC_Stack_hang"; + this.IC_Stack_hang.Size = new System.Drawing.Size(70, 20); + this.IC_Stack_hang.TabIndex = 111; + // + // label18 + // + this.label18.AutoSize = true; + this.label18.Font = new System.Drawing.Font("Microsoft Sans Serif", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.label18.Location = new System.Drawing.Point(191, 20); + this.label18.Name = "label18"; + this.label18.Size = new System.Drawing.Size(17, 16); + this.label18.TabIndex = 110; + this.label18.Text = "Y"; + // + // label17 + // + this.label17.AutoSize = true; + this.label17.Font = new System.Drawing.Font("Microsoft Sans Serif", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.label17.Location = new System.Drawing.Point(99, 20); + this.label17.Name = "label17"; + this.label17.Size = new System.Drawing.Size(16, 16); + this.label17.TabIndex = 109; + this.label17.Text = "X"; + // + // groupBox2 + // + this.groupBox2.Controls.Add(this.ROM_Stack_hang); + this.groupBox2.Controls.Add(this.ROM_Stack_cot); + this.groupBox2.Controls.Add(this.label9); + this.groupBox2.Controls.Add(this.label10); + this.groupBox2.Controls.Add(this.SAVE_XY_ROM); + this.groupBox2.Controls.Add(this.label26); + this.groupBox2.Controls.Add(this.SET_XY_ROM); + this.groupBox2.Controls.Add(this.label27); + this.groupBox2.Controls.Add(this.label28); + this.groupBox2.Controls.Add(this.ROM_End_choice); + this.groupBox2.Controls.Add(this.ROM_Start_choice); + this.groupBox2.Controls.Add(this.ROM_Stack_Start); + this.groupBox2.Controls.Add(this.ROM_END_Y); + this.groupBox2.Controls.Add(this.ROM_Stack_End); + this.groupBox2.Controls.Add(this.ROM_END_X); + this.groupBox2.Controls.Add(this.ROM_START_X); + this.groupBox2.Controls.Add(this.ROM_START_Y); + this.groupBox2.Location = new System.Drawing.Point(3, 4); + this.groupBox2.Name = "groupBox2"; + this.groupBox2.Size = new System.Drawing.Size(443, 228); + this.groupBox2.TabIndex = 112; + this.groupBox2.TabStop = false; + this.groupBox2.Text = "ROM Stack"; + // + // ROM_Stack_hang + // + this.ROM_Stack_hang.Location = new System.Drawing.Point(79, 138); + this.ROM_Stack_hang.Name = "ROM_Stack_hang"; + this.ROM_Stack_hang.Size = new System.Drawing.Size(66, 20); + this.ROM_Stack_hang.TabIndex = 127; + // + // ROM_Stack_cot + // + this.ROM_Stack_cot.Location = new System.Drawing.Point(180, 138); + this.ROM_Stack_cot.Name = "ROM_Stack_cot"; + this.ROM_Stack_cot.Size = new System.Drawing.Size(70, 20); + this.ROM_Stack_cot.TabIndex = 126; + // + // label9 + // + this.label9.AutoSize = true; + this.label9.Font = new System.Drawing.Font("Microsoft Sans Serif", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.label9.Location = new System.Drawing.Point(81, 107); + this.label9.Name = "label9"; + this.label9.Size = new System.Drawing.Size(58, 16); + this.label9.TabIndex = 124; + this.label9.Text = "Số hàng"; + // + // label10 + // + this.label10.AutoSize = true; + this.label10.Font = new System.Drawing.Font("Microsoft Sans Serif", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.label10.Location = new System.Drawing.Point(192, 107); + this.label10.Name = "label10"; + this.label10.Size = new System.Drawing.Size(46, 16); + this.label10.TabIndex = 125; + this.label10.Text = "Số cột"; + // + // SAVE_XY_ROM + // + this.SAVE_XY_ROM.Location = new System.Drawing.Point(184, 164); + this.SAVE_XY_ROM.Name = "SAVE_XY_ROM"; + this.SAVE_XY_ROM.Size = new System.Drawing.Size(66, 31); + this.SAVE_XY_ROM.TabIndex = 111; + this.SAVE_XY_ROM.Text = "SAVE"; + this.SAVE_XY_ROM.UseVisualStyleBackColor = true; + this.SAVE_XY_ROM.Click += new System.EventHandler(this.SAVE_XY_ROM_Click); + // + // label26 + // + this.label26.AutoSize = true; + this.label26.Font = new System.Drawing.Font("Microsoft Sans Serif", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.label26.Location = new System.Drawing.Point(192, 26); + this.label26.Name = "label26"; + this.label26.Size = new System.Drawing.Size(17, 16); + this.label26.TabIndex = 122; + this.label26.Text = "Y"; + // + // SET_XY_ROM + // + this.SET_XY_ROM.Location = new System.Drawing.Point(75, 164); + this.SET_XY_ROM.Name = "SET_XY_ROM"; + this.SET_XY_ROM.Size = new System.Drawing.Size(70, 32); + this.SET_XY_ROM.TabIndex = 112; + this.SET_XY_ROM.Text = "SET XY"; + this.SET_XY_ROM.UseVisualStyleBackColor = true; + this.SET_XY_ROM.Click += new System.EventHandler(this.SET_XY_ROM_Click); + // + // label27 + // + this.label27.AutoSize = true; + this.label27.Font = new System.Drawing.Font("Microsoft Sans Serif", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.label27.Location = new System.Drawing.Point(100, 26); + this.label27.Name = "label27"; + this.label27.Size = new System.Drawing.Size(16, 16); + this.label27.TabIndex = 121; + this.label27.Text = "X"; + // + // label28 + // + this.label28.AutoSize = true; + this.label28.Font = new System.Drawing.Font("Microsoft Sans Serif", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.label28.Location = new System.Drawing.Point(81, 102); + this.label28.Name = "label28"; + this.label28.Size = new System.Drawing.Size(0, 16); + this.label28.TabIndex = 111; + // + // ROM_End_choice + // + this.ROM_End_choice.AutoSize = true; + this.ROM_End_choice.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(0)))), ((int)(((byte)(192)))), ((int)(((byte)(0))))); + this.ROM_End_choice.Location = new System.Drawing.Point(18, 81); + this.ROM_End_choice.Name = "ROM_End_choice"; + this.ROM_End_choice.Size = new System.Drawing.Size(19, 13); + this.ROM_End_choice.TabIndex = 120; + this.ROM_End_choice.Text = "=>"; + // + // ROM_Start_choice + // + this.ROM_Start_choice.AutoSize = true; + this.ROM_Start_choice.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(0)))), ((int)(((byte)(192)))), ((int)(((byte)(0))))); + this.ROM_Start_choice.Location = new System.Drawing.Point(18, 49); + this.ROM_Start_choice.Name = "ROM_Start_choice"; + this.ROM_Start_choice.Size = new System.Drawing.Size(19, 13); + this.ROM_Start_choice.TabIndex = 119; + this.ROM_Start_choice.Text = "=>"; + // + // ROM_Stack_Start + // + this.ROM_Stack_Start.AutoSize = true; + this.ROM_Stack_Start.Font = new System.Drawing.Font("Microsoft Sans Serif", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.ROM_Stack_Start.Location = new System.Drawing.Point(40, 49); + this.ROM_Stack_Start.Name = "ROM_Stack_Start"; + this.ROM_Stack_Start.Size = new System.Drawing.Size(35, 16); + this.ROM_Stack_Start.TabIndex = 113; + this.ROM_Stack_Start.Text = "Start"; + this.ROM_Stack_Start.Click += new System.EventHandler(this.ROM_Stack_Start_Click); + // + // ROM_END_Y + // + this.ROM_END_Y.AutoSize = true; + this.ROM_END_Y.Font = new System.Drawing.Font("Microsoft Sans Serif", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.ROM_END_Y.Location = new System.Drawing.Point(194, 79); + this.ROM_END_Y.Name = "ROM_END_Y"; + this.ROM_END_Y.Size = new System.Drawing.Size(15, 16); + this.ROM_END_Y.TabIndex = 118; + this.ROM_END_Y.Text = "0"; + // + // ROM_Stack_End + // + this.ROM_Stack_End.AutoSize = true; + this.ROM_Stack_End.Font = new System.Drawing.Font("Microsoft Sans Serif", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.ROM_Stack_End.Location = new System.Drawing.Point(41, 79); + this.ROM_Stack_End.Name = "ROM_Stack_End"; + this.ROM_Stack_End.Size = new System.Drawing.Size(32, 16); + this.ROM_Stack_End.TabIndex = 114; + this.ROM_Stack_End.Text = "End"; + this.ROM_Stack_End.Click += new System.EventHandler(this.ROM_Stack_End_Click); + // + // ROM_END_X + // + this.ROM_END_X.AutoSize = true; + this.ROM_END_X.Font = new System.Drawing.Font("Microsoft Sans Serif", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.ROM_END_X.Location = new System.Drawing.Point(101, 79); + this.ROM_END_X.Name = "ROM_END_X"; + this.ROM_END_X.Size = new System.Drawing.Size(15, 16); + this.ROM_END_X.TabIndex = 117; + this.ROM_END_X.Text = "0"; + // + // ROM_START_X + // + this.ROM_START_X.AutoSize = true; + this.ROM_START_X.Font = new System.Drawing.Font("Microsoft Sans Serif", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.ROM_START_X.Location = new System.Drawing.Point(101, 49); + this.ROM_START_X.Name = "ROM_START_X"; + this.ROM_START_X.Size = new System.Drawing.Size(15, 16); + this.ROM_START_X.TabIndex = 115; + this.ROM_START_X.Text = "0"; + // + // ROM_START_Y + // + this.ROM_START_Y.AutoSize = true; + this.ROM_START_Y.Font = new System.Drawing.Font("Microsoft Sans Serif", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.ROM_START_Y.Location = new System.Drawing.Point(194, 49); + this.ROM_START_Y.Name = "ROM_START_Y"; + this.ROM_START_Y.Size = new System.Drawing.Size(15, 16); + this.ROM_START_Y.TabIndex = 116; + this.ROM_START_Y.Text = "0"; + // + // comboBox1 + // + this.comboBox1.FormattingEnabled = true; + this.comboBox1.Location = new System.Drawing.Point(1194, 105); + this.comboBox1.Name = "comboBox1"; + this.comboBox1.Size = new System.Drawing.Size(148, 21); + this.comboBox1.TabIndex = 114; + // + // pictureBox2 + // + this.pictureBox2.Image = ((System.Drawing.Image)(resources.GetObject("pictureBox2.Image"))); + this.pictureBox2.Location = new System.Drawing.Point(16, 12); + this.pictureBox2.Name = "pictureBox2"; + this.pictureBox2.Size = new System.Drawing.Size(300, 77); + this.pictureBox2.TabIndex = 116; + this.pictureBox2.TabStop = false; + // + // PUMP + // + this.PUMP.BackColor = System.Drawing.Color.Red; + this.PUMP.Location = new System.Drawing.Point(22, 54); + this.PUMP.Name = "PUMP"; + this.PUMP.Size = new System.Drawing.Size(66, 23); + this.PUMP.TabIndex = 117; + this.PUMP.Text = "PUMP"; + this.PUMP.UseVisualStyleBackColor = false; + this.PUMP.Click += new System.EventHandler(this.PUMP_Click); + // + // VACUM_1 + // + this.VACUM_1.BackColor = System.Drawing.Color.Red; + this.VACUM_1.Location = new System.Drawing.Point(22, 83); + this.VACUM_1.Name = "VACUM_1"; + this.VACUM_1.Size = new System.Drawing.Size(66, 23); + this.VACUM_1.TabIndex = 118; + this.VACUM_1.Text = "VACUM_1"; + this.VACUM_1.UseVisualStyleBackColor = false; + this.VACUM_1.Click += new System.EventHandler(this.VACUM_1_Click); + // + // VACUM_2 + // + this.VACUM_2.BackColor = System.Drawing.Color.Red; + this.VACUM_2.Location = new System.Drawing.Point(94, 83); + this.VACUM_2.Name = "VACUM_2"; + this.VACUM_2.Size = new System.Drawing.Size(66, 23); + this.VACUM_2.TabIndex = 119; + this.VACUM_2.Text = "VACUM_2"; + this.VACUM_2.UseVisualStyleBackColor = false; + this.VACUM_2.Click += new System.EventHandler(this.VACUM_2_Click); + // + // LED + // + this.LED.BackColor = System.Drawing.Color.Red; + this.LED.Location = new System.Drawing.Point(94, 54); + this.LED.Name = "LED"; + this.LED.Size = new System.Drawing.Size(66, 23); + this.LED.TabIndex = 120; + this.LED.Text = "LED"; + this.LED.UseVisualStyleBackColor = false; + this.LED.Click += new System.EventHandler(this.LED_Click); + // + // Calib_System + // + this.Calib_System.Controls.Add(this.tabPage1); + this.Calib_System.Controls.Add(this.tabPage2); + this.Calib_System.Controls.Add(this.tabPage3); + this.Calib_System.Controls.Add(this.tabPage4); + this.Calib_System.Controls.Add(this.tabPage5); + this.Calib_System.Controls.Add(this.tabPage6); + this.Calib_System.Controls.Add(this.tabPage7); + this.Calib_System.Location = new System.Drawing.Point(911, 440); + this.Calib_System.Name = "Calib_System"; + this.Calib_System.SelectedIndex = 0; + this.Calib_System.Size = new System.Drawing.Size(437, 246); + this.Calib_System.TabIndex = 121; + // + // tabPage1 + // + this.tabPage1.Controls.Add(this.groupBox1); + this.tabPage1.Location = new System.Drawing.Point(4, 22); + this.tabPage1.Name = "tabPage1"; + this.tabPage1.Padding = new System.Windows.Forms.Padding(3); + this.tabPage1.Size = new System.Drawing.Size(429, 220); + this.tabPage1.TabIndex = 0; + this.tabPage1.Text = "IC Stack"; + this.tabPage1.UseVisualStyleBackColor = true; + // + // tabPage2 + // + this.tabPage2.Controls.Add(this.groupBox2); + this.tabPage2.Location = new System.Drawing.Point(4, 22); + this.tabPage2.Name = "tabPage2"; + this.tabPage2.Padding = new System.Windows.Forms.Padding(3); + this.tabPage2.Size = new System.Drawing.Size(429, 220); + this.tabPage2.TabIndex = 1; + this.tabPage2.Text = "ROM Stack"; + this.tabPage2.UseVisualStyleBackColor = true; + // + // tabPage3 + // + this.tabPage3.Controls.Add(this.NG_Stack_hang); + this.tabPage3.Controls.Add(this.NG_Stack_cot); + this.tabPage3.Controls.Add(this.label22); + this.tabPage3.Controls.Add(this.label23); + this.tabPage3.Controls.Add(this.Save_NG_Stack); + this.tabPage3.Controls.Add(this.label29); + this.tabPage3.Controls.Add(this.label33); + this.tabPage3.Controls.Add(this.NG_End_choice); + this.tabPage3.Controls.Add(this.NG_Start_choice); + this.tabPage3.Controls.Add(this.SET_XY_NG); + this.tabPage3.Controls.Add(this.NG_Stack_Start); + this.tabPage3.Controls.Add(this.NG_END_Y); + this.tabPage3.Controls.Add(this.NG_Stack_End); + this.tabPage3.Controls.Add(this.NG_END_X); + this.tabPage3.Controls.Add(this.NG_START_X); + this.tabPage3.Controls.Add(this.NG_START_Y); + this.tabPage3.Location = new System.Drawing.Point(4, 22); + this.tabPage3.Name = "tabPage3"; + this.tabPage3.Padding = new System.Windows.Forms.Padding(3); + this.tabPage3.Size = new System.Drawing.Size(429, 220); + this.tabPage3.TabIndex = 2; + this.tabPage3.Text = "NG Stack"; + this.tabPage3.UseVisualStyleBackColor = true; + // + // NG_Stack_hang + // + this.NG_Stack_hang.Location = new System.Drawing.Point(152, 138); + this.NG_Stack_hang.Name = "NG_Stack_hang"; + this.NG_Stack_hang.Size = new System.Drawing.Size(66, 20); + this.NG_Stack_hang.TabIndex = 128; + // + // NG_Stack_cot + // + this.NG_Stack_cot.Location = new System.Drawing.Point(261, 138); + this.NG_Stack_cot.Name = "NG_Stack_cot"; + this.NG_Stack_cot.Size = new System.Drawing.Size(70, 20); + this.NG_Stack_cot.TabIndex = 127; + // + // label22 + // + this.label22.AutoSize = true; + this.label22.Font = new System.Drawing.Font("Microsoft Sans Serif", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.label22.Location = new System.Drawing.Point(275, 38); + this.label22.Name = "label22"; + this.label22.Size = new System.Drawing.Size(17, 16); + this.label22.TabIndex = 126; + this.label22.Text = "Y"; + // + // label23 + // + this.label23.AutoSize = true; + this.label23.Font = new System.Drawing.Font("Microsoft Sans Serif", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.label23.Location = new System.Drawing.Point(183, 38); + this.label23.Name = "label23"; + this.label23.Size = new System.Drawing.Size(16, 16); + this.label23.TabIndex = 125; + this.label23.Text = "X"; + // + // Save_NG_Stack + // + this.Save_NG_Stack.Location = new System.Drawing.Point(261, 165); + this.Save_NG_Stack.Name = "Save_NG_Stack"; + this.Save_NG_Stack.Size = new System.Drawing.Size(66, 31); + this.Save_NG_Stack.TabIndex = 113; + this.Save_NG_Stack.Text = "Save"; + this.Save_NG_Stack.UseVisualStyleBackColor = true; + this.Save_NG_Stack.Click += new System.EventHandler(this.Save_NG_Stack_Click); + // + // label29 + // + this.label29.AutoSize = true; + this.label29.Font = new System.Drawing.Font("Microsoft Sans Serif", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.label29.Location = new System.Drawing.Point(164, 114); + this.label29.Name = "label29"; + this.label29.Size = new System.Drawing.Size(58, 16); + this.label29.TabIndex = 114; + this.label29.Text = "Số hàng"; + // + // label33 + // + this.label33.AutoSize = true; + this.label33.Font = new System.Drawing.Font("Microsoft Sans Serif", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.label33.Location = new System.Drawing.Point(258, 114); + this.label33.Name = "label33"; + this.label33.Size = new System.Drawing.Size(46, 16); + this.label33.TabIndex = 115; + this.label33.Text = "Số cột"; + // + // NG_End_choice + // + this.NG_End_choice.AutoSize = true; + this.NG_End_choice.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(0)))), ((int)(((byte)(192)))), ((int)(((byte)(0))))); + this.NG_End_choice.Location = new System.Drawing.Point(101, 93); + this.NG_End_choice.Name = "NG_End_choice"; + this.NG_End_choice.Size = new System.Drawing.Size(19, 13); + this.NG_End_choice.TabIndex = 124; + this.NG_End_choice.Text = "=>"; + // + // NG_Start_choice + // + this.NG_Start_choice.AutoSize = true; + this.NG_Start_choice.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(0)))), ((int)(((byte)(192)))), ((int)(((byte)(0))))); + this.NG_Start_choice.Location = new System.Drawing.Point(101, 61); + this.NG_Start_choice.Name = "NG_Start_choice"; + this.NG_Start_choice.Size = new System.Drawing.Size(19, 13); + this.NG_Start_choice.TabIndex = 123; + this.NG_Start_choice.Text = "=>"; + // + // SET_XY_NG + // + this.SET_XY_NG.Location = new System.Drawing.Point(152, 164); + this.SET_XY_NG.Name = "SET_XY_NG"; + this.SET_XY_NG.Size = new System.Drawing.Size(70, 32); + this.SET_XY_NG.TabIndex = 122; + this.SET_XY_NG.Text = "SET XY"; + this.SET_XY_NG.UseVisualStyleBackColor = true; + this.SET_XY_NG.Click += new System.EventHandler(this.SET_XY_NG_Click); + // + // NG_Stack_Start + // + this.NG_Stack_Start.AutoSize = true; + this.NG_Stack_Start.Font = new System.Drawing.Font("Microsoft Sans Serif", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.NG_Stack_Start.Location = new System.Drawing.Point(123, 61); + this.NG_Stack_Start.Name = "NG_Stack_Start"; + this.NG_Stack_Start.Size = new System.Drawing.Size(35, 16); + this.NG_Stack_Start.TabIndex = 116; + this.NG_Stack_Start.Text = "Start"; + this.NG_Stack_Start.TextAlign = System.Drawing.ContentAlignment.MiddleCenter; + this.NG_Stack_Start.Click += new System.EventHandler(this.NG_Stack_Start_Click); + // + // NG_END_Y + // + this.NG_END_Y.AutoSize = true; + this.NG_END_Y.Font = new System.Drawing.Font("Microsoft Sans Serif", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.NG_END_Y.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(0)))), ((int)(((byte)(192)))), ((int)(((byte)(0))))); + this.NG_END_Y.Location = new System.Drawing.Point(277, 91); + this.NG_END_Y.Name = "NG_END_Y"; + this.NG_END_Y.Size = new System.Drawing.Size(15, 16); + this.NG_END_Y.TabIndex = 121; + this.NG_END_Y.Text = "0"; + // + // NG_Stack_End + // + this.NG_Stack_End.AutoSize = true; + this.NG_Stack_End.Font = new System.Drawing.Font("Microsoft Sans Serif", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.NG_Stack_End.Location = new System.Drawing.Point(124, 91); + this.NG_Stack_End.Name = "NG_Stack_End"; + this.NG_Stack_End.Size = new System.Drawing.Size(32, 16); + this.NG_Stack_End.TabIndex = 117; + this.NG_Stack_End.Text = "End"; + this.NG_Stack_End.Click += new System.EventHandler(this.NG_Stack_End_Click); + // + // NG_END_X + // + this.NG_END_X.AutoSize = true; + this.NG_END_X.Font = new System.Drawing.Font("Microsoft Sans Serif", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.NG_END_X.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(0)))), ((int)(((byte)(192)))), ((int)(((byte)(0))))); + this.NG_END_X.Location = new System.Drawing.Point(184, 91); + this.NG_END_X.Name = "NG_END_X"; + this.NG_END_X.Size = new System.Drawing.Size(15, 16); + this.NG_END_X.TabIndex = 120; + this.NG_END_X.Text = "0"; + // + // NG_START_X + // + this.NG_START_X.AutoSize = true; + this.NG_START_X.Font = new System.Drawing.Font("Microsoft Sans Serif", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.NG_START_X.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(0)))), ((int)(((byte)(192)))), ((int)(((byte)(0))))); + this.NG_START_X.Location = new System.Drawing.Point(184, 61); + this.NG_START_X.Name = "NG_START_X"; + this.NG_START_X.Size = new System.Drawing.Size(15, 16); + this.NG_START_X.TabIndex = 118; + this.NG_START_X.Text = "0"; + // + // NG_START_Y + // + this.NG_START_Y.AutoSize = true; + this.NG_START_Y.Font = new System.Drawing.Font("Microsoft Sans Serif", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.NG_START_Y.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(0)))), ((int)(((byte)(192)))), ((int)(((byte)(0))))); + this.NG_START_Y.Location = new System.Drawing.Point(277, 61); + this.NG_START_Y.Name = "NG_START_Y"; + this.NG_START_Y.Size = new System.Drawing.Size(15, 16); + this.NG_START_Y.TabIndex = 119; + this.NG_START_Y.Text = "0"; + // + // tabPage4 + // + this.tabPage4.Controls.Add(this.PASS_Stack_hang); + this.tabPage4.Controls.Add(this.PASS_Stack_cot); + this.tabPage4.Controls.Add(this.label43); + this.tabPage4.Controls.Add(this.label44); + this.tabPage4.Controls.Add(this.Save_PASS_Stack); + this.tabPage4.Controls.Add(this.label45); + this.tabPage4.Controls.Add(this.label46); + this.tabPage4.Controls.Add(this.PASS_End_choice); + this.tabPage4.Controls.Add(this.PASS_Start_choice); + this.tabPage4.Controls.Add(this.SET_XY_PASS); + this.tabPage4.Controls.Add(this.PASS_Stack_Start); + this.tabPage4.Controls.Add(this.PASS_END_Y); + this.tabPage4.Controls.Add(this.PASS_Stack_End); + this.tabPage4.Controls.Add(this.PASS_END_X); + this.tabPage4.Controls.Add(this.PASS_START_X); + this.tabPage4.Controls.Add(this.PASS_START_Y); + this.tabPage4.Location = new System.Drawing.Point(4, 22); + this.tabPage4.Name = "tabPage4"; + this.tabPage4.Padding = new System.Windows.Forms.Padding(3); + this.tabPage4.Size = new System.Drawing.Size(429, 220); + this.tabPage4.TabIndex = 3; + this.tabPage4.Text = "Pass Stack"; + this.tabPage4.UseVisualStyleBackColor = true; + // + // PASS_Stack_hang + // + this.PASS_Stack_hang.Location = new System.Drawing.Point(149, 138); + this.PASS_Stack_hang.Name = "PASS_Stack_hang"; + this.PASS_Stack_hang.Size = new System.Drawing.Size(66, 20); + this.PASS_Stack_hang.TabIndex = 128; + // + // PASS_Stack_cot + // + this.PASS_Stack_cot.Location = new System.Drawing.Point(258, 138); + this.PASS_Stack_cot.Name = "PASS_Stack_cot"; + this.PASS_Stack_cot.Size = new System.Drawing.Size(70, 20); + this.PASS_Stack_cot.TabIndex = 127; + // + // label43 + // + this.label43.AutoSize = true; + this.label43.Font = new System.Drawing.Font("Microsoft Sans Serif", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.label43.Location = new System.Drawing.Point(272, 36); + this.label43.Name = "label43"; + this.label43.Size = new System.Drawing.Size(17, 16); + this.label43.TabIndex = 126; + this.label43.Text = "Y"; + // + // label44 + // + this.label44.AutoSize = true; + this.label44.Font = new System.Drawing.Font("Microsoft Sans Serif", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.label44.Location = new System.Drawing.Point(180, 36); + this.label44.Name = "label44"; + this.label44.Size = new System.Drawing.Size(16, 16); + this.label44.TabIndex = 125; + this.label44.Text = "X"; + // + // Save_PASS_Stack + // + this.Save_PASS_Stack.Location = new System.Drawing.Point(258, 163); + this.Save_PASS_Stack.Name = "Save_PASS_Stack"; + this.Save_PASS_Stack.Size = new System.Drawing.Size(66, 31); + this.Save_PASS_Stack.TabIndex = 113; + this.Save_PASS_Stack.Text = "Save"; + this.Save_PASS_Stack.UseVisualStyleBackColor = true; + this.Save_PASS_Stack.Click += new System.EventHandler(this.Save_Pass_Stack_Click); + // + // label45 + // + this.label45.AutoSize = true; + this.label45.Font = new System.Drawing.Font("Microsoft Sans Serif", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.label45.Location = new System.Drawing.Point(161, 112); + this.label45.Name = "label45"; + this.label45.Size = new System.Drawing.Size(58, 16); + this.label45.TabIndex = 114; + this.label45.Text = "Số hàng"; + // + // label46 + // + this.label46.AutoSize = true; + this.label46.Font = new System.Drawing.Font("Microsoft Sans Serif", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.label46.Location = new System.Drawing.Point(255, 112); + this.label46.Name = "label46"; + this.label46.Size = new System.Drawing.Size(46, 16); + this.label46.TabIndex = 115; + this.label46.Text = "Số cột"; + // + // PASS_End_choice + // + this.PASS_End_choice.AutoSize = true; + this.PASS_End_choice.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(0)))), ((int)(((byte)(192)))), ((int)(((byte)(0))))); + this.PASS_End_choice.Location = new System.Drawing.Point(98, 91); + this.PASS_End_choice.Name = "PASS_End_choice"; + this.PASS_End_choice.Size = new System.Drawing.Size(19, 13); + this.PASS_End_choice.TabIndex = 124; + this.PASS_End_choice.Text = "=>"; + // + // PASS_Start_choice + // + this.PASS_Start_choice.AutoSize = true; + this.PASS_Start_choice.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(0)))), ((int)(((byte)(192)))), ((int)(((byte)(0))))); + this.PASS_Start_choice.Location = new System.Drawing.Point(98, 59); + this.PASS_Start_choice.Name = "PASS_Start_choice"; + this.PASS_Start_choice.Size = new System.Drawing.Size(19, 13); + this.PASS_Start_choice.TabIndex = 123; + this.PASS_Start_choice.Text = "=>"; + // + // SET_XY_PASS + // + this.SET_XY_PASS.Location = new System.Drawing.Point(149, 162); + this.SET_XY_PASS.Name = "SET_XY_PASS"; + this.SET_XY_PASS.Size = new System.Drawing.Size(70, 32); + this.SET_XY_PASS.TabIndex = 122; + this.SET_XY_PASS.Text = "SET XY"; + this.SET_XY_PASS.UseVisualStyleBackColor = true; + this.SET_XY_PASS.Click += new System.EventHandler(this.SET_XY_PASS_Click); + // + // PASS_Stack_Start + // + this.PASS_Stack_Start.AutoSize = true; + this.PASS_Stack_Start.Font = new System.Drawing.Font("Microsoft Sans Serif", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.PASS_Stack_Start.Location = new System.Drawing.Point(120, 59); + this.PASS_Stack_Start.Name = "PASS_Stack_Start"; + this.PASS_Stack_Start.Size = new System.Drawing.Size(35, 16); + this.PASS_Stack_Start.TabIndex = 116; + this.PASS_Stack_Start.Text = "Start"; + this.PASS_Stack_Start.TextAlign = System.Drawing.ContentAlignment.MiddleCenter; + this.PASS_Stack_Start.Click += new System.EventHandler(this.PASS_Stack_Start_Click); + // + // PASS_END_Y + // + this.PASS_END_Y.AutoSize = true; + this.PASS_END_Y.Font = new System.Drawing.Font("Microsoft Sans Serif", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.PASS_END_Y.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(0)))), ((int)(((byte)(192)))), ((int)(((byte)(0))))); + this.PASS_END_Y.Location = new System.Drawing.Point(274, 89); + this.PASS_END_Y.Name = "PASS_END_Y"; + this.PASS_END_Y.Size = new System.Drawing.Size(15, 16); + this.PASS_END_Y.TabIndex = 121; + this.PASS_END_Y.Text = "0"; + // + // PASS_Stack_End + // + this.PASS_Stack_End.AutoSize = true; + this.PASS_Stack_End.Font = new System.Drawing.Font("Microsoft Sans Serif", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.PASS_Stack_End.Location = new System.Drawing.Point(121, 89); + this.PASS_Stack_End.Name = "PASS_Stack_End"; + this.PASS_Stack_End.Size = new System.Drawing.Size(32, 16); + this.PASS_Stack_End.TabIndex = 117; + this.PASS_Stack_End.Text = "End"; + this.PASS_Stack_End.Click += new System.EventHandler(this.PASS_Stack_End_Click); + // + // PASS_END_X + // + this.PASS_END_X.AutoSize = true; + this.PASS_END_X.Font = new System.Drawing.Font("Microsoft Sans Serif", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.PASS_END_X.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(0)))), ((int)(((byte)(192)))), ((int)(((byte)(0))))); + this.PASS_END_X.Location = new System.Drawing.Point(181, 89); + this.PASS_END_X.Name = "PASS_END_X"; + this.PASS_END_X.Size = new System.Drawing.Size(15, 16); + this.PASS_END_X.TabIndex = 120; + this.PASS_END_X.Text = "0"; + // + // PASS_START_X + // + this.PASS_START_X.AutoSize = true; + this.PASS_START_X.Font = new System.Drawing.Font("Microsoft Sans Serif", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.PASS_START_X.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(0)))), ((int)(((byte)(192)))), ((int)(((byte)(0))))); + this.PASS_START_X.Location = new System.Drawing.Point(181, 59); + this.PASS_START_X.Name = "PASS_START_X"; + this.PASS_START_X.Size = new System.Drawing.Size(15, 16); + this.PASS_START_X.TabIndex = 118; + this.PASS_START_X.Text = "0"; + // + // PASS_START_Y + // + this.PASS_START_Y.AutoSize = true; + this.PASS_START_Y.Font = new System.Drawing.Font("Microsoft Sans Serif", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.PASS_START_Y.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(0)))), ((int)(((byte)(192)))), ((int)(((byte)(0))))); + this.PASS_START_Y.Location = new System.Drawing.Point(274, 59); + this.PASS_START_Y.Name = "PASS_START_Y"; + this.PASS_START_Y.Size = new System.Drawing.Size(15, 16); + this.PASS_START_Y.TabIndex = 119; + this.PASS_START_Y.Text = "0"; + // + // tabPage5 + // + this.tabPage5.Controls.Add(this.Save_CAM_Stack); + this.tabPage5.Controls.Add(this.SET_XY_CAM); + this.tabPage5.Controls.Add(this.label58); + this.tabPage5.Controls.Add(this.label59); + this.tabPage5.Controls.Add(this.CAM_Start_choice); + this.tabPage5.Controls.Add(this.CAM_Stack_Start); + this.tabPage5.Controls.Add(this.CAM_START_X); + this.tabPage5.Controls.Add(this.CAM_START_Y); + this.tabPage5.Location = new System.Drawing.Point(4, 22); + this.tabPage5.Name = "tabPage5"; + this.tabPage5.Padding = new System.Windows.Forms.Padding(3); + this.tabPage5.Size = new System.Drawing.Size(429, 220); + this.tabPage5.TabIndex = 6; + this.tabPage5.Text = "Camera"; + this.tabPage5.UseVisualStyleBackColor = true; + // + // Save_CAM_Stack + // + this.Save_CAM_Stack.Location = new System.Drawing.Point(166, 137); + this.Save_CAM_Stack.Name = "Save_CAM_Stack"; + this.Save_CAM_Stack.Size = new System.Drawing.Size(66, 31); + this.Save_CAM_Stack.TabIndex = 121; + this.Save_CAM_Stack.Text = "Save"; + this.Save_CAM_Stack.UseVisualStyleBackColor = true; + this.Save_CAM_Stack.Click += new System.EventHandler(this.Save_CAM_Stack_Click); + // + // SET_XY_CAM + // + this.SET_XY_CAM.Location = new System.Drawing.Point(57, 136); + this.SET_XY_CAM.Name = "SET_XY_CAM"; + this.SET_XY_CAM.Size = new System.Drawing.Size(70, 32); + this.SET_XY_CAM.TabIndex = 122; + this.SET_XY_CAM.Text = "SET XY"; + this.SET_XY_CAM.UseVisualStyleBackColor = true; + this.SET_XY_CAM.Click += new System.EventHandler(this.SET_XY_CAM_Click); + // + // label58 + // + this.label58.AutoSize = true; + this.label58.Font = new System.Drawing.Font("Microsoft Sans Serif", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.label58.Location = new System.Drawing.Point(182, 47); + this.label58.Name = "label58"; + this.label58.Size = new System.Drawing.Size(17, 16); + this.label58.TabIndex = 120; + this.label58.Text = "Y"; + // + // label59 + // + this.label59.AutoSize = true; + this.label59.Font = new System.Drawing.Font("Microsoft Sans Serif", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.label59.Location = new System.Drawing.Point(90, 47); + this.label59.Name = "label59"; + this.label59.Size = new System.Drawing.Size(16, 16); + this.label59.TabIndex = 119; + this.label59.Text = "X"; + // + // CAM_Start_choice + // + this.CAM_Start_choice.AutoSize = true; + this.CAM_Start_choice.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(0)))), ((int)(((byte)(192)))), ((int)(((byte)(0))))); + this.CAM_Start_choice.Location = new System.Drawing.Point(8, 70); + this.CAM_Start_choice.Name = "CAM_Start_choice"; + this.CAM_Start_choice.Size = new System.Drawing.Size(19, 13); + this.CAM_Start_choice.TabIndex = 117; + this.CAM_Start_choice.Text = "=>"; + // + // CAM_Stack_Start + // + this.CAM_Stack_Start.AutoSize = true; + this.CAM_Stack_Start.Font = new System.Drawing.Font("Microsoft Sans Serif", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.CAM_Stack_Start.Location = new System.Drawing.Point(30, 70); + this.CAM_Stack_Start.Name = "CAM_Stack_Start"; + this.CAM_Stack_Start.Size = new System.Drawing.Size(50, 16); + this.CAM_Stack_Start.TabIndex = 111; + this.CAM_Stack_Start.Text = "Choice"; + this.CAM_Stack_Start.TextAlign = System.Drawing.ContentAlignment.MiddleCenter; + this.CAM_Stack_Start.Click += new System.EventHandler(this.CAM_Stack_Start_Click); + // + // CAM_START_X + // + this.CAM_START_X.AutoSize = true; + this.CAM_START_X.Font = new System.Drawing.Font("Microsoft Sans Serif", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.CAM_START_X.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(0)))), ((int)(((byte)(192)))), ((int)(((byte)(0))))); + this.CAM_START_X.Location = new System.Drawing.Point(91, 70); + this.CAM_START_X.Name = "CAM_START_X"; + this.CAM_START_X.Size = new System.Drawing.Size(15, 16); + this.CAM_START_X.TabIndex = 113; + this.CAM_START_X.Text = "0"; + // + // CAM_START_Y + // + this.CAM_START_Y.AutoSize = true; + this.CAM_START_Y.Font = new System.Drawing.Font("Microsoft Sans Serif", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.CAM_START_Y.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(0)))), ((int)(((byte)(192)))), ((int)(((byte)(0))))); + this.CAM_START_Y.Location = new System.Drawing.Point(184, 70); + this.CAM_START_Y.Name = "CAM_START_Y"; + this.CAM_START_Y.Size = new System.Drawing.Size(15, 16); + this.CAM_START_Y.TabIndex = 114; + this.CAM_START_Y.Text = "0"; + // + // tabPage6 + // + this.tabPage6.Controls.Add(this.Save_Nozzle); + this.tabPage6.Controls.Add(this.DOWN_ROM); + this.tabPage6.Controls.Add(this.DOWN_NG); + this.tabPage6.Controls.Add(this.DOWN_OK); + this.tabPage6.Controls.Add(this.DOWN_IC); + this.tabPage6.Controls.Add(this.label57); + this.tabPage6.Controls.Add(this.label56); + this.tabPage6.Controls.Add(this.label55); + this.tabPage6.Controls.Add(this.label13); + this.tabPage6.Location = new System.Drawing.Point(4, 22); + this.tabPage6.Name = "tabPage6"; + this.tabPage6.Padding = new System.Windows.Forms.Padding(3); + this.tabPage6.Size = new System.Drawing.Size(429, 220); + this.tabPage6.TabIndex = 7; + this.tabPage6.Text = "Nozzle"; + this.tabPage6.UseVisualStyleBackColor = true; + // + // Save_Nozzle + // + this.Save_Nozzle.Location = new System.Drawing.Point(312, 96); + this.Save_Nozzle.Name = "Save_Nozzle"; + this.Save_Nozzle.Size = new System.Drawing.Size(66, 31); + this.Save_Nozzle.TabIndex = 122; + this.Save_Nozzle.Text = "Save"; + this.Save_Nozzle.UseVisualStyleBackColor = true; + this.Save_Nozzle.Click += new System.EventHandler(this.Save_Nozzle_Click); + // + // DOWN_ROM + // + this.DOWN_ROM.Font = new System.Drawing.Font("Microsoft Sans Serif", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.DOWN_ROM.Location = new System.Drawing.Point(159, 62); + this.DOWN_ROM.Name = "DOWN_ROM"; + this.DOWN_ROM.Size = new System.Drawing.Size(100, 26); + this.DOWN_ROM.TabIndex = 12; + // + // DOWN_NG + // + this.DOWN_NG.Font = new System.Drawing.Font("Microsoft Sans Serif", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.DOWN_NG.Location = new System.Drawing.Point(159, 108); + this.DOWN_NG.Name = "DOWN_NG"; + this.DOWN_NG.Size = new System.Drawing.Size(100, 26); + this.DOWN_NG.TabIndex = 11; + // + // DOWN_OK + // + this.DOWN_OK.Font = new System.Drawing.Font("Microsoft Sans Serif", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.DOWN_OK.Location = new System.Drawing.Point(159, 154); + this.DOWN_OK.Name = "DOWN_OK"; + this.DOWN_OK.Size = new System.Drawing.Size(100, 26); + this.DOWN_OK.TabIndex = 10; + // + // DOWN_IC + // + this.DOWN_IC.Font = new System.Drawing.Font("Microsoft Sans Serif", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.DOWN_IC.Location = new System.Drawing.Point(159, 16); + this.DOWN_IC.Name = "DOWN_IC"; + this.DOWN_IC.Size = new System.Drawing.Size(100, 26); + this.DOWN_IC.TabIndex = 9; + // + // label57 + // + this.label57.AutoSize = true; + this.label57.Location = new System.Drawing.Point(32, 157); + this.label57.Name = "label57"; + this.label57.Size = new System.Drawing.Size(103, 13); + this.label57.TabIndex = 8; + this.label57.Text = "Down To OK_Stack"; + // + // label56 + // + this.label56.AutoSize = true; + this.label56.Location = new System.Drawing.Point(32, 111); + this.label56.Name = "label56"; + this.label56.Size = new System.Drawing.Size(104, 13); + this.label56.TabIndex = 7; + this.label56.Text = "Down To NG_Stack"; + // + // label55 + // + this.label55.AutoSize = true; + this.label55.Location = new System.Drawing.Point(32, 65); + this.label55.Name = "label55"; + this.label55.Size = new System.Drawing.Size(110, 13); + this.label55.TabIndex = 6; + this.label55.Text = "Down To ROM Stack"; + // + // label13 + // + this.label13.AutoSize = true; + this.label13.Location = new System.Drawing.Point(32, 19); + this.label13.Name = "label13"; + this.label13.Size = new System.Drawing.Size(98, 13); + this.label13.TabIndex = 5; + this.label13.Text = "Down To IC_Stack"; + // + // tabPage7 + // + this.tabPage7.Controls.Add(this.button16); + this.tabPage7.Controls.Add(this.comboBox2); + this.tabPage7.Controls.Add(this.label68); + this.tabPage7.Location = new System.Drawing.Point(4, 22); + this.tabPage7.Name = "tabPage7"; + this.tabPage7.Padding = new System.Windows.Forms.Padding(3); + this.tabPage7.Size = new System.Drawing.Size(429, 220); + this.tabPage7.TabIndex = 8; + this.tabPage7.Text = "Other"; + this.tabPage7.UseVisualStyleBackColor = true; + // + // button16 + // + this.button16.Location = new System.Drawing.Point(284, 21); + this.button16.Name = "button16"; + this.button16.Size = new System.Drawing.Size(66, 31); + this.button16.TabIndex = 89; + this.button16.Text = "Save"; + this.button16.UseVisualStyleBackColor = true; + // + // comboBox2 + // + this.comboBox2.Font = new System.Drawing.Font("Microsoft Sans Serif", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.comboBox2.FormattingEnabled = true; + this.comboBox2.Location = new System.Drawing.Point(117, 24); + this.comboBox2.Name = "comboBox2"; + this.comboBox2.Size = new System.Drawing.Size(121, 28); + this.comboBox2.TabIndex = 1; + // + // label68 + // + this.label68.AutoSize = true; + this.label68.Location = new System.Drawing.Point(40, 31); + this.label68.Name = "label68"; + this.label68.Size = new System.Drawing.Size(53, 13); + this.label68.TabIndex = 0; + this.label68.Text = "COM Port"; + // + // WorkTable + // + this.WorkTable.Controls.Add(this.Installing); + this.WorkTable.Controls.Add(this.textBox2); + this.WorkTable.Controls.Add(this.textBox1); + this.WorkTable.Controls.Add(this.label21); + this.WorkTable.Controls.Add(this.NG); + this.WorkTable.Controls.Add(this.label12); + this.WorkTable.Controls.Add(this.label11); + this.WorkTable.Controls.Add(this.IC_Stack); + this.WorkTable.Controls.Add(this.Pass_Stack); + this.WorkTable.Controls.Add(this.ROM_Stack); + this.WorkTable.Controls.Add(this.NG_Stack); + this.WorkTable.Location = new System.Drawing.Point(255, 146); + this.WorkTable.Name = "WorkTable"; + this.WorkTable.Size = new System.Drawing.Size(637, 540); + this.WorkTable.TabIndex = 122; + this.WorkTable.TabStop = false; + // + // Installing + // + this.Installing.AutoSize = true; + this.Installing.BackColor = System.Drawing.Color.Gray; + this.Installing.Enabled = false; + this.Installing.Font = new System.Drawing.Font("Microsoft Sans Serif", 50.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.Installing.Location = new System.Drawing.Point(145, 138); + this.Installing.Name = "Installing"; + this.Installing.Size = new System.Drawing.Size(352, 76); + this.Installing.TabIndex = 10; + this.Installing.Text = "Installing..."; + // + // textBox2 + // + this.textBox2.Location = new System.Drawing.Point(83, 14); + this.textBox2.Name = "textBox2"; + this.textBox2.Size = new System.Drawing.Size(100, 20); + this.textBox2.TabIndex = 9; + // + // textBox1 + // + this.textBox1.Location = new System.Drawing.Point(447, 15); + this.textBox1.Name = "textBox1"; + this.textBox1.Size = new System.Drawing.Size(100, 20); + this.textBox1.TabIndex = 8; + // + // label21 + // + this.label21.AutoSize = true; + this.label21.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; + this.label21.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.label21.ForeColor = System.Drawing.Color.Green; + this.label21.Location = new System.Drawing.Point(369, 20); + this.label21.Name = "label21"; + this.label21.Size = new System.Drawing.Size(73, 15); + this.label21.TabIndex = 7; + this.label21.Text = "Pass Stack"; + // + // NG + // + this.NG.AutoSize = true; + this.NG.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; + this.NG.Font = new System.Drawing.Font("Microsoft YaHei", 8.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.NG.ForeColor = System.Drawing.Color.Red; + this.NG.Location = new System.Drawing.Point(14, 19); + this.NG.Name = "NG"; + this.NG.Size = new System.Drawing.Size(61, 18); + this.NG.TabIndex = 6; + this.NG.Text = "NG Stack"; + // + // label12 + // + this.label12.AutoSize = true; + this.label12.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; + this.label12.Location = new System.Drawing.Point(282, 180); + this.label12.Name = "label12"; + this.label12.Size = new System.Drawing.Size(65, 15); + this.label12.TabIndex = 5; + this.label12.Text = "ROM Stack"; + // + // label11 + // + this.label11.AutoSize = true; + this.label11.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; + this.label11.Location = new System.Drawing.Point(211, 344); + this.label11.Name = "label11"; + this.label11.Size = new System.Drawing.Size(50, 15); + this.label11.TabIndex = 4; + this.label11.Text = "IC Stack"; + // + // IC_Stack + // + this.IC_Stack.ColumnCount = 1; + this.IC_Stack.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 50F)); + this.IC_Stack.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 50F)); + this.IC_Stack.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Absolute, 20F)); + this.IC_Stack.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Absolute, 20F)); + this.IC_Stack.Location = new System.Drawing.Point(207, 363); + this.IC_Stack.Name = "IC_Stack"; + this.IC_Stack.RowCount = 1; + this.IC_Stack.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 50F)); + this.IC_Stack.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 50F)); + this.IC_Stack.Size = new System.Drawing.Size(74, 40); + this.IC_Stack.TabIndex = 3; + // + // Pass_Stack + // + this.Pass_Stack.ColumnCount = 1; + this.Pass_Stack.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 50F)); + this.Pass_Stack.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 50F)); + this.Pass_Stack.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Absolute, 20F)); + this.Pass_Stack.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Absolute, 20F)); + this.Pass_Stack.Location = new System.Drawing.Point(366, 35); + this.Pass_Stack.Name = "Pass_Stack"; + this.Pass_Stack.RowCount = 1; + this.Pass_Stack.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 50F)); + this.Pass_Stack.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 50F)); + this.Pass_Stack.Size = new System.Drawing.Size(74, 40); + this.Pass_Stack.TabIndex = 2; + // + // ROM_Stack + // + this.ROM_Stack.ColumnCount = 1; + this.ROM_Stack.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 50F)); + this.ROM_Stack.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 50F)); + this.ROM_Stack.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Absolute, 20F)); + this.ROM_Stack.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Absolute, 20F)); + this.ROM_Stack.Location = new System.Drawing.Point(285, 196); + this.ROM_Stack.Name = "ROM_Stack"; + this.ROM_Stack.RowCount = 1; + this.ROM_Stack.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 50F)); + this.ROM_Stack.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 50F)); + this.ROM_Stack.Size = new System.Drawing.Size(74, 40); + this.ROM_Stack.TabIndex = 1; + // + // NG_Stack + // + this.NG_Stack.ColumnCount = 1; + this.NG_Stack.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 50F)); + this.NG_Stack.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 50F)); + this.NG_Stack.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Absolute, 20F)); + this.NG_Stack.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Absolute, 20F)); + this.NG_Stack.Location = new System.Drawing.Point(11, 35); + this.NG_Stack.Name = "NG_Stack"; + this.NG_Stack.RowCount = 1; + this.NG_Stack.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 50F)); + this.NG_Stack.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 50F)); + this.NG_Stack.Size = new System.Drawing.Size(74, 40); + this.NG_Stack.TabIndex = 0; + // + // Manual + // + this.Manual.Controls.Add(this.Speed_choice); + this.Manual.Controls.Add(this.R2_UP); + this.Manual.Controls.Add(this.R2_DOWN); + this.Manual.Controls.Add(this.R1_UP); + this.Manual.Controls.Add(this.label39); + this.Manual.Controls.Add(this.R1_DOWN); + this.Manual.Controls.Add(this.Camera_choice); + this.Manual.Controls.Add(this.XL1); + this.Manual.Controls.Add(this.button7); + this.Manual.Controls.Add(this.label5); + this.Manual.Controls.Add(this.HOME); + this.Manual.Controls.Add(this.button5); + this.Manual.Controls.Add(this.LED); + this.Manual.Controls.Add(this.button6); + this.Manual.Controls.Add(this.PUMP); + this.Manual.Controls.Add(this.VACUM_1); + this.Manual.Controls.Add(this.VACUM_2); + this.Manual.Controls.Add(this.Y_UP); + this.Manual.Controls.Add(this.label2); + this.Manual.Controls.Add(this.label1); + this.Manual.Controls.Add(this.button4); + this.Manual.Controls.Add(this.Automanual); + this.Manual.Controls.Add(this.button3); + this.Manual.Location = new System.Drawing.Point(1, 426); + this.Manual.Name = "Manual"; + this.Manual.Size = new System.Drawing.Size(248, 294); + this.Manual.TabIndex = 123; + this.Manual.TabStop = false; + this.Manual.Text = "Table Control"; + // + // Speed_choice + // + this.Speed_choice.DisplayMember = "4"; + this.Speed_choice.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this.Speed_choice.FormattingEnabled = true; + this.Speed_choice.ImeMode = System.Windows.Forms.ImeMode.Alpha; + this.Speed_choice.Items.AddRange(new object[] { + "1", + "2", + "3", + "4", + "5", + "6", + "7", + "8", + "9", + "10"}); + this.Speed_choice.Location = new System.Drawing.Point(94, 27); + this.Speed_choice.MaxDropDownItems = 10; + this.Speed_choice.Name = "Speed_choice"; + this.Speed_choice.Size = new System.Drawing.Size(66, 21); + this.Speed_choice.TabIndex = 11; + this.Speed_choice.ValueMember = "4"; + this.Speed_choice.SelectedValueChanged += new System.EventHandler(this.Speed_choice_SelectedValueChanged); + // + // R2_UP + // + this.R2_UP.Font = new System.Drawing.Font("Microsoft Sans Serif", 15.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.R2_UP.Location = new System.Drawing.Point(187, 187); + this.R2_UP.Name = "R2_UP"; + this.R2_UP.Size = new System.Drawing.Size(30, 40); + this.R2_UP.TabIndex = 61; + this.R2_UP.Text = "+"; + this.R2_UP.UseVisualStyleBackColor = true; + this.R2_UP.MouseDown += new System.Windows.Forms.MouseEventHandler(this.R2_UP_MouseDown); + this.R2_UP.MouseUp += new System.Windows.Forms.MouseEventHandler(this.R2_UP_MouseUp); + // + // R2_DOWN + // + this.R2_DOWN.Font = new System.Drawing.Font("Microsoft Sans Serif", 15.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.R2_DOWN.Location = new System.Drawing.Point(187, 236); + this.R2_DOWN.Name = "R2_DOWN"; + this.R2_DOWN.Size = new System.Drawing.Size(30, 40); + this.R2_DOWN.TabIndex = 62; + this.R2_DOWN.Text = "-"; + this.R2_DOWN.UseVisualStyleBackColor = true; + this.R2_DOWN.MouseDown += new System.Windows.Forms.MouseEventHandler(this.R2_DOWN_MouseDown); + this.R2_DOWN.MouseUp += new System.Windows.Forms.MouseEventHandler(this.R2_DOWN_MouseUp); + // + // R1_UP + // + this.R1_UP.Font = new System.Drawing.Font("Microsoft Sans Serif", 15.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.R1_UP.Location = new System.Drawing.Point(144, 187); + this.R1_UP.Name = "R1_UP"; + this.R1_UP.Size = new System.Drawing.Size(30, 40); + this.R1_UP.TabIndex = 125; + this.R1_UP.Text = "+"; + this.R1_UP.UseVisualStyleBackColor = true; + this.R1_UP.MouseDown += new System.Windows.Forms.MouseEventHandler(this.R1_UP_MouseDown); + this.R1_UP.MouseUp += new System.Windows.Forms.MouseEventHandler(this.R1_UP_MouseUp); + // + // label39 + // + this.label39.AutoSize = true; + this.label39.BackColor = System.Drawing.Color.Yellow; + this.label39.Font = new System.Drawing.Font("Microsoft Sans Serif", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.label39.Location = new System.Drawing.Point(145, 154); + this.label39.Name = "label39"; + this.label39.Size = new System.Drawing.Size(25, 16); + this.label39.TabIndex = 124; + this.label39.Text = "R1"; + // + // R1_DOWN + // + this.R1_DOWN.Font = new System.Drawing.Font("Microsoft Sans Serif", 15.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.R1_DOWN.Location = new System.Drawing.Point(144, 236); + this.R1_DOWN.Name = "R1_DOWN"; + this.R1_DOWN.Size = new System.Drawing.Size(30, 40); + this.R1_DOWN.TabIndex = 126; + this.R1_DOWN.Text = "-"; + this.R1_DOWN.UseVisualStyleBackColor = true; + this.R1_DOWN.MouseDown += new System.Windows.Forms.MouseEventHandler(this.R1_DOWN_MouseDown); + this.R1_DOWN.MouseUp += new System.Windows.Forms.MouseEventHandler(this.R1_DOWN_MouseUp); + // + // Camera_choice + // + this.Camera_choice.Location = new System.Drawing.Point(176, 54); + this.Camera_choice.Name = "Camera_choice"; + this.Camera_choice.Size = new System.Drawing.Size(66, 23); + this.Camera_choice.TabIndex = 123; + this.Camera_choice.Text = "Cam_B"; + this.Camera_choice.UseVisualStyleBackColor = true; + this.Camera_choice.Click += new System.EventHandler(this.Camera_choice_Click); + // + // XL1 + // + this.XL1.Location = new System.Drawing.Point(22, 112); + this.XL1.Name = "XL1"; + this.XL1.Size = new System.Drawing.Size(66, 23); + this.XL1.TabIndex = 121; + this.XL1.Text = "XL1_UP"; + this.XL1.UseVisualStyleBackColor = true; + this.XL1.Click += new System.EventHandler(this.XL1_UP_Click); + // + // Nap + // + this.Nap.Location = new System.Drawing.Point(434, 106); + this.Nap.Name = "Nap"; + this.Nap.Size = new System.Drawing.Size(72, 33); + this.Nap.TabIndex = 127; + this.Nap.Text = "Nap rom"; + this.Nap.UseVisualStyleBackColor = true; + this.Nap.Click += new System.EventHandler(this.Nap_Click); + // + // Recall + // + this.Recall.Location = new System.Drawing.Point(731, 106); + this.Recall.Name = "Recall"; + this.Recall.Size = new System.Drawing.Size(73, 34); + this.Recall.TabIndex = 124; + this.Recall.Text = "RECALL"; + this.Recall.UseVisualStyleBackColor = true; + this.Recall.Click += new System.EventHandler(this.Recall_Click); + this.Recall.MouseHover += new System.EventHandler(this.Recall_MouseHover); + this.Recall.MouseMove += new System.Windows.Forms.MouseEventHandler(this.Recall_MouseMove); + // + // Save_all + // + this.Save_all.Location = new System.Drawing.Point(819, 106); + this.Save_all.Name = "Save_all"; + this.Save_all.Size = new System.Drawing.Size(73, 34); + this.Save_all.TabIndex = 125; + this.Save_all.Text = "Save All"; + this.Save_all.UseVisualStyleBackColor = true; + // + // Pause + // + this.Pause.BackColor = System.Drawing.Color.LimeGreen; + this.Pause.Location = new System.Drawing.Point(349, 105); + this.Pause.Name = "Pause"; + this.Pause.Size = new System.Drawing.Size(79, 34); + this.Pause.TabIndex = 126; + this.Pause.Text = "Play"; + this.Pause.UseVisualStyleBackColor = false; + this.Pause.Click += new System.EventHandler(this.Pause_Click); + // + // Start_auto + // + this.Start_auto.BackColor = System.Drawing.Color.Yellow; + this.Start_auto.Location = new System.Drawing.Point(255, 105); + this.Start_auto.Name = "Start_auto"; + this.Start_auto.Size = new System.Drawing.Size(79, 34); + this.Start_auto.TabIndex = 128; + this.Start_auto.Text = "STOP"; + this.toolTip1.SetToolTip(this.Start_auto, "Bắt đầu chạy auto theo cấu hình đã cài đặt"); + this.Start_auto.UseVisualStyleBackColor = false; + this.Start_auto.Click += new System.EventHandler(this.Start_auto_Click); + // + // CONNECT + // + this.CONNECT.Location = new System.Drawing.Point(540, 105); + this.CONNECT.Name = "CONNECT"; + this.CONNECT.Size = new System.Drawing.Size(79, 34); + this.CONNECT.TabIndex = 129; + this.CONNECT.Text = "Connect"; + this.CONNECT.UseVisualStyleBackColor = true; + this.CONNECT.Click += new System.EventHandler(this.CONNECT_Click); + // + // Camera_connect + // + this.Camera_connect.Location = new System.Drawing.Point(911, 97); + this.Camera_connect.Name = "Camera_connect"; + this.Camera_connect.Size = new System.Drawing.Size(79, 34); + this.Camera_connect.TabIndex = 130; + this.Camera_connect.Text = "Connect"; + this.Camera_connect.UseVisualStyleBackColor = true; + this.Camera_connect.Click += new System.EventHandler(this.Camera_connect_Click); + // + // Toado_X + // + this.Toado_X.Location = new System.Drawing.Point(122, 105); + this.Toado_X.Name = "Toado_X"; + this.Toado_X.Size = new System.Drawing.Size(100, 20); + this.Toado_X.TabIndex = 131; + // + // Toado_Y + // + this.Toado_Y.Location = new System.Drawing.Point(122, 129); + this.Toado_Y.Name = "Toado_Y"; + this.Toado_Y.Size = new System.Drawing.Size(100, 20); + this.Toado_Y.TabIndex = 132; + // + // Toado_R1 + // + this.Toado_R1.Location = new System.Drawing.Point(122, 173); + this.Toado_R1.Name = "Toado_R1"; + this.Toado_R1.Size = new System.Drawing.Size(100, 20); + this.Toado_R1.TabIndex = 134; + // + // Toado_Z + // + this.Toado_Z.Location = new System.Drawing.Point(122, 150); + this.Toado_Z.Name = "Toado_Z"; + this.Toado_Z.Size = new System.Drawing.Size(100, 20); + this.Toado_Z.TabIndex = 133; + // + // UpDownStop + // + this.UpDownStop.Location = new System.Drawing.Point(122, 264); + this.UpDownStop.Name = "UpDownStop"; + this.UpDownStop.Size = new System.Drawing.Size(100, 20); + this.UpDownStop.TabIndex = 138; + // + // Auto_manual + // + this.Auto_manual.Location = new System.Drawing.Point(122, 237); + this.Auto_manual.Name = "Auto_manual"; + this.Auto_manual.Size = new System.Drawing.Size(100, 20); + this.Auto_manual.TabIndex = 137; + // + // Status_Home + // + this.Status_Home.Location = new System.Drawing.Point(122, 215); + this.Status_Home.Name = "Status_Home"; + this.Status_Home.Size = new System.Drawing.Size(100, 20); + this.Status_Home.TabIndex = 136; + // + // Toado_R2 + // + this.Toado_R2.Location = new System.Drawing.Point(122, 191); + this.Toado_R2.Name = "Toado_R2"; + this.Toado_R2.Size = new System.Drawing.Size(100, 20); + this.Toado_R2.TabIndex = 135; + // + // Req_Y + // + this.Req_Y.Location = new System.Drawing.Point(122, 357); + this.Req_Y.Name = "Req_Y"; + this.Req_Y.Size = new System.Drawing.Size(100, 20); + this.Req_Y.TabIndex = 142; + // + // Req_X + // + this.Req_X.Location = new System.Drawing.Point(122, 334); + this.Req_X.Name = "Req_X"; + this.Req_X.Size = new System.Drawing.Size(100, 20); + this.Req_X.TabIndex = 141; + // + // Tocdo_dichuyen + // + this.Tocdo_dichuyen.Location = new System.Drawing.Point(122, 313); + this.Tocdo_dichuyen.Name = "Tocdo_dichuyen"; + this.Tocdo_dichuyen.Size = new System.Drawing.Size(100, 20); + this.Tocdo_dichuyen.TabIndex = 140; + // + // Dichuyen_Truc + // + this.Dichuyen_Truc.Location = new System.Drawing.Point(122, 289); + this.Dichuyen_Truc.Name = "Dichuyen_Truc"; + this.Dichuyen_Truc.Size = new System.Drawing.Size(100, 20); + this.Dichuyen_Truc.TabIndex = 139; + // + // Req_R1 + // + this.Req_R1.Location = new System.Drawing.Point(122, 401); + this.Req_R1.Name = "Req_R1"; + this.Req_R1.Size = new System.Drawing.Size(100, 20); + this.Req_R1.TabIndex = 144; + // + // Req_Z + // + this.Req_Z.Location = new System.Drawing.Point(122, 378); + this.Req_Z.Name = "Req_Z"; + this.Req_Z.Size = new System.Drawing.Size(100, 20); + this.Req_Z.TabIndex = 143; + // + // label3 + // + this.label3.AutoSize = true; + this.label3.Font = new System.Drawing.Font("Microsoft Sans Serif", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.label3.Location = new System.Drawing.Point(26, 333); + this.label3.Name = "label3"; + this.label3.Size = new System.Drawing.Size(69, 16); + this.label3.TabIndex = 145; + this.label3.Text = "11- REQ X"; + // + // label16 + // + this.label16.AutoSize = true; + this.label16.Font = new System.Drawing.Font("Microsoft Sans Serif", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.label16.Location = new System.Drawing.Point(26, 106); + this.label16.Name = "label16"; + this.label16.Size = new System.Drawing.Size(27, 16); + this.label16.TabIndex = 146; + this.label16.Text = "1-X"; + // + // label19 + // + this.label19.AutoSize = true; + this.label19.Font = new System.Drawing.Font("Microsoft Sans Serif", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.label19.Location = new System.Drawing.Point(26, 130); + this.label19.Name = "label19"; + this.label19.Size = new System.Drawing.Size(28, 16); + this.label19.TabIndex = 147; + this.label19.Text = "2-Y"; + // + // label24 + // + this.label24.AutoSize = true; + this.label24.Font = new System.Drawing.Font("Microsoft Sans Serif", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.label24.Location = new System.Drawing.Point(26, 174); + this.label24.Name = "label24"; + this.label24.Size = new System.Drawing.Size(36, 16); + this.label24.TabIndex = 149; + this.label24.Text = "4-R1"; + // + // label25 + // + this.label25.AutoSize = true; + this.label25.Font = new System.Drawing.Font("Microsoft Sans Serif", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.label25.Location = new System.Drawing.Point(26, 150); + this.label25.Name = "label25"; + this.label25.Size = new System.Drawing.Size(27, 16); + this.label25.TabIndex = 148; + this.label25.Text = "3-Z"; + // + // label30 + // + this.label30.AutoSize = true; + this.label30.Font = new System.Drawing.Font("Microsoft Sans Serif", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.label30.Location = new System.Drawing.Point(26, 263); + this.label30.Name = "label30"; + this.label30.Size = new System.Drawing.Size(47, 16); + this.label30.TabIndex = 153; + this.label30.Text = "8-UPS"; + // + // label31 + // + this.label31.AutoSize = true; + this.label31.Font = new System.Drawing.Font("Microsoft Sans Serif", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.label31.Location = new System.Drawing.Point(26, 239); + this.label31.Name = "label31"; + this.label31.Size = new System.Drawing.Size(39, 16); + this.label31.TabIndex = 152; + this.label31.Text = "7-AM"; + // + // label32 + // + this.label32.AutoSize = true; + this.label32.Font = new System.Drawing.Font("Microsoft Sans Serif", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.label32.Location = new System.Drawing.Point(26, 219); + this.label32.Name = "label32"; + this.label32.Size = new System.Drawing.Size(59, 16); + this.label32.TabIndex = 151; + this.label32.Text = "6-HOME"; + // + // label34 + // + this.label34.AutoSize = true; + this.label34.Font = new System.Drawing.Font("Microsoft Sans Serif", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.label34.Location = new System.Drawing.Point(26, 195); + this.label34.Name = "label34"; + this.label34.Size = new System.Drawing.Size(36, 16); + this.label34.TabIndex = 150; + this.label34.Text = "5-R2"; + // + // label35 + // + this.label35.AutoSize = true; + this.label35.Font = new System.Drawing.Font("Microsoft Sans Serif", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.label35.Location = new System.Drawing.Point(26, 290); + this.label35.Name = "label35"; + this.label35.Size = new System.Drawing.Size(57, 16); + this.label35.TabIndex = 154; + this.label35.Text = "9-TRUC"; + // + // label36 + // + this.label36.AutoSize = true; + this.label36.Font = new System.Drawing.Font("Microsoft Sans Serif", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.label36.Location = new System.Drawing.Point(26, 313); + this.label36.Name = "label36"; + this.label36.Size = new System.Drawing.Size(72, 16); + this.label36.TabIndex = 155; + this.label36.Text = "10-SPEED"; + // + // Xm + // + this.Xm.AutoSize = true; + this.Xm.Location = new System.Drawing.Point(998, 105); + this.Xm.Name = "Xm"; + this.Xm.Size = new System.Drawing.Size(13, 13); + this.Xm.TabIndex = 162; + this.Xm.Text = "0"; + // + // Ym + // + this.Ym.AutoSize = true; + this.Ym.Location = new System.Drawing.Point(1066, 105); + this.Ym.Name = "Ym"; + this.Ym.Size = new System.Drawing.Size(13, 13); + this.Ym.TabIndex = 163; + this.Ym.Text = "0"; + // + // dR + // + this.dR.AutoSize = true; + this.dR.ForeColor = System.Drawing.Color.Red; + this.dR.Location = new System.Drawing.Point(998, 353); + this.dR.Name = "dR"; + this.dR.Size = new System.Drawing.Size(13, 13); + this.dR.TabIndex = 164; + this.dR.Text = "0"; + // + // dX + // + this.dX.AutoSize = true; + this.dX.ForeColor = System.Drawing.Color.Red; + this.dX.Location = new System.Drawing.Point(1148, 353); + this.dX.Name = "dX"; + this.dX.Size = new System.Drawing.Size(13, 13); + this.dX.TabIndex = 165; + this.dX.Text = "0"; + // + // dY + // + this.dY.AutoSize = true; + this.dY.ForeColor = System.Drawing.Color.Red; + this.dY.Location = new System.Drawing.Point(1288, 353); + this.dY.Name = "dY"; + this.dY.Size = new System.Drawing.Size(13, 13); + this.dY.TabIndex = 166; + this.dY.Text = "0"; + // + // Checking + // + this.Checking.AutoSize = true; + this.Checking.Location = new System.Drawing.Point(1148, 105); + this.Checking.Name = "Checking"; + this.Checking.Size = new System.Drawing.Size(13, 13); + this.Checking.TabIndex = 167; + this.Checking.Text = "0"; + // + // Rotation + // + this.Rotation.Location = new System.Drawing.Point(911, 393); + this.Rotation.Name = "Rotation"; + this.Rotation.Size = new System.Drawing.Size(73, 34); + this.Rotation.TabIndex = 168; + this.Rotation.Text = "Rot"; + this.Rotation.UseVisualStyleBackColor = true; + this.Rotation.Click += new System.EventHandler(this.Rotation_Click); + // + // FormMain + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.AutoSize = true; + this.AutoValidate = System.Windows.Forms.AutoValidate.EnablePreventFocusChange; + this.ClientSize = new System.Drawing.Size(1370, 750); + this.Controls.Add(this.Rotation); + this.Controls.Add(this.Checking); + this.Controls.Add(this.dY); + this.Controls.Add(this.dX); + this.Controls.Add(this.dR); + this.Controls.Add(this.Ym); + this.Controls.Add(this.Nap); + this.Controls.Add(this.Xm); + this.Controls.Add(this.label36); + this.Controls.Add(this.label35); + this.Controls.Add(this.label30); + this.Controls.Add(this.label31); + this.Controls.Add(this.label32); + this.Controls.Add(this.label34); + this.Controls.Add(this.label24); + this.Controls.Add(this.label25); + this.Controls.Add(this.label19); + this.Controls.Add(this.label16); + this.Controls.Add(this.label3); + this.Controls.Add(this.Req_R1); + this.Controls.Add(this.Req_Z); + this.Controls.Add(this.Req_Y); + this.Controls.Add(this.Req_X); + this.Controls.Add(this.Tocdo_dichuyen); + this.Controls.Add(this.Dichuyen_Truc); + this.Controls.Add(this.UpDownStop); + this.Controls.Add(this.Auto_manual); + this.Controls.Add(this.Status_Home); + this.Controls.Add(this.Toado_R2); + this.Controls.Add(this.Toado_R1); + this.Controls.Add(this.Toado_Z); + this.Controls.Add(this.Toado_Y); + this.Controls.Add(this.Toado_X); + this.Controls.Add(this.Camera_connect); + this.Controls.Add(this.CONNECT); + this.Controls.Add(this.Start_auto); + this.Controls.Add(this.Pause); + this.Controls.Add(this.Save_all); + this.Controls.Add(this.Recall); + this.Controls.Add(this.Manual); + this.Controls.Add(this.WorkTable); + this.Controls.Add(this.Calib_System); + this.Controls.Add(this.pictureBox2); + this.Controls.Add(this.comboBox1); + this.Controls.Add(this.label8); + this.Controls.Add(this.label7); + this.Controls.Add(this.label4); + this.Controls.Add(this.pictureBox3); + this.Controls.Add(this.label6); + this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedSingle; + this.Name = "FormMain"; + this.Text = "Tula"; + this.TopMost = true; + this.WindowState = System.Windows.Forms.FormWindowState.Maximized; + this.Load += new System.EventHandler(this.FormMain_Load); + ((System.ComponentModel.ISupportInitialize)(this.pictureBox3)).EndInit(); + this.groupBox1.ResumeLayout(false); + this.groupBox1.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)(this.IC_Stack_cot)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.IC_Stack_hang)).EndInit(); + this.groupBox2.ResumeLayout(false); + this.groupBox2.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)(this.ROM_Stack_hang)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.ROM_Stack_cot)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.pictureBox2)).EndInit(); + this.Calib_System.ResumeLayout(false); + this.tabPage1.ResumeLayout(false); + this.tabPage2.ResumeLayout(false); + this.tabPage3.ResumeLayout(false); + this.tabPage3.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)(this.NG_Stack_hang)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.NG_Stack_cot)).EndInit(); + this.tabPage4.ResumeLayout(false); + this.tabPage4.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)(this.PASS_Stack_hang)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.PASS_Stack_cot)).EndInit(); + this.tabPage5.ResumeLayout(false); + this.tabPage5.PerformLayout(); + this.tabPage6.ResumeLayout(false); + this.tabPage6.PerformLayout(); + this.tabPage7.ResumeLayout(false); + this.tabPage7.PerformLayout(); + this.WorkTable.ResumeLayout(false); + this.WorkTable.PerformLayout(); + this.Manual.ResumeLayout(false); + this.Manual.PerformLayout(); + this.ResumeLayout(false); + this.PerformLayout(); + + } + + #endregion + + private System.Windows.Forms.Label label6; + private System.Windows.Forms.PictureBox pictureBox3; + private System.Windows.Forms.Button HOME; + private System.Windows.Forms.Label label1; + private System.Windows.Forms.Label label2; + private System.Windows.Forms.Label label5; + private System.Windows.Forms.Button button3; + private System.Windows.Forms.Button Y_UP; + private System.Windows.Forms.Button button4; + private System.Windows.Forms.Button button5; + private System.Windows.Forms.Button button6; + private System.Windows.Forms.Button button7; + private System.Windows.Forms.Button Automanual; + private System.Windows.Forms.Label label4; + private System.Windows.Forms.Label label7; + private System.Windows.Forms.Label label8; + private System.Windows.Forms.Timer timer1; + private System.Windows.Forms.Button SAVE; + private System.Windows.Forms.Label label14; + private System.Windows.Forms.Label label15; + private System.Windows.Forms.Label IC_Stack_Start; + private System.Windows.Forms.Label IC_Stack_End; + private System.Windows.Forms.Label IC_START_X; + private System.Windows.Forms.Label IC_START_Y; + private System.Windows.Forms.Label IC_END_X; + private System.Windows.Forms.Label IC_END_Y; + private System.Windows.Forms.Button SET_XY_IC; + private System.Windows.Forms.Label IC_Start_choice; + private System.Windows.Forms.Label IC_End_choice; + private System.Windows.Forms.GroupBox groupBox1; + private System.Windows.Forms.Label label18; + private System.Windows.Forms.Label label17; + private System.Windows.Forms.GroupBox groupBox2; + private System.Windows.Forms.Button SAVE_XY_ROM; + private System.Windows.Forms.Label label26; + private System.Windows.Forms.Button SET_XY_ROM; + private System.Windows.Forms.Label label27; + private System.Windows.Forms.Label label28; + private System.Windows.Forms.Label ROM_End_choice; + private System.Windows.Forms.Label ROM_Start_choice; + private System.Windows.Forms.Label ROM_Stack_Start; + private System.Windows.Forms.Label ROM_END_Y; + private System.Windows.Forms.Label ROM_Stack_End; + private System.Windows.Forms.Label ROM_END_X; + private System.Windows.Forms.Label ROM_START_X; + private System.Windows.Forms.Label ROM_START_Y; + private System.Windows.Forms.PictureBox pictureBox1; + private System.Windows.Forms.ComboBox comboBox1; + private System.Windows.Forms.PictureBox pictureBox2; + private System.Windows.Forms.Button PUMP; + private System.Windows.Forms.Button VACUM_1; + private System.Windows.Forms.Button VACUM_2; + private System.Windows.Forms.Button LED; + private System.Windows.Forms.TabControl Calib_System; + private System.Windows.Forms.TabPage tabPage1; + private System.Windows.Forms.TabPage tabPage2; + private System.Windows.Forms.TabPage tabPage3; + private System.Windows.Forms.TabPage tabPage4; + private System.Windows.Forms.GroupBox WorkTable; + private System.Windows.Forms.TableLayoutPanel NG_Stack; + private System.Windows.Forms.TableLayoutPanel IC_Stack; + private System.Windows.Forms.TableLayoutPanel Pass_Stack; + private System.Windows.Forms.TableLayoutPanel ROM_Stack; + private System.Windows.Forms.NumericUpDown IC_Stack_cot; + private System.Windows.Forms.NumericUpDown IC_Stack_hang; + private System.Windows.Forms.GroupBox Manual; + private System.Windows.Forms.NumericUpDown ROM_Stack_hang; + private System.Windows.Forms.NumericUpDown ROM_Stack_cot; + private System.Windows.Forms.Label label9; + private System.Windows.Forms.Label label10; + private System.Windows.Forms.Label label21; + private System.Windows.Forms.Label NG; + private System.Windows.Forms.Label label12; + private System.Windows.Forms.Label label11; + private System.Windows.Forms.NumericUpDown NG_Stack_hang; + private System.Windows.Forms.NumericUpDown NG_Stack_cot; + private System.Windows.Forms.Label label22; + private System.Windows.Forms.Label label23; + private System.Windows.Forms.Button Save_NG_Stack; + private System.Windows.Forms.Label label29; + private System.Windows.Forms.Label label33; + private System.Windows.Forms.Label NG_End_choice; + private System.Windows.Forms.Label NG_Start_choice; + private System.Windows.Forms.Button SET_XY_NG; + private System.Windows.Forms.Label NG_Stack_Start; + private System.Windows.Forms.Label NG_END_Y; + private System.Windows.Forms.Label NG_Stack_End; + private System.Windows.Forms.Label NG_END_X; + private System.Windows.Forms.Label NG_START_X; + private System.Windows.Forms.Label NG_START_Y; + private System.Windows.Forms.NumericUpDown PASS_Stack_hang; + private System.Windows.Forms.NumericUpDown PASS_Stack_cot; + private System.Windows.Forms.Label label43; + private System.Windows.Forms.Label label44; + private System.Windows.Forms.Button Save_PASS_Stack; + private System.Windows.Forms.Label label45; + private System.Windows.Forms.Label label46; + private System.Windows.Forms.Label PASS_End_choice; + private System.Windows.Forms.Label PASS_Start_choice; + private System.Windows.Forms.Button SET_XY_PASS; + private System.Windows.Forms.Label PASS_Stack_Start; + private System.Windows.Forms.Label PASS_END_Y; + private System.Windows.Forms.Label PASS_Stack_End; + private System.Windows.Forms.Label PASS_END_X; + private System.Windows.Forms.Label PASS_START_X; + private System.Windows.Forms.Label PASS_START_Y; + private System.Windows.Forms.TextBox textBox2; + private System.Windows.Forms.TextBox textBox1; + private System.Windows.Forms.Button Recall; + private System.Windows.Forms.Button Save_all; + private System.Windows.Forms.Button Pause; + private System.Windows.Forms.TabPage tabPage5; + private System.Windows.Forms.TabPage tabPage6; + private System.Windows.Forms.TextBox DOWN_ROM; + private System.Windows.Forms.TextBox DOWN_NG; + private System.Windows.Forms.TextBox DOWN_OK; + private System.Windows.Forms.TextBox DOWN_IC; + private System.Windows.Forms.Label label57; + private System.Windows.Forms.Label label56; + private System.Windows.Forms.Label label55; + private System.Windows.Forms.Label label13; + private System.Windows.Forms.TabPage tabPage7; + private System.Windows.Forms.Button Save_CAM_Stack; + private System.Windows.Forms.Button SET_XY_CAM; + private System.Windows.Forms.Label label58; + private System.Windows.Forms.Label label59; + private System.Windows.Forms.Label CAM_Start_choice; + private System.Windows.Forms.Label CAM_Stack_Start; + private System.Windows.Forms.Label CAM_START_X; + private System.Windows.Forms.Label CAM_START_Y; + private System.Windows.Forms.Button button16; + private System.Windows.Forms.ComboBox comboBox2; + private System.Windows.Forms.Label label68; + private System.Windows.Forms.Button Start_auto; + private System.Windows.Forms.ToolTip toolTip1; + private System.Windows.Forms.Button Save_Nozzle; + private System.Windows.Forms.Button XL1; + private System.Windows.Forms.Button CONNECT; + private System.Windows.Forms.Label Installing; + private System.Windows.Forms.Button Camera_connect; + private System.Windows.Forms.TextBox Toado_X; + private System.Windows.Forms.TextBox Toado_Y; + private System.Windows.Forms.TextBox Toado_R1; + private System.Windows.Forms.TextBox Toado_Z; + private System.Windows.Forms.TextBox UpDownStop; + private System.Windows.Forms.TextBox Auto_manual; + private System.Windows.Forms.TextBox Status_Home; + private System.Windows.Forms.TextBox Toado_R2; + private System.Windows.Forms.TextBox Req_Y; + private System.Windows.Forms.TextBox Req_X; + private System.Windows.Forms.TextBox Tocdo_dichuyen; + private System.Windows.Forms.TextBox Dichuyen_Truc; + private System.Windows.Forms.TextBox Req_R1; + private System.Windows.Forms.TextBox Req_Z; + private System.Windows.Forms.Label label3; + private System.Windows.Forms.Label label16; + private System.Windows.Forms.Label label19; + private System.Windows.Forms.Label label24; + private System.Windows.Forms.Label label25; + private System.Windows.Forms.Label label30; + private System.Windows.Forms.Label label31; + private System.Windows.Forms.Label label32; + private System.Windows.Forms.Label label34; + private System.Windows.Forms.Label label35; + private System.Windows.Forms.Label label36; + private System.Windows.Forms.Button Camera_choice; + private System.Windows.Forms.Button R2_UP; + private System.Windows.Forms.Button R2_DOWN; + private System.Windows.Forms.Button R1_UP; + private System.Windows.Forms.Label label39; + private System.Windows.Forms.Button R1_DOWN; + private System.Windows.Forms.Button Nap; + private System.Windows.Forms.Label Xm; + private System.Windows.Forms.Label Ym; + private System.Windows.Forms.Label dR; + private System.Windows.Forms.Label dX; + private System.Windows.Forms.Label dY; + private System.Windows.Forms.Label Checking; + private System.Windows.Forms.Button Rotation; + private System.Windows.Forms.ComboBox Speed_choice; + } +} + diff --git a/HMI Label And Editor Control/FormMain1.cs b/HMI Label And Editor Control/FormMain1.cs new file mode 100644 index 0000000..e73dfaf --- /dev/null +++ b/HMI Label And Editor Control/FormMain1.cs @@ -0,0 +1,2497 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.Linq; +using System.Text; +using System.Threading; +using System.Threading.Tasks; +using System.Windows.Forms; +using System.IO; + +using EasyModbus; + +using System.Drawing.Imaging; +//using AForge; +//using AForge.Imaging; +//using AForge.Video; +//using AForge.Video.DirectShow; +//using AForge.Imaging.Filters; +//using AForge.Math.Geometry; + +using Emgu.CV; +using Emgu.CV.Structure; +using Emgu.CV.Util; + + +namespace How_to_create_HMI_Control_Real_Time +{ + public partial class FormMain : Form + { + ModbusClient MB; + const int ADD_X = 1; + const int ADD_Y = 2; + const int ADD_Z = 3; + const int ADD_R1 = 4; + const int ADD_R2 = 5; + + const int ADD_HOME = 6; + const int ADD_AM = 7; + + + const int ADD_REQ_X = 11; + const int ADD_REQ_Y = 12; + const int ADD_REQ_Z = 13; + const int ADD_REQ_R1 = 14; + const int ADD_REQ_R2 = 15; + + const int ADD_PUMP = 19; + const int ADD_VACUM1 = 20; + const int ADD_VACUM2 = 21; + const int ADD_LED = 22; + //============================ CAMERA =========================== + + Image imgInput; + Capture capture; + float toado_x, toado_y, gocquay; + float vX, vY, vR; + int check_cam_status = 0; + int Cam_check_ok = 0, req_CAM = 0; + int solan_chup = 0; + int rong = 0, dai = 0; + float Wchip = 0; + int CAM_CHOICE = 1; + const int CAM_BOT = 1, CAM_TOP = 2; + //----------------------------------- actua ------------------------------ + ushort _AM = 0; + const int _Auto = 1, _Manual = 0; + const int _X = 1, _Y = 2, _Z = 3, _R1 = 4, _R2 = 5; + + const int _HOME = 6, _Add_AutoManual = 7, _Add_UPS = 8, _Add_COOD = 9, _Add_SPEED = 10; + const int _Add_Xilanh = 23, _Add_LED = 22; + const int _Add_CAM = 24; + + ushort _SPEED = 0; + const int SPEED_LOW = 0, SPEED_HIGH = 1; + ushort _ups = 0, _coodinate = 0; + ushort Start = 0; + const int PUMP_ON = 0, PUMP_OFF = 1; + const int VACUM_1_ON = 1, VACUM_1_OFF = 0; + const int VACUM_2_ON = 1, VACUM_2_OFF = 0; + const int LED_ON = 1, LED_OFF = 0; + const int XL1_UP = 1, XL1_DOWN = 0; + ushort _Status_PUMP = PUMP_OFF, _Status_VACUM_1 = 0, _Status_VACUM_2 = 0, _Status_LED = 0, _Status_XL1 = 0; + + //--------------------- di chuyen tu dong-------------------------- + ushort _PAUSE = 0; + ushort _coodinateX = 0, _coodinateY = 0, _coodinateZ = 0, _coodinateR1 = 0, _coodinateR2 = 0; + int _runX = 0, _runY = 0, _runZ = 0, _runR1 = 0, _runR2 = 0; + int _step = 0, _step1 = 0; // CAC BUOC DI CHUYEN TUAN TU + int reqX = 0, reqY = 0, reqZ = 0, reqR1 = 0, reqR2 = 0; + + int[] X_TRAY_IC = new int[100]; // X + int[] Y_TRAY_IC = new int[100]; // Y + int Z_TRAY_IC = 0; + int X_START_IC = 0, X_END_IC = 0, Y_START_IC = 0, Y_END_IC = 0; + + int[] X_TRAY_ROM = new int[100]; // X + int[] Y_TRAY_ROM = new int[100]; // Y + int Z_TRAY_ROM = 0; + int X_START_ROM = 0, X_END_ROM = 0, Y_START_ROM = 0, Y_END_ROM = 0; + + int[] X_TRAY_PASS = new int[100]; // X + int[] Y_TRAY_PASS = new int[100]; // Y + int Z_TRAY_PASS = 0; + int X_START_PASS = 0, X_END_PASS = 0, Y_START_PASS = 0, Y_END_PASS = 0; + + int[] X_TRAY_NG = new int[100]; // X + int[] Y_TRAY_NG = new int[100]; // Y + int Z_TRAY_NG = 0; + int X_START_NG = 0, X_END_NG = 0, Y_START_NG = 0, Y_END_NG = 0; + + int X_CAM = 0; + int Y_CAM = 0; + + ushort AUTO_RUN = 0, _READY_RUN = 0, _Req_ORG = 0; + ushort i_IC = 0, i_in_ROM = 0,i_out_ROM = 0, i_NG = 0, i_PASS = 0; + //--------------------------------------------------------------------- + int IC_Stack_choice = 0; + const int IC_START_CHOICE = 1, IC_END_CHOICE = 2; + int ROM_Stack_choice = 0; + const int ROM_START_CHOICE = 1, ROM_END_CHOICE = 2; + int NG_Stack_choice = 0; + const int NG_START_CHOICE = 1, NG_END_CHOICE = 2; + int PASS_Stack_choice = 0; + const int PASS_START_CHOICE = 1, PASS_END_CHOICE = 2; + int CAM_Stack_choice = 0; + const int CAM_START_CHOICE = 1, CAM_END_CHOICE = 2; + + //ushort IC_Stack_sohang = 0, IC_Stack_socot = 0; + //ushort ROM_Stack_sohang = 0, ROM_Stack_socot = 0; + // ----------------- SAVE DATA ------------------------------- + byte[] data = new byte[20]; + //=============================== ROM ============================ + int Nap_rom = 0; + int Full_Stack_Rom =0; + int ROM_WRITED = 0; + //private Register _Register = null; + public FormMain() + { + InitializeComponent(); + Installing.Hide(); + + IC_Start_choice.Hide(); + IC_End_choice.Hide(); + ROM_End_choice.Hide(); + ROM_Start_choice.Hide(); + NG_End_choice.Hide(); + NG_Start_choice.Hide(); + PASS_End_choice.Hide(); + PASS_Start_choice.Hide(); + + CAM_Start_choice.Hide(); + //Line line = Line.FormMain(new Point(0, 0), new Point(3, 4)); + } + + private void FormMain_Load(object sender, EventArgs e) + { + try + { + + MB = new ModbusClient("COM39"); + MB.UnitIdentifier = 1; + MB.Baudrate = 115200; + MB.Parity = System.IO.Ports.Parity.None; + MB.StopBits = System.IO.Ports.StopBits.One; + MB.ConnectionTimeout = 200; + MB.Connect(); + MB.WriteSingleRegister(ADD_REQ_R1, 800); + + timer1.Enabled = true; + + Start_CAM(); + + + } + + catch (Exception ex) + { + MessageBox.Show(ex.Message); + } + Speed_choice.SelectedIndex = Speed_choice.FindString("5"); + } + + private void Start_MB() + { + //throw new NotImplementedException(); + Thread newThread = new Thread((obj) => + { + while (true) + { + //_coodinateX = (ushort)MB.ReadHoldingRegisters(ADD_X, 1)[0]; + //_coodinateY = (ushort)MB.ReadHoldingRegisters(ADD_Y, 1)[0]; + //_coodinateZ = (ushort)MB.ReadHoldingRegisters(ADD_Z, 1)[0]; + //_coodinateR1 = (ushort)MB.ReadHoldingRegisters(ADD_R1, 1)[0]; + //_coodinateR2 = (ushort)MB.ReadHoldingRegisters(ADD_R2, 1)[0]; + + //Toado_X.Text = _coodinateX.ToString(); + //Toado_Y.Text = _coodinateY.ToString(); + //Toado_Z.Text = _coodinateZ.ToString(); + //Toado_R1.Text = _coodinateR1.ToString(); + //Toado_R2.Text = _coodinateR2.ToString(); + + //Status_Home.Text = MB.ReadHoldingRegisters(ADD_HOME, 1)[0].ToString(); + //Auto_manual.Text = MB.ReadHoldingRegisters(ADD_AM, 1)[0].ToString(); + + //UpDownStop.Text = MB.ReadHoldingRegisters(8, 1)[0].ToString(); + //Dichuyen_Truc.Text = MB.ReadHoldingRegisters(9, 1)[0].ToString(); + //Tocdo_dichuyen.Text = MB.ReadHoldingRegisters(10, 1)[0].ToString(); + + + //reqX = MB.ReadHoldingRegisters(ADD_REQ_X, 1)[0]; + //reqY = MB.ReadHoldingRegisters(ADD_REQ_Y, 1)[0]; + //reqZ = MB.ReadHoldingRegisters(ADD_REQ_Z, 1)[0]; + //reqR1 = MB.ReadHoldingRegisters(ADD_REQ_R1, 1)[0]; + //reqR2 = MB.ReadHoldingRegisters(ADD_REQ_R2, 1)[0]; + + //Req_X.Text = reqX.ToString(); + //Req_Y.Text = reqY.ToString(); + //Req_Z.Text = reqZ.ToString(); + //Req_R1.Text = reqR1.ToString(); + //Req_R2.Text = reqR2.ToString(); + Thread.Sleep(50); // Delay 100ms + } + }); + newThread.IsBackground = true; + newThread.Start(); + } + + private void textBox1_KeyDown(object sender, KeyEventArgs e) + { + MessageBox.Show("KeyDown"); + } + + private void Req_GOHOME() + { + //throw new NotImplementedException(); + try + { + MB.WriteSingleRegister(_HOME, 1); // Max= 65535 + } + catch + { + + } + } + + private void button5_MouseDown(object sender, MouseEventArgs e) + { + if (_AM == _Manual) + { + _ups = 1; + _coodinate = _X; + try + { + MB.WriteSingleRegister(_Add_COOD, _coodinate); + MB.WriteSingleRegister(_Add_UPS, _ups); + } + catch + { + + } + + + } + } + + private void button5_MouseUp(object sender, MouseEventArgs e) + { + if (_AM == _Manual) + { + _ups = 0; + _coodinate = _X; + try + { + MB.WriteSingleRegister(_Add_COOD, _coodinate); + MB.WriteSingleRegister(_Add_UPS, _ups); + } + catch + { + + } + + } + } + + private void button4_MouseDown(object sender, MouseEventArgs e) + { + if (_AM == _Manual) + { + _ups = 2; + _coodinate = _X; + try + { + MB.WriteSingleRegister(_Add_COOD, _coodinate); + MB.WriteSingleRegister(_Add_UPS, _ups); + } + catch + { + + } + + } + } + + private void button4_MouseUp(object sender, MouseEventArgs e) + { + if (_AM == _Manual) + { + _ups = 0; + _coodinate = _X; + try + { + MB.WriteSingleRegister(_Add_COOD, _coodinate); + MB.WriteSingleRegister(_Add_UPS, _ups); + } + catch + { + + } + + } + } + + + private void Y_UP_MouseDown(object sender, MouseEventArgs e) + { + if (_AM == _Manual) + { + _ups = 1; + _coodinate = _Y; + try + { + MB.WriteSingleRegister(_Add_COOD, _coodinate); + MB.WriteSingleRegister(_Add_UPS, _ups); + } + catch + { + + } + + } + } + + private void Y_UP_MouseUp(object sender, MouseEventArgs e) + { + if (_AM == _Manual) + { + _ups = 0; + _coodinate = _Y; + try + { + MB.WriteSingleRegister(_Add_COOD, _coodinate); + MB.WriteSingleRegister(_Add_UPS, _ups); + } + catch + { + + } + + } + } + + private void button3_MouseDown(object sender, MouseEventArgs e) + { + if (_AM == _Manual) + { + _ups = 2; + _coodinate = _Y; + try + { + MB.WriteSingleRegister(_Add_COOD, _coodinate); + MB.WriteSingleRegister(_Add_UPS, _ups); + } + catch + { + + } + + } + } + + private void button3_MouseUp(object sender, MouseEventArgs e) + { + if (_AM == _Manual) + { + _ups = 0; + _coodinate = _Y; + try + { + MB.WriteSingleRegister(_Add_COOD, _coodinate); + MB.WriteSingleRegister(_Add_UPS, _ups); + } + catch + { + + } + + } + } + + private void button7_MouseDown(object sender, MouseEventArgs e) + { + if (_AM == _Manual) + { + _ups = 1; + _coodinate = _Z; + try + { + MB.WriteSingleRegister(_Add_COOD, _coodinate); + MB.WriteSingleRegister(_Add_UPS, _ups); + } + catch + { + + } + + } + } + + private void button7_MouseUp(object sender, MouseEventArgs e) + { + if (_AM == _Manual) + { + _ups = 0; + _coodinate = _Z; + try + { + MB.WriteSingleRegister(_Add_COOD, _coodinate); + MB.WriteSingleRegister(_Add_UPS, _ups); + } + catch + { + + } + + } + } + + private void button6_MouseDown(object sender, MouseEventArgs e) + { + if (_AM == _Manual) + { + _ups = 2; + _coodinate = _Z; + try + { + MB.WriteSingleRegister(_Add_COOD, _coodinate); + MB.WriteSingleRegister(_Add_UPS, _ups); + } + catch + { + + } + + } + } + + private void button6_MouseUp(object sender, MouseEventArgs e) + { + if (_AM == _Manual) + { + _ups = 0; + _coodinate = _Z; + try + { + MB.WriteSingleRegister(_Add_COOD, _coodinate); + MB.WriteSingleRegister(_Add_UPS, _ups); + } + catch + { + + } + } + } + + private void button2_Click(object sender, EventArgs e) + { + System_config systemCF = new System_config(); + systemCF.Show(); + } + private void timer1_Tick(object sender, EventArgs e) + { + + if (capture != null) + { + //c_x.Text = toado_x.ToString(); + //c_y.Text = toado_y.ToString(); + //_angle.Text = gocquay.ToString(); + Xm.Text = Wchip.ToString(); + //Ym.Text = dai.ToString(); + + dX.Text = "dX:" + vX.ToString(); + dY.Text = "dY:" + vY.ToString(); + dR.Text = "dR:" + gocquay.ToString(); + //Checking.Text = Cam_check_ok.ToString(); + } + + + if (!MB.Connected) + { + if (MB.Available(50)) + { + //timer1.Enabled = false; + //MB.Disconnect(); + //MB.Connect(); + timer1.Enabled = true; + } + } + else + { + try + { + timer1.Enabled = false; + + _coodinateX = (ushort)MB.ReadHoldingRegisters(ADD_X, 1)[0]; + _coodinateY = (ushort)MB.ReadHoldingRegisters(ADD_Y, 1)[0]; + _coodinateZ = (ushort)MB.ReadHoldingRegisters(ADD_Z, 1)[0]; + _coodinateR1 = (ushort)MB.ReadHoldingRegisters(ADD_R1, 1)[0]; + _coodinateR2 = (ushort)MB.ReadHoldingRegisters(ADD_R2, 1)[0]; + + Toado_X.Text = _coodinateX.ToString(); + Toado_Y.Text = _coodinateY.ToString(); + Toado_Z.Text = _coodinateZ.ToString(); + Toado_R1.Text = _coodinateR1.ToString(); + Toado_R2.Text = _coodinateR2.ToString(); + + Status_Home.Text = MB.ReadHoldingRegisters(ADD_HOME, 1)[0].ToString(); + Auto_manual.Text = MB.ReadHoldingRegisters(ADD_AM, 1)[0].ToString(); + + UpDownStop.Text = MB.ReadHoldingRegisters(8, 1)[0].ToString(); + Dichuyen_Truc.Text = MB.ReadHoldingRegisters(9, 1)[0].ToString(); + Tocdo_dichuyen.Text = MB.ReadHoldingRegisters(10, 1)[0].ToString(); + + + reqX = MB.ReadHoldingRegisters(ADD_REQ_X, 1)[0]; + reqY = MB.ReadHoldingRegisters(ADD_REQ_Y, 1)[0]; + reqZ = MB.ReadHoldingRegisters(ADD_REQ_Z, 1)[0]; + reqR1 = MB.ReadHoldingRegisters(ADD_REQ_R1, 1)[0]; + reqR2 = MB.ReadHoldingRegisters(ADD_REQ_R2, 1)[0]; + + Req_X.Text = reqX.ToString(); + Req_Y.Text = reqY.ToString(); + Req_Z.Text = reqZ.ToString(); + Req_R1.Text = reqR1.ToString(); + //Req_R2.Text = reqR2.ToString(); + + + //======= KIEM TRA ROBOT DA ORG CHUA ?? ===================================// + if (AUTO_RUN == 1 && _READY_RUN == 0 && _Req_ORG == 1) + { + _Req_ORG = 0; + //MB.WriteSingleRegister(_Add_SPEED, SPEED_HIGH); + try + { + //Req_GOHOME(); + } + catch + { + + MB.Connect(); + } + + } + if (AUTO_RUN == 1 && _coodinateX == 0 && _coodinateY == 0 && _coodinateZ == 0) + { + //=========>> BAT DAU CHAY AUTO <<===================================// + _READY_RUN = 1; + MB.WriteSingleRegister(ADD_AM, _Auto); + MB.WriteSingleRegister(_Add_Xilanh, XL1_DOWN); + + Automanual.Text = "Auto"; + i_IC = 1; + i_in_ROM = 1; + i_out_ROM = 1; + i_PASS = 1; + i_NG = 1; + _step = 1; + _step1 = 1; + ROM_WRITED = 0; + Enable_PUMP(); + + Installing.Hide(); + + WorkTable.Enabled = true; + } + + if (AUTO_RUN == 1 && _READY_RUN == 1 && _PAUSE == 0) + { + //===============================KIEM TRA TRANG THAI CAC TRUC + if (reqX == _coodinateX && reqY == _coodinateY) + { + _runX = _runY = 0; + } + if (reqZ == _coodinateZ) + _runZ = 0; + if (reqR1 == _coodinateR1) + { + _runR1 = 0; + } + if (reqR2 == _coodinateR2) + { + _runR2 = 0; + } + //========================= IC TO ROM ==========>>>> + if (Full_Stack_Rom == 0) + { + CAM_CHOICE = CAM_BOT; + MB.WriteSingleRegister(_Add_CAM, CAM_CHOICE); + IC_to_ROM(); + + } + //========================= NAP ================= >>>> + if(Nap_rom == 1 && Full_Stack_Rom == 1) + { + //Full_Stack_Rom = 0; + ROM_WRITED = 1; + MB.WriteSingleRegister(_Add_Xilanh, XL1_UP); + + } + if (Nap_rom == 0 && Full_Stack_Rom == 1 && ROM_WRITED == 1) + { + //Full_Stack_Rom = 0; + ROM_WRITED = 2; + MB.WriteSingleRegister(_Add_Xilanh, XL1_DOWN); + + } + //========================= ROM TO OK_NG =========>>>>> + if (ROM_WRITED == 2 && Full_Stack_Rom == 1) + { + ROM_to_OK_NG(); + } + } + + + timer1.Enabled = true; + } + catch + { + //MB.Disconnect(); + //MB.Connect(); + timer1.Enabled = true; + } + } + + + } + void ROM_to_OK_NG() + { + if (_step1 == 1) //---------------------- LAY TRAY IC + { + MoveXY(X_TRAY_ROM[i_out_ROM], Y_TRAY_ROM[i_out_ROM]); + _runX = _runY = 1; + _step1++; + } + if (_step1 == 2 && _runX == 0 && _runY == 0) // XUONG NOZZLE + { + //MoveZ(Z_TRAY_IC); + MoveZ(200); + + _runZ = 1; + _step1++; + Enable_PUMP(); + } + if (_step1 == 3)// HUT + { + Enable_VACUM_1(); + // DINH THOI: HUT 10mS rồi chuyen qua step++ + _step1++; + } + if (_step1 == 4 && _runZ == 0)// LEN NOZZLE + { + MoveZ(5); + _runZ = 1; + _step1++; + } + if (_step1 == 5 && _runZ == 0) //------------------ DI CHUYEN DEN MAY NAP ROM + { + MoveXY(X_TRAY_PASS[i_PASS], Y_TRAY_PASS[i_PASS]); + _runX = _runY = 1; + _step1++; + } + if (_step1 == 6 && _runX == 0 && _runY == 0) // XUONG NOZZLE + { + MoveZ(200); + _runZ = 1; + // Disable_PUMP(); + Disable_VACUM_1(); + _step1++; + } + if (_step1 == 7 && _runZ == 0) // LEN NOZZLE + { + MoveZ(5); + _runZ = 1; + + //_step++; + + i_out_ROM++; + if (i_out_ROM > (int)ROM_Stack_cot.Value * (int)ROM_Stack_hang.Value) + { + i_out_ROM = 1; + Full_Stack_Rom = 0; + ROM_WRITED = 0; + } + i_PASS++; + if (i_PASS > (int)PASS_Stack_cot.Value * (int)PASS_Stack_hang.Value) + { + //if (i_ROM >= 5) + i_PASS = 1; + + } + _step1 = 1; + + } + } + void IC_to_ROM() + { + if (_step == 1) //---------------------- LAY TRAY IC + { + MoveXY(X_TRAY_IC[i_IC], Y_TRAY_IC[i_IC]); + _runX = _runY = 1; + _step++; + } + if (_step == 2 && _runX == 0 && _runY == 0) // XUONG NOZZLE + { + //MoveZ(Z_TRAY_IC); + MoveZ(200); + + _runZ = 1; + _step++; + Enable_PUMP(); + } + if (_step == 3)// HUT + { + Enable_VACUM_1(); + // DINH THOI: HUT 10mS rồi chuyen qua step++ + _step++; + } + if (_step == 4 && _runZ == 0)// LEN NOZZLE + { + MoveZ(5); + _runZ = 1; + _step++; + } + + //====================== DI CHUYEN TOI CAM ========================= + + if(_step == 5 && _runZ == 0) + { + MoveXY(X_CAM, Y_CAM); + _runX = _runY = 1; + _step++; + + } + if (_step == 6 && _runX == 0 && _runY == 0) + { + req_CAM = 1; + capture.Start(); + _step++; + } + if (_step == 7 && Cam_check_ok == 0) + { + float goclech = Math.Abs(gocquay); + + if (goclech > 2 && goclech < 45) + MoveR1(800 + (int)(40 * goclech / 9)); + if (goclech < 90 && goclech > 45) + { + goclech = 90 - goclech; + MoveR1(800 - (int)(40 * goclech / 9)); + } + + //if (vX > 1) + // MoveXY(_coodinateX - (int)(vX*1.497435), _coodinateY); + //if (vX < -1) + // MoveXY(_coodinateX + (int)(vX * 1.497435), _coodinateY); + //if (vX < 1 && vX > -1) + //{ + // if (vY > 0) + // MoveXY(_coodinateX, _coodinateY + (int)(vY * 1.497435)); + // if (vY < 0) + // MoveXY(_coodinateX, _coodinateY - (int)(vY * 1.497435)); + //} + + } + //====================== DI CHUYEN TOI MAY NAP ROM =================== + //********************* NOTE ***************************************** + /* + CHECK TRƯƠC CAM BOTTOM, XOAY => ĐƯA VÀO MÁY NẠP + * + * + */ + if (_step == 7 && _runX == 0 && _runY == 0 && Cam_check_ok == 1) + { + Cam_check_ok = 0; + MoveXY(X_TRAY_ROM[i_in_ROM], Y_TRAY_ROM[i_in_ROM]); + _runX = _runY = 1; + _step++; + } + if (_step == 8 && _runX == 0 && _runY == 0) // XUONG NOZZLE + { + MoveZ(200); + _runZ = 1; + // Disable_PUMP(); + Disable_VACUM_1(); + _step++; + } + if (_step == 9 && _runZ == 0) // LEN NOZZLE + { + MoveZ(5); + _runZ = 1; + + //_step++; + + i_IC++; + if (i_IC >= 16) + i_IC = 1; + + i_in_ROM++; + if (i_in_ROM > (int)ROM_Stack_cot.Value * (int)ROM_Stack_hang.Value) + { + //if (i_ROM >= 5) + i_in_ROM = 1; + Full_Stack_Rom = 1; + } + _step = 1; + + } + } + private void Disable_VACUM_2() + { + // throw new NotImplementedException(); + try + { + MB.WriteSingleRegister(ADD_VACUM2, VACUM_2_OFF); + } + catch + { + + } + } + private void Enable_VACUM_2() + { + // throw new NotImplementedException(); + try + { + MB.WriteSingleRegister(ADD_VACUM2, VACUM_2_ON); + } + catch + { + + } + } + private void Disable_VACUM_1() + { + // throw new NotImplementedException(); + try + { + MB.WriteSingleRegister(ADD_VACUM1, VACUM_1_OFF); + } + catch + { + + } + } + private void Enable_VACUM_1() + { + // throw new NotImplementedException(); + try + { + MB.WriteSingleRegister(ADD_VACUM1, VACUM_1_ON); + } + catch + { + + } + } + + private void Disable_PUMP() + { + //throw new NotImplementedException(); + try + { + MB.WriteSingleRegister(ADD_PUMP, PUMP_OFF); + } + catch + { + + } + } + + private void Enable_PUMP() + { + //throw new NotImplementedException(); + try + { + MB.WriteSingleRegister(ADD_PUMP, PUMP_ON); + } + catch + { + + } + } + private void MoveR1(int cood_R1) + { + try + { + MB.WriteSingleRegister(ADD_REQ_R1, cood_R1); + } + catch + { + + } + } + private void MoveR2(int cood_R2) + { + try + { + MB.WriteSingleRegister(ADD_REQ_R2, cood_R2); + } + catch + { + + } + } + private void MoveZ(int cood_z) + { + //throw new NotImplementedException(); + try + { + MB.WriteSingleRegister(ADD_REQ_Z, cood_z); + } + catch + { + + } + } + + private void MoveXY(int cood_x, int cood_y) + { + + //throw new NotImplementedException(); + try + { + MB.WriteSingleRegister(ADD_REQ_X, cood_x); + MB.WriteSingleRegister(ADD_REQ_Y, cood_y); + } + catch + { + + } + } + + private void SAVE_Click(object sender, EventArgs e) + { + IC_End_choice.Hide(); + IC_Start_choice.Hide(); + + + byte[] val16 = new byte[2]; + ushort val = 0, k1, k2, k3, k4, k5, k6; + + val = ushort.Parse(IC_START_X.Text.ToString()); + k1 = val; + + val16 = BitConverter.GetBytes(val); + data[1] = val16[0]; + data[2] = val16[1]; + + val = ushort.Parse(IC_START_Y.Text.ToString()); + k2 = val; + + val16 = BitConverter.GetBytes(val); + data[3] = val16[0]; + data[4] = val16[1]; + + val = ushort.Parse(IC_END_X.Text.ToString()); + k3 = val; + + val16 = BitConverter.GetBytes(val); + data[5] = val16[0]; + data[6] = val16[1]; + + val = ushort.Parse(IC_END_Y.Text.ToString()); + k4 = val; + + val16 = BitConverter.GetBytes(val); + data[7] = val16[0]; + data[8] = val16[1]; + //=============== so hang ====================== + data[9] = (byte)IC_Stack_hang.Value; + k5 = (ushort)IC_Stack_hang.Value; + //=============== so cot ======================== + data[10] = (byte)IC_Stack_cot.Value; + k6 = (ushort)IC_Stack_cot.Value; + + if (k1 > 0 & k2 > 0 & k3 > 0 & k4 > 0 & k5 > 0 & k6 > 0) + { + File.WriteAllBytes("IC_Stack.tula", data); + MessageBox.Show("Save IC Stack complete!"); + + } + else + MessageBox.Show("No Save"); + + Creat_IC_Stack(); + } + public void Creat_IC_Stack() + { + IC_Stack.Controls.Clear(); + IC_Stack.RowStyles.Clear(); + IC_Stack.ColumnStyles.Clear(); + int col_MAX = (int)IC_Stack_cot.Value; + int row_MAX = (int)IC_Stack_hang.Value; + IC_Stack.ColumnCount = col_MAX; + IC_Stack.RowCount = row_MAX; + IC_Stack.Width = col_MAX * 25; + IC_Stack.Height = row_MAX * 25; + + + for (int i = 1; i <= col_MAX * row_MAX; i++) + { + + Label IC_but = new Label(); + IC_but.Margin = new Padding(1); + IC_but.Height = 20; + IC_but.Width = 20; + IC_but.FlatStyle = FlatStyle.Flat; + IC_but.TextAlign = ContentAlignment.MiddleCenter; + IC_but.BorderStyle = BorderStyle.FixedSingle; + IC_but.Font = new Font("Arial", 6); + IC_but.BackColor = Color.Green; + IC_but.Text = i.ToString(); + IC_but.Name = i.ToString(); + IC_Stack.Controls.Add(IC_but, (i - 1) % (col_MAX), (i - 1) / col_MAX); + IC_but.DoubleClick += IC_but_DoubleClick; + IC_but.MouseHover += IC_but_MouseHover; + //IC_but.MouseMove += IC_but_MouseMove; + } + //------------------ TINH TOA DO CAC STACK ------------------------------ + X_START_IC = ushort.Parse(IC_START_X.Text.ToString()); + Y_START_IC = ushort.Parse(IC_START_Y.Text.ToString()); + X_END_IC = ushort.Parse(IC_END_X.Text.ToString()); + Y_END_IC = ushort.Parse(IC_END_Y.Text.ToString()); + //socot_IC = (ushort)IC_Stack_cot.Value; ; + //sohang_IC = (ushort)IC_Stack_hang.Value; + double Step_X_IC; + double Step_Y_IC; + if (col_MAX != 1) + Step_X_IC = Math.Abs(X_START_IC - X_END_IC) / ((int)IC_Stack_cot.Value - 1); + else + Step_X_IC = 0; + if (row_MAX != 1) + Step_Y_IC = Math.Abs(Y_START_IC - Y_END_IC) / ((int)IC_Stack_hang.Value - 1); + else + Step_Y_IC = 0; + //MessageBox.Show("Xstep" + Step_X_IC.ToString() + "Y" + Step_Y_IC.ToString()); + int k_x = 0, k_y = 0; + + for (int n = 1; n <= col_MAX * row_MAX; n++) + { + //======== X + if ((n % col_MAX) == 0) + { + k_x = col_MAX; + k_y = 1; + } + else + { + k_x = 0; + k_y = 0; + } + if (X_START_IC <= X_END_IC) + X_TRAY_IC[n] = (int)(X_START_IC + ((n % col_MAX + k_x - 1) * Step_X_IC)); + else + X_TRAY_IC[n] = (int)(X_START_IC - ((n % col_MAX + k_x - 1) * Step_X_IC)); + // ======== Y + + if (Y_START_IC <= Y_END_IC) + Y_TRAY_IC[n] = (int)(Y_START_IC + ((n / col_MAX - k_y) * Step_Y_IC)); + else + Y_TRAY_IC[n] = (int)(Y_START_IC - ((n / col_MAX - k_y) * Step_Y_IC)); + + } + //MessageBox.Show((Y_TRAY_IC[col_MAX * row_MAX]).ToString()); + //MessageBox.Show((X_TRAY_IC[col_MAX * row_MAX]).ToString()); + //MessageBox.Show((X_TRAY_IC[1]).ToString()); + } + + void IC_but_MouseMove(object sender, MouseEventArgs e) + { + //throw new NotImplementedException(); + Label BT = (Label)sender; + toolTip1.SetToolTip(BT, "[" + X_TRAY_IC[ushort.Parse(BT.Name)].ToString() + " , " + Y_TRAY_IC[ushort.Parse(BT.Name)].ToString() + "]"); + //toolTip1.SetToolTip(BT,"a"); + } + + void IC_but_MouseHover(object sender, EventArgs e) + { + //throw new NotImplementedException(); + Label BT = (Label)sender; + toolTip1.SetToolTip(BT, "[" + X_TRAY_IC[ushort.Parse(BT.Name)].ToString() + " , " + Y_TRAY_IC[ushort.Parse(BT.Name)].ToString() + "]"); + //toolTip1.SetToolTip(BT,"a"); + } + + void IC_but_DoubleClick(object sender, EventArgs e) + { + //throw new NotImplementedException(); + Label lab = (Label)sender; + if (lab.BackColor == Color.Green) + lab.BackColor = Color.White; + else + lab.BackColor = Color.Green; + + } + + private void SAVE_XY_ROM_Click(object sender, EventArgs e) + { + ROM_End_choice.Hide(); + ROM_Start_choice.Hide(); + + byte[] val16 = new byte[2]; + ushort val = 0, k1, k2, k3, k4, k5, k6; + + val = ushort.Parse(ROM_START_X.Text.ToString()); + k1 = val; + val16 = BitConverter.GetBytes(val); + data[1] = val16[0]; + data[2] = val16[1]; + + val = ushort.Parse(ROM_START_Y.Text.ToString()); + k2 = val; + val16 = BitConverter.GetBytes(val); + data[3] = val16[0]; + data[4] = val16[1]; + + val = ushort.Parse(ROM_END_X.Text.ToString()); + k3 = val; + val16 = BitConverter.GetBytes(val); + data[5] = val16[0]; + data[6] = val16[1]; + + val = ushort.Parse(ROM_END_Y.Text.ToString()); + k4 = val; + val16 = BitConverter.GetBytes(val); + data[7] = val16[0]; + data[8] = val16[1]; + //=============== so hang ====================== + data[9] = (byte)ROM_Stack_hang.Value; + k5 = (ushort)ROM_Stack_hang.Value; + //=============== so cot ======================== + data[10] = (byte)ROM_Stack_cot.Value; + k6 = (ushort)ROM_Stack_cot.Value; + if (k1 > 0 & k2 > 0 & k3 > 0 & k4 > 0 & k5 > 0 & k6 > 0) + { + File.WriteAllBytes("ROM_Stack.tula", data); + MessageBox.Show("Save ROM Stack complete!"); + + } + else + MessageBox.Show("No Save"); + Creat_ROM_Stack(); + + } + public void Creat_ROM_Stack() + { + ROM_Stack.Controls.Clear(); + ROM_Stack.RowStyles.Clear(); + ROM_Stack.ColumnStyles.Clear(); + int col_MAX = (int)ROM_Stack_cot.Value; + int row_MAX = (int)ROM_Stack_hang.Value; + ROM_Stack.ColumnCount = col_MAX; + ROM_Stack.RowCount = row_MAX; + ROM_Stack.Width = col_MAX * 40; + ROM_Stack.Height = row_MAX * 40; + + + for (int i = 1; i <= col_MAX * row_MAX; i++) + { + + Label ROM_but = new Label(); + ROM_but.Margin = new Padding(1); + ROM_but.Height = 35; + ROM_but.Width = 35; + ROM_but.FlatStyle = FlatStyle.Flat; + ROM_but.TextAlign = ContentAlignment.MiddleCenter; + ROM_but.BorderStyle = BorderStyle.FixedSingle; + ROM_but.BackColor = Color.Green; + ROM_but.Text = i.ToString(); + ROM_but.Name = i.ToString(); + ROM_Stack.Controls.Add(ROM_but, (i - 1) % (col_MAX), (i - 1) / col_MAX); + ROM_but.DoubleClick += ROM_but_DoubleClick; + ROM_but.MouseHover += ROM_but_MouseHover; + + + } + //------------------ TINH TOA DO CAC STACK ------------------------------ + X_START_ROM = ushort.Parse(ROM_START_X.Text.ToString()); + Y_START_ROM = ushort.Parse(ROM_START_Y.Text.ToString()); + X_END_ROM = ushort.Parse(ROM_END_X.Text.ToString()); + Y_END_ROM = ushort.Parse(ROM_END_Y.Text.ToString()); + //socot_IC = (ushort)IC_Stack_cot.Value; ; + //sohang_IC = (ushort)IC_Stack_hang.Value; + double Step_X_ROM; + double Step_Y_ROM; + if (col_MAX != 1) + Step_X_ROM = Math.Abs(X_START_ROM - X_END_ROM) / ((int)ROM_Stack_cot.Value - 1); + else + Step_X_ROM = 0; + if (row_MAX != 1) + Step_Y_ROM = Math.Abs(Y_START_ROM - Y_END_ROM) / ((int)ROM_Stack_hang.Value - 1); + else + Step_Y_ROM = 0; + //MessageBox.Show("Xstep" + Step_X_IC.ToString() + "Y" + Step_Y_IC.ToString()); + int k_x = 0, k_y = 0; + + for (int n = 1; n <= col_MAX * row_MAX; n++) + { + //======== X + if ((n % col_MAX) == 0) + { + k_x = col_MAX; + k_y = 1; + } + else + { + k_x = 0; + k_y = 0; + } + if (X_START_ROM <= X_END_ROM) + X_TRAY_ROM[n] = (int)(X_START_ROM + ((n % col_MAX + k_x - 1) * Step_X_ROM)); + else + X_TRAY_ROM[n] = (int)(X_START_ROM - ((n % col_MAX + k_x - 1) * Step_X_ROM)); + // ======== Y + + if (Y_START_ROM <= Y_END_ROM) + Y_TRAY_ROM[n] = (int)(Y_START_ROM + ((n / col_MAX - k_y) * Step_Y_ROM)); + else + Y_TRAY_ROM[n] = (int)(Y_START_ROM - ((n / col_MAX - k_y) * Step_Y_ROM)); + + } + } + + void ROM_but_MouseHover(object sender, EventArgs e) + { + //throw new NotImplementedException(); + Label ROM = (Label)sender; + toolTip1.SetToolTip(ROM, "[" + X_TRAY_ROM[ushort.Parse(ROM.Name)].ToString() + " , " + Y_TRAY_ROM[ushort.Parse(ROM.Name)].ToString() + "]"); + } + + void ROM_but_DoubleClick(object sender, EventArgs e) + { + //throw new NotImplementedException(); + Label lab = (Label)sender; + if (lab.BackColor == Color.Green) + lab.BackColor = Color.White; + else + lab.BackColor = Color.Green; + } + private void SET_XY_ROM_Click(object sender, EventArgs e) + { + + if (ROM_Stack_choice == ROM_START_CHOICE) + { + ROM_START_X.Text = Toado_X.Text; + ROM_START_Y.Text = Toado_Y.Text; + } + if (ROM_Stack_choice == ROM_END_CHOICE) + { + ROM_END_X.Text = Toado_X.Text; + ROM_END_Y.Text = Toado_Y.Text; + } + } + + private void PUMP_Click(object sender, EventArgs e) + { + if (_Status_PUMP == PUMP_OFF) + { + _Status_PUMP = PUMP_ON; + PUMP.BackColor = Color.Green; + } + else + { + _Status_PUMP = PUMP_OFF; + PUMP.BackColor = Color.Red; + } + try + { + MB.WriteSingleRegister(19, _Status_PUMP); + } + catch + { + + } + } + + private void VACUM_1_Click(object sender, EventArgs e) + { + if (_Status_VACUM_1 == VACUM_1_OFF) + { + _Status_VACUM_1 = VACUM_1_ON; + VACUM_1.BackColor = Color.Green; + } + else + { + _Status_VACUM_1 = VACUM_1_OFF; + VACUM_1.BackColor = Color.Red; + } + try + { + MB.WriteSingleRegister(20, _Status_VACUM_1); + } + catch + { + + } + + } + + private void VACUM_2_Click(object sender, EventArgs e) + { + if (_Status_VACUM_2 == VACUM_2_OFF) + { + _Status_VACUM_2 = VACUM_2_ON; + VACUM_2.BackColor = Color.Green; + } + else + { + _Status_VACUM_2 = VACUM_2_OFF; + VACUM_2.BackColor = Color.Red; + } + try + { + MB.WriteSingleRegister(21, _Status_VACUM_2); + } + catch + { + + } + } + + private void LED_Click(object sender, EventArgs e) + { + if (_Status_LED == LED_OFF) + { + _Status_LED = LED_ON; + LED.BackColor = Color.Green; + } + else + { + _Status_LED = LED_OFF; + LED.BackColor = Color.Red; + } + try + { + MB.WriteSingleRegister(_Add_LED, _Status_LED); + } + catch + { + + } + } + + + + + void NG_but_DoubleClick(object sender, EventArgs e) + { + //throw new NotImplementedException(); + Label lab = (Label)sender; + if (lab.BackColor == Color.White) + lab.BackColor = Color.Red; + else + { + lab.BackColor = Color.White; + } + } + + private void Save_NG_Stack_Click(object sender, EventArgs e) + { + NG_End_choice.Hide(); + NG_Start_choice.Hide(); + + byte[] val16 = new byte[2]; + ushort val = 0, k1, k2, k3, k4, k5, k6; + + val = ushort.Parse(NG_START_X.Text.ToString()); + k1 = val; + val16 = BitConverter.GetBytes(val); + data[1] = val16[0]; + data[2] = val16[1]; + + val = ushort.Parse(NG_START_Y.Text.ToString()); + k2 = val; + val16 = BitConverter.GetBytes(val); + data[3] = val16[0]; + data[4] = val16[1]; + + val = ushort.Parse(NG_END_X.Text.ToString()); + k3 = val; + val16 = BitConverter.GetBytes(val); + data[5] = val16[0]; + data[6] = val16[1]; + + val = ushort.Parse(NG_END_Y.Text.ToString()); + k4 = val; + val16 = BitConverter.GetBytes(val); + data[7] = val16[0]; + data[8] = val16[1]; + //=============== so hang ====================== + data[9] = (byte)NG_Stack_hang.Value; + k5 = (ushort)NG_Stack_hang.Value; + //=============== so cot ======================== + data[10] = (byte)NG_Stack_cot.Value; + k6 = (ushort)NG_Stack_cot.Value; + if (k1 > 0 & k2 > 0 & k3 > 0 & k4 > 0 & k5 > 0 & k6 > 0) + { + File.WriteAllBytes("NG_Stack.tula", data); + MessageBox.Show("Save NG Stack complete!"); + + } + else + MessageBox.Show("No Save"); + Creat_NG_Stack(); + } + public void Creat_NG_Stack() + { + NG_Stack.Controls.Clear(); + NG_Stack.RowStyles.Clear(); + NG_Stack.ColumnStyles.Clear(); + int col_MAX = (int)NG_Stack_cot.Value; + int row_MAX = (int)NG_Stack_hang.Value; + NG_Stack.ColumnCount = col_MAX; + NG_Stack.RowCount = row_MAX; + NG_Stack.Width = col_MAX * 25; + NG_Stack.Height = row_MAX * 25; + + + for (int i = 1; i <= col_MAX * row_MAX; i++) + { + + Label NG_but = new Label(); + NG_but.Margin = new Padding(1); + NG_but.Height = 20; + NG_but.Width = 20; + NG_but.FlatStyle = FlatStyle.Flat; + NG_but.TextAlign = ContentAlignment.MiddleCenter; + //NG_but.BorderStyle = BorderStyle.FixedSingle; + NG_but.BackColor = Color.White; + NG_but.Text = i.ToString(); + NG_but.Name = i.ToString(); + NG_Stack.Controls.Add(NG_but, (i - 1) % (col_MAX), (i - 1) / col_MAX); + NG_but.DoubleClick += NG_but_DoubleClick; + NG_but.MouseHover += NG_but_MouseHover; + + } + //------------------ TINH TOA DO CAC STACK ------------------------------ + X_START_NG = ushort.Parse(NG_START_X.Text.ToString()); + Y_START_NG = ushort.Parse(NG_START_Y.Text.ToString()); + X_END_NG = ushort.Parse(NG_END_X.Text.ToString()); + Y_END_NG = ushort.Parse(NG_END_Y.Text.ToString()); + //socot_IC = (ushort)IC_Stack_cot.Value; ; + //sohang_IC = (ushort)IC_Stack_hang.Value; + double Step_X_NG; + double Step_Y_NG; + if (col_MAX != 1) + Step_X_NG = Math.Abs(X_START_NG - X_END_NG) / ((int)NG_Stack_cot.Value - 1); + else + Step_X_NG = 0; + if (row_MAX != 1) + Step_Y_NG = Math.Abs(Y_START_NG - Y_END_NG) / ((int)NG_Stack_hang.Value - 1); + else + Step_Y_NG = 0; + //MessageBox.Show("Xstep" + Step_X_IC.ToString() + "Y" + Step_Y_IC.ToString()); + int k_x = 0, k_y = 0; + + for (int n = 1; n <= col_MAX * row_MAX; n++) + { + //======== X + if ((n % col_MAX) == 0) + { + k_x = col_MAX; + k_y = 1; + } + else + { + k_x = 0; + k_y = 0; + } + if (X_START_NG <= X_END_NG) + X_TRAY_NG[n] = (int)(X_START_NG + ((n % col_MAX + k_x - 1) * Step_X_NG)); + else + X_TRAY_NG[n] = (int)(X_START_NG - ((n % col_MAX + k_x - 1) * Step_X_NG)); + // ======== Y + + if (Y_START_NG <= Y_END_NG) + Y_TRAY_NG[n] = (int)(Y_START_NG + ((n / col_MAX - k_y) * Step_Y_NG)); + else + Y_TRAY_NG[n] = (int)(Y_START_NG - ((n / col_MAX - k_y) * Step_Y_NG)); + + } + } + + void NG_but_MouseHover(object sender, EventArgs e) + { + //throw new NotImplementedException(); + Label NG = (Label)sender; + toolTip1.SetToolTip(NG, "[" + X_TRAY_NG[ushort.Parse(NG.Name)].ToString() + " , " + Y_TRAY_NG[ushort.Parse(NG.Name)].ToString() + "]"); + + } + private void Save_Pass_Stack_Click(object sender, EventArgs e) + { + PASS_End_choice.Hide(); + PASS_Start_choice.Hide(); + + byte[] val16 = new byte[2]; + ushort val = 0, k1, k2, k3, k4, k5, k6; + + val = ushort.Parse(PASS_START_X.Text.ToString()); + k1 = val; + val16 = BitConverter.GetBytes(val); + data[1] = val16[0]; + data[2] = val16[1]; + + val = ushort.Parse(PASS_START_Y.Text.ToString()); + k2 = val; + val16 = BitConverter.GetBytes(val); + data[3] = val16[0]; + data[4] = val16[1]; + + val = ushort.Parse(PASS_END_X.Text.ToString()); + k3 = val; + val16 = BitConverter.GetBytes(val); + data[5] = val16[0]; + data[6] = val16[1]; + + val = ushort.Parse(PASS_END_Y.Text.ToString()); + k4 = val; + val16 = BitConverter.GetBytes(val); + data[7] = val16[0]; + data[8] = val16[1]; + //=============== so hang ====================== + data[9] = (byte)PASS_Stack_hang.Value; + k5 = (ushort)PASS_Stack_hang.Value; + //=============== so cot ======================== + data[10] = (byte)PASS_Stack_cot.Value; + k6 = (ushort)PASS_Stack_cot.Value; + if (k1 > 0 & k2 > 0 & k3 > 0 & k4 > 0 & k5 > 0 & k6 > 0) + { + File.WriteAllBytes("PASS_Stack.tula", data); + MessageBox.Show("Save PASS Stack complete!"); + + } + else + MessageBox.Show("No Save"); + Creat_Pass_Stack(); + } + + public void Creat_Pass_Stack() + { + Pass_Stack.Controls.Clear(); + Pass_Stack.RowStyles.Clear(); + Pass_Stack.ColumnStyles.Clear(); + int col_MAX = (int)PASS_Stack_cot.Value; + int row_MAX = (int)PASS_Stack_hang.Value; + Pass_Stack.ColumnCount = col_MAX; + Pass_Stack.RowCount = row_MAX; + Pass_Stack.Width = col_MAX * 25; + Pass_Stack.Height = row_MAX * 25; + + + for (int i = 1; i <= col_MAX * row_MAX; i++) + { + + Label Pass_but = new Label(); + Pass_but.Margin = new Padding(1); + Pass_but.Height = 20; + Pass_but.Width = 20; + Pass_but.FlatStyle = FlatStyle.Flat; + Pass_but.TextAlign = ContentAlignment.MiddleCenter; + //Pass_but.BorderStyle = BorderStyle.FixedSingle; + Pass_but.BackColor = Color.White; + Pass_but.Text = i.ToString(); + Pass_but.Name = i.ToString(); + Pass_Stack.Controls.Add(Pass_but, (i - 1) % (col_MAX), (i - 1) / col_MAX); + Pass_but.DoubleClick += Pass_but_DoubleClick; + Pass_but.MouseHover += Pass_but_MouseHover; + + } + //------------------ TINH TOA DO CAC STACK ------------------------------ + X_START_PASS = ushort.Parse(PASS_START_X.Text.ToString()); + Y_START_PASS = ushort.Parse(PASS_START_Y.Text.ToString()); + X_END_PASS = ushort.Parse(PASS_END_X.Text.ToString()); + Y_END_PASS = ushort.Parse(PASS_END_Y.Text.ToString()); + //socot_IC = (ushort)IC_Stack_cot.Value; ; + //sohang_IC = (ushort)IC_Stack_hang.Value; + double Step_X_PASS; + double Step_Y_PASS; + if (col_MAX != 1) + Step_X_PASS = Math.Abs(X_START_PASS - X_END_PASS) / ((int)PASS_Stack_cot.Value - 1); + else + Step_X_PASS = 0; + if (row_MAX != 1) + Step_Y_PASS = Math.Abs(Y_START_PASS - Y_END_PASS) / ((int)PASS_Stack_hang.Value - 1); + else + Step_Y_PASS = 0; + //MessageBox.Show("Xstep" + Step_X_IC.ToString() + "Y" + Step_Y_IC.ToString()); + int k_x = 0, k_y = 0; + + for (int n = 1; n <= col_MAX * row_MAX; n++) + { + //======== X + if ((n % col_MAX) == 0) + { + k_x = col_MAX; + k_y = 1; + } + else + { + k_x = 0; + k_y = 0; + } + if (X_START_PASS <= X_END_PASS) + X_TRAY_PASS[n] = (int)(X_START_PASS + ((n % col_MAX + k_x - 1) * Step_X_PASS)); + else + X_TRAY_PASS[n] = (int)(X_START_PASS - ((n % col_MAX + k_x - 1) * Step_X_PASS)); + // ======== Y + + if (Y_START_PASS <= Y_END_PASS) + Y_TRAY_PASS[n] = (int)(Y_START_PASS + ((n / col_MAX - k_y) * Step_Y_PASS)); + else + Y_TRAY_PASS[n] = (int)(Y_START_PASS - ((n / col_MAX - k_y) * Step_Y_PASS)); + + } + + } + + void Pass_but_MouseHover(object sender, EventArgs e) + { + //throw new NotImplementedException(); + Label PASS = (Label)sender; + toolTip1.SetToolTip(PASS, "[" + X_TRAY_PASS[ushort.Parse(PASS.Name)].ToString() + " , " + Y_TRAY_PASS[ushort.Parse(PASS.Name)].ToString() + "]"); + + + } + + void Pass_but_DoubleClick(object sender, EventArgs e) + { + //throw new NotImplementedException(); + Label lab = (Label)sender; + if (lab.BackColor == Color.White) + lab.BackColor = Color.Green; + else + lab.BackColor = Color.White; + } + + private void IC_Stack_Start_Click(object sender, EventArgs e) + { + IC_Start_choice.Show(); + IC_End_choice.Hide(); + IC_Stack_choice = IC_START_CHOICE; + //MessageBox.Show(IC_Stack_choice.ToString()); + } + private void IC_Stack_End_Click(object sender, EventArgs e) + { + IC_Start_choice.Hide(); + IC_End_choice.Show(); + IC_Stack_choice = IC_END_CHOICE; + //MessageBox.Show(IC_Stack_choice.ToString()); + } + private void SET_XY_IC_Click(object sender, EventArgs e) + { + if (IC_Stack_choice == IC_START_CHOICE) + { + IC_START_X.Text = Toado_X.Text; + IC_START_Y.Text = Toado_Y.Text; + } + if (IC_Stack_choice == IC_END_CHOICE) + { + IC_END_X.Text = Toado_X.Text; + IC_END_Y.Text = Toado_Y.Text; + } + } + + private void Recall_Click(object sender, EventArgs e) + { + byte[] val16 = new byte[2]; + ushort val = 0; + //============================= DATA IC_STACK ========================================// + byte[] IC_data = File.ReadAllBytes("IC_Stack.tula"); + + //----------------------------- X START --------------------------------// + val16[0] = IC_data[1]; + val16[1] = IC_data[2]; + val = BitConverter.ToUInt16(val16, 0); + IC_START_X.Text = val.ToString(); + //---------------------------- Y START -----------------------------------// + val16[0] = IC_data[3]; + val16[1] = IC_data[4]; + val = BitConverter.ToUInt16(val16, 0); + IC_START_Y.Text = val.ToString(); + //---------------------------- X END -----------------------------------// + val16[0] = IC_data[5]; + val16[1] = IC_data[6]; + val = BitConverter.ToUInt16(val16, 0); + IC_END_X.Text = val.ToString(); + //---------------------------- Y END -----------------------------------// + val16[0] = IC_data[7]; + val16[1] = IC_data[8]; + val = BitConverter.ToUInt16(val16, 0); + IC_END_Y.Text = val.ToString(); + //---------------------------- HANG ------------------------------------// + IC_Stack_hang.Value = (int)IC_data[9]; + //---------------------------- COT -------------------------------------// + IC_Stack_cot.Value = (int)IC_data[10]; + //---------------------------- TAO MA TRAN -----------------------------// + Creat_IC_Stack(); + + //==================================== DATA ROM STACK ===================================================// + byte[] ROM_data = File.ReadAllBytes("ROM_Stack.tula"); + + //----------------------------- X START --------------------------------// + val16[0] = ROM_data[1]; + val16[1] = ROM_data[2]; + val = BitConverter.ToUInt16(val16, 0); + ROM_START_X.Text = val.ToString(); + //---------------------------- Y START -----------------------------------// + val16[0] = ROM_data[3]; + val16[1] = ROM_data[4]; + val = BitConverter.ToUInt16(val16, 0); + ROM_START_Y.Text = val.ToString(); + //---------------------------- X END -----------------------------------// + val16[0] = ROM_data[5]; + val16[1] = ROM_data[6]; + val = BitConverter.ToUInt16(val16, 0); + ROM_END_X.Text = val.ToString(); + //---------------------------- Y END -----------------------------------// + val16[0] = ROM_data[7]; + val16[1] = ROM_data[8]; + val = BitConverter.ToUInt16(val16, 0); + ROM_END_Y.Text = val.ToString(); + //---------------------------- HANG ------------------------------------// + ROM_Stack_hang.Value = (int)ROM_data[9]; + //---------------------------- COT -------------------------------------// + ROM_Stack_cot.Value = (int)ROM_data[10]; + //---------------------------- TAO MA TRAN -----------------------------// + Creat_ROM_Stack(); + //==================================== DATA NG STACK ===================================================// + byte[] NG_data = File.ReadAllBytes("NG_Stack.tula"); + + //----------------------------- X START --------------------------------// + val16[0] = NG_data[1]; + val16[1] = NG_data[2]; + val = BitConverter.ToUInt16(val16, 0); + NG_START_X.Text = val.ToString(); + //---------------------------- Y START -----------------------------------// + val16[0] = NG_data[3]; + val16[1] = NG_data[4]; + val = BitConverter.ToUInt16(val16, 0); + NG_START_Y.Text = val.ToString(); + //---------------------------- X END -----------------------------------// + val16[0] = NG_data[5]; + val16[1] = NG_data[6]; + val = BitConverter.ToUInt16(val16, 0); + NG_END_X.Text = val.ToString(); + //---------------------------- Y END -----------------------------------// + val16[0] = NG_data[7]; + val16[1] = NG_data[8]; + val = BitConverter.ToUInt16(val16, 0); + NG_END_Y.Text = val.ToString(); + //---------------------------- HANG ------------------------------------// + NG_Stack_hang.Value = (int)NG_data[9]; + //---------------------------- COT -------------------------------------// + NG_Stack_cot.Value = (int)NG_data[10]; + //---------------------------- TAO MA TRAN -----------------------------// + Creat_NG_Stack(); + + //=================================== PASS STACK ===========================================// + byte[] PASS_data = File.ReadAllBytes("PASS_Stack.tula"); + + //----------------------------- X START --------------------------------// + val16[0] = PASS_data[1]; + val16[1] = PASS_data[2]; + val = BitConverter.ToUInt16(val16, 0); + PASS_START_X.Text = val.ToString(); + //---------------------------- Y START -----------------------------------// + val16[0] = PASS_data[3]; + val16[1] = PASS_data[4]; + val = BitConverter.ToUInt16(val16, 0); + PASS_START_Y.Text = val.ToString(); + //---------------------------- X END -----------------------------------// + val16[0] = PASS_data[5]; + val16[1] = PASS_data[6]; + val = BitConverter.ToUInt16(val16, 0); + PASS_END_X.Text = val.ToString(); + //---------------------------- Y END -----------------------------------// + val16[0] = PASS_data[7]; + val16[1] = PASS_data[8]; + val = BitConverter.ToUInt16(val16, 0); + PASS_END_Y.Text = val.ToString(); + //---------------------------- HANG ------------------------------------// + PASS_Stack_hang.Value = (int)PASS_data[9]; + //---------------------------- COT -------------------------------------// + PASS_Stack_cot.Value = (int)PASS_data[10]; + //---------------------------- TAO MA TRAN -----------------------------// + Creat_Pass_Stack(); + + //================================== CAMERA =======================================// + byte[] CAM_data = File.ReadAllBytes("CAM.tula"); + + //----------------------------- X START --------------------------------// + val16[0] = CAM_data[1]; + val16[1] = CAM_data[2]; + val = BitConverter.ToUInt16(val16, 0); + CAM_START_X.Text = val.ToString(); + X_CAM = val; + //---------------------------- Y START -----------------------------------// + val16[0] = CAM_data[3]; + val16[1] = CAM_data[4]; + val = BitConverter.ToUInt16(val16, 0); + CAM_START_Y.Text = val.ToString(); + Y_CAM = val; + + //================================== NOZZLE ========================================// + byte[] NOZZLE_data = File.ReadAllBytes("NOZZLE.tula"); + + //----------------------------- X DOWN_IC --------------------------------// + val16[0] = NOZZLE_data[1]; + val16[1] = NOZZLE_data[2]; + val = BitConverter.ToUInt16(val16, 0); + DOWN_IC.Text = val.ToString(); + + val16[0] = NOZZLE_data[3]; + val16[1] = NOZZLE_data[4]; + val = BitConverter.ToUInt16(val16, 0); + DOWN_ROM.Text = val.ToString(); + + val16[0] = NOZZLE_data[5]; + val16[1] = NOZZLE_data[6]; + val = BitConverter.ToUInt16(val16, 0); + DOWN_NG.Text = val.ToString(); + + val16[0] = NOZZLE_data[7]; + val16[1] = NOZZLE_data[8]; + val = BitConverter.ToUInt16(val16, 0); + DOWN_OK.Text = val.ToString(); + //========================= line ====================== + Draw_line_worktable(); + + } + void Draw_line_worktable() + { + Graphics d = WorkTable.CreateGraphics(); + Pen PenBlue = new Pen(System.Drawing.Color.Blue, 10); + Pen PenRed = new Pen(System.Drawing.Color.Red, 10); + d.DrawLine(PenBlue, 220, 344, 220, 180); + d.DrawLine(PenBlue, 220, 185, 280, 185); + + d.DrawLine(PenRed, 300, 180, 300, 20); + d.DrawLine(PenRed, 305, 20, 200, 20); + + d.DrawLine(PenBlue, 320, 180, 320, 20); + d.DrawLine(PenBlue, 315, 20, 360, 20); + } + private void ROM_Stack_Start_Click(object sender, EventArgs e) + { + ROM_Start_choice.Show(); + ROM_End_choice.Hide(); + ROM_Stack_choice = ROM_START_CHOICE; + } + + private void ROM_Stack_End_Click(object sender, EventArgs e) + { + ROM_Start_choice.Hide(); + ROM_End_choice.Show(); + ROM_Stack_choice = ROM_END_CHOICE; + } + + private void SET_XY_NG_Click(object sender, EventArgs e) + { + if (NG_Stack_choice == NG_START_CHOICE) + { + NG_START_X.Text = Toado_X.Text; + NG_START_Y.Text = Toado_Y.Text; + } + if (NG_Stack_choice == NG_END_CHOICE) + { + NG_END_X.Text = Toado_X.Text; + NG_END_Y.Text = Toado_Y.Text; + } + } + + private void SET_XY_CAM_Click(object sender, EventArgs e) + { + if (CAM_Stack_choice == CAM_START_CHOICE) + { + CAM_START_X.Text = Toado_X.Text; + CAM_START_Y.Text = Toado_Y.Text; + } + + } + + private void Save_CAM_Stack_Click(object sender, EventArgs e) + { + + CAM_Start_choice.Hide(); + + byte[] val16 = new byte[2]; + ushort val = 0, k1, k2; + + val = ushort.Parse(CAM_START_X.Text.ToString()); + k1 = val; + val16 = BitConverter.GetBytes(val); + data[1] = val16[0]; + data[2] = val16[1]; + + val = ushort.Parse(CAM_START_Y.Text.ToString()); + k2 = val; + val16 = BitConverter.GetBytes(val); + data[3] = val16[0]; + data[4] = val16[1]; + + + if (k1 > 0 & k2 > 0) + { + File.WriteAllBytes("CAM.tula", data); + MessageBox.Show("Save CAM complete!"); + + } + else + MessageBox.Show("No Save"); + } + + private void NG_Stack_Start_Click(object sender, EventArgs e) + { + NG_Start_choice.Show(); + NG_End_choice.Hide(); + NG_Stack_choice = NG_START_CHOICE; + } + + private void NG_Stack_End_Click(object sender, EventArgs e) + { + NG_Start_choice.Hide(); + NG_End_choice.Show(); + NG_Stack_choice = NG_END_CHOICE; + } + + private void PASS_Stack_Start_Click(object sender, EventArgs e) + { + PASS_Start_choice.Show(); + PASS_End_choice.Hide(); + PASS_Stack_choice = PASS_START_CHOICE; + } + + private void PASS_Stack_End_Click(object sender, EventArgs e) + { + PASS_Start_choice.Hide(); + PASS_End_choice.Show(); + PASS_Stack_choice = PASS_END_CHOICE; + } + + private void CAM_Stack_Start_Click(object sender, EventArgs e) + { + CAM_Start_choice.Show(); + + CAM_Stack_choice = CAM_START_CHOICE; + } + + private void CAM_Stack_End_Click(object sender, EventArgs e) + { + CAM_Start_choice.Hide(); + + CAM_Stack_choice = CAM_END_CHOICE; + } + + private void SET_XY_PASS_Click(object sender, EventArgs e) + { + if (PASS_Stack_choice == PASS_START_CHOICE) + { + PASS_START_X.Text = Toado_X.Text; + PASS_START_Y.Text = Toado_Y.Text; + } + if (PASS_Stack_choice == PASS_END_CHOICE) + { + PASS_END_X.Text = Toado_X.Text; + PASS_END_Y.Text = Toado_Y.Text; + } + } + + private void Save_Nozzle_Click(object sender, EventArgs e) + { + byte[] val16 = new byte[2]; + ushort val = 0, k1, k2, k3, k4; + + val = ushort.Parse(DOWN_IC.Text.ToString()); + k1 = val; + val16 = BitConverter.GetBytes(val); + data[1] = val16[0]; + data[2] = val16[1]; + + val = ushort.Parse(DOWN_ROM.Text.ToString()); + k2 = val; + val16 = BitConverter.GetBytes(val); + data[3] = val16[0]; + data[4] = val16[1]; + + val = ushort.Parse(DOWN_NG.Text.ToString()); + k3 = val; + val16 = BitConverter.GetBytes(val); + data[5] = val16[0]; + data[6] = val16[1]; + + val = ushort.Parse(DOWN_OK.Text.ToString()); + k4 = val; + val16 = BitConverter.GetBytes(val); + data[7] = val16[0]; + data[8] = val16[1]; + + if (k1 > 0 & k2 > 0 & k3 > 0 & k4 > 0) + { + File.WriteAllBytes("Nozzle.tula", data); + MessageBox.Show("Save Nozzle complete!"); + + } + else + MessageBox.Show("No Save"); + } + + private void CONNECT_Click(object sender, EventArgs e) + { + CONNECT.Text = "Disconnect"; + MB.Connect(); + timer1.Enabled = true; + } + + private void Recall_MouseMove(object sender, MouseEventArgs e) + { + // toolTip1.SetToolTip(Recall,"show map"); + } + + private void Recall_MouseHover(object sender, EventArgs e) + { + toolTip1.SetToolTip(Recall, "show map1"); + } + + private void Start_auto_Click(object sender, EventArgs e) + { + //MessageBox.Show("CHAY AUTO"); + // GO HOME + if (Start == 0) + { + WorkTable.Enabled = false; + + Installing.Show(); + + Start_auto.Text = "RUN"; + Start_auto.BackColor = Color.LimeGreen; + Manual.Enabled = false; + Calib_System.Enabled = false; + Start = 1; + + + _Req_ORG = 1; + AUTO_RUN = 1; + _READY_RUN = 0; + + + + } + else + { + Start_auto.Text = "STOP"; + Start_auto.BackColor = Color.Red; + Manual.Enabled = true; + Calib_System.Enabled = true; + + Start = 0; + AUTO_RUN = 0; + _READY_RUN = 0; + Disable_PUMP(); + + MB.WriteSingleRegister(ADD_AM, _Manual); + _AM = _Manual; + Automanual.Text = "Manual"; + + + } + + } + + private void Pause_Click(object sender, EventArgs e) + { + if (_PAUSE == 0) + { + _PAUSE = 1; + Pause.Text = "Pause"; + Pause.BackColor = Color.Yellow; + Manual.Enabled = true; + } + else + { + _PAUSE = 0; + Pause.Text = "Play"; + Pause.BackColor = Color.LimeGreen; + Manual.Enabled = false; + } + } + + private void Automanual_Click(object sender, EventArgs e) + { + if (Automanual.Text == "Auto") + { + Automanual.Text = "Manual"; + _AM = _Manual; + + } + else + { + Automanual.Text = "Auto"; + _AM = _Auto; + + } + try + { + MB.WriteSingleRegister(_Add_AutoManual, _AM); + } + catch + { + + } + } + + private void Camera_connect_Click(object sender, EventArgs e) + { + //comboBox1.Text = "USB2.0 Grabber"; + MB.WriteSingleRegister(_Add_LED, LED_ON); + if (capture == null) + { + capture = new Emgu.CV.Capture(1); + //capture.SetCaptureProperty(camera); + capture.ImageGrabbed += Capture_ImageGrabbed; + //capture.Start(); + //capture.Pause(); + + } + } + void Start_CAM() + { + MB.WriteSingleRegister(_Add_LED, LED_ON); + if (capture == null) + { + capture = new Emgu.CV.Capture(1); + //capture.SetCaptureProperty(camera); + capture.ImageGrabbed += Capture_ImageGrabbed; + //capture.Start(); + //capture.Pause(); + + } + } + private void Capture_ImageGrabbed(object sender, EventArgs e) + { + try + { + Mat m = new Mat(); + capture.Retrieve(m); + //pictureBox3.Image = m.ToImage().Bitmap; + imgInput = m.ToImage(); + bounding_box(); + } + catch// (Exception ex) + { + + } + } + + private void bounding_box() + { + if (CAM_CHOICE == CAM_BOT) + { + Image imgOutput = imgInput.Convert().ThresholdBinary(new Gray(245), new Gray(255)); + Emgu.CV.Util.VectorOfVectorOfPoint contours = new Emgu.CV.Util.VectorOfVectorOfPoint(); + Emgu.CV.Util.VectorOfVectorOfPoint contours_T = new Emgu.CV.Util.VectorOfVectorOfPoint(); + Mat hier = new Mat(); + + Image imgout = new Image(imgInput.Width, imgInput.Height, new Gray(0)); + + CvInvoke.FindContours(imgOutput, contours, hier, Emgu.CV.CvEnum.RetrType.External, Emgu.CV.CvEnum.ChainApproxMethod.ChainApproxSimple); + + Dictionary dict = new Dictionary(); + + List points = new List();//////// + //Rectangle roi = new Rectangle(Your Top Left X,Your Top Left Y,Your ROI Width,Your ROI Height); + + if (contours.Size > 0) + { + for (int i = 0; i < contours.Size; i++) + { + double area = CvInvoke.ContourArea(contours[i]); + Rectangle rect = CvInvoke.BoundingRectangle(contours[i]); + + if (rect.Width > 5 && rect.Height > 5)// && area < 30000) + { + //dict.Add(i, area); + points.AddRange(contours[i].ToArray());///////////////////////////////////////////// + + } + } + } + //Image imgout1 = new Image(imgInput.Width, imgInput.Height, new Bgr(0, 0, 0)); + + + ///=============================== + RotatedRect minAreaRect = CvInvoke.MinAreaRect(points.Select(pt => new PointF(pt.X, pt.Y)).ToArray());///////////// + Point[] vertices = minAreaRect.GetVertices().Select(pt => new Point((int)pt.X, (int)pt.Y)).ToArray();//=////////////// + + gocquay = minAreaRect.Angle; + Wchip = minAreaRect.Size.Width; + + rong = imgInput.Bitmap.Width; + dai = imgInput.Bitmap.Height; + + vX = minAreaRect.Center.X - rong / 2; + vY = minAreaRect.Center.Y - dai / 2; + + + imgInput.Draw(vertices, new Bgr(Color.Lime), 3); + } + ///// + Graphics g = Graphics.FromImage(imgInput.Bitmap); + Pen myPen = new Pen(System.Drawing.Color.Red, 3); + + g.DrawLine(myPen, imgInput.Bitmap.Width / 2, 0, imgInput.Bitmap.Width / 2, imgInput.Bitmap.Height); + g.DrawLine(myPen, 0, imgInput.Bitmap.Height / 2, imgInput.Bitmap.Width, imgInput.Bitmap.Height / 2); + + pictureBox3.Image = imgInput.Bitmap; + solan_chup++; + if ((gocquay > -2 || gocquay < -89) && solan_chup > 20)// && (Math.Abs(vX)< 2) && (Math.Abs(vY) < 2)) + { + Cam_check_ok = 1; + + capture.Pause(); + + solan_chup = 0; + } + else + Cam_check_ok = 0; + + } + + private void XL1_UP_Click(object sender, EventArgs e) + { + if (_Status_XL1 == XL1_UP) + { + _Status_XL1 = XL1_DOWN; + XL1.BackColor = Color.Green; + } + else + { + _Status_XL1 = XL1_UP; + XL1.BackColor = Color.Red; + } + try + { + MB.WriteSingleRegister(_Add_Xilanh, _Status_XL1); + } + catch + { + + } + } + + private void R1_UP_MouseDown(object sender, MouseEventArgs e) + { + if (_AM == _Manual) + { + _ups = 1; + _coodinate = _R1; + try + { + MB.WriteSingleRegister(_Add_COOD, _coodinate); + MB.WriteSingleRegister(_Add_UPS, _ups); + } + catch + { + + } + + } + } + + private void R1_UP_MouseUp(object sender, MouseEventArgs e) + { + if (_AM == _Manual) + { + _ups = 0; + _coodinate = _R1; + try + { + MB.WriteSingleRegister(_Add_COOD, _coodinate); + MB.WriteSingleRegister(_Add_UPS, _ups); + } + catch + { + + } + + } + } + + private void R2_UP_MouseDown(object sender, MouseEventArgs e) + { + if (_AM == _Manual) + { + _ups = 1; + _coodinate = _R2; + try + { + MB.WriteSingleRegister(_Add_COOD, _coodinate); + MB.WriteSingleRegister(_Add_UPS, _ups); + } + catch + { + + } + + } + } + + private void R2_UP_MouseUp(object sender, MouseEventArgs e) + { + if (_AM == _Manual) + { + _ups = 0; + _coodinate = _R2; + try + { + MB.WriteSingleRegister(_Add_COOD, _coodinate); + MB.WriteSingleRegister(_Add_UPS, _ups); + } + catch + { + + } + + } + } + + private void R1_DOWN_MouseDown(object sender, MouseEventArgs e) + { + if (_AM == _Manual) + { + _ups = 2; + _coodinate = _R1; + try + { + MB.WriteSingleRegister(_Add_COOD, _coodinate); + MB.WriteSingleRegister(_Add_UPS, _ups); + } + catch + { + + } + + } + } + + private void R1_DOWN_MouseUp(object sender, MouseEventArgs e) + { + if (_AM == _Manual) + { + _ups = 0; + _coodinate = _R1; + try + { + MB.WriteSingleRegister(_Add_COOD, _coodinate); + MB.WriteSingleRegister(_Add_UPS, _ups); + } + catch + { + + } + + } + } + + private void R2_DOWN_MouseDown(object sender, MouseEventArgs e) + { + if (_AM == _Manual) + { + _ups = 2; + _coodinate = _R2; + try + { + MB.WriteSingleRegister(_Add_COOD, _coodinate); + MB.WriteSingleRegister(_Add_UPS, _ups); + } + catch + { + + } + } + } + + private void R2_DOWN_MouseUp(object sender, MouseEventArgs e) + { + if (_AM == _Manual) + { + _ups = 0; + _coodinate = _R2; + try + { + MB.WriteSingleRegister(_Add_COOD, _coodinate); + MB.WriteSingleRegister(_Add_UPS, _ups); + } + catch + { + + } + + } + } + + + + private void Nap_Click(object sender, EventArgs e) + { + if (Nap_rom == 0) + { + Nap_rom = 1; + Nap.Text = "Dangnap"; + + } + else + { + Nap_rom = 0; + Nap.Text = "Nap rom"; + + } + } + + private void Rotation_Click(object sender, EventArgs e) + { + float goclech = Math.Abs(gocquay); + if (goclech > 2 && goclech < 45) + MoveR1(90 + (int)(40*goclech/9)); + if(goclech < 90 && goclech > 45) + MoveR1(90 - (int)(40 * goclech / 9)); + } + + private void Camera_choice_Click(object sender, EventArgs e) + { + //capture.Stop(); + if(CAM_CHOICE == CAM_BOT) + { + CAM_CHOICE = CAM_TOP; + Camera_choice.Text = "CAM T"; + } + else + { + CAM_CHOICE = CAM_BOT; + Camera_choice.Text = "CAM B"; + } + MB.WriteSingleRegister(_Add_CAM, CAM_CHOICE); + //capture.Start(); + } + + private void Speed_choice_SelectedValueChanged(object sender, EventArgs e) + { + MB.WriteSingleRegister(_Add_SPEED, int.Parse(Speed_choice.SelectedItem.ToString())); + } + + private void HOME_Click(object sender, EventArgs e) + { + Automanual.Text = "Manual"; + try + { + Req_GOHOME(); + } + catch //(Exception ex) + { + + MB.Connect(); + } + _step = 0; + } + + + + + + + + + } + +} + diff --git a/HMI Label And Editor Control/FormMain1.resx b/HMI Label And Editor Control/FormMain1.resx new file mode 100644 index 0000000..3fd952d --- /dev/null +++ b/HMI Label And Editor Control/FormMain1.resx @@ -0,0 +1,304 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 15, 7 + + + + + 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 + rkJggg== + + + + 114, 8 + + + 25 + + \ No newline at end of file diff --git a/HMI Label And Editor Control/Program.cs b/HMI Label And Editor Control/Program.cs new file mode 100644 index 0000000..365fe45 --- /dev/null +++ b/HMI Label And Editor Control/Program.cs @@ -0,0 +1,22 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Threading.Tasks; +using System.Windows.Forms; + +namespace How_to_create_HMI_Control_Real_Time +{ + static class Program + { + /// + /// The main entry point for the application. + /// + [STAThread] + static void Main() + { + Application.EnableVisualStyles(); + Application.SetCompatibleTextRenderingDefault(false); + Application.Run(new FormMain()); + } + } +} diff --git a/HMI Label And Editor Control/Properties/AssemblyInfo.cs b/HMI Label And Editor Control/Properties/AssemblyInfo.cs new file mode 100644 index 0000000..6d586c1 --- /dev/null +++ b/HMI Label And Editor Control/Properties/AssemblyInfo.cs @@ -0,0 +1,36 @@ +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +[assembly: AssemblyTitle("How to create HMI Control Real-Time")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("")] +[assembly: AssemblyProduct("How to create HMI Control Real-Time")] +[assembly: AssemblyCopyright("Copyright © 2018")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// Setting ComVisible to false makes the types in this assembly not visible +// to COM components. If you need to access a type in this assembly from +// COM, set the ComVisible attribute to true on that type. +[assembly: ComVisible(false)] + +// The following GUID is for the ID of the typelib if this project is exposed to COM +[assembly: Guid("5d593605-3723-499d-9275-40627cccda29")] + +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +// You can specify all the values or you can default the Build and Revision Numbers +// by using the '*' as shown below: +// [assembly: AssemblyVersion("1.0.*")] +[assembly: AssemblyVersion("1.0.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/HMI Label And Editor Control/Properties/Resources.Designer.cs b/HMI Label And Editor Control/Properties/Resources.Designer.cs new file mode 100644 index 0000000..318051b --- /dev/null +++ b/HMI Label And Editor Control/Properties/Resources.Designer.cs @@ -0,0 +1,83 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// Runtime Version:4.0.30319.42000 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +namespace How_to_create_HMI_Control_Real_Time.Properties { + using System; + + + /// + /// A strongly-typed resource class, for looking up localized strings, etc. + /// + // This class was auto-generated by the StronglyTypedResourceBuilder + // class via a tool like ResGen or Visual Studio. + // To add or remove a member, edit your .ResX file then rerun ResGen + // with the /str option, or rebuild your VS project. + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + internal class Resources { + + private static global::System.Resources.ResourceManager resourceMan; + + private static global::System.Globalization.CultureInfo resourceCulture; + + [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] + internal Resources() { + } + + /// + /// Returns the cached ResourceManager instance used by this class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Resources.ResourceManager ResourceManager { + get { + if (object.ReferenceEquals(resourceMan, null)) { + global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("How_to_create_HMI_Control_Real_Time.Properties.Resources", typeof(Resources).Assembly); + resourceMan = temp; + } + return resourceMan; + } + } + + /// + /// Overrides the current thread's CurrentUICulture property for all + /// resource lookups using this strongly typed resource class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Globalization.CultureInfo Culture { + get { + return resourceCulture; + } + set { + resourceCulture = value; + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap ISS { + get { + object obj = ResourceManager.GetObject("ISS", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap logo { + get { + object obj = ResourceManager.GetObject("logo", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + } +} diff --git a/HMI Label And Editor Control/Properties/Resources.resx b/HMI Label And Editor Control/Properties/Resources.resx new file mode 100644 index 0000000..20abfd4 --- /dev/null +++ b/HMI Label And Editor Control/Properties/Resources.resx @@ -0,0 +1,127 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + + ..\Resources\ISS.jpg;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\logo.gif;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + \ No newline at end of file diff --git a/HMI Label And Editor Control/Properties/Settings.Designer.cs b/HMI Label And Editor Control/Properties/Settings.Designer.cs new file mode 100644 index 0000000..16135b0 --- /dev/null +++ b/HMI Label And Editor Control/Properties/Settings.Designer.cs @@ -0,0 +1,26 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// Runtime Version:4.0.30319.42000 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +namespace How_to_create_HMI_Control_Real_Time.Properties { + + + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "12.0.0.0")] + internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase { + + private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings()))); + + public static Settings Default { + get { + return defaultInstance; + } + } + } +} diff --git a/HMI Label And Editor Control/Properties/Settings.settings b/HMI Label And Editor Control/Properties/Settings.settings new file mode 100644 index 0000000..3964565 --- /dev/null +++ b/HMI Label And Editor Control/Properties/Settings.settings @@ -0,0 +1,7 @@ + + + + + + + diff --git a/HMI Label And Editor Control/ROM_WRITER.csproj b/HMI Label And Editor Control/ROM_WRITER.csproj new file mode 100644 index 0000000..d64d5b9 --- /dev/null +++ b/HMI Label And Editor Control/ROM_WRITER.csproj @@ -0,0 +1,180 @@ + + + + + Debug + AnyCPU + {5D593605-3723-499D-9275-40627CCCDA29} + WinExe + Properties + How_to_create_HMI_Control_Real_Time + How to create HMI Control Real-Time + v4.5 + 512 + true + + + + x64 + true + full + false + bin\Debug\ + DEBUG;TRACE + prompt + 4 + + + AnyCPU + pdbonly + true + bin\Release\ + TRACE + prompt + 4 + + + + False + bin\Debug\AForge.dll + + + False + bin\Debug\AForge.Imaging.dll + + + False + bin\Debug\AForge.Math.dll + + + False + bin\Debug\AForge.Video.dll + + + False + bin\Debug\AForge.Video.DirectShow.dll + + + False + bin\Debug\EasyModbus.dll + + + False + bin\Debug\Emgu.CV.DebuggerVisualizers.VS2010.dll + + + False + bin\Debug\Emgu.CV.DebuggerVisualizers.VS2012.dll + + + False + bin\Debug\Emgu.CV.DebuggerVisualizers.VS2013.dll + + + False + bin\Debug\Emgu.CV.DebuggerVisualizers.VS2015.dll + + + False + bin\Debug\Emgu.CV.UI.dll + + + False + bin\Debug\Emgu.CV.UI.GL.dll + + + False + bin\Debug\Emgu.CV.World.dll + + + + + + + + + + + + + + + + Component + + + Component + + + Form + + + FormMain1.cs + + + + + Form + + + System config.cs + + + + FormMain1.cs + + + ResXFileCodeGenerator + Resources.Designer.cs + Designer + + + True + Resources.resx + True + + + System config.cs + + + SettingsSingleFileGenerator + Settings.Designer.cs + + + True + Settings.settings + True + + + + + + + + + + + + + + Always + + + Always + + + Always + + + Always + + + + + \ No newline at end of file diff --git a/HMI Label And Editor Control/Resources/ISS.jpg b/HMI Label And Editor Control/Resources/ISS.jpg new file mode 100644 index 0000000000000000000000000000000000000000..4ea3f063f37ab1fbbc4e87bf26c0e29047efcfa8 GIT binary patch literal 4333 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 dIqtjq{y#-+uyiKf literal 0 HcmV?d00001 diff --git a/HMI Label And Editor Control/System config.Designer.cs b/HMI Label And Editor Control/System config.Designer.cs new file mode 100644 index 0000000..475c2d7 --- /dev/null +++ b/HMI Label And Editor Control/System config.Designer.cs @@ -0,0 +1,145 @@ +namespace How_to_create_HMI_Control_Real_Time +{ + partial class System_config + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.tabControl1 = new System.Windows.Forms.TabControl(); + this.tabPage1 = new System.Windows.Forms.TabPage(); + this.tabPage2 = new System.Windows.Forms.TabPage(); + this.tabPage3 = new System.Windows.Forms.TabPage(); + this.button5 = new System.Windows.Forms.Button(); + this.button4 = new System.Windows.Forms.Button(); + this.label1 = new System.Windows.Forms.Label(); + this.tabControl1.SuspendLayout(); + this.tabPage1.SuspendLayout(); + this.SuspendLayout(); + // + // tabControl1 + // + this.tabControl1.Controls.Add(this.tabPage1); + this.tabControl1.Controls.Add(this.tabPage2); + this.tabControl1.Controls.Add(this.tabPage3); + this.tabControl1.Location = new System.Drawing.Point(12, 12); + this.tabControl1.Name = "tabControl1"; + this.tabControl1.SelectedIndex = 0; + this.tabControl1.Size = new System.Drawing.Size(719, 375); + this.tabControl1.TabIndex = 70; + // + // tabPage1 + // + this.tabPage1.Controls.Add(this.button5); + this.tabPage1.Controls.Add(this.button4); + this.tabPage1.Controls.Add(this.label1); + this.tabPage1.Location = new System.Drawing.Point(4, 22); + this.tabPage1.Name = "tabPage1"; + this.tabPage1.Padding = new System.Windows.Forms.Padding(3); + this.tabPage1.Size = new System.Drawing.Size(711, 349); + this.tabPage1.TabIndex = 0; + this.tabPage1.Text = "IC Stack"; + this.tabPage1.UseVisualStyleBackColor = true; + this.tabPage1.Click += new System.EventHandler(this.tabPage1_Click); + // + // tabPage2 + // + this.tabPage2.Location = new System.Drawing.Point(4, 22); + this.tabPage2.Name = "tabPage2"; + this.tabPage2.Padding = new System.Windows.Forms.Padding(3); + this.tabPage2.Size = new System.Drawing.Size(550, 286); + this.tabPage2.TabIndex = 1; + this.tabPage2.Text = "tabPage2"; + this.tabPage2.UseVisualStyleBackColor = true; + // + // tabPage3 + // + this.tabPage3.Location = new System.Drawing.Point(4, 22); + this.tabPage3.Name = "tabPage3"; + this.tabPage3.Padding = new System.Windows.Forms.Padding(3); + this.tabPage3.Size = new System.Drawing.Size(550, 286); + this.tabPage3.TabIndex = 2; + this.tabPage3.Text = "tabPage3"; + this.tabPage3.UseVisualStyleBackColor = true; + // + // button5 + // + this.button5.Font = new System.Drawing.Font("Microsoft Sans Serif", 15.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.button5.Location = new System.Drawing.Point(15, 56); + this.button5.Name = "button5"; + this.button5.Size = new System.Drawing.Size(66, 41); + this.button5.TabIndex = 60; + this.button5.Text = "+"; + this.button5.UseVisualStyleBackColor = true; + + // + // button4 + // + this.button4.Font = new System.Drawing.Font("Microsoft Sans Serif", 15.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.button4.Location = new System.Drawing.Point(15, 103); + this.button4.Name = "button4"; + this.button4.Size = new System.Drawing.Size(66, 40); + this.button4.TabIndex = 59; + this.button4.Text = "-"; + this.button4.UseVisualStyleBackColor = true; + // + // label1 + // + this.label1.AutoSize = true; + this.label1.BackColor = System.Drawing.Color.Blue; + this.label1.Font = new System.Drawing.Font("Microsoft Sans Serif", 15.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.label1.Location = new System.Drawing.Point(33, 19); + this.label1.Name = "label1"; + this.label1.Size = new System.Drawing.Size(26, 25); + this.label1.TabIndex = 58; + this.label1.Text = "X"; + // + // System_config + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(743, 399); + this.Controls.Add(this.tabControl1); + this.Name = "System_config"; + this.Text = "System_config"; + this.tabControl1.ResumeLayout(false); + this.tabPage1.ResumeLayout(false); + this.tabPage1.PerformLayout(); + this.ResumeLayout(false); + + } + + #endregion + + private System.Windows.Forms.TabControl tabControl1; + private System.Windows.Forms.TabPage tabPage1; + private System.Windows.Forms.TabPage tabPage2; + private System.Windows.Forms.TabPage tabPage3; + private System.Windows.Forms.Button button5; + private System.Windows.Forms.Button button4; + private System.Windows.Forms.Label label1; + + } +} \ No newline at end of file diff --git a/HMI Label And Editor Control/System config.cs b/HMI Label And Editor Control/System config.cs new file mode 100644 index 0000000..6d09c12 --- /dev/null +++ b/HMI Label And Editor Control/System config.cs @@ -0,0 +1,37 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Forms; + +namespace How_to_create_HMI_Control_Real_Time +{ + public partial class System_config : Form + { + //protected FormMain formmain; + //private Register _Register = null; + public System_config() + { + InitializeComponent(); + // this.formmain = formmain; + } + + private void button1_Click(object sender, EventArgs e) + { + MessageBox.Show("hi"); + } + + private void tabPage1_Click(object sender, EventArgs e) + { + + } + + + + + } +} diff --git a/HMI Label And Editor Control/System config.resx b/HMI Label And Editor Control/System config.resx new file mode 100644 index 0000000..1af7de1 --- /dev/null +++ b/HMI Label And Editor Control/System config.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/HMI Label And Editor Control/Word.cs b/HMI Label And Editor Control/Word.cs new file mode 100644 index 0000000..53604ec --- /dev/null +++ b/HMI Label And Editor Control/Word.cs @@ -0,0 +1,45 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace How_to_create_HMI_Control_Real_Time +{ + public class Word + { + + public static UInt16 FromByteArray(byte[] bytes) + { + // bytes[0] -> HighByte + // bytes[1] -> LowByte + return FromBytes(bytes[1], bytes[0]); + } + + public static UInt16 FromBytes(byte LoVal, byte HiVal) + { + return (UInt16)(HiVal * 256 + LoVal); + } + + public static UInt16[] ByteToUInt16(byte[] bytes) + { + UInt16[] values = new UInt16[bytes.Length / 2]; + int counter = 0; + for (int cnt = 0; cnt < bytes.Length / 2; cnt++) + values[cnt] = FromByteArray(new byte[] { bytes[counter++], bytes[counter++] }); + return values; + } + + /// + /// Convert UInt16 to byte array + /// + /// UInt16 + /// byte[] + public static byte[] ToByteArray(UInt16 value) + { + byte[] array = BitConverter.GetBytes(value); + Array.Reverse(array); + return array; + } + } +} diff --git a/HMI Label And Editor Control/bin/Debug/AForge.Imaging.dll b/HMI Label And Editor Control/bin/Debug/AForge.Imaging.dll new file mode 100644 index 0000000000000000000000000000000000000000..150e87d426538e2966f83388ef5b4a595372a976 GIT binary patch literal 262656 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

N=q%n+nhZNA$$QgDDT$01 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

CvZJ}p#HU! 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 AssI20 literal 0 HcmV?d00001 diff --git a/HMI Label And Editor Control/bin/Debug/AForge.Imaging.xml b/HMI Label And Editor Control/bin/Debug/AForge.Imaging.xml new file mode 100644 index 0000000..bd85baf --- /dev/null +++ b/HMI Label And Editor Control/bin/Debug/AForge.Imaging.xml @@ -0,0 +1,19015 @@ + + + + AForge.Imaging + + + +

+ Corners detector's interface. + + + The interface specifies set of methods, which should be implemented by different + corners detection algorithms. + + + + + Process image looking for corners. + + + Source image to process. + + Returns list of found corners (X-Y coordinates). + + + + + Process image looking for corners. + + + Source image data to process. + + Returns list of found corners (X-Y coordinates). + + + + + Process image looking for corners. + + + Unmanaged source image to process. + + Returns list of found corners (X-Y coordinates). + + + + + Shrink an image by removing specified color from its boundaries. + + + Removes pixels with specified color from image boundaries making + the image smaller in size. + + The filter accepts 8 bpp grayscale and 24 bpp color images for processing. + + Sample usage: + + // create filter + Shrink filter = new Shrink( Color.Black ); + // apply the filter + Bitmap newImage = filter.Apply( image ); + + + Initial image: + + Result image: + + + + + + + Base class for filters, which may produce new image of different size as a + result of image processing. + + + The abstract class is the base class for all filters, which + do image processing creating new image of the size, which may differ from the + size of source image. Filters based on this class cannot be applied directly + to the source image, which is kept unchanged. + + The base class itself does not define supported pixel formats of source + image and resulting pixel formats of destination image. Filters inheriting from + this base class, should specify supported pixel formats and their transformations + overriding abstract property. + + + + + + Image processing filter interface. + + + The interface defines the set of methods, which should be + provided by all image processing filters. Methods of this interface + keep the source image unchanged and returt the result of image processing + filter as new image. + + + + + + + + Apply filter to an image. + + + Source image to apply filter to. + + Returns filter's result obtained by applying the filter to + the source image. + + The method keeps the source image unchanged and returns + the result of image processing filter as new image. + + + + + Apply filter to an image. + + + Source image to apply filter to. + + Returns filter's result obtained by applying the filter to + the source image. + + The filter accepts bitmap data as input and returns the result + of image processing filter as new image. The source image data are kept + unchanged. + + + + + Apply filter to an image. + + + Image in unmanaged memory. + + Returns filter's result obtained by applying the filter to + the source image. + + The method keeps the source image unchanged and returns + the result of image processing filter as new image. + + + + + Apply filter to an image. + + + Source image to be processed. + Destination image to store filter's result. + + The method keeps the source image unchanged and puts the + the result of image processing filter into destination image. + + The destination image must have the size, which is expected by + the filter. + + + In the case if destination image has incorrect + size. + + + + + Interface which provides information about image processing filter. + + + The interface defines set of properties, which provide different type + of information about image processing filters implementing interface + or another filter's interface. + + + + + Format translations dictionary. + + + The dictionary defines, which pixel formats are supported for + source images and which pixel format will be used for resulting image. + + + Keys of this dictionary defines all pixel formats which are supported for source + images, but corresponding values define what will be resulting pixel format. For + example, if value Format16bppGrayScale + is put into the dictionary with the + Format48bppRgb key, then it means + that the filter accepts color 48 bpp image and produces 16 bpp grayscale image as a result + of image processing. + + The information provided by this property is mostly actual for filters, which can not + be applied directly to the source image, but provide new image a result. Since usually all + filters implement interface, the information provided by this property + (if filter also implements interface) may be useful to + user to resolve filter's capabilities. + + Sample usage: + + // get filter's IFilterInformation interface + IFilterInformation info = (IFilterInformation) filter; + // check if the filter supports our image's format + if ( info.FormatTranslations.ContainsKey( image.PixelFormat ) + { + // format is supported, check what will be result of image processing + PixelFormat resultingFormat = info.FormatTranslations[image.PixelFormat]; + } + /// + + + + + + Apply filter to an image. + + + Source image to apply filter to. + + Returns filter's result obtained by applying the filter to + the source image. + + The method keeps the source image unchanged and returns + the result of image processing filter as new image. + + Unsupported pixel format of the source image. + + + + + Apply filter to an image. + + + Source image to apply filter to. + + Returns filter's result obtained by applying the filter to + the source image. + + The filter accepts bitmap data as input and returns the result + of image processing filter as new image. The source image data are kept + unchanged. + + Unsupported pixel format of the source image. + + + + + Apply filter to an image in unmanaged memory. + + + Source image in unmanaged memory to apply filter to. + + Returns filter's result obtained by applying the filter to + the source image. + + The method keeps the source image unchanged and returns + the result of image processing filter as new image. + + Unsupported pixel format of the source image. + + + + + Apply filter to an image in unmanaged memory. + + + Source image in unmanaged memory to apply filter to. + Destination image in unmanaged memory to put result into. + + The method keeps the source image unchanged and puts result of image processing + into destination image. + + The destination image must have the same width and height as source image. Also + destination image must have pixel format, which is expected by particular filter (see + property for information about pixel format conversions). + + + Unsupported pixel format of the source image. + Incorrect destination pixel format. + Destination image has wrong width and/or height. + + + + + Calculates new image size. + + + Source image data. + + New image size - size of the destination image. + + + + + Process the filter on the specified image. + + + Source image data. + Destination image data. + + + + + Format translations dictionary. + + + The dictionary defines, which pixel formats are supported for + source images and which pixel format will be used for resulting image. + + + See for more information. + + + + + + Initializes a new instance of the class. + + + + + + Initializes a new instance of the class. + + + Color to remove from boundaries. + + + + + Calculates new image size. + + + Source image data. + + New image size - size of the destination image. + + + + + Process the filter on the specified image. + + + Source image data. + Destination image data. + + + + + Format translations dictionary. + + + + + Color to remove from boundaries. + + + + + + Rotate image using nearest neighbor algorithm. + + + The class implements image rotation filter using nearest + neighbor algorithm, which does not assume any interpolation. + + Rotation is performed in counterclockwise direction. + + The filter accepts 8/16 bpp grayscale images and 24/48 bpp color image + for processing. + + Sample usage: + + // create filter - rotate for 30 degrees keeping original image size + RotateNearestNeighbor filter = new RotateNearestNeighbor( 30, true ); + // apply the filter + Bitmap newImage = filter.Apply( image ); + + + Initial image: + + Result image: + + + + + + + + + + Base class for image rotation filters. + + + The abstract class is the base class for all filters, + which implement rotating algorithms. + + + + + Rotation angle. + + + + + Keep image size or not. + + + + + Fill color. + + + + + Initializes a new instance of the class. + + + Rotation angle. + + This constructor sets property to false. + + + + + + Initializes a new instance of the class. + + + Rotation angle. + Keep image size or not. + + + + + Calculates new image size. + + + Source image data. + + New image size - size of the destination image. + + + + + Rotation angle, [0, 360]. + + + + + Keep image size or not. + + + The property determines if source image's size will be kept + as it is or not. If the value is set to false, then the new image will have + new dimension according to rotation angle. If the valus is set to + true, then the new image will have the same size, which means that some parts + of the image may be clipped because of rotation. + + + + + + Fill color. + + + The fill color is used to fill areas of destination image, + which don't have corresponsing pixels in source image. + + + + + Initializes a new instance of the class. + + + Rotation angle. + + This constructor sets property to + . + + + + + + Initializes a new instance of the class. + + + Rotation angle. + Keep image size or not. + + + + + Process the filter on the specified image. + + + Source image data. + Destination image data. + + + + + Format translations dictionary. + + + + + Conservative smoothing. + + + The filter implements conservative smoothing, which is a noise reduction + technique that derives its name from the fact that it employs a simple, fast filtering + algorithm that sacrifices noise suppression power in order to preserve the high spatial + frequency detail (e.g. sharp edges) in an image. It is explicitly designed to remove noise + spikes - isolated pixels of exceptionally low or high pixel intensity + (salt and pepper noise). + + If the filter finds a pixel which has minimum/maximum value compared to its surrounding + pixel, then its value is replaced by minimum/maximum value of those surrounding pixel. + For example, lets suppose the filter uses kernel size of 3x3, + which means each pixel has 8 surrounding pixel. If pixel's value is smaller than any value + of surrounding pixels, then the value of the pixel is replaced by minimum value of those surrounding + pixels. + + The filter accepts 8 bpp grayscale images and 24/32 bpp + color images for processing. + + Sample usage: + + // create filter + ConservativeSmoothing filter = new ConservativeSmoothing( ); + // apply the filter + filter.ApplyInPlace( image ); + + + Initial image: + + Result image: + + + + + + + Base class for filters, which require source image backup to make them applicable to + source image (or its part) directly. + + + The base class is used for filters, which can not do + direct manipulations with source image. To make effect of in-place filtering, + these filters create a background copy of the original image (done by this + base class) and then do manipulations with it putting result back to the original + source image. + + The background copy of the source image is created only in the case of in-place + filtering. Otherwise background copy is not created - source image is processed and result is + put to destination image. + + The base class is for those filters, which support as filtering entire image, as + partial filtering of specified rectangle only. + + + + + + In-place filter interface. + + + The interface defines the set of methods, which should be + implemented by filters, which are capable to do image processing + directly on the source image. Not all image processing filters + can be applied directly to the source image - only filters, which do not + change image's dimension and pixel format, can be applied directly to the + source image. + + + + + + + + Apply filter to an image. + + + Image to apply filter to. + + The method applies filter directly to the provided image data. + + + + + Apply filter to an image. + + + Image to apply filter to. + + The method applies filter directly to the provided image data. + + + + + Apply filter to an image in unmanaged memory. + + + Image in unmanaged memory. + + The method applies filter directly to the provided image data. + + + + + In-place partial filter interface. + + + The interface defines the set of methods, which should be + implemented by filters, which are capable to do image processing + directly on the source image. Not all image processing filters + can be applied directly to the source image - only filters, which do not + change image dimension and pixel format, can be applied directly to the + source image. + + The interface also supports partial image filtering, allowing to specify + image rectangle, which should be filtered. + + + + + + + + + Apply filter to an image or its part. + + + Image to apply filter to. + Image rectangle for processing by filter. + + The method applies filter directly to the provided image data. + + + + + Apply filter to an image or its part. + + + Image to apply filter to. + Image rectangle for processing by filter. + + The method applies filter directly to the provided image data. + + + + + Apply filter to an image in unmanaged memory. + + + Image in unmanaged memory. + Image rectangle for processing by filter. + + The method applies filter directly to the provided image. + + + + + Apply filter to an image. + + + Source image to apply filter to. + + Returns filter's result obtained by applying the filter to + the source image. + + The method keeps the source image unchanged and returns + the result of image processing filter as new image. + + Unsupported pixel format of the source image. + + + + + Apply filter to an image. + + + Source image to apply filter to. + + Returns filter's result obtained by applying the filter to + the source image. + + The filter accepts bitmap data as input and returns the result + of image processing filter as new image. The source image data are kept + unchanged. + + Unsupported pixel format of the source image. + + + + + Apply filter to an image in unmanaged memory. + + + Source image in unmanaged memory to apply filter to. + + Returns filter's result obtained by applying the filter to + the source image. + + The method keeps the source image unchanged and returns + the result of image processing filter as new image. + + Unsupported pixel format of the source image. + + + + + Apply filter to an image in unmanaged memory. + + + Source image in unmanaged memory to apply filter to. + Destination image in unmanaged memory to put result into. + + The method keeps the source image unchanged and puts result of image processing + into destination image. + + The destination image must have the same width and height as source image. Also + destination image must have pixel format, which is expected by particular filter (see + property for information about pixel format conversions). + + + Unsupported pixel format of the source image. + Incorrect destination pixel format. + Destination image has wrong width and/or height. + + + + + Apply filter to an image. + + + Image to apply filter to. + + The method applies the filter directly to the provided source image. + + Unsupported pixel format of the source image. + + + + + Apply filter to an image. + + + Image data to apply filter to. + + The method applies the filter directly to the provided source image. + + Unsupported pixel format of the source image. + + + + + Apply filter to an unmanaged image. + + + Unmanaged image to apply filter to. + + The method applies the filter directly to the provided source unmanaged image. + + Unsupported pixel format of the source image. + + + + + Apply filter to an image or its part. + + + Image to apply filter to. + Image rectangle for processing by the filter. + + The method applies the filter directly to the provided source image. + + Unsupported pixel format of the source image. + + + + + Apply filter to an image or its part. + + + Image data to apply filter to. + Image rectangle for processing by the filter. + + The method applies the filter directly to the provided source image. + + Unsupported pixel format of the source image. + + + + + Apply filter to an unmanaged image or its part. + + + Unmanaged image to apply filter to. + Image rectangle for processing by the filter. + + The method applies the filter directly to the provided source image. + + Unsupported pixel format of the source image. + + + + + Process the filter on the specified image. + + + Source image data. + Destination image data. + Image rectangle for processing by the filter. + + + + + Format translations dictionary. + + + The dictionary defines, which pixel formats are supported for + source images and which pixel format will be used for resulting image. + + + See for more information. + + + + + + Initializes a new instance of the class. + + + + + + Initializes a new instance of the class. + + + Kernel size. + + + + + Process the filter on the specified image. + + + Source image data. + Destination image data. + Image rectangle for processing by the filter. + + + + + Format translations dictionary. + + + + + Kernel size, [3, 25]. + + + Determines the size of pixel's square used for smoothing. + + Default value is set to 3. + + The value should be odd. + + + + + + Rotate RGB channels. + + + The filter rotates RGB channels: red channel is replaced with green, + green channel is replaced with blue, blue channel is replaced with red. + + The filter accepts 24/32 bpp color images for processing. + + Sample usage: + + // create filter + RotateChannels filter = new RotateChannels( ); + // apply the filter + filter.ApplyInPlace( image ); + + + Initial image: + + Result image: + + + + + + + Base class for filters, which may be applied directly to the source image or its part. + + + The abstract class is the base class for all filters, which can + be applied to an image producing new image as a result of image processing or + applied directly to the source image (or its part) without changing its size and + pixel format. + + + + + + Apply filter to an image. + + + Source image to apply filter to. + + Returns filter's result obtained by applying the filter to + the source image. + + The method keeps the source image unchanged and returns + the result of image processing filter as new image. + + Unsupported pixel format of the source image. + + + + + Apply filter to an image. + + + Source image to apply filter to. + + Returns filter's result obtained by applying the filter to + the source image. + + The filter accepts bitmap data as input and returns the result + of image processing filter as new image. The source image data are kept + unchanged. + + Unsupported pixel format of the source image. + + + + + Apply filter to an image in unmanaged memory. + + + Source image in unmanaged memory to apply filter to. + + Returns filter's result obtained by applying the filter to + the source image. + + The method keeps the source image unchanged and returns + the result of image processing filter as new image. + + Unsupported pixel format of the source image. + + + + + Apply filter to an image in unmanaged memory. + + + Source image in unmanaged memory to apply filter to. + Destination image in unmanaged memory to put result into. + + The method keeps the source image unchanged and puts result of image processing + into destination image. + + The destination image must have the same width and height as source image. Also + destination image must have pixel format, which is expected by particular filter (see + property for information about pixel format conversions). + + + Unsupported pixel format of the source image. + Incorrect destination pixel format. + Destination image has wrong width and/or height. + + + + + Apply filter to an image. + + + Image to apply filter to. + + The method applies the filter directly to the provided source image. + + Unsupported pixel format of the source image. + + + + + Apply filter to an image. + + + Image data to apply filter to. + + The method applies the filter directly to the provided source image. + + Unsupported pixel format of the source image. + + + + + Apply filter to an unmanaged image. + + + Unmanaged image to apply filter to. + + The method applies the filter directly to the provided source unmanaged image. + + Unsupported pixel format of the source image. + + + + + Apply filter to an image or its part. + + + Image to apply filter to. + Image rectangle for processing by the filter. + + The method applies the filter directly to the provided source image. + + Unsupported pixel format of the source image. + + + + + Apply filter to an image or its part. + + + Image data to apply filter to. + Image rectangle for processing by the filter. + + The method applies the filter directly to the provided source image. + + Unsupported pixel format of the source image. + + + + + Apply filter to an unmanaged image or its part. + + + Unmanaged image to apply filter to. + Image rectangle for processing by the filter. + + The method applies the filter directly to the provided source image. + + Unsupported pixel format of the source image. + + + + + Process the filter on the specified image. + + + Source image data. + Image rectangle for processing by the filter. + + + + + Format translations dictionary. + + + The dictionary defines, which pixel formats are supported for + source images and which pixel format will be used for resulting image. + + + See for more information. + + + + + + Initializes a new instance of the class. + + + + + Process the filter on the specified image. + + + Source image data. + Image rectangle for processing by the filter. + + + + + Format translations dictionary. + + + + + Gamma correction filter. + + + The filter performs
gamma correction + of specified image in RGB color space. Each pixels' value is converted using the Vout=Ving + equation, where g is gamma value. + + The filter accepts 8 bpp grayscale and 24 bpp color images for processing. + + Sample usage: + + // create filter + GammaCorrection filter = new GammaCorrection( 0.5 ); + // apply the filter + filter.ApplyInPlace( image ); + + + Initial image: + + Result image: + + + + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the class. + + + Gamma value. + + + + + Process the filter on the specified image. + + + Source image data. + Image rectangle for processing by the filter. + + + + + Format translations dictionary. + + + + + Gamma value, [0.1, 5.0]. + + + Default value is set to 2.2. + + + + + Brightness adjusting in RGB color space. + + + The filter operates in RGB color space and adjusts + pixels' brightness by increasing every pixel's RGB values by the specified + adjust value. The filter is based on + filter and simply sets all input ranges to (0, 255-) and + all output range to (, 255) in the case if the adjust value is positive. + If the adjust value is negative, then all input ranges are set to + (-, 255 ) and all output ranges are set to + ( 0, 255+). + + See documentation for more information about the base filter. + + The filter accepts 8 bpp grayscale and 24/32 bpp color images for processing. + + Sample usage: + + // create filter + BrightnessCorrection filter = new BrightnessCorrection( -50 ); + // apply the filter + filter.ApplyInPlace( image ); + + + Initial image: + + Result image: + + + + + + + + + Initializes a new instance of the class. + + + + + + Initializes a new instance of the class. + + + Brightness adjust value. + + + + + Process the filter on the specified image. + + + Source image data. + Image rectangle for processing by the filter. + + + + + Brightness adjust value, [-255, 255]. + + + Default value is set to 10, which corresponds to increasing + RGB values of each pixel by 10. + + + + + Format translations dictionary. + + + See + documentation for additional information. + + + + + Dithering using Stucki error diffusion. + + + The filter represents binarization filter, which is based on + error diffusion dithering with Stucki coefficients. Error is diffused + on 12 neighbor pixels with next coefficients: + + | * | 8 | 4 | + | 2 | 4 | 8 | 4 | 2 | + | 1 | 2 | 4 | 2 | 1 | + + / 42 + + + The filter accepts 8 bpp grayscale images for processing. + + Sample usage: + + // create filter + StuckiDithering filter = new StuckiDithering( ); + // apply the filter + filter.ApplyInPlace( image ); + + + Initial image: + + Result image: + + + + + + + + + + + + Base class for error diffusion dithering, where error is diffused to + adjacent neighbor pixels. + + + The class does error diffusion to adjacent neighbor pixels + using specified set of coefficients. These coefficients are represented by + 2 dimensional jugged array, where first array of coefficients is for + right-standing pixels, but the rest of arrays are for bottom-standing pixels. + All arrays except the first one should have odd number of coefficients. + + Suppose that error diffusion coefficients are represented by the next + jugged array: + + + int[][] coefficients = new int[2][] { + new int[1] { 7 }, + new int[3] { 3, 5, 1 } + }; + + + The above coefficients are used to diffuse error over the next neighbor + pixels (* marks current pixel, coefficients are placed to corresponding + neighbor pixels): + + | * | 7 | + | 3 | 5 | 1 | + + / 16 + + + The filter accepts 8 bpp grayscale images for processing. + + Sample usage: + + // create filter + ErrorDiffusionToAdjacentNeighbors filter = new ErrorDiffusionToAdjacentNeighbors( + new int[3][] { + new int[2] { 5, 3 }, + new int[5] { 2, 4, 5, 4, 2 }, + new int[3] { 2, 3, 2 } + } ); + // apply the filter + filter.ApplyInPlace( image ); + + + + + + + Base class for error diffusion dithering. + + + The class is the base class for binarization algorithms based on + error diffusion. + + Binarization with error diffusion in its idea is similar to binarization based on thresholding + of pixels' cumulative value (see ). Each pixel is binarized based not only + on its own value, but on values of some surrounding pixels. During pixel's binarization, its binarization + error is distributed (diffused) to some neighbor pixels with some coefficients. This error diffusion + updates neighbor pixels changing their values, what affects their upcoming binarization. Error diffuses + only on unprocessed yet neighbor pixels, which are right and bottom pixels usually (in the case if image + processing is done from upper left corner to bottom right corner). Binarization error equals + to processing pixel value, if it is below threshold value, or pixel value minus 255 otherwise. + + The filter accepts 8 bpp grayscale images for processing. + + + + + + Current processing X coordinate. + + + + + Current processing Y coordinate. + + + + + Processing X start position. + + + + + Processing Y start position. + + + + + Processing X stop position. + + + + + Processing Y stop position. + + + + + Processing image's stride (line size). + + + + + Initializes a new instance of the class. + + + + + + Do error diffusion. + + + Current error value. + Pointer to current processing pixel. + + All parameters of the image and current processing pixel's coordinates + are initialized in protected members. + + + + + Process the filter on the specified image. + + + Source image data. + Image rectangle for processing by the filter. + + + + + Threshold value. + + + Default value is 128. + + + + + Format translations dictionary. + + + + + Initializes a new instance of the class. + + + Diffusion coefficients. + + + + + Do error diffusion. + + + Current error value. + Pointer to current processing pixel. + + All parameters of the image and current processing pixel's coordinates + are initialized by base class. + + + + + Diffusion coefficients. + + + Set of coefficients, which are used for error diffusion to + pixel's neighbors. + + + + + Initializes a new instance of the class. + + + + + + Interpolation routines. + + + + + + Bicubic kernel. + + + X value. + + Bicubic cooefficient. + + The function implements bicubic kernel W(x) as described on + Wikipedia + (coefficient a is set to -0.5). + + + + + Binary erosion operator from Mathematical Morphology with 3x3 structuring element. + + + The filter represents an optimized version of + filter, which is aimed for binary images (containing black and white pixels) processed + with 3x3 structuring element. This makes this filter ideal for removing noise in binary + images – it removes all white pixels, which are neighbouring with at least one blank pixel. + + + See filter, which represents generic version of + erosion filter supporting custom structuring elements and wider range of image formats. + + The filter accepts 8 bpp grayscale (binary) images for processing. + + + + + + + + Initializes a new instance of the class. + + + + + + Process the filter on the specified image. + + + Source image data. + Destination image data. + Image rectangle for processing by the filter. + + Processing rectangle mast be at least 3x3 in size. + + + + + Format translations dictionary. + + + + + Filter iterator. + + + Filter iterator performs specified amount of filter's iterations. + The filter take the specified base filter and applies it + to source image specified amount of times. + + The filter itself does not have any restrictions to pixel format of source + image. This is set by base filter. + + The filter does image processing using only + interface of the specified base filter. This means + that this filter may not utilize all potential features of the base filter, like + in-place processing (see ) and region based processing + (see ). To utilize those features, it is required to + do filter's iteration manually. + + Sample usage (morphological thinning): + + // create filter sequence + FiltersSequence filterSequence = new FiltersSequence( ); + // add 8 thinning filters with different structuring elements + filterSequence.Add( new HitAndMiss( + new short [,] { { 0, 0, 0 }, { -1, 1, -1 }, { 1, 1, 1 } }, + HitAndMiss.Modes.Thinning ) ); + filterSequence.Add( new HitAndMiss( + new short [,] { { -1, 0, 0 }, { 1, 1, 0 }, { -1, 1, -1 } }, + HitAndMiss.Modes.Thinning ) ); + filterSequence.Add( new HitAndMiss( + new short [,] { { 1, -1, 0 }, { 1, 1, 0 }, { 1, -1, 0 } }, + HitAndMiss.Modes.Thinning ) ); + filterSequence.Add( new HitAndMiss( + new short [,] { { -1, 1, -1 }, { 1, 1, 0 }, { -1, 0, 0 } }, + HitAndMiss.Modes.Thinning ) ); + filterSequence.Add( new HitAndMiss( + new short [,] { { 1, 1, 1 }, { -1, 1, -1 }, { 0, 0, 0 } }, + HitAndMiss.Modes.Thinning ) ); + filterSequence.Add( new HitAndMiss( + new short [,] { { -1, 1, -1 }, { 0, 1, 1 }, { 0, 0, -1 } }, + HitAndMiss.Modes.Thinning ) ); + filterSequence.Add( new HitAndMiss( + new short [,] { { 0, -1, 1 }, { 0, 1, 1 }, { 0, -1, 1 } }, + HitAndMiss.Modes.Thinning ) ); + filterSequence.Add( new HitAndMiss( + new short [,] { { 0, 0, -1 }, { 0, 1, 1 }, { -1, 1, -1 } }, + HitAndMiss.Modes.Thinning ) ); + // create filter iterator for 10 iterations + FilterIterator filter = new FilterIterator( filterSequence, 10 ); + // apply the filter + Bitmap newImage = filter.Apply( image ); + + + Initial image: + + Result image: + + + + + + + Initializes a new instance of the class. + + + Filter to iterate. + + + + + Initializes a new instance of the class. + + + Filter to iterate. + Iterations amount. + + + + + Apply filter to an image. + + + Source image to apply filter to. + + Returns filter's result obtained by applying the filter to + the source image. + + The method keeps the source image unchanged and returns + the result of image processing filter as new image. + + + + + Apply filter to an image. + + + Source image to apply filter to. + + Returns filter's result obtained by applying the filter to + the source image. + + The filter accepts bitmap data as input and returns the result + of image processing filter as new image. The source image data are kept + unchanged. + + + + + Apply filter to an image in unmanaged memory. + + + Source image in unmanaged memory to apply filter to. + + Returns filter's result obtained by applying the filter to + the source image. + + The method keeps the source image unchanged and returns + the result of image processing filter as new image. + + + + + Apply filter to an image in unmanaged memory. + + + Source image in unmanaged memory to apply filter to. + Destination image in unmanaged memory to put result into. + + The method keeps the source image unchanged and puts result of image processing + into destination image. + + The destination image must have the same width and height as source image. Also + destination image must have pixel format, which is expected by particular filter (see + property for information about pixel format conversions). + + + + + + Format translations dictionary. + + + See + documentation for additional information. + + The filter provides format translation dictionary taken from + filter. + + + + + + Base filter. + + + The base filter is the filter to be applied specified amount of iterations to + a specified image. + + + + + Iterations amount, [1, 255]. + + + The amount of times to apply specified filter to a specified image. + + Default value is set to 1. + + + + + + Threshold binarization. + + + The filter does image binarization using specified threshold value. All pixels + with intensities equal or higher than threshold value are converted to white pixels. All other + pixels with intensities below threshold value are converted to black pixels. + + The filter accepts 8 and 16 bpp grayscale images for processing. + + Since the filter can be applied as to 8 bpp and to 16 bpp images, + the value should be set appropriately to the pixel format. + In the case of 8 bpp images the threshold value is in the [0, 255] range, but in the case + of 16 bpp images the threshold value is in the [0, 65535] range. + + Sample usage: + + // create filter + Threshold filter = new Threshold( 100 ); + // apply the filter + filter.ApplyInPlace( image ); + + + Initial image: + + Result image: + + + + + + + Threshold value. + + + + + Initializes a new instance of the class. + + + + + + Initializes a new instance of the class. + + + Threshold value. + + + + + Process the filter on the specified image. + + + Source image data. + Image rectangle for processing by the filter. + + + + + Format translations dictionary. + + + + + Threshold value. + + + Default value is set to 128. + + + + + Base class for filters, which may be applied directly to the source image. + + + The abstract class is the base class for all filters, which can + be applied to an image producing new image as a result of image processing or + applied directly to the source image without changing its size and pixel format. + + + + + + Apply filter to an image. + + + Source image to apply filter to. + + Returns filter's result obtained by applying the filter to + the source image. + + The method keeps the source image unchanged and returns + the result of image processing filter as new image. + + Unsupported pixel format of the source image. + + + + + Apply filter to an image. + + + Source image to apply filter to. + + Returns filter's result obtained by applying the filter to + the source image. + + The filter accepts bitmap data as input and returns the result + of image processing filter as new image. The source image data are kept + unchanged. + + Unsupported pixel format of the source image. + + + + + Apply filter to an image in unmanaged memory. + + + Source image in unmanaged memory to apply filter to. + + Returns filter's result obtained by applying the filter to + the source image. + + The method keeps the source image unchanged and returns + the result of image processing filter as new image. + + Unsupported pixel format of the source image. + + + + + Apply filter to an image in unmanaged memory. + + + Source image in unmanaged memory to apply filter to. + Destination image in unmanaged memory to put result into. + + The method keeps the source image unchanged and puts result of image processing + into destination image. + + The destination image must have the same width and height as source image. Also + destination image must have pixel format, which is expected by particular filter (see + property for information about pixel format conversions). + + + Unsupported pixel format of the source image. + Incorrect destination pixel format. + Destination image has wrong width and/or height. + + + + + Apply filter to an image. + + + Image to apply filter to. + + The method applies the filter directly to the provided source image. + + Unsupported pixel format of the source image. + + + + + Apply filter to an image. + + + Image data to apply filter to. + + The method applies the filter directly to the provided source image. + + Unsupported pixel format of the source image. + + + + + Apply filter to an unmanaged image. + + + Unmanaged image to apply filter to. + + The method applies the filter directly to the provided source unmanaged image. + + Unsupported pixel format of the source image. + + + + + Process the filter on the specified image. + + + Source image data. + + + + + Format translations dictionary. + + + The dictionary defines, which pixel formats are supported for + source images and which pixel format will be used for resulting image. + + + See for more information. + + + + + + Add fillter - add pixel values of two images. + + + The add filter takes two images (source and overlay images) + of the same size and pixel format and produces an image, where each pixel equals + to the sum value of corresponding pixels from provided images (if sum is greater + than maximum allowed value, 255 or 65535, then it is truncated to that maximum). + + The filter accepts 8 and 16 bpp grayscale images and 24, 32, 48 and 64 bpp + color images for processing. + + Sample usage: + + // create filter + Add filter = new Add( overlayImage ); + // apply the filter + Bitmap resultImage = filter.Apply( sourceImage ); + + + Source image: + + Overlay image: + + Result image: + + + + + + + + + + + + Base class for filters, which operate with two images of the same size and format and + may be applied directly to the source image. + + + The abstract class is the base class for all filters, which can + be applied to an image producing new image as a result of image processing or + applied directly to the source image without changing its size and pixel format. + + The base class is aimed for such type of filters, which require additional image + to process the source image. The additional image is set by + or property and must have the same size and pixel format + as source image. See documentation of particular inherited class for information + about overlay image purpose. + + + + + + + Initializes a new instance of the class. + + + + + + Initializes a new instance of the class. + + + Overlay image. + + + + + Initializes a new instance of the class. + + + Unmanaged overlay image. + + + + + Process the filter on the specified image. + + + Source image data. + + Source and overlay images have different pixel formats and/or size. + Overlay image is not set. + + + + + Process the filter on the specified image. + + + Source image data. + Overlay image data. + + Overlay image size and pixel format is checked by this base class, before + passing execution to inherited class. + + + + + Overlay image. + + + + The property sets an overlay image, which will be used as the second image required + to process source image. See documentation of particular inherited class for information + about overlay image purpose. + + + Overlay image must have the same size and pixel format as source image. + Otherwise exception will be generated when filter is applied to source image. + + Setting this property will clear the property - + only one overlay image is allowed: managed or unmanaged. + + + + + + Unmanaged overlay image. + + + + The property sets an overlay image, which will be used as the second image required + to process source image. See documentation of particular inherited class for information + about overlay image purpose. + + + Overlay image must have the same size and pixel format as source image. + Otherwise exception will be generated when filter is applied to source image. + + Setting this property will clear the property - + only one overlay image is allowed: managed or unmanaged. + + + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the class. + + + Overlay image. + + + + + Initializes a new instance of the class. + + + Unmanaged overlay image. + + + + + Process the filter on the specified image. + + + Source image data. + Overlay image data. + + + + + Format translations dictionary. + + + + + Color dithering using Stucki error diffusion. + + + The image processing routine represents color dithering algorithm, which is based on + error diffusion dithering with Stucki coefficients. Error is diffused + on 12 neighbor pixels with next coefficients: + + | * | 8 | 4 | + | 2 | 4 | 8 | 4 | 2 | + | 1 | 2 | 4 | 2 | 1 | + + / 42 + + + The image processing routine accepts 24/32 bpp color images for processing. As a result this routine + produces 4 bpp or 8 bpp indexed image, which depends on size of the specified + color table - 4 bpp result for + color tables with 16 colors or less; 8 bpp result for larger color tables. + + Sample usage: + + // create color image quantization routine + ColorImageQuantizer ciq = new ColorImageQuantizer( new MedianCutQuantizer( ) ); + // create 64 colors table + Color[] colorTable = ciq.CalculatePalette( image, 64 ); + // create dithering routine + StuckiColorDithering dithering = new StuckiColorDithering( ); + dithering.ColorTable = colorTable; + // apply the dithering routine + Bitmap newImage = dithering.Apply( image ); + + + Initial image: + + Result image: + + + + + + + + + + + + Base class for error diffusion color dithering, where error is diffused to + adjacent neighbor pixels. + + + The class does error diffusion to adjacent neighbor pixels + using specified set of coefficients. These coefficients are represented by + 2 dimensional jugged array, where first array of coefficients is for + right-standing pixels, but the rest of arrays are for bottom-standing pixels. + All arrays except the first one should have odd number of coefficients. + + Suppose that error diffusion coefficients are represented by the next + jugged array: + + + int[][] coefficients = new int[2][] { + new int[1] { 7 }, + new int[3] { 3, 5, 1 } + }; + + + The above coefficients are used to diffuse error over the next neighbor + pixels (* marks current pixel, coefficients are placed to corresponding + neighbor pixels): + + | * | 7 | + | 3 | 5 | 1 | + + / 16 + + + The image processing routine accepts 24/32 bpp color images for processing. + + Sample usage: + + // create dithering routine + ColorErrorDiffusionToAdjacentNeighbors dithering = new ColorErrorDiffusionToAdjacentNeighbors( + new int[3][] { + new int[2] { 5, 3 }, + new int[5] { 2, 4, 5, 4, 2 }, + new int[3] { 2, 3, 2 } + } ); + // apply the dithering routine + Bitmap newImage = dithering.Apply( image ); + + + + + + + Base class for error diffusion color dithering. + + + The class is the base class for color dithering algorithms based on + error diffusion. + + Color dithering with error diffusion is based on the idea that each pixel from the specified source + image is substituted with a best matching color (or better say with color's index) from the specified color + table. However, the error (difference between color value in the source image and the best matching color) + is diffused to neighbor pixels of the source image, which affects the way those pixels are substituted by colors + from the specified table. + + The image processing routine accepts 24/32 bpp color images for processing. As a result this routine + produces 4 bpp or 8 bpp indexed image, which depends on size of the specified color table - 4 bpp result for + color tables with 16 colors or less; 8 bpp result for larger color tables. + + + + + + Current processing X coordinate. + + + + + Current processing Y coordinate. + + + + + Processing image's width. + + + + + Processing image's height. + + + + + Processing image's stride (line size). + + + + + Processing image's pixel size in bytes. + + + + + Initializes a new instance of the class. + + + + + + Do error diffusion. + + + Error value of red component. + Error value of green component. + Error value of blue component. + Pointer to current processing pixel. + + All parameters of the image and current processing pixel's coordinates + are initialized in protected members. + + + + + Perform color dithering for the specified image. + + + Source image to do color dithering for. + + Returns color dithered image. See for information about format of + the result image. + + Unsupported pixel format of the source image. It must 24 or 32 bpp color image. + + + + + Perform color dithering for the specified image. + + + Source image to do color dithering for. + + Returns color dithered image. See for information about format of + the result image. + + Unsupported pixel format of the source image. It must 24 or 32 bpp color image. + + + + + Color table to use for image dithering. Must contain 2-256 colors. + + + Color table size determines format of the resulting image produced by this + image processing routine. If color table contains 16 color or less, then result image will have + 4 bpp indexed pixel format. If color table contains more than 16 colors, then result image will + have 8 bpp indexed pixel format. + + By default the property is initialized with default 16 colors, which are: + Black, Dark Blue, Dark Green, Dark Cyan, Dark Red, Dark Magenta, Dark Khaki, Light Gray, + Gray, Blue, Green, Cyan, Red, Magenta, Yellow and White. + + + Color table length must be in the [2, 256] range. + + + + + Use color caching during color dithering or not. + + + The property specifies if internal cache of already processed colors should be used or not. + For each pixel in the original image the color dithering routine does search in target color palette to find + the best matching color. To avoid doing the search again and again for already processed colors, the class may + use internal dictionary which maps colors of original image to indexes in target color palette. + + + The property provides a trade off. On one hand it may speedup color dithering routine, but on another + hand it increases memory usage. Also cache usage may not be efficient for very small target color tables. + + Default value is set to . + + + + + + Initializes a new instance of the class. + + + Diffusion coefficients (see + for more information). + + + + + Do error diffusion. + + + Error value of red component. + Error value of green component. + Error value of blue component. + Pointer to current processing pixel. + + All parameters of the image and current processing pixel's coordinates + are initialized by base class. + + + + + Diffusion coefficients. + + + Set of coefficients, which are used for error diffusion to + pixel's neighbors. + + + + + Initializes a new instance of the class. + + + + + + Interface which is implemented by different color quantization algorithms. + + + The interface defines set of methods, which are to be implemented by different + color quantization algorithms - algorithms which are aimed to provide reduced color table/palette + for a color image. + + See documentation to particular implementation of the interface for additional information + about the algorithm. + + + + + + Process color by a color quantization algorithm. + + + Color to process. + + Depending on particular implementation of interface, + this method may simply process the specified color or store it in internal list for + later color palette calculation. + + + + + Get palette of the specified size. + + + Palette size to return. + + Returns reduced color palette for the accumulated/processed colors. + + The method must be called after continuously calling method and + returns reduced color palette for colors accumulated/processed so far. + + + + + Clear internals of the algorithm, like accumulated color table, etc. + + + The methods resets internal state of a color quantization algorithm returning + it to initial state. + + + + + Color dithering using Floyd-Steinberg error diffusion. + + + The image processing routine represents color dithering algorithm, which is based on + error diffusion dithering with Floyd-Steinberg + coefficients. Error is diffused on 4 neighbor pixels with the next coefficients: + + + | * | 7 | + | 3 | 5 | 1 | + + / 16 + + + The image processing routine accepts 24/32 bpp color images for processing. As a result this routine + produces 4 bpp or 8 bpp indexed image, which depends on size of the specified + color table - 4 bpp result for + color tables with 16 colors or less; 8 bpp result for larger color tables. + + Sample usage: + + // create color image quantization routine + ColorImageQuantizer ciq = new ColorImageQuantizer( new MedianCutQuantizer( ) ); + // create 16 colors table + Color[] colorTable = ciq.CalculatePalette( image, 16 ); + // create dithering routine + FloydSteinbergColorDithering dithering = new FloydSteinbergColorDithering( ); + dithering.ColorTable = colorTable; + // apply the dithering routine + Bitmap newImage = dithering.Apply( image ); + + + Initial image: + + Result image: + + + + + + + + + + + + Initializes a new instance of the class. + + + + + + Template match class keeps information about found template match. The class is + used with template matching algorithms implementing + interface. + + + + + Initializes a new instance of the class. + + + Rectangle of the matching area. + Similarity between template and found matching, [0..1]. + + + + + Rectangle of the matching area. + + + + + Similarity between template and found matching, [0..1]. + + + + + Susan corners detector. + + + The class implements Susan corners detector, which is described by + S.M. Smith in: S.M. Smith, "SUSAN - a new approach to low level image processing", + Internal Technical Report TR95SMS1, Defense Research Agency, Chobham Lane, Chertsey, + Surrey, UK, 1995. + + Some implementation notes: + + Analyzing each pixel and searching for its USAN area, the 7x7 mask is used, + which is comprised of 37 pixels. The mask has circle shape: + + xxx + xxxxx + xxxxxxx + xxxxxxx + xxxxxxx + xxxxx + xxx + + + In the case if USAN's center of mass has the same coordinates as nucleus + (central point), the pixel is not a corner. + For noise suppression the 5x5 square window is used. + + The class processes only grayscale 8 bpp and color 24/32 bpp images. + In the case of color image, it is converted to grayscale internally using + filter. + + Sample usage: + + // create corners detector's instance + SusanCornersDetector scd = new SusanCornersDetector( ); + // process image searching for corners + List<IntPoint> corners = scd.ProcessImage( image ); + // process points + foreach ( IntPoint corner in corners ) + { + // ... + } + + + + + + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the class. + + + Brightness difference threshold. + Geometrical threshold. + + + + + Process image looking for corners. + + + Source image to process. + + Returns list of found corners (X-Y coordinates). + + The source image has incorrect pixel format. + + + + + Process image looking for corners. + + + Source image data to process. + + Returns list of found corners (X-Y coordinates). + + The source image has incorrect pixel format. + + + + + Process image looking for corners. + + + Unmanaged source image to process. + + Returns array of found corners (X-Y coordinates). + + The source image has incorrect pixel format. + + + + + Brightness difference threshold. + + + The brightness difference threshold controls the amount + of pixels, which become part of USAN area. If difference between central + pixel (nucleus) and surrounding pixel is not higher than difference threshold, + then that pixel becomes part of USAN. + + Increasing this value decreases the amount of detected corners. + + Default value is set to 25. + + + + + + Geometrical threshold. + + + The geometrical threshold sets the maximum number of pixels + in USAN area around corner. If potential corner has USAN with more pixels, than + it is not a corner. + + Decreasing this value decreases the amount of detected corners - only sharp corners + are detected. Increasing this value increases the amount of detected corners, but + also increases amount of flat corners, which may be not corners at all. + + Default value is set to 18, which is half of maximum amount of pixels in USAN. + + + + + + Rotate image using bilinear interpolation. + + + Rotation is performed in counterclockwise direction. + + The class implements image rotation filter using bilinear + interpolation algorithm. + + The filter accepts 8 bpp grayscale images and 24 bpp + color images for processing. + + Sample usage: + + // create filter - rotate for 30 degrees keeping original image size + RotateBilinear filter = new RotateBilinear( 30, true ); + // apply the filter + Bitmap newImage = filter.Apply( image ); + + + Initial image: + + Result image: + + + + + + + + + + Initializes a new instance of the class. + + + Rotation angle. + + This constructor sets property + to . + + + + + + Initializes a new instance of the class. + + + Rotation angle. + Keep image size or not. + + + + + Process the filter on the specified image. + + + Source image data. + Destination image data. + + + + + Format translations dictionary. + + + + + Simple water wave effect filter. + + + The image processing filter implements simple water wave effect. Using + properties of the class, it is possible to set number of vertical/horizontal waves, + as well as their amplitude. + + Bilinear interpolation is used to create smooth effect. + + The filter accepts 8 bpp grayscale images and 24/32 + color images for processing. + + Sample usage: + + // create filter + WaterWave filter = new WaterWave( ); + filter.HorizontalWavesCount = 10; + filter.HorizontalWavesAmplitude = 5; + filter.VerticalWavesCount = 3; + filter.VerticalWavesAmplitude = 15; + // apply the filter + Bitmap newImage = filter.Apply( image ); + + + Initial image: + + Result image: + + + + + + + Base class for filters, which produce new image of the same size as a + result of image processing. + + + The abstract class is the base class for all filters, which + do image processing creating new image with the same size as source. + Filters based on this class cannot be applied directly to the source + image, which is kept unchanged. + + The base class itself does not define supported pixel formats of source + image and resulting pixel formats of destination image. Filters inheriting from + this base class, should specify supported pixel formats and their transformations + overriding abstract property. + + + + + + Apply filter to an image. + + + Source image to apply filter to. + + Returns filter's result obtained by applying the filter to + the source image. + + The method keeps the source image unchanged and returns + the result of image processing filter as new image. + + Unsupported pixel format of the source image. + + + + + Apply filter to an image. + + + Source image to apply filter to. + + Returns filter's result obtained by applying the filter to + the source image. + + The filter accepts bitmap data as input and returns the result + of image processing filter as new image. The source image data are kept + unchanged. + + Unsupported pixel format of the source image. + + + + + Apply filter to an image in unmanaged memory. + + + Source image in unmanaged memory to apply filter to. + + Returns filter's result obtained by applying the filter to + the source image. + + The method keeps the source image unchanged and returns + the result of image processing filter as new image. + + Unsupported pixel format of the source image. + + + + + Apply filter to an image in unmanaged memory. + + + Source image in unmanaged memory to apply filter to. + Destination image in unmanaged memory to put result into. + + The method keeps the source image unchanged and puts result of image processing + into destination image. + + The destination image must have the same width and height as source image. Also + destination image must have pixel format, which is expected by particular filter (see + property for information about pixel format conversions). + + + Unsupported pixel format of the source image. + Incorrect destination pixel format. + Destination image has wrong width and/or height. + + + + + Process the filter on the specified image. + + + Source image data. + Destination image data. + + + + + Format translations dictionary. + + + The dictionary defines, which pixel formats are supported for + source images and which pixel format will be used for resulting image. + + + See for more information. + + + + + + Initializes a new instance of the class. + + + + + Process the filter on the specified image. + + + Source image data. + Destination image data. + + + + + Number of horizontal waves, [1, 10000]. + + + Default value is set to 5. + + + + + Number of vertical waves, [1, 10000]. + + + Default value is set to 5. + + + + + Amplitude of horizontal waves measured in pixels, [0, 10000]. + + + Default value is set to 10. + + + + + Amplitude of vertical waves measured in pixels, [0, 10000]. + + + Default value is set to 10. + + + + + Format translations dictionary. + + + See + documentation for additional information. + + + + + Filter to mark (highlight) corners of objects. + + + + The filter highlights corners of objects on the image using provided corners + detection algorithm. + + The filter accepts 8 bpp grayscale and 24/32 color images for processing. + + Sample usage: + + // create corner detector's instance + SusanCornersDetector scd = new SusanCornersDetector( ); + // create corner maker filter + CornersMarker filter = new CornersMarker( scd, Color.Red ); + // apply the filter + filter.ApplyInPlace( image ); + + + Initial image: + + Result image: + + + + + + + Initializes a new instance of the class. + + + Interface of corners' detection algorithm. + + + + + Initializes a new instance of the class. + + + Interface of corners' detection algorithm. + Marker's color used to mark corner. + + + + + Process the filter on the specified image. + + + Source image data. + + + + + Format translations dictionary. + + + + + Color used to mark corners. + + + + + Interface of corners' detection algorithm used to detect corners. + + + + + Flood filling with mean color starting from specified point. + + + The filter performs image's area filling (4 directional) starting + from the specified point. It fills + the area of the pointed color, but also fills other colors, which + are similar to the pointed within specified tolerance. + The area is filled using its mean color. + + + The filter is similar to filter, but instead + of filling the are with specified color, it fills the area with its mean color. This means + that this is a two pass filter - first pass is to calculate the mean value and the second pass is to + fill the area. Unlike to filter, this filter has nothing + to do in the case if zero tolerance is specified. + + The filter accepts 8 bpp grayscale images and 24 bpp + color images for processing. + + Sample usage: + + // create filter + PointedMeanFloodFill filter = new PointedMeanFloodFill( ); + // configre the filter + filter.Tolerance = Color.FromArgb( 150, 92, 92 ); + filter.StartingPoint = new IntPoint( 150, 100 ); + // apply the filter + filter.ApplyInPlace( image ); + + + Initial image: + + Result image: + + + + + + + + + Initializes a new instance of the class. + + + + + + Process the filter on the specified image. + + + Source image data. + Image rectangle for processing by the filter. + + + + + Format translations dictionary. + + + See + documentation for additional information. + + + + + Flood fill tolerance. + + + The tolerance value determines the level of similarity between + colors to fill and the pointed color. If the value is set to zero, then the + filter does nothing, since the filling area contains only one color and its + filling with mean is meaningless. + + The tolerance value is specified as , + where each component (R, G and B) represents tolerance for the corresponding + component of color. This allows to set different tolerances for red, green + and blue components. + + Default value is set to (16, 16, 16). + + + + + + Point to start filling from. + + + The property allows to set the starting point, where filling is + started from. + + Default value is set to (0, 0). + + + + + + Color filtering. + + + The filter filters pixels inside/outside of specified RGB color range - + it keeps pixels with colors inside/outside of specified range and fills the rest with + specified color. + + The filter accepts 24 and 32 bpp color images for processing. + + Sample usage: + + // create filter + ColorFiltering filter = new ColorFiltering( ); + // set color ranges to keep + filter.Red = new IntRange( 100, 255 ); + filter.Green = new IntRange( 0, 75 ); + filter.Blue = new IntRange( 0, 75 ); + // apply the filter + filter.ApplyInPlace( image ); + + + Initial image: + + Result image: + + + + + + + + + + + + Initializes a new instance of the class. + + + + + + Initializes a new instance of the class. + + + Red components filtering range. + Green components filtering range. + Blue components filtering range. + + + + + Process the filter on the specified image. + + + Source image data. + Image rectangle for processing by the filter. + + + + + Format translations dictionary. + + + + + Range of red color component. + + + + + Range of green color component. + + + + + Range of blue color component. + + + + + Fill color used to fill filtered pixels. + + + + + Determines, if pixels should be filled inside or outside of specified + color ranges. + + + Default value is set to , which means + the filter removes colors outside of the specified range. + + + + + Color dithering using Jarvis, Judice and Ninke error diffusion. + + + The image processing routine represents color dithering algorithm, which is based on + error diffusion dithering with Jarvis-Judice-Ninke coefficients. Error is diffused + on 12 neighbor pixels with next coefficients: + + | * | 7 | 5 | + | 3 | 5 | 7 | 5 | 3 | + | 1 | 3 | 5 | 3 | 1 | + + / 48 + + + The image processing routine accepts 24/32 bpp color images for processing. As a result this routine + produces 4 bpp or 8 bpp indexed image, which depends on size of the specified + color table - 4 bpp result for + color tables with 16 colors or less; 8 bpp result for larger color tables. + + Sample usage: + + // create color image quantization routine + ColorImageQuantizer ciq = new ColorImageQuantizer( new MedianCutQuantizer( ) ); + // create 32 colors table + Color[] colorTable = ciq.CalculatePalette( image, 32 ); + // create dithering routine + JarvisJudiceNinkeColorDithering dithering = new JarvisJudiceNinkeColorDithering( ); + dithering.ColorTable = colorTable; + // apply the dithering routine + Bitmap newImage = dithering.Apply( image ); + + + Initial image: + + Result image: + + + + + + + + + + + + Initializes a new instance of the class. + + + + + + Simple skeletonization filter. + + + The filter build simple objects' skeletons by thinning them until + they have one pixel wide "bones" horizontally and vertically. The filter uses + and colors to distinguish + between object and background. + + The filter accepts 8 bpp grayscale images for processing. + + Sample usage: + + // create filter + SimpleSkeletonization filter = new SimpleSkeletonization( ); + // apply the filter + filter.ApplyInPlace( image ); + + + Initial image: + + Result image: + + + + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the class. + + + Background pixel color. + Foreground pixel color. + + + + + Process the filter on the specified image. + + + Source image data. + Destination image data. + Image rectangle for processing by the filter. + + + + + Format translations dictionary. + + + See + documentation for additional information. + + + + + Background pixel color. + + + The property sets background (none object) color to look for. + + Default value is set to 0 - black. + + + + + Foreground pixel color. + + + The property sets objects' (none background) color to look for. + + Default value is set to 255 - white. + + + + + Connected components labeling. + + + The filter performs labeling of objects in the source image. It colors + each separate object using different color. The image processing filter treats all none + black pixels as objects' pixels and all black pixel as background. + + The filter accepts 8 bpp grayscale images and 24/32 bpp color images and produces + 24 bpp RGB image. + + Sample usage: + + // create filter + ConnectedComponentsLabeling filter = new ConnectedComponentsLabeling( ); + // apply the filter + Bitmap newImage = filter.Apply( image ); + // check objects count + int objectCount = filter.ObjectCount; + + + Initial image: + + Result image: + + + + + + + Initializes a new instance of the class. + + + + + + Process the filter on the specified image. + + + Source image data. + Destination image data. + + + + + Format translations dictionary. + + + + + Blob counter used to locate separate blobs. + + + The property allows to set blob counter to use for blobs' localization. + + Default value is set to . + + + + + + Colors used to color the binary image. + + + + + Specifies if blobs should be filtered. + + + See documentation for property + of class for more information. + + + + + Specifies if size filetering should be coupled or not. + + + See documentation for property + of class for more information. + + + + + Minimum allowed width of blob. + + + + + + Minimum allowed height of blob. + + + + + + Maximum allowed width of blob. + + + + + + Maximum allowed height of blob. + + + + + + Objects count. + + + The amount of objects found in the last processed image. + + + + + Morph filter. + + + The filter combines two images by taking + specified percent of pixels' intensities from source + image and the rest from overlay image. For example, if the + source percent value is set to 0.8, then each pixel + of the result image equals to 0.8 * source + 0.2 * overlay, where source + and overlay are corresponding pixels' values in source and overlay images. + + The filter accepts 8 bpp grayscale and 24 bpp color images for processing. + + Sample usage: + + // create filter + Morph filter = new Morph( overlayImage ); + filter.SourcePercent = 0.75; + // apply the filter + Bitmap resultImage = filter.Apply( sourceImage ); + + + Source image: + + Overlay image: + + Result image: + + + + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the class. + + + Overlay image. + + + + + Initializes a new instance of the class. + + + Unmanaged overlay image. + + + + + Process the filter on the specified image. + + + Source image data. + Overlay image data. + + + + + Format translations dictionary. + + + + + Percent of source image to keep, [0, 1]. + + + The property specifies the percentage of source pixels' to take. The + rest is taken from an overlay image. + + + + + Filtering of frequencies outside of specified range in complex Fourier + transformed image. + + + The filer keeps only specified range of frequencies in complex + Fourier transformed image. The rest of frequencies are zeroed. + + Sample usage: + + // create complex image + ComplexImage complexImage = ComplexImage.FromBitmap( image ); + // do forward Fourier transformation + complexImage.ForwardFourierTransform( ); + // create filter + FrequencyFilter filter = new FrequencyFilter( new IntRange( 20, 128 ) ); + // apply filter + filter.Apply( complexImage ); + // do backward Fourier transformation + complexImage.BackwardFourierTransform( ); + // get complex image as bitmat + Bitmap fourierImage = complexImage.ToBitmap( ); + + + Initial image: + + Fourier image: + + + + + + + Image processing filter, which operates with Fourier transformed + complex image. + + + The interface defines the set of methods, which should be + provided by all image processing filter, which operate with Fourier + transformed complex image. + + + + + Apply filter to complex image. + + + Complex image to apply filter to. + + + + + Initializes a new instance of the class. + + + + + + Initializes a new instance of the class. + + + Range of frequencies to keep. + + + + + Apply filter to complex image. + + + Complex image to apply filter to. + + The source complex image should be Fourier transformed. + + + + + Range of frequencies to keep. + + + The range specifies the range of frequencies to keep. Values is frequencies + outside of this range are zeroed. + + Default value is set to [0, 1024]. + + + + + Resize image using bicubic interpolation algorithm. + + + The class implements image resizing filter using bicubic + interpolation algorithm. It uses bicubic kernel W(x) as described on + Wikipedia + (coefficient a is set to -0.5). + + The filter accepts 8 grayscale images and 24 bpp + color images for processing. + + Sample usage: + + // create filter + ResizeBicubic filter = new ResizeBicubic( 400, 300 ); + // apply the filter + Bitmap newImage = filter.Apply( image ); + + + Initial image: + + Result image: + + + + + + + + + + Base class for image resizing filters. + + + The abstract class is the base class for all filters, + which implement image rotation algorithms. + + + + + + New image width. + + + + + New image height. + + + + + Initializes a new instance of the class. + + + Width of the new resized image. + Height of the new resize image. + + + + + Calculates new image size. + + + Source image data. + + New image size - size of the destination image. + + + + + Width of the new resized image. + + + + + + Height of the new resized image. + + + + + + Initializes a new instance of the class. + + + Width of new image. + Height of new image. + + + + + Process the filter on the specified image. + + + Source image data. + Destination image data. + + + + + Format translations dictionary. + + + + + Performs quadrilateral transformation of an area in a given source image. + + + The class implements quadrilateral transformation algorithm, + which allows to transform any quadrilateral from a given source image + to a rectangular image. The idea of the algorithm is based on homogeneous + transformation and its math is described by Paul Heckbert in his + "Projective Mappings for Image Warping" paper. + + + The image processing filter accepts 8 grayscale images and 24/32 bpp + color images for processing. + + Sample usage: + + // define quadrilateral's corners + List<IntPoint> corners = new List<IntPoint>( ); + corners.Add( new IntPoint( 99, 99 ) ); + corners.Add( new IntPoint( 156, 79 ) ); + corners.Add( new IntPoint( 184, 126 ) ); + corners.Add( new IntPoint( 122, 150 ) ); + // create filter + QuadrilateralTransformation filter = + new QuadrilateralTransformation( corners, 200, 200 ); + // apply the filter + Bitmap newImage = filter.Apply( image ); + + + Initial image: + + Result image: + + + + + + + + + + New image width. + + + + + New image height. + + + + + Initializes a new instance of the class. + + + + + + Initializes a new instance of the class. + + + Corners of the source quadrilateral area. + Width of the new transformed image. + Height of the new transformed image. + + This constructor sets to + , which means that destination image will have width and + height as specified by user. + + + + + Initializes a new instance of the class. + + + Corners of the source quadrilateral area. + + This constructor sets to + , which means that destination image will have width and + height automatically calculated based on property. + + + + + Calculates new image size. + + + Source image data. + + New image size - size of the destination image. + + Source quadrilateral was not set. + + + + + Process the filter on the specified image. + + + Source image data. + Destination image data. + + + + + Format translations dictionary. + + + See + documentation for additional information. + + + + + Automatic calculation of destination image or not. + + + The property specifies how to calculate size of destination (transformed) + image. If the property is set to , then + and properties have effect and destination image's size is + specified by user. If the property is set to , then setting the above + mentioned properties does not have any effect, but destionation image's size is + automatically calculated from property - width and height + come from length of longest edges. + + + Default value is set to . + + + + + + Quadrilateral's corners in source image. + + + The property specifies four corners of the quadrilateral area + in the source image to be transformed. + + + + + + Width of the new transformed image. + + + The property defines width of the destination image, which gets + transformed quadrilateral image. + + Setting the property does not have any effect, if + property is set to . In this case destination image's width + is calculated automatically based on property. + + + + + + Height of the new transformed image. + + + The property defines height of the destination image, which gets + transformed quadrilateral image. + + Setting the property does not have any effect, if + property is set to . In this case destination image's height + is calculated automatically based on property. + + + + + + Specifies if bilinear interpolation should be used or not. + + + Default value is set to - interpolation + is used. + + + + + + Saturation adjusting in HSL color space. + + + The filter operates in HSL color space and adjusts + pixels' saturation value, increasing it or decreasing by specified percentage. + The filters is based on filter, passing work to it after + recalculating saturation adjust value to input/output + ranges of the filter. + + The filter accepts 24 and 32 bpp color images for processing. + + Sample usage: + + // create filter + SaturationCorrection filter = new SaturationCorrection( -0.5f ); + // apply the filter + filter.ApplyInPlace( image ); + + + Initial image: + + Result image: + + + + + + + Initializes a new instance of the class. + + + + + + Initializes a new instance of the class. + + + Saturation adjust value. + + + + + Process the filter on the specified image. + + + Source image data. + Image rectangle for processing by the filter. + + + + + Saturation adjust value, [-1, 1]. + + + Default value is set to 0.1, which corresponds to increasing + saturation by 10%. + + + + + Format translations dictionary. + + + + + Convolution filter. + + + The filter implements convolution operator, which calculates each pixel + of the result image as weighted sum of the correspond pixel and its neighbors in the source + image. The weights are set by convolution kernel. The weighted + sum is divided by before putting it into result image and also + may be thresholded using value. + + Convolution is a simple mathematical operation which is fundamental to many common + image processing filters. Depending on the type of provided kernel, the filter may produce + different results, like blur image, sharpen it, find edges, etc. + + The filter accepts 8 and 16 bpp grayscale images and 24, 32, 48 and 64 bpp + color images for processing. Note: depending on the value of + property, the alpha channel is either copied as is or processed with the kernel. + + Sample usage: + + // define emboss kernel + int[,] kernel = { + { -2, -1, 0 }, + { -1, 1, 1 }, + { 0, 1, 2 } }; + // create filter + Convolution filter = new Convolution( kernel ); + // apply the filter + filter.ApplyInPlace( image ); + + + Initial image: + + Result image: + + + + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the class. + + + Convolution kernel. + + Using this constructor (specifying only convolution kernel), + division factor will be calculated automatically + summing all kernel values. In the case if kernel's sum equals to zero, + division factor will be assigned to 1. + + Invalid kernel size is specified. Kernel must be + square, its width/height should be odd and should be in the [3, 25] range. + + + + + Initializes a new instance of the class. + + + Convolution kernel. + Divisor, used used to divide weighted sum. + + Invalid kernel size is specified. Kernel must be + square, its width/height should be odd and should be in the [3, 25] range. + Divisor can not be equal to zero. + + + + + Process the filter on the specified image. + + + Source image data. + Destination image data. + Image rectangle for processing by the filter. + + + + + Format translations dictionary. + + + + + Convolution kernel. + + + + Convolution kernel must be square and its width/height + should be odd and should be in the [3, 99] range. + + Setting convolution kernel through this property does not + affect - it is not recalculated automatically. + + + Invalid kernel size is specified. + + + + + Division factor. + + + The value is used to divide convolution - weighted sum + of pixels is divided by this value. + + The value may be calculated automatically in the case if constructor + with one parameter is used (). + + + Divisor can not be equal to zero. + + + + + Threshold to add to weighted sum. + + + The property specifies threshold value, which is added to each weighted + sum of pixels. The value is added right after division was done by + value. + + Default value is set to 0. + + + + + + Use dynamic divisor for edges or not. + + + The property specifies how to handle edges. If it is set to + , then the same divisor (which is specified by + property or calculated automatically) will be applied both for non-edge regions + and for edge regions. If the value is set to , then dynamically + calculated divisor will be used for edge regions, which is sum of those kernel + elements, which are taken into account for particular processed pixel + (elements, which are not outside image). + + Default value is set to . + + + + + + Specifies if alpha channel must be processed or just copied. + + + The property specifies the way how alpha channel is handled for 32 bpp + and 64 bpp images. If the property is set to , then alpha + channel's values are just copied as is. If the property is set to + then alpha channel is convolved using the specified kernel same way as RGB channels. + + Default value is set to . + + + + + + Convert grayscale image to RGB. + + + The filter creates color image from specified grayscale image + initializing all RGB channels to the same value - pixel's intensity of grayscale image. + + The filter accepts 8 bpp grayscale images and produces + 24 bpp RGB image. + + Sample usage: + + // create filter + GrayscaleToRGB filter = new GrayscaleToRGB( ); + // apply the filter + Bitmap rgbImage = filter.Apply( image ); + + + + + + + + Initializes a new instance of the class. + + + + + + Process the filter on the specified image. + + + Source image data. + Destination image data. + + + + + Format translations dictionary. + + + + + Adaptive thresholding using the internal image. + + + The image processing routine implements local thresholding technique described + by Derek Bradley and Gerhard Roth in the "Adaptive Thresholding Using the Integral Image" paper. + + + The brief idea of the algorithm is that every image's pixel is set to black if its brightness + is t percent lower (see ) than the average brightness + of surrounding pixels in the window of the specified size (see ), othwerwise it is set + to white. + + Sample usage: + + // create the filter + BradleyLocalThresholding filter = new BradleyLocalThresholding( ); + // apply the filter + filter.ApplyInPlace( image ); + + + Initial image: + + Result image: + + + + + + + Initializes a new instance of the class. + + + + + + Process the filter on the specified image. + + + Source image data. + + + + + Window size to calculate average value of pixels for. + + + The property specifies window size around processing pixel, which determines number of + neighbor pixels to use for calculating their average brightness. + + Default value is set to 41. + + The value should be odd. + + + + + + Brightness difference limit between processing pixel and average value across neighbors. + + + The property specifies what is the allowed difference percent between processing pixel + and average brightness of neighbor pixels in order to be set white. If the value of the + current pixel is t percent (this property value) lower than the average then it is set + to black, otherwise it is set to white. + + Default value is set to 0.15. + + + + + + Format translations dictionary. + + + See for more information. + + + + + Integral image. + + + The class implements integral image concept, which is described by + Viola and Jones in: P. Viola and M. J. Jones, "Robust real-time face detection", + Int. Journal of Computer Vision 57(2), pp. 137–154, 2004. + + "An integral image I of an input image G is defined as the image in which the + intensity at a pixel position is equal to the sum of the intensities of all the pixels + above and to the left of that position in the original image." + + The intensity at position (x, y) can be written as: + + x y + I(x,y) = SUM( SUM( G(i,j) ) ) + i=0 j=0 + + + The class uses 32-bit integers to represent integral image. + + The class processes only grayscale (8 bpp indexed) images. + + This class contains two versions of each method: safe and unsafe. Safe methods do + checks of provided coordinates and ensure that these coordinates belong to the image, what makes + these methods slower. Unsafe methods do not do coordinates' checks and rely that these + coordinates belong to the image, what makes these methods faster. + + Sample usage: + + // create integral image + IntegralImage im = IntegralImage.FromBitmap( image ); + // get pixels' mean value in the specified rectangle + float mean = im.GetRectangleMean( 10, 10, 20, 30 ) + + + + + + + Intergral image's array. + + + See remarks to property. + + + + + Initializes a new instance of the class. + + + Image width. + Image height. + + The constractor is protected, what makes it imposible to instantiate this + class directly. To create an instance of this class or + method should be used. + + + + + Construct integral image from source grayscale image. + + + Source grayscale image. + + Returns integral image. + + The source image has incorrect pixel format. + + + + + Construct integral image from source grayscale image. + + + Source image data. + + Returns integral image. + + The source image has incorrect pixel format. + + + + + Construct integral image from source grayscale image. + + + Source unmanaged image. + + Returns integral image. + + The source image has incorrect pixel format. + + + + + Calculate sum of pixels in the specified rectangle. + + + X coordinate of left-top rectangle's corner. + Y coordinate of left-top rectangle's corner. + X coordinate of right-bottom rectangle's corner. + Y coordinate of right-bottom rectangle's corner. + + Returns sum of pixels in the specified rectangle. + + Both specified points are included into the calculation rectangle. + + + + + Calculate horizontal (X) haar wavelet at the specified point. + + + X coordinate of the point to calculate wavelet at. + Y coordinate of the point to calculate wavelet at. + Wavelet size to calculate. + + Returns value of the horizontal wavelet at the specified point. + + The method calculates horizontal wavelet, which is a difference + of two horizontally adjacent boxes' sums, i.e. A-B. A is the sum of rectangle with coordinates + (x, y-radius, x+radius-1, y+radius-1). B is the sum of rectangle with coordinates + (x-radius, y-radius, x-1, y+radiys-1). + + + + + Calculate vertical (Y) haar wavelet at the specified point. + + + X coordinate of the point to calculate wavelet at. + Y coordinate of the point to calculate wavelet at. + Wavelet size to calculate. + + Returns value of the vertical wavelet at the specified point. + + The method calculates vertical wavelet, which is a difference + of two vertical adjacent boxes' sums, i.e. A-B. A is the sum of rectangle with coordinates + (x-radius, y, x+radius-1, y+radius-1). B is the sum of rectangle with coordinates + (x-radius, y-radius, x+radius-1, y-1). + + + + + Calculate sum of pixels in the specified rectangle without checking it's coordinates. + + + X coordinate of left-top rectangle's corner. + Y coordinate of left-top rectangle's corner. + X coordinate of right-bottom rectangle's corner. + Y coordinate of right-bottom rectangle's corner. + + Returns sum of pixels in the specified rectangle. + + Both specified points are included into the calculation rectangle. + + + + + Calculate sum of pixels in the specified rectangle. + + + X coordinate of central point of the rectangle. + Y coordinate of central point of the rectangle. + Radius of the rectangle. + + Returns sum of pixels in the specified rectangle. + + The method calculates sum of pixels in square rectangle with + odd width and height. In the case if it is required to calculate sum of + 3x3 rectangle, then it is required to specify its center and radius equal to 1. + + + + + + Calculate sum of pixels in the specified rectangle without checking it's coordinates. + + + X coordinate of central point of the rectangle. + Y coordinate of central point of the rectangle. + Radius of the rectangle. + + Returns sum of pixels in the specified rectangle. + + The method calculates sum of pixels in square rectangle with + odd width and height. In the case if it is required to calculate sum of + 3x3 rectangle, then it is required to specify its center and radius equal to 1. + + + + + + Calculate mean value of pixels in the specified rectangle. + + + X coordinate of left-top rectangle's corner. + Y coordinate of left-top rectangle's corner. + X coordinate of right-bottom rectangle's corner. + Y coordinate of right-bottom rectangle's corner. + + Returns mean value of pixels in the specified rectangle. + + Both specified points are included into the calculation rectangle. + + + + + Calculate mean value of pixels in the specified rectangle without checking it's coordinates. + + + X coordinate of left-top rectangle's corner. + Y coordinate of left-top rectangle's corner. + X coordinate of right-bottom rectangle's corner. + Y coordinate of right-bottom rectangle's corner. + + Returns mean value of pixels in the specified rectangle. + + Both specified points are included into the calculation rectangle. + + + + + Calculate mean value of pixels in the specified rectangle. + + + X coordinate of central point of the rectangle. + Y coordinate of central point of the rectangle. + Radius of the rectangle. + + Returns mean value of pixels in the specified rectangle. + + The method calculates mean value of pixels in square rectangle with + odd width and height. In the case if it is required to calculate mean value of + 3x3 rectangle, then it is required to specify its center and radius equal to 1. + + + + + + Calculate mean value of pixels in the specified rectangle without checking it's coordinates. + + + X coordinate of central point of the rectangle. + Y coordinate of central point of the rectangle. + Radius of the rectangle. + + Returns mean value of pixels in the specified rectangle. + + The method calculates mean value of pixels in square rectangle with + odd width and height. In the case if it is required to calculate mean value of + 3x3 rectangle, then it is required to specify its center and radius equal to 1. + + + + + + Width of the source image the integral image was constructed for. + + + + + Height of the source image the integral image was constructed for. + + + + + Provides access to internal array keeping integral image data. + + + + The array should be accessed by [y, x] indexing. + + The array's size is [+1, +1]. The first + row and column are filled with zeros, what is done for more efficient calculation of + rectangles' sums. + + + + + + Gather statistics about image in RGB color space. + + + The class is used to accumulate statistical values about images, + like histogram, mean, standard deviation, etc. for each color channel in RGB color + space. + + The class accepts 8 bpp grayscale and 24/32 bpp color images for processing. + + Sample usage: + + // gather statistics + ImageStatistics stat = new ImageStatistics( image ); + // get red channel's histogram + Histogram red = stat.Red; + // check mean value of red channel + if ( red.Mean > 128 ) + { + // do further processing + } + + + + + + + + + Initializes a new instance of the class. + + + Image to gather statistics about. + + Source pixel format is not supported. + + + + + Initializes a new instance of the class. + + + Image to gather statistics about. + Mask image which specifies areas to collect statistics for. + + The mask image must be a grayscale/binary (8bpp) image of the same size as the + specified source image, where black pixels (value 0) correspond to areas which should be excluded + from processing. So statistics is calculated only for pixels, which are none black in the mask image. + + + Source pixel format is not supported. + Mask image must be 8 bpp grayscale image. + Mask must have the same size as the source image to get statistics for. + + + + + Initializes a new instance of the class. + + + Image to gather statistics about. + Mask array which specifies areas to collect statistics for. + + The mask array must be of the same size as the specified source image, where 0 values + correspond to areas which should be excluded from processing. So statistics is calculated only for pixels, + which have none zero corresponding value in the mask. + + + Source pixel format is not supported. + Mask must have the same size as the source image to get statistics for. + + + + + Initializes a new instance of the class. + + + Unmanaged image to gather statistics about. + + Source pixel format is not supported. + + + + + Initializes a new instance of the class. + + + Image to gather statistics about. + Mask image which specifies areas to collect statistics for. + + The mask image must be a grayscale/binary (8bpp) image of the same size as the + specified source image, where black pixels (value 0) correspond to areas which should be excluded + from processing. So statistics is calculated only for pixels, which are none black in the mask image. + + + Source pixel format is not supported. + Mask image must be 8 bpp grayscale image. + Mask must have the same size as the source image to get statistics for. + + + + + Initializes a new instance of the class. + + + Image to gather statistics about. + Mask array which specifies areas to collect statistics for. + + The mask array must be of the same size as the specified source image, where 0 values + correspond to areas which should be excluded from processing. So statistics is calculated only for pixels, + which have none zero corresponding value in the mask. + + + Source pixel format is not supported. + Mask must have the same size as the source image to get statistics for. + + + + + Histogram of red channel. + + + The property is valid only for color images + (see property). + + + + + Histogram of green channel. + + + The property is valid only for color images + (see property). + + + + + Histogram of blue channel. + + + The property is valid only for color images + (see property). + + + + + Histogram of gray channel. + + + The property is valid only for grayscale images + (see property). + + + + + Histogram of red channel excluding black pixels. + + + The property keeps statistics about red channel, which + excludes all black pixels, what affects mean, standard deviation, etc. + + The property is valid only for color images + (see property). + + + + + Histogram of green channel excluding black pixels. + + + The property keeps statistics about green channel, which + excludes all black pixels, what affects mean, standard deviation, etc. + + The property is valid only for color images + (see property). + + + + + Histogram of blue channel excluding black pixels + + + The property keeps statistics about blue channel, which + excludes all black pixels, what affects mean, standard deviation, etc. + + The property is valid only for color images + (see property). + + + + + Histogram of gray channel channel excluding black pixels. + + + The property keeps statistics about gray channel, which + excludes all black pixels, what affects mean, standard deviation, etc. + + The property is valid only for grayscale images + (see property). + + + + + Total pixels count in the processed image. + + + + + + Total pixels count in the processed image excluding black pixels. + + + + + + Value wich specifies if the processed image was color or grayscale. + + + If the value is set to then + property should be used to get statistics information about image. Otherwise + , and properties should be used + for color images. + + + + + Horizontal intensity statistics. + + + The class provides information about horizontal distribution + of pixel intensities, which may be used to locate objects, their centers, etc. + + + The class accepts grayscale (8 bpp indexed and 16 bpp) and color (24, 32, 48 and 64 bpp) images. + In the case of 32 and 64 bpp color images, the alpha channel is not processed - statistics is not + gathered for this channel. + + Sample usage: + + // collect statistics + HorizontalIntensityStatistics his = new HorizontalIntensityStatistics( sourceImage ); + // get gray histogram (for grayscale image) + Histogram histogram = his.Gray; + // output some histogram's information + System.Diagnostics.Debug.WriteLine( "Mean = " + histogram.Mean ); + System.Diagnostics.Debug.WriteLine( "Min = " + histogram.Min ); + System.Diagnostics.Debug.WriteLine( "Max = " + histogram.Max ); + + + Sample grayscale image with its horizontal intensity histogram: + + + + + + + + + Initializes a new instance of the class. + + + Source image. + + Unsupported pixel format of the source image. + + + + + Initializes a new instance of the class. + + + Source image data. + + Unsupported pixel format of the source image. + + + + + Initializes a new instance of the class. + + + Source unmanaged image. + + Unsupported pixel format of the source image. + + + + + Gather horizontal intensity statistics for specified image. + + + Source image. + + + + + Histogram for red channel. + + + + + + Histogram for green channel. + + + + + + Histogram for blue channel. + + + + + + Histogram for gray channel (intensities). + + + + + + Value wich specifies if the processed image was color or grayscale. + + + If the property equals to true, then the + property should be used to retrieve histogram for the processed grayscale image. + Otherwise , and property + should be used to retrieve histogram for particular RGB channel of the processed + color image. + + + + + Performs quadrilateral transformation using nearest neighbor algorithm for interpolation. + + + The class is deprecated and should be used instead. + + + + + + + + Initializes a new instance of the class. + + + Corners of the source quadrilateral area. + Width of the new transformed image. + Height of the new transformed image. + + This constructor sets to + , which means that destination image will have width and + height as specified by user. + + + + + Initializes a new instance of the class. + + + Corners of the source quadrilateral area. + + This constructor sets to + , which means that destination image will have width and + height automatically calculated based on property. + + + + + Process the filter on the specified image. + + + Source image data. + Destination image data. + + + + + Calculates new image size. + + + Source image data. + + New image size - size of the destination image. + + The specified quadrilateral's corners are outside of the given image. + + + + + Format translations dictionary. + + + + + Automatic calculation of destination image or not. + + + The property specifies how to calculate size of destination (transformed) + image. If the property is set to , then + and properties have effect and destination image's size is + specified by user. If the property is set to , then setting the above + mentioned properties does not have any effect, but destionation image's size is + automatically calculated from property - width and height + come from length of longest edges. + + + + + + Quadrilateral's corners in source image. + + + The property specifies four corners of the quadrilateral area + in the source image to be transformed. + + + + + + Width of the new transformed image. + + + The property defines width of the destination image, which gets + transformed quadrilateral image. + + Setting the property does not have any effect, if + property is set to . In this case destination image's width + is calculated automatically based on property. + + + + + + Height of the new transformed image. + + + The property defines height of the destination image, which gets + transformed quadrilateral image. + + Setting the property does not have any effect, if + property is set to . In this case destination image's height + is calculated automatically based on property. + + + + + + Median filter. + + + The median filter is normally used to reduce noise in an image, somewhat like + the mean filter. However, it often does a better job than the mean + filter of preserving useful detail in the image. + + Each pixel of the original source image is replaced with the median of neighboring pixel + values. The median is calculated by first sorting all the pixel values from the surrounding + neighborhood into numerical order and then replacing the pixel being considered with the + middle pixel value. + + The filter accepts 8 bpp grayscale images and 24/32 bpp + color images for processing. + + Sample usage: + + // create filter + Median filter = new Median( ); + // apply the filter + filter.ApplyInPlace( image ); + + + Initial image: + + Result image: + + + + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the class. + + + Processing square size. + + + + + Process the filter on the specified image. + + + Source image data. + Destination image data. + Image rectangle for processing by the filter. + + + + + Format translations dictionary. + + + + + Processing square size for the median filter, [3, 25]. + + + Default value is set to 3. + + The value should be odd. + + + + + + Textured filter - filter an image using texture. + + + The filter is similar to filter in its + nature, but instead of working with source image and overly, it uses provided + filters to create images to merge (see and + properties). In addition, it uses a bit more complex formula for calculation + of destination pixel's value, which gives greater amount of flexibility:
+ dst = * ( src1 * textureValue + src2 * ( 1.0 - textureValue ) ) + * src2, + where src1 is value of pixel from the image produced by , + src2 is value of pixel from the image produced by , + dst is value of pixel in a destination image and textureValue is corresponding value + from provided texture (see or ).
+ + It is possible to set to . In this case + original source image will be used instead of result produced by the second filter. + + The filter 24 bpp color images for processing. + + Sample usage #1: + + // create filter + TexturedFilter filter = new TexturedFilter( new CloudsTexture( ), + new HueModifier( 50 ) ); + // apply the filter + Bitmap newImage = filter.Apply( image ); + + + Sample usage #2: + + // create filter + TexturedFilter filter = new TexturedFilter( new CloudsTexture( ), + new GrayscaleBT709( ), new Sepia( ) ); + // apply the filter + Bitmap newImage = filter.Apply( image ); + + + Initial image: + + Result image #1: + + Result image #2: + +
+ +
+ + + Initializes a new instance of the class. + + + Generated texture. + First filter. + + + + + Initializes a new instance of the class. + + + Generated texture. + First filter. + Second filter. + + + + + Initializes a new instance of the class. + + + Texture generator. + First filter. + + + + + Initializes a new instance of the class. + + + Texture generator. + First filter. + Second filter. + + + + + Process the filter on the specified image. + + + Source image data. + Destination image data. + + Texture size does not match image size. + Filters should not change image dimension. + + + + + Format translations dictionary. + + + See for more information. + + + + + Filter level value, [0, 1]. + + + Filtering factor determines portion of the destionation image, which is formed + as a result of merging source images using specified texture. + + Default value is set to 1.0. + + See class description for more details. + + + + + + Preserve level value + + + Preserving factor determines portion taken from the image produced + by (or from original source) without applying textured + merge to it. + + Default value is set to 0.0. + + See class description for more details. + + + + + + Generated texture. + + + Two dimensional array of texture intensities. + + Size of the provided texture should be the same as size of images, which will + be passed to the filter. + + The property has priority over this property - if + generator is specified than the static generated texture is not used. + + + + + + Texture generator. + + + Generator used to generate texture. + + The property has priority over the property. + + + + + + First filter. + + + Filter, which is used to produce first image for the merge. The filter + needs to implement interface, so it could be possible + to get information about the filter. The filter must be able to process color 24 bpp + images and produce color 24 bpp or grayscale 8 bppp images as result. + + + The specified filter does not support 24 bpp color images. + The specified filter does not produce image of supported format. + The specified filter does not implement IFilterInformation interface. + + + + + Second filter + + + Filter, which is used to produce second image for the merge. The filter + needs to implement interface, so it could be possible + to get information about the filter. The filter must be able to process color 24 bpp + images and produce color 24 bpp or grayscale 8 bppp images as result. + + The filter may be set to . In this case original source image + is used as a second image for the merge. + + + The specified filter does not support 24 bpp color images. + The specified filter does not produce image of supported format. + The specified filter does not implement IFilterInformation interface. + + + + + Top-hat operator from Mathematical Morphology. + + + Top-hat morphological operator subtracts + result of morphological opening on the input image + from the input image itself. + + Applied to binary image, the filter allows to get all those object (their parts) + which were removed by opening filter, but never restored. + + The filter accepts 8 and 16 bpp grayscale images and 24 and 48 bpp + color images for processing. + + Sample usage: + + // create filter + TopHat filter = new TopHat( ); + // apply the filter + filter.Apply( image ); + + + Initial image: + + Result image: + + + + + + + + + Initializes a new instance of the class. + + + + + + Initializes a new instance of the class. + + + Structuring element to pass to operator. + + + + + Process the filter on the specified image. + + + Source image data. + + + + + Format translations dictionary. + + + + + Difference edge detector. + + + The filter finds objects' edges by calculating maximum difference + between pixels in 4 directions around the processing pixel. + + Suppose 3x3 square element of the source image (x - is currently processed + pixel): + + P1 P2 P3 + P8 x P4 + P7 P6 P5 + + The corresponding pixel of the result image equals to: + + max( |P1-P5|, |P2-P6|, |P3-P7|, |P4-P8| ) + + + + The filter accepts 8 bpp grayscale images for processing. + + Sample usage: + + // create filter + DifferenceEdgeDetector filter = new DifferenceEdgeDetector( ); + // apply the filter + filter.ApplyInPlace( image ); + + + Initial image: + + Result image: + + + + + + + + + + Initializes a new instance of the class. + + + + + + Process the filter on the specified image. + + + Source image data. + Destination image data. + Image rectangle for processing by the filter. + + + + + Format translations dictionary. + + + + + Mean filter. + + + The filter performs each pixel value's averaging with its 8 neighbors, which is + convolution filter using the mean kernel: + + + 1 1 1 + 1 1 1 + 1 1 1 + + + For the list of supported pixel formats, see the documentation to + filter. + + With the above kernel the convolution filter is just calculates each pixel's value + in result image as average of 9 corresponding pixels in the source image. + + By default this filter sets property to + , so the alpha channel of 32 bpp and 64 bpp images is blurred as well. + + + Sample usage: + + // create filter + Mean filter = new Mean( ); + // apply the filter + filter.ApplyInPlace( image ); + + + Initial image: + + Result image: + + + + + + + + + Initializes a new instance of the class. + + + + + Linear correction of RGB channels. + + + The filter performs linear correction of RGB channels by mapping specified + channels' input ranges to output ranges. It is similar to the + , but the remapping is linear. + + The filter accepts 8 bpp grayscale and 24/32 bpp color images for processing. + + Sample usage: + + // create filter + LevelsLinear filter = new LevelsLinear( ); + // set ranges + filter.InRed = new IntRange( 30, 230 ); + filter.InGreen = new IntRange( 50, 240 ); + filter.InBlue = new IntRange( 10, 210 ); + // apply the filter + filter.ApplyInPlace( image ); + + + Initial image: + + Result image: + + + + + + + + + + Initializes a new instance of the class. + + + + + Process the filter on the specified image. + + + Source image data. + Image rectangle for processing by the filter. + + + + + Calculate conversion map. + + + Input range. + Output range. + Conversion map. + + + + + Format translations dictionary. + + + + + Red component's input range. + + + + + Green component's input range. + + + + + Blue component's input range. + + + + + Gray component's input range. + + + + + Input range for RGB components. + + + The property allows to set red, green and blue input ranges to the same value. + + + + + Red component's output range. + + + + + Green component's output range. + + + + + Blue component's output range. + + + + + Gray component's output range. + + + + + Output range for RGB components. + + + The property allows to set red, green and blue output ranges to the same value. + + + + + Threshold using Simple Image Statistics (SIS). + + + The filter performs image thresholding calculating threshold automatically + using simple image statistics method. For each pixel: + + two gradients are calculated - ex = |I(x + 1, y) - I(x - 1, y)| and + |I(x, y + 1) - I(x, y - 1)|; + weight is calculated as maximum of two gradients; + sum of weights is updated (weightTotal += weight); + sum of weighted pixel values is updated (total += weight * I(x, y)). + + The result threshold is calculated as sum of weighted pixel values divided by sum of weight. + + The filter accepts 8 bpp grayscale images for processing. + + Sample usage: + + // create filter + SISThreshold filter = new SISThreshold( ); + // apply the filter + filter.ApplyInPlace( image ); + + + Initial image: + + Result image (calculated threshold is 127): + + + + + + + + + + Initializes a new instance of the class. + + + + + + Calculate binarization threshold for the given image. + + + Image to calculate binarization threshold for. + Rectangle to calculate binarization threshold for. + + Returns binarization threshold. + + The method is used to calculate binarization threshold only. The threshold + later may be applied to the image using image processing filter. + + Source pixel format is not supported by the routine. It should be + 8 bpp grayscale (indexed) image. + + + + + Calculate binarization threshold for the given image. + + + Image to calculate binarization threshold for. + Rectangle to calculate binarization threshold for. + + Returns binarization threshold. + + The method is used to calculate binarization threshold only. The threshold + later may be applied to the image using image processing filter. + + Source pixel format is not supported by the routine. It should be + 8 bpp grayscale (indexed) image. + + + + + Calculate binarization threshold for the given image. + + + Image to calculate binarization threshold for. + Rectangle to calculate binarization threshold for. + + Returns binarization threshold. + + The method is used to calculate binarization threshold only. The threshold + later may be applied to the image using image processing filter. + + Source pixel format is not supported by the routine. It should be + 8 bpp grayscale (indexed) image. + + + + + Process the filter on the specified image. + + + Source image data. + Image rectangle for processing by the filter. + + + + + Format translations dictionary. + + + + + Threshold value. + + + The property is read only and represents the value, which + was automaticaly calculated using image statistics. + + + + + Difference filter - get the difference between overlay and source images. + + + The difference filter takes two images (source and + overlay images) + of the same size and pixel format and produces an image, where each pixel equals + to absolute difference between corresponding pixels from provided images. + + The filter accepts 8 and 16 bpp grayscale images and 24, 32, 48 and 64 bpp + color images for processing. + + In the case if images with alpha channel are used (32 or 64 bpp), visualization + of the result image may seem a bit unexpected - most probably nothing will be seen + (in the case if image is displayed according to its alpha channel). This may be + caused by the fact that after differencing the entire alpha channel will be zeroed + (zero difference between alpha channels), what means that the resulting image will be + 100% transparent. + + Sample usage: + + // create filter + Difference filter = new Difference( overlayImage ); + // apply the filter + Bitmap resultImage = filter.Apply( sourceImage ); + + + Source image: + + Overlay image: + + Result image: + + + + + + + + + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the class. + + + Overlay image. + + + + + Initializes a new instance of the class. + + + Unmanaged overlay image. + + + + + Process the filter on the specified image. + + + Source image data. + Overlay image data. + + + + + Format translations dictionary. + + + + + Image in unmanaged memory. + + + + The class represents wrapper of an image in unmanaged memory. Using this class + it is possible as to allocate new image in unmanaged memory, as to just wrap provided + pointer to unmanaged memory, where an image is stored. + + Usage of unmanaged images is mostly beneficial when it is required to apply multiple + image processing routines to a single image. In such scenario usage of .NET managed images + usually leads to worse performance, because each routine needs to lock managed image + before image processing is done and then unlock it after image processing is done. Without + these lock/unlock there is no way to get direct access to managed image's data, which means + there is no way to do fast image processing. So, usage of managed images lead to overhead, which + is caused by locks/unlock. Unmanaged images are represented internally using unmanaged memory + buffer. This means that it is not required to do any locks/unlocks in order to get access to image + data (no overhead). + + Sample usage: + + // sample 1 - wrapping .NET image into unmanaged without + // making extra copy of image in memory + BitmapData imageData = image.LockBits( + new Rectangle( 0, 0, image.Width, image.Height ), + ImageLockMode.ReadWrite, image.PixelFormat ); + + try + { + UnmanagedImage unmanagedImage = new UnmanagedImage( imageData ) ); + // apply several routines to the unmanaged image + } + finally + { + image.UnlockBits( imageData ); + } + + + // sample 2 - converting .NET image into unmanaged + UnmanagedImage unmanagedImage = UnmanagedImage.FromManagedImage( image ); + // apply several routines to the unmanaged image + ... + // conver to managed image if it is required to display it at some point of time + Bitmap managedImage = unmanagedImage.ToManagedImage( ); + + + + + + + Initializes a new instance of the class. + + + Pointer to image data in unmanaged memory. + Image width in pixels. + Image height in pixels. + Image stride (line size in bytes). + Image pixel format. + + Using this constructor, make sure all specified image attributes are correct + and correspond to unmanaged memory buffer. If some attributes are specified incorrectly, + this may lead to exceptions working with the unmanaged memory. + + + + + Initializes a new instance of the class. + + + Locked bitmap data. + + Unlike method, this constructor does not make + copy of managed image. This means that managed image must stay locked for the time of using the instance + of unamanged image. + + + + + Destroys the instance of the class. + + + + + + Dispose the object. + + + Frees unmanaged resources used by the object. The object becomes unusable + after that. + + The method needs to be called only in the case if unmanaged image was allocated + using method. In the case if the class instance was created using constructor, + this method does not free unmanaged memory. + + + + + + Dispose the object. + + + Indicates if disposing was initiated manually. + + + + + Clone the unmanaged images. + + + Returns clone of the unmanaged image. + + The method does complete cloning of the object. + + + + + Copy unmanaged image. + + + Destination image to copy this image to. + + The method copies current unmanaged image to the specified image. + Size and pixel format of the destination image must be exactly the same. + + Destination image has different size or pixel format. + + + + + Allocate new image in unmanaged memory. + + + Image width. + Image height. + Image pixel format. + + Return image allocated in unmanaged memory. + + Allocate new image with specified attributes in unmanaged memory. + + The method supports only + Format8bppIndexed, + Format16bppGrayScale, + Format24bppRgb, + Format32bppRgb, + Format32bppArgb, + Format32bppPArgb, + Format48bppRgb, + Format64bppArgb and + Format64bppPArgb pixel formats. + In the case if Format8bppIndexed + format is specified, pallete is not not created for the image (supposed that it is + 8 bpp grayscale image). + + + + Unsupported pixel format was specified. + Invalid image size was specified. + + + + + Create managed image from the unmanaged. + + + Returns managed copy of the unmanaged image. + + The method creates a managed copy of the unmanaged image with the + same size and pixel format (it calls specifying + for the makeCopy parameter). + + + + + Create managed image from the unmanaged. + + + Make a copy of the unmanaged image or not. + + Returns managed copy of the unmanaged image. + + If the is set to , then the method + creates a managed copy of the unmanaged image, so the managed image stays valid even when the unmanaged + image gets disposed. However, setting this parameter to creates a managed image which is + just a wrapper around the unmanaged image. So if unmanaged image is disposed, the + managed image becomes no longer valid and accessing it will generate an exception. + + The unmanaged image has some invalid properties, which results + in failure of converting it to managed image. This may happen if user used the + constructor specifying some + invalid parameters. + + + + + Create unmanaged image from the specified managed image. + + + Source managed image. + + Returns new unmanaged image, which is a copy of source managed image. + + The method creates an exact copy of specified managed image, but allocated + in unmanaged memory. + + Unsupported pixel format of source image. + + + + + Create unmanaged image from the specified managed image. + + + Source locked image data. + + Returns new unmanaged image, which is a copy of source managed image. + + The method creates an exact copy of specified managed image, but allocated + in unmanaged memory. This means that managed image may be unlocked right after call to this + method. + + Unsupported pixel format of source image. + + + + + Collect pixel values from the specified list of coordinates. + + + List of coordinates to collect pixels' value from. + + Returns array of pixels' values from the specified coordinates. + + The method goes through the specified list of points and for each point retrievs + corresponding pixel's value from the unmanaged image. + + For grayscale image the output array has the same length as number of points in the + specified list of points. For color image the output array has triple length, containing pixels' + values in RGB order. + + The method does not make any checks for valid coordinates and leaves this up to user. + If specified coordinates are out of image's bounds, the result is not predictable (crash in most cases). + + + This method is supposed for images with 8 bpp channels only (8 bpp grayscale image and + 24/32 bpp color images). + + + Unsupported pixel format of the source image. Use Collect16bppPixelValues() method for + images with 16 bpp channels. + + + + + Collect coordinates of none black pixels in the image. + + + Returns list of points, which have other than black color. + + + + + Collect coordinates of none black pixels within specified rectangle of the image. + + + Image's rectangle to process. + + Returns list of points, which have other than black color. + + + + + Set pixels with the specified coordinates to the specified color. + + + List of points to set color for. + Color to set for the specified points. + + For images having 16 bpp per color plane, the method extends the specified color + value to 16 bit by multiplying it by 256. + + + + + Set pixel with the specified coordinates to the specified color. + + + Point's coordiates to set color for. + Color to set for the pixel. + + See for more information. + + + + + Set pixel with the specified coordinates to the specified color. + + + X coordinate of the pixel to set. + Y coordinate of the pixel to set. + Color to set for the pixel. + + For images having 16 bpp per color plane, the method extends the specified color + value to 16 bit by multiplying it by 256. + + For grayscale images this method will calculate intensity value based on the below formula: + + 0.2125 * Red + 0.7154 * Green + 0.0721 * Blue + + + + + + + + Set pixel with the specified coordinates to the specified value. + + + X coordinate of the pixel to set. + Y coordinate of the pixel to set. + Pixel value to set. + + The method sets all color components of the pixel to the specified value. + If it is a grayscale image, then pixel's intensity is set to the specified value. + If it is a color image, then pixel's R/G/B components are set to the same specified value + (if an image has alpha channel, then it is set to maximum value - 255 or 65535). + + For images having 16 bpp per color plane, the method extends the specified color + value to 16 bit by multiplying it by 256. + + + + + + Get color of the pixel with the specified coordinates. + + + Point's coordiates to get color of. + + Return pixel's color at the specified coordinates. + + See for more information. + + + + + Get color of the pixel with the specified coordinates. + + + X coordinate of the pixel to get. + Y coordinate of the pixel to get. + + Return pixel's color at the specified coordinates. + + + In the case if the image has 8 bpp grayscale format, the method will return a color with + all R/G/B components set to same value, which is grayscale intensity. + + The method supports only 8 bpp grayscale images and 24/32 bpp color images so far. + + + The specified pixel coordinate is out of image's bounds. + Pixel format of this image is not supported by the method. + + + + + Collect pixel values from the specified list of coordinates. + + + List of coordinates to collect pixels' value from. + + Returns array of pixels' values from the specified coordinates. + + The method goes through the specified list of points and for each point retrievs + corresponding pixel's value from the unmanaged image. + + For grayscale image the output array has the same length as number of points in the + specified list of points. For color image the output array has triple length, containing pixels' + values in RGB order. + + The method does not make any checks for valid coordinates and leaves this up to user. + If specified coordinates are out of image's bounds, the result is not predictable (crash in most cases). + + + This method is supposed for images with 16 bpp channels only (16 bpp grayscale image and + 48/64 bpp color images). + + + Unsupported pixel format of the source image. Use Collect8bppPixelValues() method for + images with 8 bpp channels. + + + + + Pointer to image data in unmanaged memory. + + + + + Image width in pixels. + + + + + Image height in pixels. + + + + + Image stride (line size in bytes). + + + + + Image pixel format. + + + + + Clouds texture. + + + The texture generator creates textures with effect of clouds. + + The generator is based on the Perlin noise function. + + Sample usage: + + // create texture generator + CloudsTexture textureGenerator = new CloudsTexture( ); + // generate new texture + float[,] texture = textureGenerator.Generate( 320, 240 ); + // convert it to image to visualize + Bitmap textureImage = TextureTools.ToBitmap( texture ); + + + Result image: + + + + + + + Texture generator interface. + + + Each texture generator generates a 2-D texture of the specified size and returns + it as two dimensional array of intensities in the range of [0, 1] - texture's values. + + + + + + Generate texture. + + + Texture's width. + Texture's height. + + Two dimensional array of texture's intensities. + + Generates new texture of the specified size. + + + + + Reset generator. + + + Resets the generator - resets all internal variables, regenerates + internal random numbers, etc. + + + + + Initializes a new instance of the class. + + + + + + Generate texture. + + + Texture's width. + Texture's height. + + Two dimensional array of intensities. + + Generates new texture of the specified size. + + + + + Reset generator. + + + Regenerates internal random numbers. + + + + + Searching of quadrilateral/triangle corners. + + + The class searches for quadrilateral's/triangle's corners on the specified image. + It first collects edge points of the object and then uses + to find corners + the quadrilateral/triangle. + + The class treats all black pixels as background (none-object) and + all none-black pixels as object. + + The class processes grayscale 8 bpp and color 24/32 bpp images. + + Sample usage: + + // get corners of the quadrilateral + QuadrilateralFinder qf = new QuadrilateralFinder( ); + List<IntPoint> corners = qf.ProcessImage( image ); + + // lock image to draw on it with AForge.NET's methods + // (or draw directly on image without locking if it is unmanaged image) + BitmapData data = image.LockBits( new Rectangle( 0, 0, image.Width, image.Height ), + ImageLockMode.ReadWrite, image.PixelFormat ); + + Drawing.Polygon( data, corners, Color.Red ); + for ( int i = 0; i < corners.Count; i++ ) + { + Drawing.FillRectangle( data, + new Rectangle( corners[i].X - 2, corners[i].Y - 2, 5, 5 ), + Color.FromArgb( i * 32 + 127 + 32, i * 64, i * 64 ) ); + } + + image.UnlockBits( data ); + + + Source image: + + Result image: + + + + + + + Find corners of quadrilateral/triangular area in the specified image. + + + Source image to search quadrilateral for. + + Returns a list of points, which are corners of the quadrilateral/triangular area found + in the specified image. The first point in the list is the point with lowest + X coordinate (and with lowest Y if there are several points with the same X value). + Points are in clockwise order (screen coordinates system). + + Unsupported pixel format of the source image. + + + + + Find corners of quadrilateral/triangular area in the specified image. + + + Source image data to search quadrilateral for. + + Returns a list of points, which are corners of the quadrilateral/triangular area found + in the specified image. The first point in the list is the point with lowest + X coordinate (and with lowest Y if there are several points with the same X value). + Points are in clockwise order (screen coordinates system). + + Unsupported pixel format of the source image. + + + + + Find corners of quadrilateral/triangular area in the specified image. + + + Source image to search quadrilateral for. + + Returns a list of points, which are corners of the quadrilateral/triangular area found + in the specified image. The first point in the list is the point with lowest + X coordinate (and with lowest Y if there are several points with the same X value). + Points are in clockwise order (screen coordinates system). + + Unsupported pixel format of the source image. + + + + + Interface for custom blobs' filters used for filtering blobs after + blob counting. + + + The interface should be implemented by classes, which perform + custom blobs' filtering different from default filtering implemented in + . See + for additional information. + + + + + + Check specified blob and decide if should be kept or not. + + + Blob to check. + + Return if the blob should be kept or + if it should be removed. + + + + + Hough line. + + + Represents line of Hough Line transformation using + polar coordinates. + See Wikipedia + for information on how to convert polar coordinates to Cartesian coordinates. + + + Hough Line transformation does not provide + information about lines start and end points, only slope and distance from image's center. Using + only provided information it is not possible to draw the detected line as it exactly appears on + the source image. But it is possible to draw a line through the entire image, which contains the + source line (see sample code below). + + + Sample code to draw detected Hough lines: + + HoughLineTransformation lineTransform = new HoughLineTransformation( ); + // apply Hough line transofrm + lineTransform.ProcessImage( sourceImage ); + Bitmap houghLineImage = lineTransform.ToBitmap( ); + // get lines using relative intensity + HoughLine[] lines = lineTransform.GetLinesByRelativeIntensity( 0.5 ); + + foreach ( HoughLine line in lines ) + { + // get line's radius and theta values + int r = line.Radius; + double t = line.Theta; + + // check if line is in lower part of the image + if ( r < 0 ) + { + t += 180; + r = -r; + } + + // convert degrees to radians + t = ( t / 180 ) * Math.PI; + + // get image centers (all coordinate are measured relative + // to center) + int w2 = image.Width /2; + int h2 = image.Height / 2; + + double x0 = 0, x1 = 0, y0 = 0, y1 = 0; + + if ( line.Theta != 0 ) + { + // none-vertical line + x0 = -w2; // most left point + x1 = w2; // most right point + + // calculate corresponding y values + y0 = ( -Math.Cos( t ) * x0 + r ) / Math.Sin( t ); + y1 = ( -Math.Cos( t ) * x1 + r ) / Math.Sin( t ); + } + else + { + // vertical line + x0 = line.Radius; + x1 = line.Radius; + + y0 = h2; + y1 = -h2; + } + + // draw line on the image + Drawing.Line( sourceData, + new IntPoint( (int) x0 + w2, h2 - (int) y0 ), + new IntPoint( (int) x1 + w2, h2 - (int) y1 ), + Color.Red ); + } + + + To clarify meaning of and values + of detected Hough lines, let's take a look at the below sample image and + corresponding values of radius and theta for the lines on the image: + + + + + Detected radius and theta values (color in corresponding colors): + + Theta = 90, R = 125, I = 249; + Theta = 0, R = -170, I = 187 (converts to Theta = 180, R = 170); + Theta = 90, R = -58, I = 163 (converts to Theta = 270, R = 58); + Theta = 101, R = -101, I = 130 (converts to Theta = 281, R = 101); + Theta = 0, R = 43, I = 112; + Theta = 45, R = 127, I = 82. + + + + + + + + + + + Line's slope - angle between polar axis and line's radius (normal going + from pole to the line). Measured in degrees, [0, 180). + + + + + Line's distance from image center, (−∞, +∞). + + + Negative line's radius means, that the line resides in lower + part of the polar coordinates system. This means that value + should be increased by 180 degrees and radius should be made positive. + + + + + + Line's absolute intensity, (0, +∞). + + + Line's absolute intensity is a measure, which equals + to number of pixels detected on the line. This value is bigger for longer + lines. + + The value may not be 100% reliable to measure exact number of pixels + on the line. Although these value correlate a lot (which means they are very close + in most cases), the intensity value may slightly vary. + + + + + + Line's relative intensity, (0, 1]. + + + Line's relative intensity is relation of line's + value to maximum found intensity. For the longest line (line with highest intesity) the + relative intensity is set to 1. If line's relative is set 0.5, for example, this means + its intensity is half of maximum found intensity. + + + + + + Initializes a new instance of the class. + + + Line's slope. + Line's distance from image center. + Line's absolute intensity. + Line's relative intensity. + + + + + Compare the object with another instance of this class. + + + Object to compare with. + + A signed number indicating the relative values of this instance and value: 1) greater than zero - + this instance is greater than value; 2) zero - this instance is equal to value; + 3) greater than zero - this instance is less than value. + + The sort order is descending. + + + Object are compared using their intensity value. + + + + + + Hough line transformation. + + + The class implements Hough line transformation, which allows to detect + straight lines in an image. Lines, which are found by the class, are provided in + polar coordinates system - + lines' distances from image's center and lines' slopes are provided. + The pole of polar coordinates system is put into processing image's center and the polar + axis is directed to the right from the pole. Lines' slope is measured in degrees and + is actually represented by angle between polar axis and line's radius (normal going + from pole to the line), which is measured in counter-clockwise direction. + + + Found lines may have negative radius. + This means, that the line resides in lower part of the polar coordinates system + and its value should be increased by 180 degrees and + radius should be made positive. + + + The class accepts binary images for processing, which are represented by 8 bpp grayscale images. + All black pixels (0 pixel's value) are treated as background, but pixels with different value are + treated as lines' pixels. + + See also documentation to class for additional information + about Hough Lines. + + Sample usage: + + HoughLineTransformation lineTransform = new HoughLineTransformation( ); + // apply Hough line transofrm + lineTransform.ProcessImage( sourceImage ); + Bitmap houghLineImage = lineTransform.ToBitmap( ); + // get lines using relative intensity + HoughLine[] lines = lineTransform.GetLinesByRelativeIntensity( 0.5 ); + + foreach ( HoughLine line in lines ) + { + // ... + } + + + Initial image: + + Hough line transformation image: + + + + + + + + + Initializes a new instance of the class. + + + + + + Process an image building Hough map. + + + Source image to process. + + Unsupported pixel format of the source image. + + + + + Process an image building Hough map. + + + Source image to process. + Image's rectangle to process. + + Unsupported pixel format of the source image. + + + + + Process an image building Hough map. + + + Source image data to process. + + Unsupported pixel format of the source image. + + + + + Process an image building Hough map. + + + Source image data to process. + Image's rectangle to process. + + Unsupported pixel format of the source image. + + + + + Process an image building Hough map. + + + Source unmanaged image to process. + + Unsupported pixel format of the source image. + + + + + Process an image building Hough map. + + + Source unmanaged image to process. + Image's rectangle to process. + + Unsupported pixel format of the source image. + + + + + Convert Hough map to bitmap. + + + Returns 8 bppp grayscale bitmap, which shows Hough map. + + Hough transformation was not yet done by calling + ProcessImage() method. + + + + + Get specified amount of lines with highest intensity. + + + Amount of lines to get. + + Returns array of most intesive lines. If there are no lines detected, + the returned array has zero length. + + + + + Get lines with relative intensity higher then specified value. + + + Minimum relative intesity of lines. + + Returns array of lines. If there are no lines detected, + the returned array has zero length. + + + + + Steps per degree. + + + The value defines quality of Hough line transformation and its ability to detect + lines' slope precisely. + + Default value is set to 1. Minimum value is 1. Maximum value is 10. + + + + + Minimum line's intensity in Hough map to recognize a line. + + + The value sets minimum intensity level for a line. If a value in Hough + map has lower intensity, then it is not treated as a line. + + Default value is set to 10. + + + + + Radius for searching local peak value. + + + The value determines radius around a map's value, which is analyzed to determine + if the map's value is a local maximum in specified area. + + Default value is set to 4. Minimum value is 1. Maximum value is 10. + + + + + Maximum found intensity in Hough map. + + + The property provides maximum found line's intensity. + + + + + Found lines count. + + + The property provides total number of found lines, which intensity is higher (or equal to), + than the requested minimum intensity. + + + + + Performs quadrilateral transformation of an area in the source image. + + + The class implements simple algorithm described by + Olivier Thill + for transforming quadrilateral area from a source image into rectangular image. + The idea of the algorithm is based on finding for each line of destination + rectangular image a corresponding line connecting "left" and "right" sides of + quadrilateral in a source image. Then the line is linearly transformed into the + line in destination image. + + Due to simplicity of the algorithm it does not do any correction for perspective. + + + To make sure the algorithm works correctly, it is preferred if the + "left-top" corner of the quadrilateral (screen coordinates system) is + specified first in the list of quadrilateral's corners. At least + user need to make sure that the "left" side (side connecting first and the last + corner) and the "right" side (side connecting second and third corners) are + not horizontal. + + Use to avoid the above mentioned limitations, + which is a more advanced quadrilateral transformation algorithms (although a bit more + computationally expensive). + + The image processing filter accepts 8 grayscale images and 24/32 bpp + color images for processing. + + Sample usage: + + // define quadrilateral's corners + List<IntPoint> corners = new List<IntPoint>( ); + corners.Add( new IntPoint( 99, 99 ) ); + corners.Add( new IntPoint( 156, 79 ) ); + corners.Add( new IntPoint( 184, 126 ) ); + corners.Add( new IntPoint( 122, 150 ) ); + // create filter + SimpleQuadrilateralTransformation filter = + new SimpleQuadrilateralTransformation( corners, 200, 200 ); + // apply the filter + Bitmap newImage = filter.Apply( image ); + + + Initial image: + + Result image: + + + + + + + + + New image width. + + + + + New image height. + + + + + Initializes a new instance of the class. + + + + + + Initializes a new instance of the class. + + + Corners of the source quadrilateral area. + Width of the new transformed image. + Height of the new transformed image. + + This constructor sets to + , which means that destination image will have width and + height as specified by user. + + + + + Initializes a new instance of the class. + + + Corners of the source quadrilateral area. + + This constructor sets to + , which means that destination image will have width and + height automatically calculated based on property. + + + + + Calculates new image size. + + + Source image data. + + New image size - size of the destination image. + + Source quadrilateral was not set. + + + + + Process the filter on the specified image. + + + Source image data. + Destination image data. + + + + + Format translations dictionary. + + + See + documentation for additional information. + + + + + Automatic calculation of destination image or not. + + + The property specifies how to calculate size of destination (transformed) + image. If the property is set to , then + and properties have effect and destination image's size is + specified by user. If the property is set to , then setting the above + mentioned properties does not have any effect, but destionation image's size is + automatically calculated from property - width and height + come from length of longest edges. + + + Default value is set to . + + + + + + Quadrilateral's corners in source image. + + + The property specifies four corners of the quadrilateral area + in the source image to be transformed. + + See documentation to the + class itself for additional information. + + + + + + Width of the new transformed image. + + + The property defines width of the destination image, which gets + transformed quadrilateral image. + + Setting the property does not have any effect, if + property is set to . In this case destination image's width + is calculated automatically based on property. + + + + + + Height of the new transformed image. + + + The property defines height of the destination image, which gets + transformed quadrilateral image. + + Setting the property does not have any effect, if + property is set to . In this case destination image's height + is calculated automatically based on property. + + + + + + Specifies if bilinear interpolation should be used or not. + + + Default value is set to - interpolation + is used. + + + + + + Texturer filter. + + + Adjust pixels’ color values using factors from the given texture. In conjunction with different type + of texture generators, the filter may produce different type of interesting effects. + + The filter uses specified texture to adjust values using the next formula:
+ dst = src * + src * * textureValue,
+ where src is value of pixel in a source image, dst is value of pixel in a destination image and + textureValue is corresponding value from provided texture (see or + ). Using and values it is possible + to control the portion of source data affected by texture. +
+ + In most cases the and properties are set in such + way, that + = 1. But there is no limitations actually + for those values, so their sum may be as greater, as lower than 1 in order create different type of + effects. + + The filter accepts 8 bpp grayscale and 24 bpp color images for processing. + + Sample usage: + + // create filter + Texturer filter = new Texturer( new TextileTexture( ), 0.3, 0.7 ); + // apply the filter + filter.ApplyInPlace( image ); + + + Initial image: + + Result image: + +
+ +
+ + + Initializes a new instance of the class. + + + Generated texture. + + + + + Initializes a new instance of the class. + + + Generated texture. + Filter level value (see property). + Preserve level value (see property). + + + + + Initializes a new instance of the class. + + + Texture generator. + + + + + Initializes a new instance of the class. + + + Texture generator. + Filter level value (see property). + Preserve level value (see property). + + + + + Process the filter on the specified image. + + + Source image data. + Image rectangle for processing by the filter. + + + + + Format translations dictionary. + + + See for more information. + + + + + Filter level value. + + + Filtering factor determines image fraction to filter - to multiply + by values from the provided texture. + + Default value is set to 0.5. + + See class description for more details. + + + + + + Preserve level value. + + + Preserving factor determines image fraction to keep from filtering. + + Default value is set to 0.5. + + See class description for more details. + + + + + + Generated texture. + + + Two dimensional array of texture intensities. + + In the case if image passed to the filter is smaller or + larger than the specified texture, than image's region is processed, which equals to the + minimum overlapping area. + + The property has priority over this property - if + generator is specified than the static generated texture is not used. + + + + + + Texture generator. + + + Generator used to generate texture. + + The property has priority over the property. + + + + + + Luminance and saturation linear correction. + + + The filter operates in HSL color space and provides + with the facility of luminance and saturation linear correction - mapping specified channels' + input ranges to specified output ranges. + + The filter accepts 24 and 32 bpp color images for processing. + + Sample usage: + + // create filter + HSLLinear filter = new HSLLinear( ); + // configure the filter + filter.InLuminance = new Range( 0, 0.85f ); + filter.OutSaturation = new Range( 0.25f, 1 ); + // apply the filter + filter.ApplyInPlace( image ); + + + Initial image: + + Result image: + + + + + + + + + + Initializes a new instance of the class. + + + + + + Process the filter on the specified image. + + + Source image data. + Image rectangle for processing by the filter. + + + + + Luminance input range. + + + Luminance component is measured in the range of [0, 1]. + + + + + Luminance output range. + + + Luminance component is measured in the range of [0, 1]. + + + + + Saturation input range. + + + Saturation component is measured in the range of [0, 1]. + + + + + Saturation output range. + + + Saturation component is measured in the range of [0, 1]. + + + + + Format translations dictionary. + + + + + Blur filter. + + + The filter performs convolution filter using + the blur kernel: + + + 1 2 3 2 1 + 2 4 5 4 2 + 3 5 6 5 3 + 2 4 5 4 2 + 1 2 3 2 1 + + + For the list of supported pixel formats, see the documentation to + filter. + + By default this filter sets property to + , so the alpha channel of 32 bpp and 64 bpp images is blurred as well. + + + Sample usage: + + // create filter + Blur filter = new Blur( ); + // apply the filter + filter.ApplyInPlace( image ); + + + Initial image: + + Result image: + + + + + + + + + Initializes a new instance of the class. + + + + + Simple posterization of an image. + + + The class implements simple posterization of an image by splitting + each color plane into adjacent areas of the specified size. After the process + is done, each color plane will contain maximum of 256/PosterizationInterval levels. + For example, if grayscale image is posterized with posterization interval equal to 64, + then result image will contain maximum of 4 tones. If color image is posterized with the + same posterization interval, then it will contain maximum of 43=64 colors. + See property to get information about the way how to control + color used to fill posterization areas. + + Posterization is a process in photograph development which converts normal photographs + into an image consisting of distinct, but flat, areas of different tones or colors. + + The filter accepts 8 bpp grayscale and 24/32 bpp color images. + + Sample usage: + + // create filter + SimplePosterization filter = new SimplePosterization( ); + // process image + filter.ApplyInPlace( sourceImage ); + + + Initial image: + + Result image: + + + + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the class. + + + Specifies filling type of posterization areas. + + + + + Process the filter on the specified image. + + + Source image data. + Image rectangle for processing by the filter. + + + + + Posterization interval, which specifies size of posterization areas. + + + The property specifies size of adjacent posterization areas + for each color plane. The value has direct effect on the amount of colors + in the result image. For example, if grayscale image is posterized with posterization + interval equal to 64, then result image will contain maximum of 4 tones. If color + image is posterized with same posterization interval, then it will contain maximum + of 43=64 colors. + + Default value is set to 64. + + + + + + Posterization filling type. + + + The property controls the color, which is used to substitute + colors within the same posterization interval - minimum, maximum or average value. + + + Default value is set to . + + + + + + Format translations dictionary. + + + + + Enumeration of possible types of filling posterized areas. + + + + + Fill area with minimum color's value. + + + + + Fill area with maximum color's value. + + + + + Fill area with average color's value. + + + + + Dithering using Jarvis, Judice and Ninke error diffusion. + + + The filter represents binarization filter, which is based on + error diffusion dithering with Jarvis-Judice-Ninke coefficients. Error is diffused + on 12 neighbor pixels with next coefficients: + + | * | 7 | 5 | + | 3 | 5 | 7 | 5 | 3 | + | 1 | 3 | 5 | 3 | 1 | + + / 48 + + + The filter accepts 8 bpp grayscale images for processing. + + Sample usage: + + // create filter + JarvisJudiceNinkeDithering filter = new JarvisJudiceNinkeDithering( ); + // apply the filter + filter.ApplyInPlace( image ); + + + Initial image: + + Result image: + + + + + + + + + + + + Initializes a new instance of the class. + + + + + + Median cut color quantization algorithm. + + + The class implements median cut + color quantization algorithm. + + See also class, which may simplify processing of images. + + Sample usage: + + // create the color quantization algorithm + IColorQuantizer quantizer = new MedianCutQuantizer( ); + // process colors (taken from image for example) + for ( int i = 0; i < pixelsToProcess; i++ ) + { + quantizer.AddColor( /* pixel color */ ); + } + // get palette reduced to 16 colors + Color[] palette = quantizer.GetPalette( 16 ); + + + + + + + + + Add color to the list of processed colors. + + + Color to add to the internal list. + + The method adds the specified color into internal list of processed colors. The list + is used later by method to build reduced color table of the specified size. + + + + + + Get paletter of the specified size. + + + Palette size to get. + + Returns reduced palette of the specified size, which covers colors processed so far. + + The method must be called after continuously calling method and + returns reduced color palette for colors accumulated/processed so far. + + + + + Clear internal state of the color quantization algorithm by clearing the list of colors + so far processed. + + + + + + Labirinth texture. + + + The texture generator creates textures with effect of labyrinth. + + The generator is based on the Perlin noise function. + + Sample usage: + + // create texture generator + LabyrinthTexture textureGenerator = new LabyrinthTexture( ); + // generate new texture + float[,] texture = textureGenerator.Generate( 320, 240 ); + // convert it to image to visualize + Bitmap textureImage = TextureTools.ToBitmap( texture ); + + + Result image: + + + + + + + Initializes a new instance of the class. + + + + + + Generate texture. + + + Texture's width. + Texture's height. + + Two dimensional array of intensities. + + Generates new texture of the specified size. + + + + + Reset generator. + + + Regenerates internal random numbers. + + + + + Template matching algorithm's interface. + + + The interface specifies set of methods, which should be implemented by different + template matching algorithms - algorithms, which search for the given template in specified + image. + + + + + Process image looking for matchings with specified template. + + + Source image to process. + Template image to search for. + Rectangle in source image to search template for. + + Returns array of found matchings. + + + + + Process image looking for matchings with specified template. + + + Source image data to process. + Template image to search for. + Rectangle in source image to search template for. + + Returns array of found matchings. + + + + + Process image looking for matchings with specified template. + + + Unmanaged source image to process. + Unmanaged template image to search for. + Rectangle in source image to search template for. + + Returns array of found matchings. + + + + + Replace channel of YCbCr color space. + + + Replaces specified YCbCr channel of color image with + specified grayscale imge. + + The filter is quite useful in conjunction with filter + (however may be used alone in some cases). Using the filter + it is possible to extract one of YCbCr channel, perform some image processing with it and then + put it back into the original color image. + + The filter accepts 24 and 32 bpp color images for processing. + + Sample usage: + + // create YCbCrExtractChannel filter for channel extracting + YCbCrExtractChannel extractFilter = new YCbCrExtractChannel( + YCbCr.CbIndex ); + // extract Cb channel + Bitmap cbChannel = extractFilter.Apply( image ); + // invert the channel + Invert invertFilter = new Invert( ); + invertFilter.ApplyInPlace( cbChannel ); + // put the channel back into the source image + YCbCrReplaceChannel replaceFilter = new YCbCrReplaceChannel( + YCbCr.CbIndex, cbChannel ); + replaceFilter.ApplyInPlace( image ); + + + Initial image: + + Result image: + + + + + + + + + Initializes a new instance of the class. + + + YCbCr channel to replace. + Channel image to use for replacement. + + + + + Initializes a new instance of the class. + + + YCbCr channel to replace. + Unmanaged channel image to use for replacement. + + + + + Process the filter on the specified image. + + + Source image data. + Image rectangle for processing by the filter. + + Channel image size does not match source + image size. + + + + + Format translations dictionary. + + + + + YCbCr channel to replace. + + + Default value is set to (Y channel). + + Invalid channel was specified. + + + + + Grayscale image to use for channel replacement. + + + + Setting this property will clear the property - + only one channel image is allowed: managed or unmanaged. + + + Channel image should be 8bpp indexed image (grayscale). + + + + + Unmanaged grayscale image to use for channel replacement. + + + + Setting this property will clear the property - + only one channel image is allowed: managed or unmanaged. + + + Channel image should be 8bpp indexed image (grayscale). + + + + + Adaptive Smoothing - noise removal with edges preserving. + + + The filter is aimed to perform image smoothing, but keeping sharp edges. + This makes it applicable to additive noise removal and smoothing objects' interiors, but + not applicable for spikes (salt and pepper noise) removal. + + The next calculations are done for each pixel: + + weights are calculate for 9 pixels - pixel itself and 8 neighbors: + + w(x, y) = exp( -1 * (Gx^2 + Gy^2) / (2 * factor^2) ) + Gx(x, y) = (I(x + 1, y) - I(x - 1, y)) / 2 + Gy(x, y) = (I(x, y + 1) - I(x, y - 1)) / 2 + , + where factor is a configurable value determining smoothing's quality. + sum of 9 weights is calclated (weightTotal); + sum of 9 weighted pixel values is calculatd (total); + destination pixel is calculated as total / weightTotal. + + + Description of the filter was found in "An Edge Detection Technique Using + the Facet Model and Parameterized Relaxation Labeling" by Ioannis Matalas, Student Member, + IEEE, Ralph Benjamin, and Richard Kitney. + + The filter accepts 8 bpp grayscale images and 24 bpp + color images for processing. + + Sample usage: + + // create filter + AdaptiveSmoothing filter = new AdaptiveSmoothing( ); + // apply the filter + filter.ApplyInPlace( image ); + + + Initial image: + + Result image: + + + + + + + Initializes a new instance of the class. + + + + + + Initializes a new instance of the class. + + + Factor value. + + + + + Process the filter on the specified image. + + + Source image data. + Destination image data. + Image rectangle for processing by the filter. + + + + + Format translations dictionary. + + + + + Factor value. + + + Factor determining smoothing quality (see + documentation). + + Default value is set to 3. + + + + + + Blobs filtering by size. + + + The filter performs filtering of blobs by their size in the specified + source image - all blobs, which are smaller or bigger then specified limits, are + removed from the image. + + The image processing filter treats all none black pixels as objects' + pixels and all black pixel as background. + + The filter accepts 8 bpp grayscale images and 24/32 + color images for processing. + + Sample usage: + + // create filter + BlobsFiltering filter = new BlobsFiltering( ); + // configure filter + filter.CoupledSizeFiltering = true; + filter.MinWidth = 70; + filter.MinHeight = 70; + // apply the filter + filter.ApplyInPlace( image ); + + + Initial image: + + Result image: + + + + + + + + + + Initializes a new instance of the class. + + + + + + Initializes a new instance of the class. + + + Minimum allowed width of blob. + Minimum allowed height of blob. + Maximum allowed width of blob. + Maximum allowed height of blob. + + This constructor creates an instance of class + with property set to false. + + + + + Initializes a new instance of the class. + + + Minimum allowed width of blob. + Minimum allowed height of blob. + Maximum allowed width of blob. + Maximum allowed height of blob. + Specifies if size filetering should be coupled or not. + + For information about coupled filtering mode see documentation for + property of + class. + + + + + Initializes a new instance of the class. + + + Custom blobs' filtering routine to use + (see ). + + + + + Process the filter on the specified image. + + + Source image data. + + + + + Format translations dictionary. + + + + + Specifies if size filetering should be coupled or not. + + + See documentation for property + of class for more information. + + + + + Minimum allowed width of blob. + + + + + + Minimum allowed height of blob. + + + + + + Maximum allowed width of blob. + + + + + + Maximum allowed height of blob. + + + + + + Custom blobs' filter to use. + + + See for information + about custom blobs' filtering routine. + + + + + Hit-And-Miss operator from Mathematical Morphology. + + + The hit-and-miss filter represents generalization of + and filters by extending flexibility of structuring element and + providing different modes of its work. Structuring element may contain: + + 1 - foreground; + 0 - background; + -1 - don't care. + + + + Filter's mode is set by property. The list of modes and its + documentation may be found in enumeration. + + The filter accepts 8 bpp grayscale images for processing. Note: grayscale images are treated + as binary with 0 value equals to black and 255 value equals to white. + + Sample usage: + + // define kernel to remove pixels on the right side of objects + // (pixel is removed, if there is white pixel on the left and + // black pixel on the right) + short[,] se = new short[,] { + { -1, -1, -1 }, + { 1, 1, 0 }, + { -1, -1, -1 } + }; + // create filter + HitAndMiss filter = new HitAndMiss( se, HitAndMiss.Modes.Thinning ); + // apply the filter + filter.ApplyInPlace( image ); + + + Initial image: + + Result image: + + + + + + + Initializes a new instance of the class. + + + Structuring element. + + Structuring elemement for the hit-and-miss morphological operator + must be square matrix with odd size in the range of [3, 99]. + + Invalid size of structuring element. + + + + + Initializes a new instance of the class. + + + Structuring element. + Operation mode. + + + + + Process the filter on the specified image. + + + Source image data. + Destination image data. + Image rectangle for processing by the filter. + + + + + Format translations dictionary. + + + + + Operation mode. + + + Mode to use for the filter. See enumeration + for the list of available modes and their documentation. + + Default mode is set to . + + + + + Hit and Miss modes. + + + Bellow is a list of modes meaning depending on pixel's correspondence + to specified structuring element: + + - on match pixel is set to white, otherwise to black; + - on match pixel is set to black, otherwise not changed. + - on match pixel is set to white, otherwise not changed. + + + + + + + Hit and miss mode. + + + + + Thinning mode. + + + + + Thickening mode. + + + + + Homogenity edge detector. + + + The filter finds objects' edges by calculating maximum difference + of processing pixel with neighboring pixels in 8 direction. + + Suppose 3x3 square element of the source image (x - is currently processed + pixel): + + P1 P2 P3 + P8 x P4 + P7 P6 P5 + + The corresponding pixel of the result image equals to: + + max( |x-P1|, |x-P2|, |x-P3|, |x-P4|, + |x-P5|, |x-P6|, |x-P7|, |x-P8| ) + + + + The filter accepts 8 bpp grayscale images for processing. + + Sample usage: + + // create filter + HomogenityEdgeDetector filter = new HomogenityEdgeDetector( ); + // apply the filter + filter.ApplyInPlace( image ); + + + Initial image: + + Result image: + + + + + + + + + + Initializes a new instance of the class. + + + + + + Process the filter on the specified image. + + + Source image data. + Destination image data. + Image rectangle for processing by the filter. + + + + + Format translations dictionary. + + + + + Gaussian sharpen filter. + + + The filter performs convolution filter using + the kernel, which is calculate with the help of + method and then converted to integer sharpening kernel. First of all the integer kernel + is calculated from by dividing all elements by + the element with the smallest value. Then the integer kernel is converted to sharpen kernel by + negating all kernel's elements (multiplying with -1), but the central kernel's element + is calculated as 2 * sum - centralElement, where sum is the sum off elements + in the integer kernel before negating. + + For the list of supported pixel formats, see the documentation to + filter. + + Sample usage: + + // create filter with kernel size equal to 11 + // and Gaussia sigma value equal to 4.0 + GaussianSharpen filter = new GaussianSharpen( 4, 11 ); + // apply the filter + filter.ApplyInPlace( image ); + + + Initial image: + + Result image: + + + + + + + + + Initializes a new instance of the class. + + + + + + Initializes a new instance of the class. + + + Gaussian sigma value. + + + + + Initializes a new instance of the class. + + + Gaussian sigma value. + Kernel size. + + + + + Gaussian sigma value, [0.5, 5.0]. + + + Sigma value for Gaussian function used to calculate + the kernel. + + Default value is set to 1.4. + + + + + + Kernel size, [3, 5]. + + + Size of Gaussian kernel. + + Default value is set to 5. + + + + + + Merge filter - get MAX of pixels in two images. + + + The merge filter takes two images (source and overlay images) + of the same size and pixel format and produces an image, where each pixel equals + to the maximum value of corresponding pixels from provided images. + + The filter accepts 8 and 16 bpp grayscale images and 24, 32, 48 and 64 bpp + color images for processing. + + Sample usage: + + // create filter + Merge filter = new Merge( overlayImage ); + // apply the filter + Bitmap resultImage = filter.Apply( sourceImage ); + + + Source image: + + Overlay image: + + Result image: + + + + + + + + + + + + Initializes a new instance of the class + + + + + Initializes a new instance of the class. + + + Overlay image. + + + + + Initializes a new instance of the class. + + + Unmanaged overlay image. + + + + + Process the filter on the specified image. + + + Source image data. + Overlay image data. + + + + + Format translations dictionary. + + + + + Skew angle checker for scanned documents. + + + The class implements document's skew checking algorithm, which is based + on Hough line transformation. The algorithm + is based on searching for text base lines - black line of text bottoms' followed + by white line below. + + The routine supposes that a white-background document is provided + with black letters. The algorithm is not supposed for any type of objects, but for + document images with text. + + The range of angles to detect is controlled by property. + + The filter accepts 8 bpp grayscale images for processing. + + Sample usage: + + // create instance of skew checker + DocumentSkewChecker skewChecker = new DocumentSkewChecker( ); + // get documents skew angle + double angle = skewChecker.GetSkewAngle( documentImage ); + // create rotation filter + RotateBilinear rotationFilter = new RotateBilinear( -angle ); + rotationFilter.FillColor = Color.White; + // rotate image applying the filter + Bitmap rotatedImage = rotationFilter.Apply( documentImage ); + + + Initial image: + + Deskewed image: + + + + + + + + + Initializes a new instance of the class. + + + + + Get skew angle of the provided document image. + + + Document's image to get skew angle of. + + Returns document's skew angle. If the returned angle equals to -90, + then document skew detection has failed. + + Unsupported pixel format of the source image. + + + + + Get skew angle of the provided document image. + + + Document's image to get skew angle of. + Image's rectangle to process (used to exclude processing of + regions, which are not relevant to skew detection). + + Returns document's skew angle. If the returned angle equals to -90, + then document skew detection has failed. + + Unsupported pixel format of the source image. + + + + + Get skew angle of the provided document image. + + + Document's image data to get skew angle of. + + Returns document's skew angle. If the returned angle equals to -90, + then document skew detection has failed. + + Unsupported pixel format of the source image. + + + + + Get skew angle of the provided document image. + + + Document's image data to get skew angle of. + Image's rectangle to process (used to exclude processing of + regions, which are not relevant to skew detection). + + Returns document's skew angle. If the returned angle equals to -90, + then document skew detection has failed. + + Unsupported pixel format of the source image. + + + + + Get skew angle of the provided document image. + + + Document's unmanaged image to get skew angle of. + + Returns document's skew angle. If the returned angle equals to -90, + then document skew detection has failed. + + Unsupported pixel format of the source image. + + + + + Get skew angle of the provided document image. + + + Document's unmanaged image to get skew angle of. + Image's rectangle to process (used to exclude processing of + regions, which are not relevant to skew detection). + + Returns document's skew angle. If the returned angle equals to -90, + then document skew detection has failed. + + Unsupported pixel format of the source image. + + + + + Steps per degree, [1, 10]. + + + The value defines quality of Hough transform and its ability to detect + line slope precisely. + + Default value is set to 1. + + + + + + Maximum skew angle to detect, [0, 45] degrees. + + + The value sets maximum document's skew angle to detect. + Document's skew angle can be as positive (rotated counter clockwise), as negative + (rotated clockwise). So setting this value to 25, for example, will lead to + [-25, 25] degrees detection range. + + Scanned documents usually have skew in the [-20, 20] degrees range. + + Default value is set to 30. + + + + + + Minimum angle to detect skew in degrees. + + + The property is deprecated and setting it has not any effect. + Use property instead. + + + + + Maximum angle to detect skew in degrees. + + + The property is deprecated and setting it has not any effect. + Use property instead. + + + + + Radius for searching local peak value, [1, 10]. + + + The value determines radius around a map's value, which is analyzed to determine + if the map's value is a local maximum in specified area. + + Default value is set to 4. + + + + + Wood texture. + + + The texture generator creates textures with effect of + rings on trunk's shear. The property allows to specify the + desired amount of wood rings. + + The generator is based on the Perlin noise function. + + Sample usage: + + // create texture generator + WoodTexture textureGenerator = new WoodTexture( ); + // generate new texture + float[,] texture = textureGenerator.Generate( 320, 240 ); + // convert it to image to visualize + Bitmap textureImage = TextureTools.ToBitmap( texture ); + + + Result image: + + + + + + + Initializes a new instance of the class. + + + + + + Initializes a new instance of the class. + + + Wood rings amount. + + + + + Generate texture. + + + Texture's width. + Texture's height. + + Two dimensional array of intensities. + + Generates new texture of the specified size. + + + + + Reset generator. + + + Regenerates internal random numbers. + + + + + Wood rings amount, ≥ 3. + + + The property sets the amount of wood rings, which make effect of + rings on trunk's shear. + + Default value is set to 12. + + + + + Internal memory manager used by image processing routines. + + + The memory manager supports memory allocation/deallocation + caching. Caching means that memory blocks may be not freed on request, but + kept for later reuse. + + + + + Allocate unmanaged memory. + + + Memory size to allocate. + + Return's pointer to the allocated memory buffer. + + The method allocates requested amount of memory and returns pointer to it. It may avoid allocation + in the case some caching scheme is uses and there is already enough allocated memory available. + + There is insufficient memory to satisfy the request. + + + + + Free unmanaged memory. + + + Pointer to memory buffer to free. + + This method may skip actual deallocation of memory and keep it for future requests, + if some caching scheme is used. + + + + + Force freeing unused memory. + + + Frees and removes from cache memory blocks, which are not used by users. + + Returns number of freed memory blocks. + + + + + Maximum amount of memory blocks to keep in cache. + + + The value specifies the amount of memory blocks, which could be + cached by the memory manager. + + Default value is set to 3. Maximum value is 10. + + + + + + Current amount of memory blocks in cache. + + + + + + Amount of busy memory blocks in cache (which were not freed yet by user). + + + + + + Amount of free memory blocks in cache (which are not busy by users). + + + + + + Amount of cached memory in bytes. + + + + + + Maximum memory block's size in bytes, which could be cached. + + + Memory blocks, which size is greater than this value, are not cached. + + + + + Minimum memory block's size in bytes, which could be cached. + + + Memory blocks, which size is less than this value, are not cached. + + + + + Extract YCbCr channel from image. + + + The filter extracts specified YCbCr channel of color image and returns + it in the form of grayscale image. + + The filter accepts 24 and 32 bpp color images and produces + 8 bpp grayscale images. + + Sample usage: + + // create filter + YCbCrExtractChannel filter = new YCbCrExtractChannel( YCbCr.CrIndex ); + // apply the filter + Bitmap crChannel = filter.Apply( image ); + + + + + + + + + Initializes a new instance of the class. + + + + + + Initializes a new instance of the class. + + + YCbCr channel to extract. + + + + + Process the filter on the specified image. + + + Source image data. + Destination image data. + + + + + Format translations dictionary. + + + + + YCbCr channel to extract. + + + Default value is set to (Y channel). + + Invalid channel was specified. + + + + + Resize image using nearest neighbor algorithm. + + + The class implements image resizing filter using nearest + neighbor algorithm, which does not assume any interpolation. + + The filter accepts 8 and 16 bpp grayscale images and 24, 32, 48 and 64 bpp + color images for processing. + + Sample usage: + + // create filter + ResizeNearestNeighbor filter = new ResizeNearestNeighbor( 400, 300 ); + // apply the filter + Bitmap newImage = filter.Apply( image ); + + + Initial image: + + Result image: + + + + + + + + + + Initializes a new instance of the class. + + + Width of the new image. + Height of the new image. + + + + + Process the filter on the specified image. + + + Source image data. + Destination image data. + + + + + Format translations dictionary. + + + + + Crop an image. + + + + The filter crops an image providing a new image, which contains only the specified + rectangle of the original image. + + The filter accepts 8 and 16 bpp grayscale images and 24, 32, 48 and 64 bpp + color images for processing. + + Sample usage: + + // create filter + Crop filter = new Crop( new Rectangle( 75, 75, 320, 240 ) ); + // apply the filter + Bitmap newImage = filter.Apply( image ); + + + Initial image: + + Result image: + + + + + + + Initializes a new instance of the class. + + + Rectangle to crop. + + + + + Calculates new image size. + + + Source image data. + + New image size - size of the destination image. + + + + + Process the filter on the specified image. + + + Source image data. + Destination image data. + + + + + Format translations dictionary. + + + + + Rectangle to crop. + + + + + Flood filling with specified color starting from specified point. + + + The filter performs image's area filling (4 directional) starting + from the specified point. It fills + the area of the pointed color, but also fills other colors, which + are similar to the pointed within specified tolerance. + The area is filled using specified fill color. + + + The filter accepts 8 bpp grayscale images and 24 bpp + color images for processing. + + Sample usage: + + // create filter + PointedColorFloodFill filter = new PointedColorFloodFill( ); + // configure the filter + filter.Tolerance = Color.FromArgb( 150, 92, 92 ); + filter.FillColor = Color.FromArgb( 255, 255, 255 ); + filter.StartingPoint = new IntPoint( 150, 100 ); + // apply the filter + filter.ApplyInPlace( image ); + + + Initial image: + + Result image: + + + + + + + + + Initializes a new instance of the class. + + + + + + Initializes a new instance of the class. + + + Fill color. + + + + + Process the filter on the specified image. + + + Source image data. + Image rectangle for processing by the filter. + + + + + Format translations dictionary. + + + + + Flood fill tolerance. + + + The tolerance value determines which colors to fill. If the + value is set to 0, then only color of the pointed pixel + is filled. If the value is not 0, then other colors may be filled as well, + which are similar to the color of the pointed pixel within the specified + tolerance. + + The tolerance value is specified as , + where each component (R, G and B) represents tolerance for the corresponding + component of color. This allows to set different tolerances for red, green + and blue components. + + + + + + Fill color. + + + The fill color is used to fill image's area starting from the + specified point. + + For grayscale images the color needs to be specified with all three + RGB values set to the same value, (128, 128, 128) for example. + + Default value is set to black. + + + + + + Point to start filling from. + + + The property allows to set the starting point, where filling is + started from. + + Default value is set to (0, 0). + + + + + + Erosion operator from Mathematical Morphology with 3x3 structuring element. + + + The filter represents an optimized version of + filter, which is aimed for grayscale image processing with 3x3 structuring element. + + See filter, which represents generic version of + erosion filter supporting custom structuring elements and wider range of image formats. + + The filter accepts 8 bpp grayscale images for processing. + + + + + + + + + Initializes a new instance of the class. + + + + + + Process the filter on the specified image. + + + Source image data. + Destination image data. + Image rectangle for processing by the filter. + + Processing rectangle mast be at least 3x3 in size. + + + + + Format translations dictionary. + + + + + Flat field correction filter. + + + The goal of flat-field correction is to remove artifacts from 2-D images that + are caused by variations in the pixel-to-pixel sensitivity of the detector and/or by distortions + in the optical path. The filter requires two images for the input - source image, which represents + acquisition of some objects (using microscope, for example), and background image, which is taken + without any objects presented. The source image is corrected using the formula: src = bgMean * src / bg, + where src - source image's pixel value, bg - background image's pixel value, bgMean - mean + value of background image. + + If background image is not provided, then it will be automatically generated on each filter run + from source image. The automatically generated background image is produced running Gaussian Blur on the + original image with (sigma value is set to 5, kernel size is set to 21). Before blurring the original image + is resized to 1/3 of its original size and then the result of blurring is resized back to the original size. + + + The class processes only grayscale (8 bpp indexed) and color (24 bpp) images. + + Sample usage: + + // create filter + FlatFieldCorrection filter = new FlatFieldCorrection( bgImage ); + // process image + filter.ApplyInPlace( sourceImage ); + + + Source image: + + Background image: + + Result image: + + + + + + + Initializes a new instance of the class. + + + This constructor does not set background image, which means that background + image will be generated on the fly on each filter run. The automatically generated background + image is produced running Gaussian Blur on the original image with (sigma value is set to 5, + kernel size is set to 21). Before blurring the original image is resized to 1/3 of its original size + and then the result of blurring is resized back to the original size. + + + + + Initializes a new instance of the class. + + + Background image used for flat field correction. + + + + + Process the filter on the specified image. + + + Source image data. + + + + + Background image used for flat field correction. + + + The property sets the background image (without any objects), which will be used + for illumination correction of an image passed to the filter. + + The background image must have the same size and pixel format as source image. + Otherwise exception will be generated when filter is applied to source image. + + Setting this property will clear the property - + only one background image is allowed: managed or unmanaged. + + + + + + Background image used for flat field correction. + + + The property sets the background image (without any objects), which will be used + for illumination correction of an image passed to the filter. + + The background image must have the same size and pixel format as source image. + Otherwise exception will be generated when filter is applied to source image. + + Setting this property will clear the property - + only one background image is allowed: managed or unmanaged. + + + + + + Format translations dictionary. + + + See for more information. + + + + + Color filtering in HSL color space. + + + The filter operates in HSL color space and filters + pixels, which color is inside/outside of the specified HSL range - + it keeps pixels with colors inside/outside of the specified range and fills the + rest with specified color. + + The filter accepts 24 and 32 bpp color images for processing. + + Sample usage: + + // create filter + HSLFiltering filter = new HSLFiltering( ); + // set color ranges to keep + filter.Hue = new IntRange( 335, 0 ); + filter.Saturation = new Range( 0.6f, 1 ); + filter.Luminance = new Range( 0.1f, 1 ); + // apply the filter + filter.ApplyInPlace( image ); + + + Initial image: + + Result image: + + + Sample usage with saturation update only: + + // create filter + HSLFiltering filter = new HSLFiltering( ); + // configure the filter + filter.Hue = new IntRange( 340, 20 ); + filter.UpdateLuminance = false; + filter.UpdateHue = false; + // apply the filter + filter.ApplyInPlace( image ); + + + Result image: + + + + + + + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the class. + + + Range of hue component. + Range of saturation component. + Range of luminance component. + + + + + Process the filter on the specified image. + + + Source image data. + Image rectangle for processing by the filter. + + + + + Format translations dictionary. + + + + + Range of hue component, [0, 359]. + + + Because of hue values are cycled, the minimum value of the hue + range may have bigger integer value than the maximum value, for example [330, 30]. + + + + + Range of saturation component, [0, 1]. + + + + + Range of luminance component, [0, 1]. + + + + + Fill color used to fill filtered pixels. + + + + + Determines, if pixels should be filled inside or outside specified + color range. + + + Default value is set to , which means + the filter removes colors outside of the specified range. + + + + + Determines, if hue value of filtered pixels should be updated. + + + The property specifies if hue of filtered pixels should be + updated with value from fill color or not. + + Default value is set to . + + + + + Determines, if saturation value of filtered pixels should be updated. + + + The property specifies if saturation of filtered pixels should be + updated with value from fill color or not. + + Default value is set to . + + + + + Determines, if luminance value of filtered pixels should be updated. + + + The property specifies if luminance of filtered pixels should be + updated with value from fill color or not. + + Default value is set to . + + + + + Gaussian blur filter. + + + The filter performs convolution filter using + the kernel, which is calculate with the help of + method and then converted to integer kernel by dividing all elements by the element with the + smallest value. Using the kernel the convolution filter is known as Gaussian blur. + + Using property it is possible to configure + sigma value of Gaussian function. + + For the list of supported pixel formats, see the documentation to + filter. + + By default this filter sets property to + , so the alpha channel of 32 bpp and 64 bpp images is blurred as well. + + + Sample usage: + + // create filter with kernel size equal to 11 + // and Gaussia sigma value equal to 4.0 + GaussianBlur filter = new GaussianBlur( 4, 11 ); + // apply the filter + filter.ApplyInPlace( image ); + + + Initial image: + + Result image: + + + + + + + + + Initializes a new instance of the class. + + + + + + Initializes a new instance of the class. + + + Gaussian sigma value. + + + + + Initializes a new instance of the class. + + + Gaussian sigma value. + Kernel size. + + + + + Gaussian sigma value, [0.5, 5.0]. + + + Sigma value for Gaussian function used to calculate + the kernel. + + Default value is set to 1.4. + + + + + + Kernel size, [3, 21]. + + + Size of Gaussian kernel. + + Default value is set to 5. + + + + + + Simple edge detector. + + + The filter performs convolution filter using + the edges kernel: + + + 0 -1 0 + -1 4 -1 + 0 -1 0 + + + For the list of supported pixel formats, see the documentation to + filter. + + Sample usage: + + // create filter + Edges filter = new Edges( ); + // apply the filter + filter.ApplyInPlace( image ); + + + Initial image: + + Result image: + + + + + + + + + Initializes a new instance of the class. + + + + + Base class for filters, which operate with two images of the same size and format and + produce new image as a result. + + + The abstract class is the base class for all filters, which can + be applied to an image producing new image as a result of image processing. + + The base class is aimed for such type of filters, which require additional image + to process the source image. The additional image is set by + or property and must have the same size and pixel format + as source image. See documentation of particular inherited class for information + about overlay image purpose. + + + + + + + Initializes a new instance of the class. + + + + + + Initializes a new instance of the class. + + + Overlay image. + + + + + Initializes a new instance of the class. + + + Unmanaged overlay image. + + + + + Process the filter on the specified image. + + + Source image data. + Destination image data. + + + + + Process the filter on the specified image. + + + Source image data. + Overlay image data. + Destination image data + + Overlay image size and pixel format is checked by this base class, before + passing execution to inherited class. + + + + + Overlay image. + + + + The property sets an overlay image, which will be used as the second image required + to process source image. See documentation of particular inherited class for information + about overlay image purpose. + + + Overlay image must have the same size and pixel format as source image. + Otherwise exception will be generated when filter is applied to source image. + + Setting this property will clear the property - + only one overlay image is allowed: managed or unmanaged. + + + + + + Unmanaged overlay image. + + + + The property sets an overlay image, which will be used as the second image required + to process source image. See documentation of particular inherited class for information + about overlay image purpose. + + + Overlay image must have the same size and pixel format as source image. + Otherwise exception will be generated when filter is applied to source image. + + Setting this property will clear the property - + only one overlay image is allowed: managed or unmanaged. + + + + + + Otsu thresholding. + + + The class implements Otsu thresholding, which is described in + N. Otsu, "A threshold selection method from gray-level histograms", IEEE Trans. Systems, + Man and Cybernetics 9(1), pp. 62–66, 1979. + + This implementation instead of minimizing the weighted within-class variance + does maximization of between-class variance, what gives the same result. The approach is + described in this presentation. + + The filter accepts 8 bpp grayscale images for processing. + + Sample usage: + + // create filter + OtsuThreshold filter = new OtsuThreshold( ); + // apply the filter + filter.ApplyInPlace( image ); + // check threshold value + byte t = filter.ThresholdValue; + // ... + + + Initial image: + + Result image (calculated threshold is 97): + + + + + + + + + + Initializes a new instance of the class. + + + + + + Calculate binarization threshold for the given image. + + + Image to calculate binarization threshold for. + Rectangle to calculate binarization threshold for. + + Returns binarization threshold. + + The method is used to calculate binarization threshold only. The threshold + later may be applied to the image using image processing filter. + + Source pixel format is not supported by the routine. It should be + 8 bpp grayscale (indexed) image. + + + + + Calculate binarization threshold for the given image. + + + Image to calculate binarization threshold for. + Rectangle to calculate binarization threshold for. + + Returns binarization threshold. + + The method is used to calculate binarization threshold only. The threshold + later may be applied to the image using image processing filter. + + Source pixel format is not supported by the routine. It should be + 8 bpp grayscale (indexed) image. + + + + + Calculate binarization threshold for the given image. + + + Image to calculate binarization threshold for. + Rectangle to calculate binarization threshold for. + + Returns binarization threshold. + + The method is used to calculate binarization threshold only. The threshold + later may be applied to the image using image processing filter. + + Source pixel format is not supported by the routine. It should be + 8 bpp grayscale (indexed) image. + + + + + Process the filter on the specified image. + + + Source image data. + Image rectangle for processing by the filter. + + + + + Format translations dictionary. + + + + + Threshold value. + + + The property is read only and represents the value, which + was automaticaly calculated using Otsu algorithm. + + + + + Iterative threshold search and binarization. + + + + The algorithm works in the following way: + + select any start threshold; + compute average value of Background (µB) and Object (µO) values: + 1) all pixels with a value that is below threshold, belong to the Background values; + 2) all pixels greater or equal threshold, belong to the Object values. + + calculate new thresghold: (µB + µO) / 2; + if |oldThreshold - newThreshold| is less than a given manimum allowed error, then stop iteration process + and create the binary image with the new threshold. + + + + For additional information see Digital Image Processing, Gonzalez/Woods. Ch.10 page:599. + + The filter accepts 8 and 16 bpp grayscale images for processing. + + Since the filter can be applied as to 8 bpp and to 16 bpp images, + the initial value of property should be set appropriately to the + pixel format. In the case of 8 bpp images the threshold value is in the [0, 255] range, but + in the case of 16 bpp images the threshold value is in the [0, 65535] range. + + Sample usage: + + // create filter + IterativeThreshold filter = new IterativeThreshold( 2, 128 ); + // apply the filter + Bitmap newImage = filter.Apply( image ); + + + Initial image: + + Result image (calculated threshold is 102): + + + + + + + + + + Initializes a new instance of the class. + + + + + + Initializes a new instance of the class. + + + Minimum allowed error, that ends the iteration process. + + + + + Initializes a new instance of the class. + + + Minimum allowed error, that ends the iteration process. + Initial threshold value. + + + + + Calculate binarization threshold for the given image. + + + Image to calculate binarization threshold for. + Rectangle to calculate binarization threshold for. + + Returns binarization threshold. + + The method is used to calculate binarization threshold only. The threshold + later may be applied to the image using image processing filter. + + Source pixel format is not supported by the routine. It should + 8 bpp grayscale (indexed) or 16 bpp grayscale image. + + + + + Calculate binarization threshold for the given image. + + + Image to calculate binarization threshold for. + Rectangle to calculate binarization threshold for. + + Returns binarization threshold. + + The method is used to calculate binarization threshold only. The threshold + later may be applied to the image using image processing filter. + + Source pixel format is not supported by the routine. It should + 8 bpp grayscale (indexed) or 16 bpp grayscale image. + + + + + Calculate binarization threshold for the given image. + + + Image to calculate binarization threshold for. + Rectangle to calculate binarization threshold for. + + Returns binarization threshold. + + The method is used to calculate binarization threshold only. The threshold + later may be applied to the image using image processing filter. + + Source pixel format is not supported by the routine. It should + 8 bpp grayscale (indexed) or 16 bpp grayscale image. + + + + + Process the filter on the specified image. + + + Source image data. + Image rectangle for processing by the filter. + + + + + Minimum error, value when iterative threshold search is stopped. + + + Default value is set to 0. + + + + + Calculate Euclidean difference between two images and threshold it. + + + The filter produces similar to , however it uses + Euclidean distance for finding difference between pixel values instead of Manhattan distance. Result of this + image processing routine may be useful in motion detection applications or finding areas of significant + difference. + + The filter accepts 8 and 24/32color images for processing. + + Sample usage: + + // create filter + ThresholdedEuclideanDifference filter = new ThresholdedEuclideanDifference( 60 ); + // apply the filter + filter.OverlayImage = backgroundImage; + Bitmap resultImage = filter.Apply( sourceImage ); + + + Source image: + + Background image: + + Result image: + + + + + + + + + Initializes a new instance of the class. + + + + + + Initializes a new instance of the class. + + + Difference threshold (see ). + + + + + Process the filter on the specified image. + + + Source image data. + Overlay image data. + Destination image data + + + + + Difference threshold. + + + The property specifies difference threshold. If difference between pixels of processing image + and overlay image is greater than this value, then corresponding pixel of result image is set to white; otherwise + black. + + + Default value is set to 15. + + + + + Number of pixels which were set to white in destination image during last image processing call. + + + The property may be useful to determine amount of difference between two images which, + for example, may be treated as amount of motion in motion detection applications, etc. + + + + + Format translations dictionary. + + + See for more information. + + + + + Intersect filter - get MIN of pixels in two images. + + + The intersect filter takes two images (source and overlay images) + of the same size and pixel format and produces an image, where each pixel equals + to the minimum value of corresponding pixels from provided images. + + The filter accepts 8 and 16 bpp grayscale images and 24, 32, 48 and 64 bpp + color images for processing. + + Sample usage: + + // create filter + Intersect filter = new Intersect( overlayImage ); + // apply the filter + Bitmap resultImage = filter.Apply( sourceImage ); + + + Source image: + + Overlay image: + + Result image: + + + + + + + + + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the class. + + + Overlay image. + + + + + Initializes a new instance of the class. + + + Unmanaged overlay image. + + + + + Process the filter on the specified image. + + + Source image data. + Overlay image data. + + + + + Format translations dictionary. + + + + + Color dithering using Sierra error diffusion. + + + The image processing routine represents color dithering algorithm, which is based on + error diffusion dithering with Sierra coefficients. Error is diffused + on 10 neighbor pixels with next coefficients: + + | * | 5 | 3 | + | 2 | 4 | 5 | 4 | 2 | + | 2 | 3 | 2 | + + / 32 + + + The image processing routine accepts 24/32 bpp color images for processing. As a result this routine + produces 4 bpp or 8 bpp indexed image, which depends on size of the specified + color table - 4 bpp result for + color tables with 16 colors or less; 8 bpp result for larger color tables. + + Sample usage: + + // create dithering routine (use default color table) + SierraColorDithering dithering = new SierraColorDithering( ); + // apply the dithering routine + Bitmap newImage = dithering.Apply( image ); + + + Initial image: + + Result image: + + + + + + + + + + + + Initializes a new instance of the class. + + + + + + Texture tools. + + + The class represents collection of different texture tools, like + converting a texture to/from grayscale image. + + Sample usage: + + // create texture generator + WoodTexture textureGenerator = new WoodTexture( ); + // generate new texture + float[,] texture = textureGenerator.Generate( 320, 240 ); + // convert it to image to visualize + Bitmap textureImage = TextureTools.ToBitmap( texture ); + + + + + + + Convert texture to grayscale bitmap. + + + Texture to convert to bitmap. + + Returns bitmap of the texture. + + + + + Convert grayscale bitmap to texture. + + + Image to convert to texture. + + Returns texture as 2D float array. + + Only grayscale (8 bpp indexed images) are supported. + + + + + Convert grayscale bitmap to texture + + + Image data to convert to texture + + Returns texture as 2D float array. + + Only grayscale (8 bpp indexed images) are supported. + + + + + Convert grayscale bitmap to texture. + + + Image data to convert to texture. + + Returns texture as 2D float array. + + Only grayscale (8 bpp indexed images) are supported. + + + + + Textile texture. + + + The texture generator creates textures with effect of textile. + + The generator is based on the Perlin noise function. + + Sample usage: + + // create texture generator + TextileTexture textureGenerator = new TextileTexture( ); + // generate new texture + float[,] texture = textureGenerator.Generate( 320, 240 ); + // convert it to image to visualize + Bitmap textureImage = TextureTools.ToBitmap( texture ); + + + Result image: + + + + + + + Initializes a new instance of the class. + + + + + + Generate texture. + + + Texture's width. + Texture's height. + + Two dimensional array of intensities. + + Generates new texture of the specified size. + + + + + Reset generator. + + + Regenerates internal random numbers. + + + + + Blob counter based on recursion. + + + The class counts and extracts stand alone objects in + images using recursive version of connected components labeling + algorithm. + + The algorithm treats all pixels with values less or equal to + as background, but pixels with higher values are treated as objects' pixels. + + Since this algorithm is based on recursion, it is + required to be careful with its application to big images with big blobs, + because in this case recursion will require big stack size and may lead + to stack overflow. The recursive version may be applied (and may be even + faster than ) to an image with small blobs - + "star sky" image (or small cells, for example, etc). + + For blobs' searching the class supports 8 bpp indexed grayscale images and + 24/32 bpp color images. + See documentation about for information about which + pixel formats are supported for extraction of blobs. + + Sample usage: + + // create an instance of blob counter algorithm + RecursiveBlobCounter bc = new RecursiveBlobCounter( ); + // process binary image + bc.ProcessImage( image ); + Rectangle[] rects = bc.GetObjectsRectangles( ); + // process blobs + foreach ( Rectangle rect in rects ) + { + // ... + } + + + + + + + Base class for different blob counting algorithms. + + + The class is abstract and serves as a base for different blob counting algorithms. + Classes, which inherit from this base class, require to implement + method, which does actual building of object's label's map. + + For blobs' searcing usually all inherited classes accept binary images, which are actually + grayscale thresholded images. But the exact supported format should be checked in particular class, + inheriting from the base class. For blobs' extraction the class supports grayscale (8 bpp indexed) + and color images (24 and 32 bpp). + + Sample usage: + + // create an instance of blob counter algorithm + BlobCounterBase bc = new ... + // set filtering options + bc.FilterBlobs = true; + bc.MinWidth = 5; + bc.MinHeight = 5; + // process binary image + bc.ProcessImage( image ); + Blob[] blobs = bc.GetObjects( image, false ); + // process blobs + foreach ( Blob blob in blobs ) + { + // ... + // blob.Rectangle - blob's rectangle + // blob.Image - blob's image + } + + + + + + + Objects count. + + + + + Objects' labels. + + + + + Width of processed image. + + + + + Height of processed image. + + + + + Initializes a new instance of the class. + + + Creates new instance of the class with + an empty objects map. Before using methods, which provide information about blobs + or extract them, the , + or + method should be called to collect objects map. + + + + + Initializes a new instance of the class. + + + Binary image to look for objects in. + + Creates new instance of the class with + initialized objects map built by calling method. + + + + + Initializes a new instance of the class. + + + Binary image data to look for objects in. + + Creates new instance of the class with + initialized objects map built by calling method. + + + + + Initializes a new instance of the class. + + + Unmanaged binary image to look for objects in. + + Creates new instance of the class with + initialized objects map built by calling method. + + + + + Build objects map. + + + Source binary image. + + Processes the image and builds objects map, which is used later to extracts blobs. + + Unsupported pixel format of the source image. + + + + + Build objects map. + + + Source binary image data. + + Processes the image and builds objects map, which is used later to extracts blobs. + + Unsupported pixel format of the source image. + + + + + Build object map from raw image data. + + + Source unmanaged binary image data. + + Processes the image and builds objects map, which is used later to extracts blobs. + + Unsupported pixel format of the source image. + Thrown by some inherited classes if some image property other + than the pixel format is not supported. See that class's documentation or the exception message for details. + + + + + Get objects' rectangles. + + + Returns array of objects' rectangles. + + The method returns array of objects rectangles. Before calling the + method, the , + or method should be called, which will + build objects map. + + No image was processed before, so objects' rectangles + can not be collected. + + + + + Get objects' information. + + + Returns array of partially initialized blobs (without property initialized). + + By the amount of provided information, the method is between and + methods. The method provides array of blobs without initialized their image. + Blob's image may be extracted later using + or method. + + + + + // create blob counter and process image + BlobCounter bc = new BlobCounter( sourceImage ); + // specify sort order + bc.ObjectsOrder = ObjectsOrder.Size; + // get objects' information (blobs without image) + Blob[] blobs = bc.GetObjectInformation( ); + // process blobs + foreach ( Blob blob in blobs ) + { + // check blob's properties + if ( blob.Rectangle.Width > 50 ) + { + // the blob looks interesting, let's extract it + bc.ExtractBlobsImage( sourceImage, blob ); + } + } + + + + No image was processed before, so objects' information + can not be collected. + + + + + Get blobs. + + + Source image to extract objects from. + + Returns array of blobs. + Specifies size of blobs' image to extract. + If set to each blobs' image will have the same size as + the specified image. If set to each blobs' image will + have the size of its blob. + + The method returns array of blobs. Before calling the + method, the , + or method should be called, which will build + objects map. + + The method supports 24/32 bpp color and 8 bpp indexed grayscale images. + + + Unsupported pixel format of the provided image. + No image was processed before, so objects + can not be collected. + + + + + Get blobs. + + + Source unmanaged image to extract objects from. + Specifies size of blobs' image to extract. + If set to each blobs' image will have the same size as + the specified image. If set to each blobs' image will + have the size of its blob. + + Returns array of blobs. + + The method returns array of blobs. Before calling the + method, the , + or method should be called, which will build + objects map. + + The method supports 24/32 bpp color and 8 bpp indexed grayscale images. + + + Unsupported pixel format of the provided image. + No image was processed before, so objects + can not be collected. + + + + + Extract blob's image. + + + Source image to extract blob's image from. + Blob which is required to be extracted. + Specifies size of blobs' image to extract. + If set to each blobs' image will have the same size as + the specified image. If set to each blobs' image will + have the size of its blob. + + The method is used to extract image of partially initialized blob, which + was provided by method. Before calling the + method, the , + or method should be called, which will build + objects map. + + The method supports 24/32 bpp color and 8 bpp indexed grayscale images. + + + Unsupported pixel format of the provided image. + No image was processed before, so blob + can not be extracted. + + + + + Extract blob's image. + + + Source unmanaged image to extract blob's image from. + Blob which is required to be extracted. + Specifies size of blobs' image to extract. + If set to each blobs' image will have the same size as + the specified image. If set to each blobs' image will + have the size of its blob. + + The method is used to extract image of partially initialized blob, which + was provided by method. Before calling the + method, the , + or method should be called, which will build + objects map. + + The method supports 24/32 bpp color and 8 bpp indexed grayscale images. + + + Unsupported pixel format of the provided image. + No image was processed before, so blob + can not be extracted. + + + + + Get list of points on the left and right edges of the blob. + + + Blob to collect edge points for. + List of points on the left edge of the blob. + List of points on the right edge of the blob. + + The method scans each line of the blob and finds the most left and the + most right points for it adding them to appropriate lists. The method may be very + useful in conjunction with different routines from , + which allow finding convex hull or quadrilateral's corners. + + Both lists of points are sorted by Y coordinate - points with smaller Y + value go first. + + + No image was processed before, so blob + can not be extracted. + + + + + Get list of points on the top and bottom edges of the blob. + + + Blob to collect edge points for. + List of points on the top edge of the blob. + List of points on the bottom edge of the blob. + + The method scans each column of the blob and finds the most top and the + most bottom points for it adding them to appropriate lists. The method may be very + useful in conjunction with different routines from , + which allow finding convex hull or quadrilateral's corners. + + Both lists of points are sorted by X coordinate - points with smaller X + value go first. + + + No image was processed before, so blob + can not be extracted. + + + + + Get list of object's edge points. + + + Blob to collect edge points for. + + Returns unsorted list of blob's edge points. + + The method scans each row and column of the blob and finds the + most top/bottom/left/right points. The method returns similar result as if results of + both and + methods were combined, but each edge point occurs only once in the list. + + Edge points in the returned list are not ordered. This makes the list unusable + for visualization with methods, which draw polygon or poly-line. But the returned list + can be used with such algorithms, like convex hull search, shape analyzer, etc. + + + No image was processed before, so blob + can not be extracted. + + + + + Actual objects map building. + + + Unmanaged image to process. + + By the time this method is called bitmap's pixel format is not + yet checked, so this should be done by the class inheriting from the base class. + and members are initialized + before the method is called, so these members may be used safely. + + + + + Objects count. + + + Number of objects (blobs) found by method. + + + + + + Objects' labels. + + + The array of width * height size, which holds + labels for all objects. Background is represented with 0 value, + but objects are represented with labels starting from 1. + + + + + Objects sort order. + + + The property specifies objects' sort order, which are provided + by , , etc. + + + + + + Specifies if blobs should be filtered. + + + If the property is equal to false, then there is no any additional + post processing after image was processed. If the property is set to true, then + blobs filtering is done right after image processing routine. If + is set, then custom blobs' filtering is done, which is implemented by user. Otherwise + blobs are filtered according to dimensions specified in , + , and properties. + + Default value is set to . + + + + + Specifies if size filetering should be coupled or not. + + + In uncoupled filtering mode, objects are filtered out in the case if + their width is smaller than or height is smaller than + . But in coupled filtering mode, objects are filtered out in + the case if their width is smaller than and height is + smaller than . In both modes the idea with filtering by objects' + maximum size is the same as filtering by objects' minimum size. + + Default value is set to , what means uncoupled filtering by size. + + + + + + Minimum allowed width of blob. + + + The property specifies minimum object's width acceptable by blob counting + routine and has power only when property is set to + and custom blobs' filter is + set to . + + See documentation to for additional information. + + + + + + Minimum allowed height of blob. + + + The property specifies minimum object's height acceptable by blob counting + routine and has power only when property is set to + and custom blobs' filter is + set to . + + See documentation to for additional information. + + + + + + Maximum allowed width of blob. + + + The property specifies maximum object's width acceptable by blob counting + routine and has power only when property is set to + and custom blobs' filter is + set to . + + See documentation to for additional information. + + + + + + Maximum allowed height of blob. + + + The property specifies maximum object's height acceptable by blob counting + routine and has power only when property is set to + and custom blobs' filter is + set to . + + See documentation to for additional information. + + + + + + Custom blobs' filter to use. + + + The property specifies custom blobs' filtering routine to use. It has + effect only in the case if property is set to . + + When custom blobs' filtering routine is set, it has priority over default filtering done + with , , and . + + + + + + Initializes a new instance of the class. + + + Creates new instance of the class with + an empty objects map. Before using methods, which provide information about blobs + or extract them, the , + or + method should be called to collect objects map. + + + + + Initializes a new instance of the class. + + + Image to look for objects in. + + + + + Initializes a new instance of the class. + + + Image data to look for objects in. + + + + + Initializes a new instance of the class. + + + Unmanaged image to look for objects in. + + + + + Actual objects map building. + + + Unmanaged image to process. + + The method supports 8 bpp indexed grayscale images and 24/32 bpp color images. + + Unsupported pixel format of the source image. + + + + + Background threshold's value. + + + The property sets threshold value for distinguishing between background + pixel and objects' pixels. All pixel with values less or equal to this property are + treated as background, but pixels with higher values are treated as objects' pixels. + + In the case of colour images a pixel is treated as objects' pixel if any of its + RGB values are higher than corresponding values of this threshold. + + For processing grayscale image, set the property with all RGB components eqaul. + + Default value is set to (0, 0, 0) - black colour. + + + + + Gather statistics about image in HSL color space. + + + The class is used to accumulate statistical values about images, + like histogram, mean, standard deviation, etc. for each HSL color channel. + + The class accepts 24 and 32 bpp color images for processing. + + Sample usage: + + // gather statistics + ImageStatisticsHSL stat = new ImageStatisticsHSL( image ); + // get saturation channel's histogram + ContinuousHistogram saturation = stat.Saturation; + // check mean value of saturation channel + if ( saturation.Mean > 0.5 ) + { + // do further processing + } + + + + + + + + + Initializes a new instance of the class. + + + Image to gather statistics about. + + Source pixel format is not supported. + + + + + Initializes a new instance of the class. + + + Image to gather statistics about. + Mask image which specifies areas to collect statistics for. + + The mask image must be a grayscale/binary (8bpp) image of the same size as the + specified source image, where black pixels (value 0) correspond to areas which should be excluded + from processing. So statistics is calculated only for pixels, which are none black in the mask image. + + + Source pixel format is not supported. + Mask image must be 8 bpp grayscale image. + Mask must have the same size as the source image to get statistics for. + + + + + Initializes a new instance of the class. + + + Image to gather statistics about. + Mask array which specifies areas to collect statistics for. + + The mask array must be of the same size as the specified source image, where 0 values + correspond to areas which should be excluded from processing. So statistics is calculated only for pixels, + which have none zero corresponding value in the mask. + + + Source pixel format is not supported. + Mask must have the same size as the source image to get statistics for. + + + + + Initializes a new instance of the class. + + + Unmanaged image to gather statistics about. + + Source pixel format is not supported. + + + + + Initializes a new instance of the class. + + + Image to gather statistics about. + Mask image which specifies areas to collect statistics for. + + The mask image must be a grayscale/binary (8bpp) image of the same size as the + specified source image, where black pixels (value 0) correspond to areas which should be excluded + from processing. So statistics is calculated only for pixels, which are none black in the mask image. + + + Source pixel format is not supported. + Mask image must be 8 bpp grayscale image. + Mask must have the same size as the source image to get statistics for. + + + + + Initializes a new instance of the class. + + + Image to gather statistics about. + Mask array which specifies areas to collect statistics for. + + The mask array must be of the same size as the specified source image, where 0 values + correspond to areas which should be excluded from processing. So statistics is calculated only for pixels, + which have none zero corresponding value in the mask. + + + Source pixel format is not supported. + Mask must have the same size as the source image to get statistics for. + + + + + Histogram of saturation channel. + + + + + + Histogram of luminance channel. + + + + + + Histogram of saturation channel excluding black pixels. + + + The property keeps statistics about saturation channel, which + excludes all black pixels, what affects mean, standard deviation, etc. + + + + + + Histogram of luminance channel excluding black pixels. + + + The property keeps statistics about luminance channel, which + excludes all black pixels, what affects mean, standard deviation, etc. + + + + + + Total pixels count in the processed image. + + + + + + Total pixels count in the processed image excluding black pixels. + + + + + + Fill holes in objects in binary image. + + + The filter allows to fill black holes in white object in a binary image. + It is possible to specify maximum holes' size to fill using + and properties. + + The filter accepts binary image only, which are represented as 8 bpp images. + + Sample usage: + + // create and configure the filter + FillHoles filter = new FillHoles( ); + filter.MaxHoleHeight = 20; + filter.MaxHoleWidth = 20; + filter.CoupledSizeFiltering = false; + // apply the filter + Bitmap result = filter.Apply( image ); + + + Initial image: + + Result image: + + + + + + + Initializes a new instance of the class. + + + + + Process the filter on the specified image. + + + Source image data. + + + + + Specifies if size filetering should be coupled or not. + + + In uncoupled filtering mode, holes are filled in the case if + their width is smaller than or equal to or height is smaller than + or equal to . But in coupled filtering mode, holes are filled only in + the case if both width and height are smaller or equal to the corresponding value. + + Default value is set to , what means coupled filtering by size. + + + + + + Maximum width of a hole to fill. + + + All holes, which have width greater than this value, are kept unfilled. + See for additional information. + + Default value is set to . + + + + + Maximum height of a hole to fill. + + + All holes, which have height greater than this value, are kept unfilled. + See for additional information. + + Default value is set to . + + + + + Format translations dictionary. + + + + + Move canvas to the specified point. + + + + The filter moves canvas to the specified area filling unused empty areas with specified color. + + The filter accepts 8/16 bpp grayscale images and 24/32/48/64 bpp color image + for processing. + + Sample usage: + + // create filter + CanvasMove filter = new CanvasMove( new IntPoint( -50, -50 ), Color.Green ); + // apply the filter + filter.ApplyInPlace( image ); + + + Initial image: + + Result image: + + + + + + + Initializes a new instance of the class. + + + Point to move the canvas to. + + + + + Initializes a new instance of the class. + + + Point to move the canvas. + RGB color to use for filling areas empty areas in color images. + + + + + Initializes a new instance of the class. + + + Point to move the canvas. + Gray color to use for filling empty areas in grayscale images. + + + + + Initializes a new instance of the class. + + + Point to move the canvas. + RGB color to use for filling areas empty areas in color images. + Gray color to use for filling empty areas in grayscale images. + + + + + Process the filter on the specified image. + + + Source image data. + + + + + Format translations dictionary. + + + See + documentation for additional information. + + + + + RGB fill color. + + + The color is used to fill empty areas in color images. + + Default value is set to white - ARGB(255, 255, 255, 255). + + + + + Gray fill color. + + + The color is used to fill empty areas in grayscale images. + + Default value is set to white - 255. + + + + + Point to move the canvas to. + + + + + + Replace RGB channel of color imgae. + + + Replaces specified RGB channel of color image with + specified grayscale image. + + The filter is quite useful in conjunction with filter + (however may be used alone in some cases). Using the filter + it is possible to extract one of RGB channel, perform some image processing with it and then + put it back into the original color image. + + The filter accepts 24, 32, 48 and 64 bpp color images for processing. + + Sample usage: + + // extract red channel + ExtractChannel extractFilter = new ExtractChannel( RGB.R ); + Bitmap channel = extractFilter.Apply( image ); + // threshold channel + Threshold thresholdFilter = new Threshold( 230 ); + thresholdFilter.ApplyInPlace( channel ); + // put the channel back + ReplaceChannel replaceFilter = new ReplaceChannel( RGB.R, channel ); + replaceFilter.ApplyInPlace( image ); + + + Initial image: + + Result image: + + + + + + + + + + Initializes a new instance of the class. + + + ARGB channel to replace. + Channel image to use for replacement. + + + + + Initializes a new instance of the class. + + + RGB channel to replace. + Unmanaged channel image to use for replacement. + + + + + Process the filter on the specified image. + + + Source image data. + Image rectangle for processing by the filter. + + Channel image size does not match source + image size. + Channel image's format does not correspond to format of the source image. + + Can not replace alpha channel of none ARGB image. The + exception is throw, when alpha channel is requested to be replaced in RGB image. + + + + + Format translations dictionary. + + + + + ARGB channel to replace. + + + Default value is set to . + + Invalid channel is specified. + + + + + Grayscale image to use for channel replacement. + + + + Setting this property will clear the property - + only one channel image is allowed: managed or unmanaged. + + + Channel image should be 8 bpp indexed or 16 bpp grayscale image. + + + + + Unmanaged grayscale image to use for channel replacement. + + + + Setting this property will clear the property - + only one channel image is allowed: managed or unmanaged. + + + Channel image should be 8 bpp indexed or 16 bpp grayscale image. + + + + + Grayscale image using R-Y algorithm. + + + The class uses R-Y algorithm to convert color image + to grayscale. The conversion coefficients are: + + Red: 0.5; + Green: 0.419; + Blue: 0.081. + + + + + + + + + + + Base class for image grayscaling. + + + This class is the base class for image grayscaling. Other + classes should inherit from this class and specify RGB + coefficients used for color image conversion to grayscale. + + The filter accepts 24, 32, 48 and 64 bpp color images and produces + 8 (if source is 24 or 32 bpp image) or 16 (if source is 48 or 64 bpp image) + bpp grayscale image. + + Sample usage: + + // create grayscale filter (BT709) + Grayscale filter = new Grayscale( 0.2125, 0.7154, 0.0721 ); + // apply the filter + Bitmap grayImage = filter.Apply( image ); + + + Initial image: + + Result image: + + + + + + + + + + + Portion of red channel's value to use during conversion from RGB to grayscale. + + + + + Portion of green channel's value to use during conversion from RGB to grayscale. + + + + + Portion of blue channel's value to use during conversion from RGB to grayscale. + + + + + Initializes a new instance of the class. + + + Red coefficient. + Green coefficient. + Blue coefficient. + + + + + Process the filter on the specified image. + + + Source image data. + Destination image data. + + + + + Format translations dictionary. + + + + + Set of predefined common grayscaling algorithms, which have aldready initialized + grayscaling coefficients. + + + + + Grayscale image using BT709 algorithm. + + + The instance uses BT709 algorithm to convert color image + to grayscale. The conversion coefficients are: + + Red: 0.2125; + Green: 0.7154; + Blue: 0.0721. + + + Sample usage: + + // apply the filter + Bitmap grayImage = Grayscale.CommonAlgorithms.BT709.Apply( image ); + + + + + + + Grayscale image using R-Y algorithm. + + + The instance uses R-Y algorithm to convert color image + to grayscale. The conversion coefficients are: + + Red: 0.5; + Green: 0.419; + Blue: 0.081. + + + Sample usage: + + // apply the filter + Bitmap grayImage = Grayscale.CommonAlgorithms.RMY.Apply( image ); + + + + + + + Grayscale image using Y algorithm. + + + The instance uses Y algorithm to convert color image + to grayscale. The conversion coefficients are: + + Red: 0.299; + Green: 0.587; + Blue: 0.114. + + + Sample usage: + + // apply the filter + Bitmap grayImage = Grayscale.CommonAlgorithms.Y.Apply( image ); + + + + + + + Initializes a new instance of the class. + + + + + Threshold binarization with error carry. + + + The filter is similar to filter in the way, + that it also uses threshold value for image binarization. Unlike regular threshold + filter, this filter uses cumulative pixel value in comparing with threshold value. + If cumulative pixel value is below threshold value, then image pixel becomes black. + If cumulative pixel value is equal or higher than threshold value, then image pixel + becomes white and cumulative pixel value is decreased by 255. In the beginning of each + image line the cumulative value is reset to 0. + + + The filter accepts 8 bpp grayscale images for processing. + + Sample usage: + + // create filter + Threshold filter = new Threshold( 100 ); + // apply the filter + filter.ApplyInPlace( image ); + + + Initial image: + + Result image: + + + + + + + Initializes a new instance of the class. + + + + + + Initializes a new instance of the class. + + + Threshold value. + + + + + Process the filter on the specified image. + + + Source image data. + Image rectangle for processing by the filter. + + + + + Format translations dictionary. + + + + + Threshold value. + + + Default value is 128. + + + + + Color dithering using Burkes error diffusion. + + + The image processing routine represents color dithering algorithm, which is based on + error diffusion dithering with Burkes coefficients. Error is diffused + on 7 neighbor pixels with next coefficients: + + | * | 8 | 4 | + | 2 | 4 | 8 | 4 | 2 | + + / 32 + + + The image processing routine accepts 24/32 bpp color images for processing. As a result this routine + produces 4 bpp or 8 bpp indexed image, which depends on size of the specified + color table - 4 bpp result for + color tables with 16 colors or less; 8 bpp result for larger color tables. + + Sample usage: + + // create color image quantization routine + ColorImageQuantizer ciq = new ColorImageQuantizer( new MedianCutQuantizer( ) ); + // create 8 colors table + Color[] colorTable = ciq.CalculatePalette( image, 8 ); + // create dithering routine + BurkesColorDithering dithering = new BurkesColorDithering( ); + dithering.ColorTable = colorTable; + // apply the dithering routine + Bitmap newImage = dithering.Apply( image ); + + + Initial image: + + Result image: + + + + + + + + + + + + Initializes a new instance of the class. + + + + + + Moravec corners detector. + + + The class implements Moravec corners detector. For information about algorithm's + details its description + should be studied. + + Due to limitations of Moravec corners detector (anisotropic response, etc.) its usage is limited + to certain cases only. + + The class processes only grayscale 8 bpp and color 24/32 bpp images. + + Sample usage: + + // create corner detector's instance + MoravecCornersDetector mcd = new MoravecCornersDetector( ); + // process image searching for corners + List<IntPoint> corners = scd.ProcessImage( image ); + // process points + foreach ( IntPoint corner in corners ) + { + // ... + } + + + + + + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the class. + + + Threshold value, which is used to filter out uninteresting points. + + + + + Initializes a new instance of the class. + + + Threshold value, which is used to filter out uninteresting points. + Window size used to determine if point is interesting. + + + + + Process image looking for corners. + + + Source image to process. + + Returns array of found corners (X-Y coordinates). + + The source image has incorrect pixel format. + + + + + Process image looking for corners. + + + Source image data to process. + + Returns array of found corners (X-Y coordinates). + + The source image has incorrect pixel format. + + + + + Process image looking for corners. + + + Unmanaged source image to process. + + Returns array of found corners (X-Y coordinates). + + The source image has incorrect pixel format. + + + + + Window size used to determine if point is interesting, [3, 15]. + + + The value specifies window size, which is used for initial searching of + corners candidates and then for searching local maximums. + + Default value is set to 3. + + + Setting value is not odd. + + + + + Threshold value, which is used to filter out uninteresting points. + + + The value is used to filter uninteresting points - points which have value below + specified threshold value are treated as not corners candidates. Increasing this value decreases + the amount of detected point. + + Default value is set to 500. + + + + + + Mirroring filter. + + + The filter mirrors image around X and/or Y axis (horizontal and vertical + mirroring). + + The filter accepts 8 bpp grayscale images and 24 bpp + color images for processing. + + Sample usage: + + // create filter + Mirror filter = new Mirror( false, true ); + // apply the filter + filter.ApplyInPlace( image ); + + + Initial image: + + Result image: + + + + + + + Initializes a new instance of the class. + + + Specifies if mirroring should be done for X axis. + Specifies if mirroring should be done for Y axis + + + + + Process the filter on the specified image. + + + Source image data. + Image rectangle for processing by the filter. + + + + + Format translations dictionary. + + + + + Specifies if mirroring should be done for X axis (horizontal mirroring). + + + + + + Specifies if mirroring should be done for Y axis (vertical mirroring). + + + + + + Apply filter according to the specified mask. + + + The image processing routine applies the specified to + a source image according to the specified mask - if a pixel/value in the specified mask image/array + is set to 0, then the original pixel's value is kept; otherwise the pixel is filtered using the + specified base filter. + + Mask can be specified as .NET's managed Bitmap, as + UnmanagedImage or as byte array. + In the case if mask is specified as image, it must be 8 bpp grayscale image. In all case + mask size must be the same as size of the image to process. + + Pixel formats accepted by this filter are specified by the . + + Sample usage: + + // create the filter + MaskedFilter maskedFilter = new MaskedFilter( new Sepia( ), maskImage ); + // apply the filter + maskedFilter.ApplyInPlace( image ); + + + Initial image: + + Mask image: + + Result image: + + + + + + + Initializes a new instance of the class. + + + Base filter to apply to the specified source image. + Mask image to use. + + + + + Initializes a new instance of the class. + + + Base filter to apply to the specified source image. + Unmanaged mask image to use. + + + + + Initializes a new instance of the class. + + + Base filter to apply to the specified source image. + to use. + + + + + Process the filter on the specified image. + + + Source image data. + Image rectangle for processing by the filter. + + None of the possible mask properties were set. Need to provide mask before applying the filter. + Invalid size of provided mask. Its size must be the same as the size of the image to mask. + + + + + Base filter to apply to the source image. + + + The property specifies base filter which is applied to the specified source + image (to all pixels which have corresponding none 0 value in mask image/array). + + The base filter must implement interface. + + The base filter must never change image's pixel format. For example, if source + image's pixel format is 24 bpp color image, then it must stay the same after the base + filter is applied. + + The base filter must never change size of the source image. + + + Base filter can not be set to null. + The specified base filter must implement IFilterInformation interface. + The specified filter must never change pixel format. + + + + + Mask image to apply. + + + The property specifies mask image to use. The image must be grayscale + (8 bpp format) and have the same size as the source image to process. + + When the property is set, both and + properties are set to . + + + The mask image must be 8 bpp grayscale image. + + + + + Unmanaged mask image to apply. + + + The property specifies unmanaged mask image to use. The image must be grayscale + (8 bpp format) and have the same size as the source image to process. + + When the property is set, both and + properties are set to . + + + The mask image must be 8 bpp grayscale image. + + + + + Mask to apply. + + + The property specifies mask array to use. Size of the array must + be the same size as the size of the source image to process - its 0th dimension + must be equal to image's height and its 1st dimension must be equal to width. For + example, for 640x480 image, the mask array must be defined as: + + byte[,] mask = new byte[480, 640]; + + + + + + + Format translations dictionary. + + + See + documentation for additional information. + + The property returns format translation table from the + . + + + + + + Jitter filter. + + + The filter moves each pixel of a source image in + random direction within a window of specified radius. + + The filter accepts 8 bpp grayscale images and 24/32 + color images for processing. + + Sample usage: + + // create filter + Jitter filter = new Jitter( 4 ); + // apply the filter + filter.ApplyInPlace( image ); + + + Initial image: + + Result image: + + + + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the class. + + + Jittering radius. + + + + + Process the filter on the specified image. + + + Source image data. + Destination image data. + Image rectangle for processing by the filter. + + + + + Format translations dictionary. + + + See + documentation for additional information. + + + + + Jittering radius, [1, 10] + + + Determines radius in which pixels can move. + + Default value is set to 2. + + + + + + Fill areas iniside of the specified region. + + + + The filter fills areas inside of specified region using the specified color. + + The filter accepts 8bpp grayscale and 24/32 bpp color images for processing. + + Sample usage: + + // create filter + CanvasFill filter = new CanvasFill( new Rectangle( + 5, 5, image.Width - 10, image.Height - 10 ), Color.Red ); + // apply the filter + filter.ApplyInPlace( image ); + + + + + + + + + Initializes a new instance of the class. + + + Region to fill. + + + + + Initializes a new instance of the class. + + + Region to fill. + RGB color to use for filling areas inside of specified region in color images. + + + + + Initializes a new instance of the class. + + + Region to fill. + Gray color to use for filling areas inside of specified region in grayscale images. + + + + + Initializes a new instance of the class. + + + Region to fill. + RGB color to use for filling areas inside of specified region in color images. + Gray color to use for filling areas inside of specified region in grayscale images. + + + + + Process the filter on the specified image. + + + Source image data. + + + + + Format translations dictionary. + + + See + documentation for additional information. + + + + + RGB fill color. + + + The color is used to fill areas out of specified region in color images. + + Default value is set to white - RGB(255, 255, 255). + + + + + Gray fill color. + + + The color is used to fill areas out of specified region in grayscale images. + + Default value is set to white - 255. + + + + + Region to fill. + + + Pixels inside of the specified region will be filled with specified color. + + + + + Histogram equalization filter. + + + The filter does histogram equalization increasing local contrast in images. The effect + of histogram equalization can be better seen on images, where pixel values have close contrast values. + Through this adjustment, pixels intensities can be better distributed on the histogram. This allows for + areas of lower local contrast to gain a higher contrast without affecting the global contrast. + + + The filter accepts 8 bpp grayscale images and 24/32 bpp + color images for processing. + + For color images the histogram equalization is applied to each color plane separately. + + Sample usage: + + // create filter + HistogramEqualization filter = new HistogramEqualization( ); + // process image + filter.ApplyInPlace( sourceImage ); + + + Source image: + + Result image: + + + + + + + Initializes a new instance of the class. + + + + + Process the filter on the specified image. + + + Source image data. + Image rectangle for processing by the filter. + + + + + Format translations dictionary. + + + + + Extract RGB channel from image. + + + Extracts specified channel of color image and returns + it as grayscale image. + + The filter accepts 24, 32, 48 and 64 bpp color images and produces + 8 (if source is 24 or 32 bpp image) or 16 (if source is 48 or 64 bpp image) + bpp grayscale image. + + Sample usage: + + // create filter + ExtractChannel filter = new ExtractChannel( RGB.G ); + // apply the filter + Bitmap channelImage = filter.Apply( image ); + + + Initial image: + + Result image: + + + + + + + + + + Initializes a new instance of the class. + + + + + + Initializes a new instance of the class. + + + ARGB channel to extract. + + + + + Process the filter on the specified image. + + + Source image data. + Destination image data. + + Can not extract alpha channel from none ARGB image. The + exception is throw, when alpha channel is requested from RGB image. + + + + + Format translations dictionary. + + + + + ARGB channel to extract. + + + Default value is set to . + + Invalid channel is specified. + + + + + Dithering using Floyd-Steinberg error diffusion. + + + The filter represents binarization filter, which is based on + error diffusion dithering with Floyd-Steinberg + coefficients. Error is diffused on 4 neighbor pixels with next coefficients: + + + | * | 7 | + | 3 | 5 | 1 | + + / 16 + + + The filter accepts 8 bpp grayscale images for processing. + + Sample usage: + + // create filter + FloydSteinbergDithering filter = new FloydSteinbergDithering( ); + // apply the filter + filter.ApplyInPlace( image ); + + + Initial image: + + Result image: + + + + + + + + + + + + Initializes a new instance of the class. + + + + + + Core image relatad methods. + + + All methods of this class are static and represent general routines + used by different image processing classes. + + + + + Check if specified 8 bpp image is grayscale. + + + Image to check. + + Returns true if the image is grayscale or false otherwise. + + The methods checks if the image is a grayscale image of 256 gradients. + The method first examines if the image's pixel format is + Format8bppIndexed + and then it examines its palette to check if the image is grayscale or not. + + + + + Create and initialize new 8 bpp grayscale image. + + + Image width. + Image height. + + Returns the created grayscale image. + + The method creates new 8 bpp grayscale image and initializes its palette. + Grayscale image is represented as + Format8bppIndexed + image with palette initialized to 256 gradients of gray color. + + + + + Set pallete of the 8 bpp indexed image to grayscale. + + + Image to initialize. + + The method initializes palette of + Format8bppIndexed + image with 256 gradients of gray color. + + Provided image is not 8 bpp indexed image. + + + + + Clone image. + + + Source image. + Pixel format of result image. + + Returns clone of the source image with specified pixel format. + + The original Bitmap.Clone() + does not produce the desired result - it does not create a clone with specified pixel format. + More of it, the original method does not create an actual clone - it does not create a copy + of the image. That is why this method was implemented to provide the functionality. + + + + + Clone image. + + + Source image. + + Return clone of the source image. + + The original Bitmap.Clone() + does not produce the desired result - it does not create an actual clone (it does not create a copy + of the image). That is why this method was implemented to provide the functionality. + + + + + Clone image. + + + Source image data. + + Clones image from source image data. The message does not clone pallete in the + case if the source image has indexed pixel format. + + + + + Format an image. + + + Source image to format. + + Formats the image to one of the formats, which are supported + by the AForge.Imaging library. The image is left untouched in the + case if it is already of + Format24bppRgb or + Format32bppRgb or + Format32bppArgb or + Format48bppRgb or + Format64bppArgb + format or it is grayscale, otherwise the image + is converted to Format24bppRgb + format. + + The method is deprecated and method should + be used instead with specifying desired pixel format. + + + + + + Load bitmap from file. + + + File name to load bitmap from. + + Returns loaded bitmap. + + The method is provided as an alternative of + method to solve the issues of locked file. The standard .NET's method locks the source file until + image's object is disposed, so the file can not be deleted or overwritten. This method workarounds the issue and + does not lock the source file. + + Sample usage: + + Bitmap image = AForge.Imaging.Image.FromFile( "test.jpg" ); + + + + + + + Convert bitmap with 16 bits per plane to a bitmap with 8 bits per plane. + + + Source image to convert. + + Returns new image which is a copy of the source image but with 8 bits per plane. + + The routine does the next pixel format conversions: + + Format16bppGrayScale to + Format8bppIndexed with grayscale palette; + Format48bppRgb to + Format24bppRgb; + Format64bppArgb to + Format32bppArgb; + Format64bppPArgb to + Format32bppPArgb. + + + + Invalid pixel format of the source image. + + + + + Convert bitmap with 8 bits per plane to a bitmap with 16 bits per plane. + + + Source image to convert. + + Returns new image which is a copy of the source image but with 16 bits per plane. + + The routine does the next pixel format conversions: + + Format8bppIndexed (grayscale palette assumed) to + Format16bppGrayScale; + Format24bppRgb to + Format48bppRgb; + Format32bppArgb to + Format64bppArgb; + Format32bppPArgb to + Format64bppPArgb. + + + + Invalid pixel format of the source image. + + + + + Linear correction of YCbCr channels. + + + The filter operates in YCbCr color space and provides + with the facility of linear correction of its channels - mapping specified channels' + input ranges to specified output ranges. + + The filter accepts 24 and 32 bpp color images for processing. + + Sample usage: + + // create filter + YCbCrLinear filter = new YCbCrLinear( ); + // configure the filter + filter.InCb = new Range( -0.276f, 0.163f ); + filter.InCr = new Range( -0.202f, 0.500f ); + // apply the filter + filter.ApplyInPlace( image ); + + + Initial image: + + Result image: + + + + + + + + + + Initializes a new instance of the class. + + + + + + Process the filter on the specified image. + + + Source image data. + Image rectangle for processing by the filter. + + + + + Y component's input range. + + + Y component is measured in the range of [0, 1]. + + + + + Cb component's input range. + + + Cb component is measured in the range of [-0.5, 0.5]. + + + + + Cr component's input range. + + + Cr component is measured in the range of [-0.5, 0.5]. + + + + + Y component's output range. + + + Y component is measured in the range of [0, 1]. + + + + + Cb component's output range. + + + Cb component is measured in the range of [-0.5, 0.5]. + + + + + Cr component's output range. + + + Cr component is measured in the range of [-0.5, 0.5]. + + + + + Format translations dictionary. + + + + + Resize image using bilinear interpolation algorithm. + + + The class implements image resizing filter using bilinear + interpolation algorithm. + + The filter accepts 8 grayscale images and 24/32 bpp + color images for processing. + + Sample usage: + + // create filter + ResizeBilinear filter = new ResizeBilinear( 400, 300 ); + // apply the filter + Bitmap newImage = filter.Apply( image ); + + + Initial image: + + Result image: + + + + + + + + + + Initializes a new instance of the class. + + + Width of the new image. + Height of the new image. + + + + + Process the filter on the specified image. + + + Source image data. + Destination image data. + + + + + Format translations dictionary. + + + + + Oil painting filter. + + + Processing source image the filter changes each pixels' value + to the value of pixel with the most frequent intensity within window of the + specified size. Going through the window the filters + finds which intensity of pixels is the most frequent. Then it updates value + of the pixel in the center of the window to the value with the most frequent + intensity. The update procedure creates the effect of oil painting. + + The filter accepts 8 bpp grayscale images and 24/32 + color images for processing. + + Sample usage: + + // create filter + OilPainting filter = new OilPainting( 15 ); + // apply the filter + filter.ApplyInPlace( image ); + + + Initial image: + + Result image: + + + + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the class. + + + Brush size. + + + + + Process the filter on the specified image. + + + Source image data. + Destination image data. + Image rectangle for processing by the filter. + + + + + Format translations dictionary. + + + See + documentation for additional information. + + + + + Brush size, [3, 21]. + + + Window size to search for most frequent pixels' intensity. + + Default value is set to 5. + + + + + Extract normalized RGB channel from color image. + + + Extracts specified normalized RGB channel of color image and returns + it as grayscale image. + + Normalized RGB color space is defined as: + + r = R / (R + G + B ), + g = G / (R + G + B ), + b = B / (R + G + B ), + + where R, G and B are components of RGB color space and + r, g and b are components of normalized RGB color space. + + + The filter accepts 24, 32, 48 and 64 bpp color images and produces + 8 (if source is 24 or 32 bpp image) or 16 (if source is 48 or 64 bpp image) + bpp grayscale image. + + Sample usage: + + // create filter + ExtractNormalizedRGBChannel filter = new ExtractNormalizedRGBChannel( RGB.G ); + // apply the filter + Bitmap channelImage = filter.Apply( image ); + + + + + + + + + + Initializes a new instance of the class. + + + + + + Initializes a new instance of the class. + + + Normalized RGB channel to extract. + + + + + Process the filter on the specified image. + + + Source image data. + Destination image data. + + + + + Format translations dictionary. + + + + + Normalized RGB channel to extract. + + + Default value is set to . + + Invalid channel is specified. + + + + + Binary dilatation operator from Mathematical Morphology with 3x3 structuring element. + + + The filter represents an optimized version of + filter, which is aimed for binary images (containing black and white pixels) processed + with 3x3 structuring element. This makes this filter ideal for growing objects in binary + images – it puts white pixel to the destination image in the case if there is at least + one white neighbouring pixel in the source image. + + See filter, which represents generic version of + dilatation filter supporting custom structuring elements and wider range of image formats. + + The filter accepts 8 bpp grayscale (binary) images for processing. + + + + + + + + + Initializes a new instance of the class. + + + + + + Process the filter on the specified image. + + + Source image data. + Destination image data. + Image rectangle for processing by the filter. + + Processing rectangle mast be at least 3x3 in size. + + + + + Format translations dictionary. + + + + + Sobel edge detector. + + + The filter searches for objects' edges by applying Sobel operator. + + Each pixel of the result image is calculated as approximated absolute gradient + magnitude for corresponding pixel of the source image: + + |G| = |Gx| + |Gy] , + + where Gx and Gy are calculate utilizing Sobel convolution kernels: + + Gx Gy + -1 0 +1 +1 +2 +1 + -2 0 +2 0 0 0 + -1 0 +1 -1 -2 -1 + + Using the above kernel the approximated magnitude for pixel x is calculate using + the next equation: + + P1 P2 P3 + P8 x P4 + P7 P6 P5 + + |G| = |P1 + 2P2 + P3 - P7 - 2P6 - P5| + + |P3 + 2P4 + P5 - P1 - 2P8 - P7| + + + + The filter accepts 8 bpp grayscale images for processing. + + Sample usage: + + // create filter + SobelEdgeDetector filter = new SobelEdgeDetector( ); + // apply the filter + filter.ApplyInPlace( image ); + + + Initial image: + + Result image: + + + + + + + + + + Initializes a new instance of the class. + + + + + + Process the filter on the specified image. + + + Source image data. + Destination image data. + Image rectangle for processing by the filter. + + + + + Format translations dictionary. + + + + + Scale intensity or not. + + + The property determines if edges' pixels intensities of the result image + should be scaled in the range of the lowest and the highest possible intensity + values. + + Default value is set to . + + + + + + Sharpen filter + + + The filter performs convolution filter using + the sharpen kernel: + + + 0 -1 0 + -1 5 -1 + 0 -1 0 + + + For the list of supported pixel formats, see the documentation to + filter. + + Sample usage: + + // create filter + Sharpen filter = new Sharpen( ); + // apply the filter + filter.ApplyInPlace( image ); + + + Initial image: + + Result image: + + + + + + + + + Initializes a new instance of the class. + + + + + Sepia filter - old brown photo. + + + The filter makes an image look like an old brown photo. The main + idea of the algorithm: + + transform to YIQ color space; + modify it; + transform back to RGB. + + + + 1) RGB -> YIQ: + + Y = 0.299 * R + 0.587 * G + 0.114 * B + I = 0.596 * R - 0.274 * G - 0.322 * B + Q = 0.212 * R - 0.523 * G + 0.311 * B + + + + + 2) update: + + I = 51 + Q = 0 + + + + + 3) YIQ -> RGB: + + R = 1.0 * Y + 0.956 * I + 0.621 * Q + G = 1.0 * Y - 0.272 * I - 0.647 * Q + B = 1.0 * Y - 1.105 * I + 1.702 * Q + + + + The filter accepts 24/32 bpp color images for processing. + + Sample usage: + + // create filter + Sepia filter = new Sepia( ); + // apply the filter + filter.ApplyInPlace( image ); + + + Initial image: + + Result image: + + + + + + + Initializes a new instance of the class. + + + + + Process the filter on the specified image. + + + Source image data. + Image rectangle for processing by the filter. + + + + + Format translations dictionary. + + + + + Invert image. + + + The filter inverts colored and grayscale images. + + The filter accepts 8, 16 bpp grayscale and 24, 48 bpp color images for processing. + + Sample usage: + + // create filter + Invert filter = new Invert( ); + // apply the filter + filter.ApplyInPlace( image ); + + + Initial image: + + Result image: + + + + + + + Initializes a new instance of the class. + + + + + Process the filter on the specified image. + + + Source image data. + Image rectangle for processing by the filter. + + + + + Format translations dictionary. + + + + + Euclidean color filtering. + + + The filter filters pixels, which color is inside/outside + of RGB sphere with specified center and radius - it keeps pixels with + colors inside/outside of the specified sphere and fills the rest with + specified color. + + The filter accepts 24 and 32 bpp color images for processing. + + Sample usage: + + // create filter + EuclideanColorFiltering filter = new EuclideanColorFiltering( ); + // set center colol and radius + filter.CenterColor = new RGB( 215, 30, 30 ); + filter.Radius = 100; + // apply the filter + filter.ApplyInPlace( image ); + + + Initial image: + + Result image: + + + + + + + + + Initializes a new instance of the class. + + + + + + Initializes a new instance of the class. + + + RGB sphere's center. + RGB sphere's radius. + + + + + Process the filter on the specified image. + + + Source image data. + Image rectangle for processing by the filter. + + + + + Format translations dictionary. + + + + + RGB sphere's radius, [0, 450]. + + + Default value is 100. + + + + + RGB sphere's center. + + + Default value is (255, 255, 255) - white color. + + + + + Fill color used to fill filtered pixels. + + + + + Determines, if pixels should be filled inside or outside specified + RGB sphere. + + + Default value is set to , which means + the filter removes colors outside of the specified range. + + + + + Exhaustive template matching. + + + The class implements exhaustive template matching algorithm, + which performs complete scan of source image, comparing each pixel with corresponding + pixel of template. + + The class processes only grayscale 8 bpp and color 24 bpp images. + + Sample usage: + + // create template matching algorithm's instance + ExhaustiveTemplateMatching tm = new ExhaustiveTemplateMatching( 0.9f ); + // find all matchings with specified above similarity + TemplateMatch[] matchings = tm.ProcessImage( sourceImage, templateImage ); + // highlight found matchings + BitmapData data = sourceImage.LockBits( + new Rectangle( 0, 0, sourceImage.Width, sourceImage.Height ), + ImageLockMode.ReadWrite, sourceImage.PixelFormat ); + foreach ( TemplateMatch m in matchings ) + { + Drawing.Rectangle( data, m.Rectangle, Color.White ); + // do something else with matching + } + sourceImage.UnlockBits( data ); + + + The class also can be used to get similarity level between two image of the same + size, which can be useful to get information about how different/similar are images: + + // create template matching algorithm's instance + // use zero similarity to make sure algorithm will provide anything + ExhaustiveTemplateMatching tm = new ExhaustiveTemplateMatching( 0 ); + // compare two images + TemplateMatch[] matchings = tm.ProcessImage( image1, image2 ); + // check similarity level + if ( matchings[0].Similarity > 0.95f ) + { + // do something with quite similar images + } + + + + + + + + Initializes a new instance of the class. + + + + + + Initializes a new instance of the class. + + + Similarity threshold. + + + + + Process image looking for matchings with specified template. + + + Source image to process. + Template image to search for. + + Returns array of found template matches. The array is sorted by similarity + of found matches in descending order. + + The source image has incorrect pixel format. + Template image is bigger than source image. + + + + + Process image looking for matchings with specified template. + + + Source image to process. + Template image to search for. + Rectangle in source image to search template for. + + Returns array of found template matches. The array is sorted by similarity + of found matches in descending order. + + The source image has incorrect pixel format. + Template image is bigger than source image. + + + + + Process image looking for matchings with specified template. + + + Source image data to process. + Template image to search for. + + Returns array of found template matches. The array is sorted by similarity + of found matches in descending order. + + The source image has incorrect pixel format. + Template image is bigger than source image. + + + + + Process image looking for matchings with specified template. + + + Source image data to process. + Template image to search for. + Rectangle in source image to search template for. + + Returns array of found template matches. The array is sorted by similarity + of found matches in descending order. + + The source image has incorrect pixel format. + Template image is bigger than source image. + + + + + Process image looking for matchings with specified template. + + + Unmanaged source image to process. + Unmanaged template image to search for. + + Returns array of found template matches. The array is sorted by similarity + of found matches in descending order. + + The source image has incorrect pixel format. + Template image is bigger than source image. + + + + + Process image looking for matchings with specified template. + + + Unmanaged source image to process. + Unmanaged template image to search for. + Rectangle in source image to search template for. + + Returns array of found template matches. The array is sorted by similarity + of found matches in descending order. + + The source image has incorrect pixel format. + Template image is bigger than search zone. + + + + + Similarity threshold, [0..1]. + + + The property sets the minimal acceptable similarity between template + and potential found candidate. If similarity is lower than this value, + then object is not treated as matching with template. + + + Default value is set to 0.9. + + + + + + Block matching implementation with the exhaustive search algorithm. + + + The class implements exhaustive search block matching algorithm + (see documentation for for information about + block matching algorithms). Exhaustive search algorithm tests each possible + location of block within search window trying to find a match with minimal + difference. + + Because of the exhaustive nature of the algorithm, high performance + should not be expected in the case if big number of reference points is provided + or big block size and search radius are specified. Minimizing theses values increases + performance. But too small block size and search radius may affect quality. + + The class processes only grayscale (8 bpp indexed) and color (24 bpp) images. + + Sample usage: + + // collect reference points using corners detector (for example) + SusanCornersDetector scd = new SusanCornersDetector( 30, 18 ); + List<IntPoint> points = scd.ProcessImage( sourceImage ); + + // create block matching algorithm's instance + ExhaustiveBlockMatching bm = new ExhaustiveBlockMatching( 8, 12 ); + // process images searching for block matchings + List<BlockMatch> matches = bm.ProcessImage( sourceImage, points, searchImage ); + + // draw displacement vectors + BitmapData data = sourceImage.LockBits( + new Rectangle( 0, 0, sourceImage.Width, sourceImage.Height ), + ImageLockMode.ReadWrite, sourceImage.PixelFormat ); + + foreach ( BlockMatch match in matches ) + { + // highlight the original point in source image + Drawing.FillRectangle( data, + new Rectangle( match.SourcePoint.X - 1, match.SourcePoint.Y - 1, 3, 3 ), + Color.Yellow ); + // draw line to the point in search image + Drawing.Line( data, match.SourcePoint, match.MatchPoint, Color.Red ); + + // check similarity + if ( match.Similarity > 0.98f ) + { + // process block with high similarity somehow special + } + } + + sourceImage.UnlockBits( data ); + + + Test image 1 (source): + + Test image 2 (search): + + Result image: + + + + + + + Block matching interface. + + + The interface specifies set of methods, which should be implemented by different + block matching algorithms. + + Block matching algorithms work with two images - source and search image - and + a set of reference points. For each provided reference point, the algorithm takes + a block from source image (reference point is a coordinate of block's center) and finds + the best match for it in search image providing its coordinate (search is done within + search window of specified size). In other words, block matching algorithm tries to + find new coordinates in search image of specified reference points in source image. + + + + + + + Process images matching blocks between them. + + + Source image with reference points. + List of reference points to be matched. + Image in which the reference points will be looked for. + + Returns list of found block matches. + + + + + Process images matching blocks between them. + + + Source image with reference points. + List of reference points to be matched. + Image in which the reference points will be looked for. + + Returns list of found block matches. + + + + + Process images matching blocks between them. + + + Source unmanaged image with reference points. + List of reference points to be matched. + Unmanaged image in which the reference points will be looked for. + + Returns list of found block matches. + + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the class. + + + Block size to search for. + Search radius. + + + + + Process images matching blocks between hem. + + + Source image with reference points. + List of reference points to be matched. + Image in which the reference points will be looked for. + + Returns list of found block matches. The list is sorted by similarity + of found matches in descending order. + + Source and search images sizes must match. + Source images can be grayscale (8 bpp indexed) or color (24 bpp) image only. + Source and search images must have same pixel format. + + + + + Process images matching blocks between them. + + + Source image with reference points. + List of reference points to be matched. + Image in which the reference points will be looked for. + + Returns list of found block matches. The list is sorted by similarity + of found matches in descending order. + + Source and search images sizes must match. + Source images can be grayscale (8 bpp indexed) or color (24 bpp) image only. + Source and search images must have same pixel format. + + + + + Process images matching blocks between them. + + + Source unmanaged image with reference points. + List of reference points to be matched. + Unmanaged image in which the reference points will be looked for. + + Returns list of found block matches. The list is sorted by similarity + of found matches in descending order. + + Source and search images sizes must match. + Source images can be grayscale (8 bpp indexed) or color (24 bpp) image only. + Source and search images must have same pixel format. + + + + + Search radius. + + + The value specifies the shift from reference point in all + four directions, used to search for the best matching block. + + Default value is set to 12. + + + + + + Block size to search for. + + + The value specifies block size to search for. For each provided + reference pointer, a square block of this size is taken from the source image + (reference point becomes the coordinate of block's center) and the best match + is searched in second image within specified search + radius. + + Default value is set to 16. + + + + + + Similarity threshold, [0..1]. + + + The property sets the minimal acceptable similarity between blocks + in source and search images. If similarity is lower than this value, + then the candidate block in search image is not treated as a match for the block + in source image. + + + Default value is set to 0.9. + + + + + + Unsupported image format exception. + + + The unsupported image format exception is thrown in the case when + user passes an image of certain format to an image processing routine, which does + not support the format. Check documentation of the image processing routine + to discover which formats are supported by the routine. + + + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the class. + + + Message providing some additional information. + + + + + Initializes a new instance of the class. + + + Message providing some additional information. + Name of the invalid parameter. + + + + + Invalid image properties exception. + + + The invalid image properties exception is thrown in the case when + user provides an image with certain properties, which are treated as invalid by + particular image processing routine. Another case when this exception is + thrown is the case when user tries to access some properties of an image (or + of a recently processed image by some routine), which are not valid for that image. + + + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the class. + + + Message providing some additional information. + + + + + Initializes a new instance of the class. + + + Message providing some additional information. + Name of the invalid parameter. + + + + + Complex image. + + + The class is used to keep image represented in complex numbers sutable for Fourier + transformations. + + Sample usage: + + // create complex image + ComplexImage complexImage = ComplexImage.FromBitmap( image ); + // do forward Fourier transformation + complexImage.ForwardFourierTransform( ); + // get complex image as bitmat + Bitmap fourierImage = complexImage.ToBitmap( ); + + + Initial image: + + Fourier image: + + + + + + + Initializes a new instance of the class. + + + Image width. + Image height. + + The constractor is protected, what makes it imposible to instantiate this + class directly. To create an instance of this class or + method should be used. + + + + + Clone the complex image. + + + Returns copy of the complex image. + + + + + Create complex image from grayscale bitmap. + + + Source grayscale bitmap (8 bpp indexed). + + Returns an instance of complex image. + + The source image has incorrect pixel format. + Image width and height should be power of 2. + + + + + Create complex image from grayscale bitmap. + + + Source image data (8 bpp indexed). + + Returns an instance of complex image. + + The source image has incorrect pixel format. + Image width and height should be power of 2. + + + + + Convert complex image to bitmap. + + + Returns grayscale bitmap. + + + + + Applies forward fast Fourier transformation to the complex image. + + + + + + Applies backward fast Fourier transformation to the complex image. + + + + + + Image width. + + + + + + Image height. + + + + + + Status of the image - Fourier transformed or not. + + + + + + Complex image's data. + + + Return's 2D array of [height, width] size, which keeps image's + complex data. + + + + + RGB components. + + + The class encapsulates RGB color components. + PixelFormat.Format24bppRgb + actually means BGR format. + + + + + + Index of red component. + + + + + Index of green component. + + + + + Index of blue component. + + + + + Index of alpha component for ARGB images. + + + + + Red component. + + + + + Green component. + + + + + Blue component. + + + + + Alpha component. + + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the class. + + + Red component. + Green component. + Blue component. + + + + + Initializes a new instance of the class. + + + Red component. + Green component. + Blue component. + Alpha component. + + + + + Initializes a new instance of the class. + + + Initialize from specified color. + + + + + Color value of the class. + + + + + HSL components. + + + The class encapsulates HSL color components. + + + + + Hue component. + + + Hue is measured in the range of [0, 359]. + + + + + Saturation component. + + + Saturation is measured in the range of [0, 1]. + + + + + Luminance value. + + + Luminance is measured in the range of [0, 1]. + + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the class. + + + Hue component. + Saturation component. + Luminance component. + + + + + Convert from RGB to HSL color space. + + + Source color in RGB color space. + Destination color in HSL color space. + + See HSL and HSV Wiki + for information about the algorithm to convert from RGB to HSL. + + + + + Convert from RGB to HSL color space. + + + Source color in RGB color space. + + Returns instance, which represents converted color value. + + + + + Convert from HSL to RGB color space. + + + Source color in HSL color space. + Destination color in RGB color space. + + + + + Convert the color to RGB color space. + + + Returns instance, which represents converted color value. + + + + + YCbCr components. + + + The class encapsulates YCbCr color components. + + + + + Index of Y component. + + + + + Index of Cb component. + + + + + Index of Cr component. + + + + + Y component. + + + + + Cb component. + + + + + Cr component. + + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the class. + + + Y component. + Cb component. + Cr component. + + + + + Convert from RGB to YCbCr color space (Rec 601-1 specification). + + + Source color in RGB color space. + Destination color in YCbCr color space. + + + + + Convert from RGB to YCbCr color space (Rec 601-1 specification). + + + Source color in RGB color space. + + Returns instance, which represents converted color value. + + + + + Convert from YCbCr to RGB color space. + + + Source color in YCbCr color space. + Destination color in RGB color spacs. + + + + + Convert the color to RGB color space. + + + Returns instance, which represents converted color value. + + + + + Color dithering with a thresold matrix (ordered dithering). + + + The class implements ordered color dithering as described on + Wikipedia. + The algorithm achieves dithering by applying a threshold map on + the pixels displayed, causing some of the pixels to be rendered at a different color, depending on + how far in between the color is of available color entries. + + The image processing routine accepts 24/32 bpp color images for processing. As a result this routine + produces 4 bpp or 8 bpp indexed image, which depends on size of the specified + color table - 4 bpp result for + color tables with 16 colors or less; 8 bpp result for larger color tables. + + Sample usage: + + // create color image quantization routine + ColorImageQuantizer ciq = new ColorImageQuantizer( new MedianCutQuantizer( ) ); + // create 256 colors table + Color[] colorTable = ciq.CalculatePalette( image, 256 ); + // create dithering routine + OrderedColorDithering dithering = new OrderedColorDithering( ); + dithering.ColorTable = colorTable; + // apply the dithering routine + Bitmap newImage = dithering.Apply( image ); + + + Initial image: + + Result image: + + + + + + + Initializes a new instance of the class. + + + + + + Initializes a new instance of the class. + + + Threshold matrix (see property). + + + + + Perform color dithering for the specified image. + + + Source image to do color dithering for. + + Returns color dithered image. See for information about format of + the result image. + + Unsupported pixel format of the source image. It must 24 or 32 bpp color image. + + + + + Perform color dithering for the specified image. + + + Source image to do color dithering for. + + Returns color dithered image. See for information about format of + the result image. + + Unsupported pixel format of the source image. It must 24 or 32 bpp color image. + + + + + Threshold matrix - values to add source image's values. + + + The property keeps a threshold matrix, which is applied to values of a source image + to dither. By adding these values to the source image the algorithm produces the effect when pixels + of the same color in source image may have different color in the result image (which depends on pixel's + position). This threshold map is also known as an index matrix or Bayer matrix. + + By default the property is inialized with the below matrix: + + 2 18 6 22 + 26 10 30 14 + 8 24 4 20 + 32 16 28 12 + + + + + + + + Color table to use for image dithering. Must contain 2-256 colors. + + + Color table size determines format of the resulting image produced by this + image processing routine. If color table contains 16 color or less, then result image will have + 4 bpp indexed pixel format. If color table contains more than 16 colors, then result image will + have 8 bpp indexed pixel format. + + By default the property is initialized with default 16 colors, which are: + Black, Dark Blue, Dark Green, Dark Cyan, Dark Red, Dark Magenta, Dark Khaki, Light Gray, + Gray, Blue, Green, Cyan, Red, Magenta, Yellow and White. + + + Color table length must be in the [2, 256] range. + + + + + Use color caching during color dithering or not. + + + The property specifies if internal cache of already processed colors should be used or not. + For each pixel in the original image the color dithering routine does search in target color palette to find + the best matching color. To avoid doing the search again and again for already processed colors, the class may + use internal dictionary which maps colors of original image to indexes in target color palette. + + + The property provides a trade off. On one hand it may speedup color dithering routine, but on another + hand it increases memory usage. Also cache usage may not be efficient for very small target color tables. + + Default value is set to . + + + + + + Block match class keeps information about found block match. The class is + used with block matching algorithms implementing + interface. + + + + + + Initializes a new instance of the class. + + + Reference point in source image. + Match point in search image (point of a found match). + Similarity between blocks in source and search images, [0..1]. + + + + + Reference point in source image. + + + + + Match point in search image (point of a found match). + + + + + Similarity between blocks in source and search images, [0..1]. + + + + + Image's blob. + + + The class represents a blob - part of another images. The + class encapsulates the blob itself and information about its position + in parent image. + + The class is not responsible for blob's image disposing, so it should be + done manually when it is required. + + + + + + Initializes a new instance of the class. + + + Blob's ID in the original image. + Blob's rectangle in the original image. + + This constructor leaves property not initialized. The blob's + image may be extracted later using + or method. + + + + + Initializes a new instance of the class. + + + Source blob to copy. + + This copy constructor leaves property not initialized. The blob's + image may be extracted later using + or method. + + + + + Blob's image. + + + The property keeps blob's image. In the case if it equals to null, + the image may be extracted using + or method. + + + + + Blob's image size. + + + The property specifies size of the blob's image. + If the property is set to , the blob's image size equals to the + size of original image. If the property is set to , the blob's + image size equals to size of actual blob. + + + + + Blob's rectangle in the original image. + + + The property specifies position of the blob in the original image + and its size. + + + + + Blob's ID in the original image. + + + + + Blob's area. + + + The property equals to blob's area measured in number of pixels + contained by the blob. + + + + + Blob's fullness, [0, 1]. + + + The property equals to blob's fullness, which is calculated + as Area / ( Width * Height ). If it equals to 1, then + it means that entire blob's rectangle is filled by blob's pixel (no + blank areas), which is true only for rectangles. If it equals to 0.5, + for example, then it means that only half of the bounding rectangle is filled + by blob's pixels. + + + + + Blob's center of gravity point. + + + The property keeps center of gravity point, which is calculated as + mean value of X and Y coordinates of blob's points. + + + + + Blob's mean color. + + + The property keeps mean color of pixels comprising the blob. + + + + + Blob color's standard deviation. + + + The property keeps standard deviation of pixels' colors comprising the blob. + + + + + Hough circle. + + + Represents circle of Hough transform. + + + + + + + Circle center's X coordinate. + + + + + Circle center's Y coordinate. + + + + + Circle's radius. + + + + + Line's absolute intensity. + + + + + Line's relative intensity. + + + + + Initializes a new instance of the class. + + + Circle's X coordinate. + Circle's Y coordinate. + Circle's radius. + Circle's absolute intensity. + Circle's relative intensity. + + + + + Compare the object with another instance of this class. + + + Object to compare with. + + A signed number indicating the relative values of this instance and value: 1) greater than zero - + this instance is greater than value; 2) zero - this instance is equal to value; + 3) greater than zero - this instance is less than value. + + The sort order is descending. + + + Object are compared using their intensity value. + + + + + + Hough circle transformation. + + + The class implements Hough circle transformation, which allows to detect + circles of specified radius in an image. + + The class accepts binary images for processing, which are represented by 8 bpp grayscale images. + All black pixels (0 pixel's value) are treated as background, but pixels with different value are + treated as circles' pixels. + + Sample usage: + + HoughCircleTransformation circleTransform = new HoughCircleTransformation( 35 ); + // apply Hough circle transform + circleTransform.ProcessImage( sourceImage ); + Bitmap houghCirlceImage = circleTransform.ToBitmap( ); + // get circles using relative intensity + HoughCircle[] circles = circleTransform.GetCirclesByRelativeIntensity( 0.5 ); + + foreach ( HoughCircle circle in circles ) + { + // ... + } + + + Initial image: + + Hough circle transformation image: + + + + + + + + + Initializes a new instance of the class. + + + Circles' radius to detect. + + + + + Process an image building Hough map. + + + Source image to process. + + Unsupported pixel format of the source image. + + + + + Process an image building Hough map. + + + Source image data to process. + + Unsupported pixel format of the source image. + + + + + Process an image building Hough map. + + + Source unmanaged image to process. + + Unsupported pixel format of the source image. + + + + + Сonvert Hough map to bitmap. + + + Returns 8 bppp grayscale bitmap, which shows Hough map. + + Hough transformation was not yet done by calling + ProcessImage() method. + + + + + Get specified amount of circles with highest intensity. + + + Amount of circles to get. + + Returns arrary of most intesive circles. If there are no circles detected, + the returned array has zero length. + + + + + Get circles with relative intensity higher then specified value. + + + Minimum relative intesity of circles. + + Returns arrary of most intesive circles. If there are no circles detected, + the returned array has zero length. + + + + + Minimum circle's intensity in Hough map to recognize a circle. + + + The value sets minimum intensity level for a circle. If a value in Hough + map has lower intensity, then it is not treated as a circle. + + Default value is set to 10. + + + + + Radius for searching local peak value. + + + The value determines radius around a map's value, which is analyzed to determine + if the map's value is a local maximum in specified area. + + Default value is set to 4. Minimum value is 1. Maximum value is 10. + + + + + Maximum found intensity in Hough map. + + + The property provides maximum found circle's intensity. + + + + + Found circles count. + + + The property provides total number of found circles, which intensity is higher (or equal to), + than the requested minimum intensity. + + + + + Performs quadrilateral transformation using bilinear algorithm for interpolation. + + + The class is deprecated and should be used instead. + + + + + + + + Initializes a new instance of the class. + + + Corners of the source quadrilateral area. + Width of the new transformed image. + Height of the new transformed image. + + This constructor sets to + , which means that destination image will have width and + height as specified by user. + + + + + Initializes a new instance of the class. + + + Corners of the source quadrilateral area. + + This constructor sets to + , which means that destination image will have width and + height automatically calculated based on property. + + + + + Process the filter on the specified image. + + + Source image data. + Destination image data. + + + + + Calculates new image size. + + + Source image data. + + New image size - size of the destination image. + + The specified quadrilateral's corners are outside of the given image. + + + + + Format translations dictionary. + + + + + Automatic calculation of destination image or not. + + + The property specifies how to calculate size of destination (transformed) + image. If the property is set to , then + and properties have effect and destination image's size is + specified by user. If the property is set to , then setting the above + mentioned properties does not have any effect, but destionation image's size is + automatically calculated from property - width and height + come from length of longest edges. + + + + + + Quadrilateral's corners in source image. + + + The property specifies four corners of the quadrilateral area + in the source image to be transformed. + + + + + + Width of the new transformed image. + + + The property defines width of the destination image, which gets + transformed quadrilateral image. + + Setting the property does not have any effect, if + property is set to . In this case destination image's width + is calculated automatically based on property. + + + + + + Height of the new transformed image. + + + The property defines height of the destination image, which gets + transformed quadrilateral image. + + Setting the property does not have any effect, if + property is set to . In this case destination image's height + is calculated automatically based on property. + + + + + + Performs backward quadrilateral transformation into an area in destination image. + + + The class implements backward quadrilateral transformation algorithm, + which allows to transform any rectangular image into any quadrilateral area + in a given destination image. The idea of the algorithm is based on homogeneous + transformation and its math is described by Paul Heckbert in his + "Projective Mappings for Image Warping" paper. + + + The image processing routines implements similar math to , + but performs it in backward direction. + + The image processing filter accepts 8 grayscale images and 24/32 bpp + color images for processing. + + Sample usage: + + // define quadrilateral's corners + List<IntPoint> corners = new List<IntPoint>( ); + corners.Add( new IntPoint( 99, 99 ) ); + corners.Add( new IntPoint( 156, 79 ) ); + corners.Add( new IntPoint( 184, 126 ) ); + corners.Add( new IntPoint( 122, 150 ) ); + // create filter + BackwardQuadrilateralTransformation filter = + new BackwardQuadrilateralTransformation( sourceImage, corners ); + // apply the filter + Bitmap newImage = filter.Apply( image ); + + + Source image: + + Destination image: + + Result image: + + + + + + + + + Initializes a new instance of the class. + + + + + + Initializes a new instance of the class. + + + Source image to be transformed into specified quadrilateral + (see ). + + + + + Initializes a new instance of the class. + + + Source unmanaged image to be transformed into specified quadrilateral + (see ). + + + + + Initializes a new instance of the class. + + + Source image to be transformed into specified quadrilateral + (see ). + Quadrilateral in destination image to transform into. + + + + + Initializes a new instance of the class. + + + Source unmanaged image to be transformed into specified quadrilateral + (see ). + Quadrilateral in destination image to transform into. + + + + + Process the filter on the specified image. + + + Image data to process by the filter. + + Destination quadrilateral was not set. + + + + + Format translations dictionary. + + + See + documentation for additional information. + + + + + Source image to be transformed into specified quadrilateral. + + + The property sets the source image, which will be transformed + to the specified quadrilateral and put into destination image the filter is applied to. + + The source image must have the same pixel format as a destination image the filter + is applied to. Otherwise exception will be generated when filter is applied. + + Setting this property will clear the property - + only one source image is allowed: managed or unmanaged. + + + + + + Source unmanaged image to be transformed into specified quadrilateral. + + + The property sets the source image, which will be transformed + to the specified quadrilateral and put into destination image the filter is applied to. + + The source image must have the same pixel format as a destination image the filter + is applied to. Otherwise exception will be generated when filter is applied. + + Setting this property will clear the property - + only one source image is allowed: managed or unmanaged. + + + + + + Quadrilateral in destination image to transform into. + + + The property specifies 4 corners of a quadrilateral area + in destination image where the source image will be transformed into. + + + + + + Specifies if bilinear interpolation should be used or not. + + + Default value is set to - interpolation + is used. + + + + + + Image warp effect filter. + + + The image processing filter implements a warping filter, which + sets pixels in destination image to values from source image taken with specified offset + (see ). + + + The filter accepts 8 bpp grayscale images and 24/32 + color images for processing. + + Sample usage: + + // build warp map + int width = image.Width; + int height = image.Height; + + IntPoint[,] warpMap = new IntPoint[height, width]; + + int size = 8; + int maxOffset = -size + 1; + + for ( int y = 0; y < height; y++ ) + { + for ( int x = 0; x < width; x++ ) + { + int dx = ( x / size ) * size - x; + int dy = ( y / size ) * size - y; + + if ( dx + dy <= maxOffset ) + { + dx = ( x / size + 1 ) * size - 1 - x; + } + + warpMap[y, x] = new IntPoint( dx, dy ); + } + } + // create filter + ImageWarp filter = new ImageWarp( warpMap ); + // apply the filter + Bitmap newImage = filter.Apply( image ); + + + Initial image: + + Result image: + + + + + + + Initializes a new instance of the class. + + + Map used for warping images (see ). + + + + + Process the filter on the specified image. + + + Source image data. + Destination image data. + + + + + Map used for warping images. + + + The property sets displacement map used for warping images. + The map sets offsets of pixels in source image, which are used to set values in destination + image. In other words, each pixel in destination image is set to the same value + as pixel in source image with corresponding offset (coordinates of pixel in source image + are calculated as sum of destination coordinate and corresponding value from warp map). + + + The map array is accessed using [y, x] indexing, i.e. + first dimension in the map array corresponds to Y axis of image. + + If the map is smaller or bigger than the image to process, then only minimum + overlapping area of the image is processed. This allows to prepare single big map and reuse + it for a set of images for creating similar effects. + + + + + + Format translations dictionary. + + + See + documentation for additional information. + + + + + Horizontal run length smoothing algorithm. + + + The class implements horizontal run length smoothing algorithm, which + is described in: K.Y. Wong, R.G. Casey and F.M. Wahl, "Document analysis system," + IBM J. Res. Devel., Vol. 26, NO. 6,111). 647-656, 1982. + + Unlike the original description of this algorithm, this implementation must be applied + to inverted binary images containing document, i.e. white text on black background. So this + implementation fills horizontal black gaps between white pixels. + + This algorithm is usually used together with , + and then further analysis of white blobs. + + The filter accepts 8 bpp grayscale images, which are supposed to be binary inverted documents. + + Sample usage: + + // create filter + HorizontalRunLengthSmoothing hrls = new HorizontalRunLengthSmoothing( 32 ); + // apply the filter + hrls.ApplyInPlace( image ); + + + Source image: + + Result image: + + + + + + + + + Initializes a new instance of the class. + + + + + + Initializes a new instance of the class. + + + Maximum gap size to fill (see ). + + + + + Process the filter on the specified image. + + + Source image data. + Image rectangle for processing by the filter. + + + + + Maximum gap size to fill (in pixels). + + + The property specifies maximum horizontal gap between white pixels to fill. + If number of black pixels between some white pixels is bigger than this value, then those + black pixels are left as is; otherwise the gap is filled with white pixels. + + + Default value is set to 10. Minimum value is 1. Maximum value is 1000. + + + + + Process gaps between objects and image borders or not. + + + The property sets if gaps between image borders and objects must be treated as + gaps between objects and also filled. + + Default value is set to . + + + + + + Format translations dictionary. + + + See + documentation for additional information. + + + + + Extract the biggest blob from image. + + + The filter locates the biggest blob in the source image and extracts it. + The filter also can use the source image for the biggest blob's location only, but extract it from + another image, which is set using property. The original image + usually is the source of the processed image. + + The filter accepts 8 bpp grayscale images and 24/32 color images for processing as source image passed to + method and also for the . + + Sample usage: + + // create filter + ExtractBiggestBlob filter = new ExtractBiggestBlob( ); + // apply the filter + Bitmap biggestBlobsImage = filter.Apply( image ); + + + Initial image: + + Result image: + + + + + + + Apply filter to an image. + + + Source image to get biggest blob from. + + Returns image of the biggest blob. + + Unsupported pixel format of the source image. + Unsupported pixel format of the original image. + Source and original images must have the same size. + The source image does not contain any blobs. + + + + + Apply filter to an image. + + + Source image to get biggest blob from. + + Returns image of the biggest blob. + + Unsupported pixel format of the source image. + Unsupported pixel format of the original image. + Source and original images must have the same size. + The source image does not contain any blobs. + + + + + Apply filter to an image (not implemented). + + + Image in unmanaged memory. + + Returns filter's result obtained by applying the filter to + the source image. + + The method is not implemented. + + + + + Apply filter to an image (not implemented). + + + Source image to be processed. + Destination image to store filter's result. + + The method is not implemented. + + + + + Position of the extracted blob. + + + After applying the filter this property keeps position of the extracted + blob in the source image. + + + + + Format translations dictionary. + + + The dictionary defines, which pixel formats are supported for + source images and which pixel format will be used for resulting image. + + + See for more information. + + + + + + Original image, which is the source of the processed image where the biggest blob is searched for. + + + The property may be set to . In this case the biggest blob + is extracted from the image, which is passed to image. + + + + + + Dilatation operator from Mathematical Morphology with 3x3 structuring element. + + + The filter represents an optimized version of + filter, which is aimed for grayscale image processing with 3x3 structuring element. + + See filter, which represents generic version of + dilatation filter supporting custom structuring elements and wider range of image formats. + + The filter accepts 8 bpp grayscale images for processing. + + + + + + + + + Initializes a new instance of the class. + + + + + + Process the filter on the specified image. + + + Source image data. + Destination image data. + Image rectangle for processing by the filter. + + Processing rectangle mast be at least 3x3 in size. + + + + + Format translations dictionary. + + + + + Grayscale image using BT709 algorithm. + + + The class uses BT709 algorithm to convert color image + to grayscale. The conversion coefficients are: + + Red: 0.2125; + Green: 0.7154; + Blue: 0.0721. + + + + + + + + + + + Initializes a new instance of the class. + + + + + Possible object orders. + + + The enumeration defines possible sorting orders of objects, found by blob + counting classes. + + + + + Unsorted order (as it is collected by algorithm). + + + + + Objects are sorted by size in descending order (bigger objects go first). + Size is calculated as Width * Height. + + + + + Objects are sorted by area in descending order (bigger objects go first). + + + + + Objects are sorted by Y coordinate, then by X coordinate in ascending order + (smaller coordinates go first). + + + + + Objects are sorted by X coordinate, then by Y coordinate in ascending order + (smaller coordinates go first). + + + + + Blob counter - counts objects in image, which are separated by black background. + + + The class counts and extracts stand alone objects in + images using connected components labeling algorithm. + + The algorithm treats all pixels with values less or equal to + as background, but pixels with higher values are treated as objects' pixels. + + For blobs' searching the class supports 8 bpp indexed grayscale images and + 24/32 bpp color images that are at least two pixels wide. Images that are one + pixel wide can be processed if they are rotated first, or they can be processed + with . + See documentation about for information about which + pixel formats are supported for extraction of blobs. + + Sample usage: + + // create an instance of blob counter algorithm + BlobCounter bc = new BlobCounter( ); + // process binary image + bc.ProcessImage( image ); + Rectangle[] rects = bc.GetObjectsRectangles( ); + // process blobs + foreach ( Rectangle rect in rects ) + { + // ... + } + + + + + + + Initializes a new instance of the class. + + + Creates new instance of the class with + an empty objects map. Before using methods, which provide information about blobs + or extract them, the , + or + method should be called to collect objects map. + + + + + Initializes a new instance of the class. + + + Image to look for objects in. + + + + + Initializes a new instance of the class. + + + Image data to look for objects in. + + + + + Initializes a new instance of the class. + + + Unmanaged image to look for objects in. + + + + + Actual objects map building. + + + Unmanaged image to process. + + The method supports 8 bpp indexed grayscale images and 24/32 bpp color images. + + Unsupported pixel format of the source image. + Cannot process images that are one pixel wide. Rotate the image + or use . + + + + + Background threshold's value. + + + The property sets threshold value for distinguishing between background + pixel and objects' pixels. All pixel with values less or equal to this property are + treated as background, but pixels with higher values are treated as objects' pixels. + + In the case of colour images a pixel is treated as objects' pixel if any of its + RGB values are higher than corresponding values of this threshold. + + For processing grayscale image, set the property with all RGB components eqaul. + + Default value is set to (0, 0, 0) - black colour. + + + + + Gather statistics about image in YCbCr color space. + + + The class is used to accumulate statistical values about images, + like histogram, mean, standard deviation, etc. for each YCbCr color channel. + + The class accepts 24 and 32 bpp color images for processing. + + Sample usage: + + // gather statistics + ImageStatisticsYCbCr stat = new ImageStatisticsYCbCr( image ); + // get Y channel's histogram + ContinuousHistogram y = stat.Y; + // check mean value of Y channel + if ( y.Mean > 0.5 ) + { + // do further processing + } + + + + + + + + + Initializes a new instance of the class. + + + Image to gather statistics about. + + Source pixel format is not supported. + + + + + Initializes a new instance of the class. + + + Image to gather statistics about. + Mask image which specifies areas to collect statistics for. + + The mask image must be a grayscale/binary (8bpp) image of the same size as the + specified source image, where black pixels (value 0) correspond to areas which should be excluded + from processing. So statistics is calculated only for pixels, which are none black in the mask image. + + + Source pixel format is not supported. + Mask image must be 8 bpp grayscale image. + Mask must have the same size as the source image to get statistics for. + + + + + Initializes a new instance of the class. + + + Image to gather statistics about. + Mask array which specifies areas to collect statistics for. + + The mask array must be of the same size as the specified source image, where 0 values + correspond to areas which should be excluded from processing. So statistics is calculated only for pixels, + which have none zero corresponding value in the mask. + + + Source pixel format is not supported. + Mask must have the same size as the source image to get statistics for. + + + + + Initializes a new instance of the class. + + + Unmanaged image to gather statistics about. + + Source pixel format is not supported. + + + + + Initializes a new instance of the class. + + + Image to gather statistics about. + Mask image which specifies areas to collect statistics for. + + The mask image must be a grayscale/binary (8bpp) image of the same size as the + specified source image, where black pixels (value 0) correspond to areas which should be excluded + from processing. So statistics is calculated only for pixels, which are none black in the mask image. + + + Source pixel format is not supported. + Mask image must be 8 bpp grayscale image. + Mask must have the same size as the source image to get statistics for. + + + + + Initializes a new instance of the class. + + + Image to gather statistics about. + Mask array which specifies areas to collect statistics for. + + The mask array must be of the same size as the specified source image, where 0 values + correspond to areas which should be excluded from processing. So statistics is calculated only for pixels, + which have none zero corresponding value in the mask. + + + Source pixel format is not supported. + Mask must have the same size as the source image to get statistics for. + + + + + Histogram of Y channel. + + + + + + Histogram of Cb channel. + + + + + + Histogram of Cr channel. + + + + + + Histogram of Y channel excluding black pixels. + + + The property keeps statistics about Y channel, which + excludes all black pixels, what affects mean, standard deviation, etc. + + + + + + Histogram of Cb channel excluding black pixels + + + The property keeps statistics about Cb channel, which + excludes all black pixels, what affects mean, standard deviation, etc. + + + + + + Histogram of Cr channel excluding black pixels + + + The property keeps statistics about Cr channel, which + excludes all black pixels, what affects mean, standard deviation, etc. + + + + + + Total pixels count in the processed image. + + + + + + Total pixels count in the processed image excluding black pixels. + + + + + + Color filtering in YCbCr color space. + + + The filter operates in YCbCr color space and filters + pixels, which color is inside/outside of the specified YCbCr range - + it keeps pixels with colors inside/outside of the specified range and fills the + rest with specified color. + + The filter accepts 24 and 32 bpp color images for processing. + + Sample usage: + + // create filter + YCbCrFiltering filter = new YCbCrFiltering( ); + // set color ranges to keep + filter.Cb = new Range( -0.2f, 0.0f ); + filter.Cr = new Range( 0.26f, 0.5f ); + // apply the filter + filter.ApplyInPlace( image ); + + + Initial image: + + Result image: + + + + + + + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the class. + + + Range of Y component. + Range of Cb component. + Range of Cr component. + + + + + Process the filter on the specified image. + + + Source image data. + Image rectangle for processing by the filter. + + + + + Format translations dictionary. + + + + + Range of Y component, [0, 1]. + + + + + + Range of Cb component, [-0.5, 0.5]. + + + + + + Range of Cr component, [-0.5, 0.5]. + + + + + + Fill color used to fill filtered pixels. + + + + + Determines, if pixels should be filled inside or outside specified + color range. + + + Default value is set to , which means + the filter removes colors outside of the specified range. + + + + + Determines, if Y value of filtered pixels should be updated. + + + The property specifies if Y channel of filtered pixels should be + updated with value from fill color or not. + + Default value is set to . + + + + + Determines, if Cb value of filtered pixels should be updated. + + + The property specifies if Cb channel of filtered pixels should be + updated with value from fill color or not. + + Default value is set to . + + + + + Determines, if Cr value of filtered pixels should be updated. + + + The property specifies if Cr channel of filtered pixels should be + updated with value from fill color or not. + + Default value is set to . + + + + + Bilateral filter implementation - edge preserving smoothing and noise reduction that uses chromatic and spatial factors. + + + + Bilateral filter conducts "selective" Gaussian smoothing of areas of same color (domains) which removes noise and contrast artifacts + while preserving sharp edges. + + Two major parameters and define the result of the filter. + By changing these parameters you may achieve either only noise reduction with little change to the + image or get nice looking effect to the entire image. + + Although the filter can use parallel processing large values + (greater than 25) on high resolution images may decrease speed of processing. Also on high + resolution images small values (less than 9) may not provide noticeable + results. + + More details on the algorithm can be found by following this + link. + + The filter accepts 8 bpp grayscale images and 24/32 bpp color images for processing. + + Sample usage: + + // create filter + BilateralSmoothing filter = new BilateralSmoothing( ); + filter.KernelSize = 7; + filter.SpatialFactor = 10; + filter.ColorFactor = 60; + filter.ColorPower = 0.5; + // apply the filter + filter.ApplyInPlace( image ); + + + Initial image: + + Result image: + + + + + + + Initializes a new instance of the class. + + + + + + Process the filter on the specified image. + + + Source image data. + Destination image data. + Image rectangle for processing by the filter. + + + + + Specifies if exception must be thrown in the case a large + kernel size is used which may lead + to significant performance issues. + + + + Default value is set to . + + + + + + Enable or not parallel processing on multi-core CPUs. + + + If the property is set to , then this image processing + routine will run in parallel on the systems with multiple core/CPUs. The + is used to make it parallel. + + Default value is set to . + + + + + + Size of a square for limiting surrounding pixels that take part in calculations, [3, 255]. + + + The greater the value the more is the general power of the filter. Small values + (less than 9) on high resolution images (3000 pixels wide) do not give significant results. + Large values increase the number of calculations and degrade performance. + + The value of this property must be an odd integer in the [3, 255] range if + is set to or in the [3, 25] range + otherwise. + + Default value is set to 9. + + + The specified value is out of range (see + eception message for details). + The value of this must be an odd integer. + + + + + Determines smoothing power within a color domain (neighbor pixels of similar color), >= 1. + + + + Default value is set to 10. + + + + + + Exponent power, used in Spatial function calculation, >= 1. + + + + Default value is set to 2. + + + + + + Determines the variance of color for a color domain, >= 1. + + + + Default value is set to 50. + + + + + + Exponent power, used in Color function calculation, >= 1. + + + + Default value is set to 2. + + + + + + Format translations dictionary. + + + See + documentation for additional information. + + + + + Opening operator from Mathematical Morphology. + + + Opening morphology operator equals to erosion followed + by dilatation. + + Applied to binary image, the filter may be used for removing small object keeping big objects + unchanged. Since erosion is used first, it removes all small objects. Then dilatation restores big + objects, which were not removed by erosion. + + See documentation to and classes for more + information and list of supported pixel formats. + + Sample usage: + + // create filter + Opening filter = new Opening( ); + // apply the filter + filter.Apply( image ); + + + Initial image: + + Result image: + + + + + + + + + + + Initializes a new instance of the class. + + + Initializes new instance of the class using + default structuring element for both and + classes - 3x3 structuring element with all elements equal to 1. + + + + + + Initializes a new instance of the class. + + + Structuring element. + + See documentation to and + classes for information about structuring element constraints. + + + + + Apply filter to an image. + + + Source image to apply filter to. + + Returns filter's result obtained by applying the filter to + the source image. + + The method keeps the source image unchanged and returns + the result of image processing filter as new image. + + Unsupported pixel format of the source image. + + + + + Apply filter to an image. + + + Source image to apply filter to. + + Returns filter's result obtained by applying the filter to + the source image. + + The filter accepts bitmap data as input and returns the result + of image processing filter as new image. The source image data are kept + unchanged. + + + + + Apply filter to an image in unmanaged memory. + + + Source image in unmanaged memory to apply filter to. + + Returns filter's result obtained by applying the filter to + the source image. + + The method keeps the source image unchanged and returns + the result of image processing filter as new image. + + Unsupported pixel format of the source image. + + + + + Apply filter to an image in unmanaged memory. + + + Source image in unmanaged memory to apply filter to. + Destination image in unmanaged memory to put result into. + + The method keeps the source image unchanged and puts result of image processing + into destination image. + + The destination image must have the same width and height as source image. Also + destination image must have pixel format, which is expected by particular filter (see + property for information about pixel format conversions). + + + Unsupported pixel format of the source image. + Incorrect destination pixel format. + Destination image has wrong width and/or height. + + + + + Apply filter to an image. + + + Image to apply filter to. + + The method applies the filter directly to the provided source image. + + Unsupported pixel format of the source image. + + + + + Apply filter to an image. + + + Image data to apply filter to. + + The method applies the filter directly to the provided source image. + + Unsupported pixel format of the source image. + + + + + Apply filter to an unmanaged image. + + + Unmanaged image to apply filter to. + + The method applies the filter directly to the provided source unmanaged image. + + Unsupported pixel format of the source image. + + + + + Apply filter to an image or its part. + + + Image to apply filter to. + Image rectangle for processing by the filter. + + The method applies the filter directly to the provided source image. + + Unsupported pixel format of the source image. + + + + + Apply filter to an image or its part. + + + Image data to apply filter to. + Image rectangle for processing by the filter. + + The method applies the filter directly to the provided source image. + + Unsupported pixel format of the source image. + + + + + Apply filter to an unmanaged image or its part. + + + Unmanaged image to apply filter to. + Image rectangle for processing by the filter. + + The method applies the filter directly to the provided source image. + + Unsupported pixel format of the source image. + + + + + Format translations dictionary. + + + + + Dilatation operator from Mathematical Morphology. + + + The filter assigns maximum value of surrounding pixels to each pixel of + the result image. Surrounding pixels, which should be processed, are specified by + structuring element: 1 - to process the neighbor, -1 - to skip it. + + The filter especially useful for binary image processing, where it allows to grow + separate objects or join objects. + + For processing image with 3x3 structuring element, there are different optimizations + available, like and . + + The filter accepts 8 and 16 bpp grayscale images and 24 and 48 bpp + color images for processing. + + Sample usage: + + // create filter + Dilatation filter = new Dilatation( ); + // apply the filter + filter.Apply( image ); + + + Initial image: + + Result image: + + + + + + + + + + + + + Initializes a new instance of the class. + + + Initializes new instance of the class using + default structuring element - 3x3 structuring element with all elements equal to 1. + + + + + + Initializes a new instance of the class. + + + Structuring element. + + Structuring elemement for the dilatation morphological operator + must be square matrix with odd size in the range of [3, 99]. + + Invalid size of structuring element. + + + + + Process the filter on the specified image. + + + Source image data. + Destination image data. + Image rectangle for processing by the filter. + + + + + Format translations dictionary. + + + + + Filters' collection to apply to an image in sequence. + + + The class represents collection of filters, which need to be applied + to an image in sequence. Using the class user may specify set of filters, which will + be applied to source image one by one in the order user defines them. + + The class itself does not define which pixel formats are accepted for the source + image and which pixel formats may be produced by the filter. Format of acceptable source + and possible output is defined by filters, which added to the sequence. + + Sample usage: + + // create filter, which is binarization sequence + FiltersSequence filter = new FiltersSequence( + new GrayscaleBT709( ), + new Threshold( ) + ); + // apply the filter + Bitmap newImage = filter.Apply( image ); + + + + + + + Initializes a new instance of the class. + + + + + + Initializes a new instance of the class. + + + Sequence of filters to apply. + + + + + Add new filter to the sequence. + + + Filter to add to the sequence. + + + + + Apply filter to an image. + + + Source image to apply filter to. + + Returns filter's result obtained by applying the filter to + the source image. + + The method keeps the source image unchanged and returns + the result of image processing filter as new image. + + No filters were added into the filters' sequence. + + + + + Apply filter to an image. + + + Source image to apply filter to. + + Returns filter's result obtained by applying the filter to + the source image. + + The filter accepts bitmap data as input and returns the result + of image processing filter as new image. The source image data are kept + unchanged. + + No filters were added into the filters' sequence. + + + + + Apply filter to an image in unmanaged memory. + + + Source image in unmanaged memory to apply filter to. + + Returns filter's result obtained by applying the filter to + the source image. + + The method keeps the source image unchanged and returns + the result of image processing filter as new image. + + No filters were added into the filters' sequence. + + + + + Apply filter to an image in unmanaged memory. + + + Source image in unmanaged memory to apply filter to. + Destination image in unmanaged memory to put result into. + + The method keeps the source image unchanged and puts result of image processing + into destination image. + + The destination image must have width, height and pixel format as it is expected by + the final filter in the sequence. + + + No filters were added into the filters' sequence. + + + + + Get filter at the specified index. + + + Index of filter to get. + + Returns filter at specified index. + + + + + Contrast adjusting in RGB color space. + + + The filter operates in RGB color space and adjusts + pixels' contrast value by increasing RGB values of bright pixel and decreasing + RGB values of dark pixels (or vise versa if contrast needs to be decreased). + The filter is based on + filter and simply sets all input ranges to (, 255-) and + all output range to (0, 255) in the case if the factor value is positive. + If the factor value is negative, then all input ranges are set to + (0, 255 ) and all output ranges are set to + (-, 255_). + + See documentation forr more information about the base filter. + + The filter accepts 8 bpp grayscale and 24/32 bpp color images for processing. + + Sample usage: + + // create filter + ContrastCorrection filter = new ContrastCorrection( 15 ); + // apply the filter + filter.ApplyInPlace( image ); + + + Initial image: + + Result image: + + + + + + + + + Initializes a new instance of the class. + + + + + + Initializes a new instance of the class. + + + Contrast adjusting factor. + + + + + Process the filter on the specified image. + + + Source image data. + Image rectangle for processing by the filter. + + + + + Contrast adjusting factor, [-127, 127]. + + + Factor which is used to adjust contrast. Factor values greater than + 0 increase contrast making light areas lighter and dark areas darker. Factor values + less than 0 decrease contrast - decreasing variety of contrast. + + Default value is set to 10. + + + + + Format translations dictionary. + + + See + documentation for additional information. + + + + + Marble texture. + + + The texture generator creates textures with effect of marble. + The and properties allow to control the look + of marble texture in X/Y directions. + + The generator is based on the Perlin noise function. + + Sample usage: + + // create texture generator + MarbleTexture textureGenerator = new MarbleTexture( ); + // generate new texture + float[,] texture = textureGenerator.Generate( 320, 240 ); + // convert it to image to visualize + Bitmap textureImage = TextureTools.ToBitmap( texture ); + + + Result image: + + + + + + + Initializes a new instance of the class. + + + + + + Initializes a new instance of the class. + + + X period value. + Y period value. + + + + + Generate texture. + + + Texture's width. + Texture's height. + + Two dimensional array of intensities. + + Generates new texture of the specified size. + + + + + Reset generator. + + + Regenerates internal random numbers. + + + + + X period value, ≥ 2. + + + Default value is set to 5. + + + + + Y period value, ≥ 2. + + + Default value is set to 10. + + + + + Transform rectangle image into circle (to polar coordinates). + + + The image processing routine does transformation of the source image into + circle (polar transformation). The produced effect is similar to GIMP's "Polar Coordinates" + distortion filter (or its equivalent in Photoshop). + + + The filter accepts 8 bpp grayscale and 24/32 bpp color images for processing. + + Sample usage: + + // create filter + TransformToPolar filter = new TransformToPolar( ); + filter.OffsetAngle = 0; + filter.CirlceDepth = 1; + filter.UseOriginalImageSize = false; + filter.NewSize = new Size( 200, 200 ); + // apply the filter + Bitmap newImage = filter.Apply( image ); + + + Initial image: + + Result image: + + + + + + + + + Initializes a new instance of the class. + + + + + + Calculates new image size. + + + Source image data. + + New image size - size of the destination image. + + + + + Process the filter on the specified image. + + + Source image data. + Destination image data. + + + + + Circularity coefficient of the mapping, [0, 1]. + + + The property specifies circularity coefficient of the mapping to be done. + If the coefficient is set to 1, then the mapping will produce ideal circle. If the coefficient + is set to 0, then the mapping will occupy entire area of the destination image (circle will + be extended into direction of edges). Changing the property from 0 to 1 user may balance + circularity of the produced output. + + + Default value is set to 1. + + + + + + Offset angle used to shift mapping, [-360, 360] degrees. + + + The property specifies offset angle, which can be used to shift + mapping in counter clockwise direction. For example, if user sets this property to 30, then + start of polar mapping is shifted by 30 degrees in counter clockwise direction. + + Default value is set to 0. + + + + + + Specifies direction of mapping. + + + The property specifies direction of mapping source image's X axis. If the + property is set to , the image is mapped in clockwise direction; + otherwise in counter clockwise direction. + + Default value is set to . + + + + + + Specifies if top of the source image should go to center or edge of the result image. + + + The property specifies position of the source image's top line in the destination + image. If the property is set to , then it goes to the center of the result image; + otherwise it goes to the edge. + + Default value is set to . + + + + + + Fill color to use for unprocessed areas. + + + The property specifies fill color, which is used to fill unprocessed areas. + In the case if is greater than 0, then there will be some areas on + the image's edge, which are not filled by the produced "circular" image, but are filled by + the specified color. + + + Default value is set to . + + + + + + Size of destination image. + + + The property specifies size of result image produced by this image + processing routine in the case if property + is set to . + + Both width and height must be in the [1, 10000] range. + + Default value is set to 200 x 200. + + + + + + Use source image size for destination or not. + + + The property specifies if the image processing routine should create destination + image of the same size as original image or of the size specified by + property. + + Default value is set to . + + + + + + Format translations dictionary. + + + See + documentation for additional information. + + + + + Transform polar image into rectangle. + + + The image processing routine is oposite transformation to the one done by + routine, i.e. transformation from polar image into rectangle. The produced effect is similar to GIMP's + "Polar Coordinates" distortion filter (or its equivalent in Photoshop). + + The filter accepts 8 bpp grayscale and 24/32 bpp color images for processing. + + Sample usage: + + // create filter + TransformFromPolar filter = new TransformFromPolar( ); + filter.OffsetAngle = 0; + filter.CirlceDepth = 1; + filter.UseOriginalImageSize = false; + filter.NewSize = new Size( 360, 120 ); + // apply the filter + Bitmap newImage = filter.Apply( image ); + + + Initial image: + + Result image: + + + + + + + + + Initializes a new instance of the class. + + + + + + Calculates new image size. + + + Source image data. + + New image size - size of the destination image. + + + + + Process the filter on the specified image. + + + Source image data. + Destination image data. + + + + + Circularity coefficient of the mapping, [0, 1]. + + + The property specifies circularity coefficient of the mapping to be done. + If the coefficient is set to 1, then destination image will be produced by mapping + ideal circle from the source image, which is placed in source image's centre and its + radius equals to the minimum distance from centre to the image’s edge. If the coefficient + is set to 0, then the mapping will use entire area of the source image (circle will + be extended into direction of edges). Changing the property from 0 to 1 user may balance + circularity of the produced output. + + Default value is set to 1. + + + + + + Offset angle used to shift mapping, [-360, 360] degrees. + + + The property specifies offset angle, which can be used to shift + mapping in clockwise direction. For example, if user sets this property to 30, then + start of polar mapping is shifted by 30 degrees in clockwise direction. + + Default value is set to 0. + + + + + + Specifies direction of mapping. + + + The property specifies direction of mapping source image. If the + property is set to , the image is mapped in clockwise direction; + otherwise in counter clockwise direction. + + Default value is set to . + + + + + + Specifies if centre of the source image should to top or bottom of the result image. + + + The property specifies position of the source image's centre in the destination image. + If the property is set to , then it goes to the top of the result image; + otherwise it goes to the bottom. + + Default value is set to . + + + + + + Size of destination image. + + + The property specifies size of result image produced by this image + processing routine in the case if property + is set to . + + Both width and height must be in the [1, 10000] range. + + Default value is set to 200 x 200. + + + + + + Use source image size for destination or not. + + + The property specifies if the image processing routine should create destination + image of the same size as original image or of the size specified by + property. + + Default value is set to . + + + + + + Format translations dictionary. + + + See + documentation for additional information. + + + + + Rotate image using bicubic interpolation. + + + The class implements image rotation filter using bicubic + interpolation algorithm. It uses bicubic kernel W(x) as described on + Wikipedia + (coefficient a is set to -0.5). + + Rotation is performed in counterclockwise direction. + + The filter accepts 8 bpp grayscale images and 24 bpp + color images for processing. + + Sample usage: + + // create filter - rotate for 30 degrees keeping original image size + RotateBicubic filter = new RotateBicubic( 30, true ); + // apply the filter + Bitmap newImage = filter.Apply( image ); + + + Initial image: + + Result image: + + + + + + + + + + Initializes a new instance of the class. + + + Rotation angle. + + This constructor sets property + to . + + + + + + Initializes a new instance of the class. + + + Rotation angle. + Keep image size or not. + + + + + Process the filter on the specified image. + + + Source image data. + Destination image data. + + + + + Format translations dictionary. + + + + + Vertical run length smoothing algorithm. + + + The class implements vertical run length smoothing algorithm, which + is described in: K.Y. Wong, R.G. Casey and F.M. Wahl, "Document analysis system," + IBM J. Res. Devel., Vol. 26, NO. 6,111). 647-656, 1982. + + Unlike the original description of this algorithm, this implementation must be applied + to inverted binary images containing document, i.e. white text on black background. So this + implementation fills vertical black gaps between white pixels. + + This algorithm is usually used together with , + and then further analysis of white blobs. + + The filter accepts 8 bpp grayscale images, which are supposed to be binary inverted documents. + + Sample usage: + + // create filter + VerticalRunLengthSmoothing vrls = new VerticalRunLengthSmoothing( 32 ); + // apply the filter + vrls.ApplyInPlace( image ); + + + Source image: + + Result image: + + + + + + + + + Initializes a new instance of the class. + + + + + + Initializes a new instance of the class. + + + Maximum gap size to fill (see ). + + + + + Process the filter on the specified image. + + + Source image data. + Image rectangle for processing by the filter. + + + + + Maximum gap size to fill (in pixels). + + + The property specifies maximum vertical gap between white pixels to fill. + If number of black pixels between some white pixels is bigger than this value, then those + black pixels are left as is; otherwise the gap is filled with white pixels. + + + Default value is set to 10. Minimum value is 1. Maximum value is 1000. + + + + + Process gaps between objects and image borders or not. + + + The property sets if gaps between image borders and objects must be treated as + gaps between objects and also filled. + + Default value is set to . + + + + + + Format translations dictionary. + + + See + documentation for additional information. + + + + + Salt and pepper noise. + + + The filter adds random salt and pepper noise - sets + maximum or minimum values to randomly selected pixels. + + The filter accepts 8 bpp grayscale images and 24/32 bpp + color images for processing. + + Sample usage: + + // create filter + SaltAndPepperNoise filter = new SaltAndPepperNoise( 10 ); + // apply the filter + filter.ApplyInPlace( image ); + + + Initial image: + + Result image: + + + + + + + Initializes a new instance of the class. + + + + + + Initializes a new instance of the class. + + + Amount of noise to generate in percents, [0, 100]. + + + + + Process the filter on the specified image. + + + Source image data. + Image rectangle for processing by the filter. + + + + + Format translations dictionary. + + + + + Amount of noise to generate in percents, [0, 100]. + + + + + + Additive noise filter. + + + The filter adds random value to each pixel of the source image. + The distribution of random values can be specified by random generator. + + + The filter accepts 8 bpp grayscale images and 24 bpp + color images for processing. + + Sample usage: + + // create random generator + IRandomNumberGenerator generator = new UniformGenerator( new Range( -50, 50 ) ); + // create filter + AdditiveNoise filter = new AdditiveNoise( generator ); + // apply the filter + filter.ApplyInPlace( image ); + + + Initial image: + + Result image: + + + + + + + Initializes a new instance of the class. + + + + + + Initializes a new instance of the class. + + + Random number genertor used to add noise. + + + + + Process the filter on the specified image. + + + Source image data. + Image rectangle for processing by the filter. + + + + + Format translations dictionary. + + + + + Random number genertor used to add noise. + + + Default generator is uniform generator in the range of (-10, 10). + + + + + Closing operator from Mathematical Morphology. + + + Closing morphology operator equals to dilatation followed + by erosion. + + Applied to binary image, the filter may be used connect or fill objects. Since dilatation is used + first, it may connect/fill object areas. Then erosion restores objects. But since dilatation may connect + something before, erosion may not remove after that because of the formed connection. + + See documentation to and classes for more + information and list of supported pixel formats. + + Sample usage: + + // create filter + Closing filter = new Closing( ); + // apply the filter + filter.Apply( image ); + + + Initial image: + + Result image: + + + + + + + + + + + Initializes a new instance of the class. + + + Initializes new instance of the class using + default structuring element for both and + classes - 3x3 structuring element with all elements equal to 1. + + + + + + Initializes a new instance of the class. + + + Structuring element. + + See documentation to and + classes for information about structuring element constraints. + + + + + Apply filter to an image. + + + Source image to apply filter to. + + Returns filter's result obtained by applying the filter to + the source image. + + The method keeps the source image unchanged and returns + the result of image processing filter as new image. + + Unsupported pixel format of the source image. + + + + + Apply filter to an image. + + + Source image to apply filter to. + + Returns filter's result obtained by applying the filter to + the source image. + + The filter accepts bitmap data as input and returns the result + of image processing filter as new image. The source image data are kept + unchanged. + + + + + Apply filter to an image in unmanaged memory. + + + Source image in unmanaged memory to apply filter to. + + Returns filter's result obtained by applying the filter to + the source image. + + The method keeps the source image unchanged and returns + the result of image processing filter as new image. + + Unsupported pixel format of the source image. + + + + + Apply filter to an image in unmanaged memory. + + + Source image in unmanaged memory to apply filter to. + Destination image in unmanaged memory to put result into. + + The method keeps the source image unchanged and puts result of image processing + into destination image. + + The destination image must have the same width and height as source image. Also + destination image must have pixel format, which is expected by particular filter (see + property for information about pixel format conversions). + + + Unsupported pixel format of the source image. + Incorrect destination pixel format. + Destination image has wrong width and/or height. + + + + + Apply filter to an image. + + + Image to apply filter to. + + The method applies the filter directly to the provided source image. + + Unsupported pixel format of the source image. + + + + + Apply filter to an image. + + + Image data to apply filter to. + + The method applies the filter directly to the provided source image. + + Unsupported pixel format of the source image. + + + + + Apply filter to an unmanaged image. + + + Unmanaged image to apply filter to. + + The method applies the filter directly to the provided source unmanaged image. + + Unsupported pixel format of the source image. + + + + + Apply filter to an image or its part. + + + Image to apply filter to. + Image rectangle for processing by the filter. + + The method applies the filter directly to the provided source image. + + Unsupported pixel format of the source image. + + + + + Apply filter to an image or its part. + + + Image data to apply filter to. + Image rectangle for processing by the filter. + + The method applies the filter directly to the provided source image. + + Unsupported pixel format of the source image. + + + + + Apply filter to an unmanaged image or its part. + + + Unmanaged image to apply filter to. + Image rectangle for processing by the filter. + + The method applies the filter directly to the provided source image. + + Unsupported pixel format of the source image. + + + + + Format translations dictionary. + + + + + Hue modifier. + + + The filter operates in HSL color space and updates + pixels' hue values setting it to the specified value (luminance and + saturation are kept unchanged). The result of the filter looks like the image + is observed through a glass of the given color. + + The filter accepts 24 and 32 bpp color images for processing. + Sample usage: + + // create filter + HueModifier filter = new HueModifier( 180 ); + // apply the filter + filter.ApplyInPlace( image ); + + + Initial image: + + Result image: + + + + + + + Initializes a new instance of the class. + + + + + + Initializes a new instance of the class. + + + Hue value to set. + + + + + Process the filter on the specified image. + + + Source image data. + Image rectangle for processing by the filter. + + + + + Format translations dictionary. + + + + + Hue value to set, [0, 359]. + + + Default value is set to 0. + + + + + Set of Bayer patterns supported by . + + + + + Pattern:

+ G R
+ B G +
+
+ + + Pattern:

+ B G
+ G R +
+
+ + + Optimized Bayer fileter image processing routine. + + + The class implements Bayer filter + routine, which creates color image out of grayscale image produced by image sensor built with + Bayer color matrix. + + This class does all the same as class. However this version is + optimized for some well known patterns defined in enumeration. + Also this class processes images with even width and height only. Image size must be at least 2x2 pixels. + + + The filter accepts 8 bpp grayscale images and produces 24 bpp RGB image. + + Sample usage: + + // create filter + BayerFilter filter = new BayerFilter( ); + // apply the filter + Bitmap rgbImage = filter.Apply( image ); + + + + + + + + + Initializes a new instance of the class. + + + + + + Process the filter on the specified image. + + + Source image data. + Destination image data. + + + + + Bayer pattern of source images to decode. + + + The property specifies Bayer pattern of source images to be + decoded into color images. + + Default value is set to . + + + + + + Format translations dictionary. + + + See + documentation for additional information. + + + + + Color remapping. + + + The filter allows to remap colors of the image. Unlike filter + the filter allow to do non-linear remapping. For each pixel of specified image the filter changes + its values (value of each color plane) to values, which are stored in remapping arrays by corresponding + indexes. For example, if pixel's RGB value equals to (32, 96, 128), the filter will change it to + ([32], [96], [128]). + + The filter accepts 8 bpp grayscale and 24/32 bpp color images for processing. + + Sample usage: + + // create map + byte[] map = new byte[256]; + for ( int i = 0; i < 256; i++ ) + { + map[i] = (byte) Math.Min( 255, Math.Pow( 2, (double) i / 32 ) ); + } + // create filter + ColorRemapping filter = new ColorRemapping( map, map, map ); + // apply the filter + filter.ApplyInPlace( image ); + + + Initial image: + + Result image: + + + + + + + Initializes a new instance of the class. + + + Initializes the filter without any remapping. All + pixel values are mapped to the same values. + + + + + Initializes a new instance of the class. + + + Red map. + Green map. + Blue map. + + + + + Initializes a new instance of the class. + + + Gray map. + + This constructor is supposed for grayscale images. + + + + + Process the filter on the specified image. + + + Source image data. + Image rectangle for processing by the filter. + + + + + Format translations dictionary. + + + + + Remapping array for red color plane. + + + The remapping array should contain 256 remapping values. The remapping occurs + by changing pixel's red value r to [r]. + + A map should be array with 256 value. + + + + + Remapping array for green color plane. + + + The remapping array should contain 256 remapping values. The remapping occurs + by changing pixel's green value g to [g]. + + A map should be array with 256 value. + + + + + Remapping array for blue color plane. + + + The remapping array should contain 256 remapping values. The remapping occurs + by changing pixel's blue value b to [b]. + + A map should be array with 256 value. + + + + + Remapping array for gray color. + + + The remapping array should contain 256 remapping values. The remapping occurs + by changing pixel's value g to [g]. + + The gray map is for grayscale images only. + + A map should be array with 256 value. + + + + + Binarization with thresholds matrix. + + + Idea of the filter is the same as idea of filter - + change pixel value to white, if its intensity is equal or higher than threshold value, or + to black otherwise. But instead of using single threshold value for all pixel, the filter + uses matrix of threshold values. Processing image is divided to adjacent windows of matrix + size each. For pixels binarization inside of each window, corresponding threshold values are + used from specified threshold matrix. + + The filter accepts 8 bpp grayscale images for processing. + + Sample usage: + + // create binarization matrix + byte[,] matrix = new byte[4, 4] + { + { 95, 233, 127, 255 }, + { 159, 31, 191, 63 }, + { 111, 239, 79, 207 }, + { 175, 47, 143, 15 } + }; + // create filter + OrderedDithering filter = new OrderedDithering( matrix ); + // apply the filter + filter.ApplyInPlace( image ); + + + Initial image: + + Result image: + + + + + + + + + Initializes a new instance of the class. + + + + + + Initializes a new instance of the class. + + + Thresholds matrix. + + + + + Process the filter on the specified image. + + + Source image data. + Image rectangle for processing by the filter. + + + + + Format translations dictionary. + + + + + Ordered dithering using Bayer matrix. + + + The filter represents filter initialized + with the next threshold matrix: + + byte[,] matrix = new byte[4, 4] + { + { 0, 192, 48, 240 }, + { 128, 64, 176, 112 }, + { 32, 224, 16, 208 }, + { 160, 96, 144, 80 } + }; + + + The filter accepts 8 bpp grayscale images for processing. + + Sample usage: + + // create filter + BayerDithering filter = new BayerDithering( ); + // apply the filter + filter.ApplyInPlace( image ); + + + Initial image: + + Result image: + + + + + + + Initializes a new instance of the class. + + + + + + Vertical intensity statistics. + + + The class provides information about vertical distribution + of pixel intensities, which may be used to locate objects, their centers, etc. + + + The class accepts grayscale (8 bpp indexed and 16 bpp) and color (24, 32, 48 and 64 bpp) images. + In the case of 32 and 64 bpp color images, the alpha channel is not processed - statistics is not + gathered for this channel. + + Sample usage: + + // collect statistics + VerticalIntensityStatistics vis = new VerticalIntensityStatistics( sourceImage ); + // get gray histogram (for grayscale image) + Histogram histogram = vis.Gray; + // output some histogram's information + System.Diagnostics.Debug.WriteLine( "Mean = " + histogram.Mean ); + System.Diagnostics.Debug.WriteLine( "Min = " + histogram.Min ); + System.Diagnostics.Debug.WriteLine( "Max = " + histogram.Max ); + + + Sample grayscale image with its vertical intensity histogram: + + + + + + + + + Initializes a new instance of the class. + + + Source image. + + Unsupported pixel format of the source image. + + + + + Initializes a new instance of the class. + + + Source image data. + + Unsupported pixel format of the source image. + + + + + Initializes a new instance of the class. + + + Source unmanaged image. + + Unsupported pixel format of the source image. + + + + + Gather vertical intensity statistics for specified image. + + + Source image. + + + + + Histogram for red channel. + + + + + + Histogram for green channel. + + + + + + Histogram for blue channel. + + + + + + Histogram for gray channel (intensities). + + + + + + Value wich specifies if the processed image was color or grayscale. + + + If the property equals to true, then the + property should be used to retrieve histogram for the processed grayscale image. + Otherwise , and property + should be used to retrieve histogram for particular RGB channel of the processed + color image. + + + + + Merge two images using factors from texture. + + + The filter is similar to filter in its idea, but + instead of using single value for balancing amount of source's and overlay's image + values (see ), the filter uses texture, which determines + the amount to take from source image and overlay image. + + The filter uses specified texture to adjust values using the next formula:
+ dst = src * textureValue + ovr * ( 1.0 - textureValue ),
+ where src is value of pixel in a source image, ovr is value of pixel in + overlay image, dst is value of pixel in a destination image and + textureValue is corresponding value from provided texture (see or + ).
+ + The filter accepts 8 bpp grayscale and 24 bpp color images for processing. + + Sample usage #1: + + // create filter + TexturedMerge filter = new TexturedMerge( new TextileTexture( ) ); + // create an overlay image to merge with + filter.OverlayImage = new Bitmap( image.Width, image.Height, + PixelFormat.Format24bppRgb ); + // fill the overlay image with solid color + PointedColorFloodFill fillFilter = new PointedColorFloodFill( Color.DarkKhaki ); + fillFilter.ApplyInPlace( filter.OverlayImage ); + // apply the merge filter + filter.ApplyInPlace( image ); + + + Sample usage #2: + + // create filter + TexturedMerge filter = new TexturedMerge( new CloudsTexture( ) ); + // create 2 images with modified Hue + HueModifier hm1 = new HueModifier( 50 ); + HueModifier hm2 = new HueModifier( 200 ); + filter.OverlayImage = hm2.Apply( image ); + hm1.ApplyInPlace( image ); + // apply the merge filter + filter.ApplyInPlace( image ); + + + Initial image: + + Result image #1: + + Result image #2: + +
+ +
+ + + Initializes a new instance of the class. + + + Generated texture. + + + + + Initializes a new instance of the class. + + + Texture generator. + + + + + Process the filter on the specified image. + + + Source image data. + Overlay image data. + + + + + Format translations dictionary. + + + See for more information. + + + + + Generated texture. + + + Two dimensional array of texture intensities. + + In the case if image passed to the filter is smaller or + larger than the specified texture, than image's region is processed, which equals to the + minimum overlapping area. + + The property has priority over this property - if + generator is specified than the static generated texture is not used. + + + + + + Texture generator. + + + Generator used to generate texture. + + The property has priority over the property. + + + + + + Fill areas outiside of specified region. + + + + The filter fills areas outside of specified region using the specified color. + + The filter accepts 8bpp grayscale and 24/32 bpp color images for processing. + + Sample usage: + + // create filter + CanvasCrop filter = new CanvasCrop( new Rectangle( + 5, 5, image.Width - 10, image.Height - 10 ), Color.Red ); + // apply the filter + filter.ApplyInPlace( image ); + + + Initial image: + + Result image: + + + + + + + + + Initializes a new instance of the class. + + + Region to keep. + + + + + Initializes a new instance of the class. + + + Region to keep. + RGB color to use for filling areas outside of specified region in color images. + + + + + Initializes a new instance of the class. + + + Region to keep. + Gray color to use for filling areas outside of specified region in grayscale images. + + + + + Initializes a new instance of the class. + + + Region to keep. + RGB color to use for filling areas outside of specified region in color images. + Gray color to use for filling areas outside of specified region in grayscale images. + + + + + Process the filter on the specified image. + + + Source image data. + + + + + Format translations dictionary. + + + See + documentation for additional information. + + + + + RGB fill color. + + + The color is used to fill areas out of specified region in color images. + + Default value is set to white - RGB(255, 255, 255). + + + + + Gray fill color. + + + The color is used to fill areas out of specified region in grayscale images. + + Default value is set to white - 255. + + + + + Region to keep. + + + Pixels inside of the specified region will keep their values, but + pixels outside of the region will be filled with specified color. + + + + + Erosion operator from Mathematical Morphology. + + + The filter assigns minimum value of surrounding pixels to each pixel of + the result image. Surrounding pixels, which should be processed, are specified by + structuring element: 1 - to process the neighbor, -1 - to skip it. + + The filter especially useful for binary image processing, where it removes pixels, which + are not surrounded by specified amount of neighbors. It gives ability to remove noisy pixels + (stand-alone pixels) or shrink objects. + + For processing image with 3x3 structuring element, there are different optimizations + available, like and . + + The filter accepts 8 and 16 bpp grayscale images and 24 and 48 bpp + color images for processing. + + Sample usage: + + // create filter + Erosion filter = new Erosion( ); + // apply the filter + filter.Apply( image ); + + + Initial image: + + Result image: + + + + + + + + + + + + + Initializes a new instance of the class. + + + Initializes new instance of the class using + default structuring element - 3x3 structuring element with all elements equal to 1. + + + + + + Initializes a new instance of the class. + + + Structuring element. + + Structuring elemement for the erosion morphological operator + must be square matrix with odd size in the range of [3, 99]. + + Invalid size of structuring element. + + + + + Process the filter on the specified image. + + + Source image data. + Destination image data. + Image rectangle for processing by the filter. + + + + + Format translations dictionary. + + + + + Bottop-hat operator from Mathematical Morphology. + + + Bottom-hat morphological operator subtracts + input image from the result of morphological closing on the + the input image. + + Applied to binary image, the filter allows to get all object parts, which were + added by closing filter, but were not removed after that due + to formed connections/fillings. + + The filter accepts 8 and 16 bpp grayscale images and 24 and 48 bpp + color images for processing. + + Sample usage: + + // create filter + BottomHat filter = new BottomHat( ); + // apply the filter + filter.Apply( image ); + + + Initial image: + + Result image: + + + + + + + + + Initializes a new instance of the class. + + + + + + Initializes a new instance of the class. + + + Structuring element to pass to operator. + + + + + Process the filter on the specified image. + + + Source image data. + + + + + Format translations dictionary. + + + + + Grayscale image using Y algorithm. + + + The class uses Y algorithm to convert color image + to grayscale. The conversion coefficients are: + + Red: 0.299; + Green: 0.587; + Blue: 0.114. + + + + + + + + + + + Initializes a new instance of the class. + + + + + Contrast stretching filter. + + + Contrast stretching (or as it is often called normalization) is a simple image enhancement + technique that attempts to improve the contrast in an image by 'stretching' the range of intensity values + it contains to span a desired range of values, e.g. the full range of pixel values that the image type + concerned allows. It differs from the more sophisticated histogram equalization + in that it can only apply a linear scaling function to the image pixel values. + + The result of this filter may be achieved by using class, which allows to + get pixels' intensities histogram, and filter, which does linear correction + of pixel's intensities. + + The filter accepts 8 bpp grayscale and 24 bpp color images. + + Sample usage: + + // create filter + ContrastStretch filter = new ContrastStretch( ); + // process image + filter.ApplyInPlace( sourceImage ); + + + Source image: + + Result image: + + + + + + + Initializes a new instance of the class. + + + + + Process the filter on the specified image. + + + Source image data. + Image rectangle for processing by the filter. + + + + + Format translations dictionary. + + + + + Channels filters. + + + The filter does color channels' filtering by clearing (filling with + specified values) values, which are inside/outside of the specified value's + range. The filter allows to fill certain ranges of RGB color channels with specified + value. + + The filter is similar to , but operates with not + entire pixels, but with their RGB values individually. This means that pixel itself may + not be filtered (will be kept), but one of its RGB values may be filtered if they are + inside/outside of specified range. + + The filter accepts 24 and 32 bpp color images for processing. + + Sample usage: + + // create filter + ChannelFiltering filter = new ChannelFiltering( ); + // set channels' ranges to keep + filter.Red = new IntRange( 0, 255 ); + filter.Green = new IntRange( 100, 255 ); + filter.Blue = new IntRange( 100, 255 ); + // apply the filter + filter.ApplyInPlace( image ); + + + Initial image: + + Result image: + + + + + + + + + Initializes a new instance of the class. + + + + + + Initializes a new instance of the class. + + + Red channel's filtering range. + Green channel's filtering range. + Blue channel's filtering range. + + + + + Process the filter on the specified image. + + + Source image data. + Image rectangle for processing by the filter. + + + + + Calculate filtering map. + + + Filtering range. + Fillter value. + Fill outside or inside the range. + Filtering map. + + + + + Format translations dictionary. + + + + + Red channel's range. + + + + + Red fill value. + + + + + Green channel's range. + + + + + Green fill value. + + + + + Blue channel's range. + + + + + Blue fill value. + + + + + Determines, if red channel should be filled inside or outside filtering range. + + + Default value is set to . + + + + + Determines, if green channel should be filled inside or outside filtering range. + + + Default value is set to . + + + + + Determines, if blue channel should be filled inside or outside filtering range. + + + Default value is set to . + + + + + Generic Bayer fileter image processing routine. + + + The class implements Bayer filter + routine, which creates color image out of grayscale image produced by image sensor built with + Bayer color matrix. + + This Bayer filter implementation is made generic by allowing user to specify used + Bayer pattern. This makes it slower. For optimized version + of the Bayer filter see class, which implements Bayer filter + specifically optimized for some well known patterns. + + The filter accepts 8 bpp grayscale images and produces 24 bpp RGB image. + + Sample usage: + + // create filter + BayerFilter filter = new BayerFilter( ); + // apply the filter + Bitmap rgbImage = filter.Apply( image ); + + + Source image: + + Result image: + + + + + + + + + Initializes a new instance of the class. + + + + + + Process the filter on the specified image. + + + Source image data. + Destination image data. + + + + + Specifies if demosaicing must be done or not. + + + The property specifies if color demosaicing must be done or not. + If the property is set to , then pixels of the result color image + are colored according to the Bayer pattern used, i.e. every pixel + of the source grayscale image is copied to corresponding color plane of the result image. + If the property is set to , then pixels of the result image + are set to color, which is obtained by averaging color components from the 3x3 window - pixel + itself plus 8 surrounding neighbors. + + Default value is set to . + + + + + + Specifies Bayer pattern used for decoding color image. + + + The property specifies 2x2 array of RGB color indexes, which set the + Bayer patter used for decoding color image. + + By default the property is set to: + + new int[2, 2] { { RGB.G, RGB.R }, { RGB.B, RGB.G } } + , + which corresponds to + + G R + B G + + pattern. + + + + + + + Format translations dictionary. + + + See + documentation for additional information. + + + + + Move towards filter. + + + The result of this filter is an image, which is based on source image, + but updated in the way to decrease diffirence with overlay image - source image is + moved towards overlay image. The update equation is defined in the next way: + res = src + Min( Abs( ovr - src ), step ) * Sign( ovr - src ). + + The bigger is step size value the more resulting + image will look like overlay image. For example, in the case if step size is equal + to 255 (or 65535 for images with 16 bits per channel), the resulting image will be + equal to overlay image regardless of source image's pixel values. In the case if step + size is set to 1, the resulting image will very little differ from the source image. + But, in the case if the filter is applied repeatedly to the resulting image again and + again, it will become equal to overlay image in maximum 255 (65535 for images with 16 + bits per channel) iterations. + + The filter accepts 8 and 16 bpp grayscale images and 24, 32, 48 and 64 bpp + color images for processing. + + Sample usage: + + // create filter + MoveTowards filter = new MoveTowards( overlayImage, 20 ); + // apply the filter + Bitmap resultImage = filter.Apply( sourceImage ); + + + Source image: + + Overlay image: + + Result image: + + + + + + + Initializes a new instance of the class + + + + + Initializes a new instance of the class. + + + Overlay image. + + + + + Initializes a new instance of the class. + + + Overlay image. + Step size. + + + + + Initializes a new instance of the class. + + + Unmanaged overlay image. + + + + + Initializes a new instance of the class. + + + Unmanaged overlay image. + Step size. + + + + + Process the filter on the specified image. + + + Source image data. + Overlay image data. + + + + + Format translations dictionary. + + + + + Step size, [0, 65535]. + + + + The property defines the maximum amount of changes per pixel in the source image. + + Default value is set to 1. + + + + + + Drawing primitives. + + + The class allows to do drawing of some primitives directly on + locked image data or unmanaged image. + + All methods of this class support drawing only on color 24/32 bpp images and + on grayscale 8 bpp indexed images. + + When it comes to alpha blending for 24/32 bpp images, all calculations are done + as described on Wikipeadia + (see "over" operator). + + + + + + Fill rectangle on the specified image. + + + Source image data to draw on. + Rectangle's coordinates to fill. + Rectangle's color. + + The source image has incorrect pixel format. + + + + + Fill rectangle on the specified image. + + + Source image to draw on. + Rectangle's coordinates to fill. + Rectangle's color. + + The source image has incorrect pixel format. + + + + + Draw rectangle on the specified image. + + + Source image data to draw on. + Rectangle's coordinates to draw. + Rectangle's color. + + The source image has incorrect pixel format. + + + + + Draw rectangle on the specified image. + + + Source image to draw on. + Rectangle's coordinates to draw. + Rectangle's color. + + The source image has incorrect pixel format. + + + + + Draw a line on the specified image. + + + Source image data to draw on. + The first point to connect. + The second point to connect. + Line's color. + + The source image has incorrect pixel format. + + + + + Draw a line on the specified image. + + + Source image to draw on. + The first point to connect. + The second point to connect. + Line's color. + + The source image has incorrect pixel format. + + + + + Draw a polygon on the specified image. + + + Source image data to draw on. + Points of the polygon to draw. + Polygon's color. + + The method draws a polygon by connecting all points from the + first one to the last one and then connecting the last point with the first one. + + + + + + Draw a polygon on the specified image. + + + Source image to draw on. + Points of the polygon to draw. + Polygon's color. + + The method draws a polygon by connecting all points from the + first one to the last one and then connecting the last point with the first one. + + + + + + Draw a polyline on the specified image. + + + Source image data to draw on. + Points of the polyline to draw. + polyline's color. + + The method draws a polyline by connecting all points from the + first one to the last one. Unlike + method, this method does not connect the last point with the first one. + + + + + + Draw a polyline on the specified image. + + + Source image to draw on. + Points of the polyline to draw. + polyline's color. + + The method draws a polyline by connecting all points from the + first one to the last one. Unlike + method, this method does not connect the last point with the first one. + + + + + + Color quantization tools. + + + The class contains methods aimed to simplify work with color quantization + algorithms implementing interface. Using its methods it is possible + to calculate reduced color palette for the specified image or reduce colors to the specified number. + + Sample usage: + + // instantiate the images' color quantization class + ColorImageQuantizer ciq = new ColorImageQuantizer( new MedianCutQuantizer( ) ); + // get 16 color palette for a given image + Color[] colorTable = ciq.CalculatePalette( image, 16 ); + + // ... or just reduce colors in the specified image + Bitmap newImage = ciq.ReduceColors( image, 16 ); + + + Initial image: + + Result image: + + + + + + + Initializes a new instance of the class. + + + Color quantization algorithm to use for processing images. + + + + + Calculate reduced color palette for the specified image. + + + Image to calculate palette for. + Palette size to calculate. + + Return reduced color palette for the specified image. + + See for details. + + + + + Calculate reduced color palette for the specified image. + + + Image to calculate palette for. + Palette size to calculate. + + Return reduced color palette for the specified image. + + The method processes the specified image and feeds color value of each pixel + to the specified color quantization algorithm. Finally it returns color palette built by + that algorithm. + + Unsupported format of the source image - it must 24 or 32 bpp color image. + + + + + Create an image with reduced number of colors. + + + Source image to process. + Number of colors to get in the output image, [2, 256]. + + Returns image with reduced number of colors. + + See for details. + + + + + Create an image with reduced number of colors. + + + Source image to process. + Number of colors to get in the output image, [2, 256]. + + Returns image with reduced number of colors. + + The method creates an image, which looks similar to the specified image, but contains + reduced number of colors. First, target color palette is calculated using + method and then a new image is created, where pixels from the given source image are substituted by + best matching colors from calculated color table. + + The output image has 4 bpp or 8 bpp indexed pixel format depending on the target palette size - + 4 bpp for palette size 16 or less; 8 bpp otherwise. + + + Unsupported format of the source image - it must 24 or 32 bpp color image. + Invalid size of the target color palette. + + + + + Create an image with reduced number of colors using the specified palette. + + + Source image to process. + Target color palette. Must contatin 2-256 colors. + + Returns image with reduced number of colors. + + See for details. + + + + + Create an image with reduced number of colors using the specified palette. + + + Source image to process. + Target color palette. Must contatin 2-256 colors. + + Returns image with reduced number of colors. + + The method creates an image, which looks similar to the specified image, but contains + reduced number of colors. Is substitutes every pixel of the source image with the closest matching color + in the specified paletter. + + The output image has 4 bpp or 8 bpp indexed pixel format depending on the target palette size - + 4 bpp for palette size 16 or less; 8 bpp otherwise. + + + Unsupported format of the source image - it must 24 or 32 bpp color image. + Invalid size of the target color palette. + + + + + Color quantization algorithm used by this class to build color palettes for the specified images. + + + + + + Use color caching during color reduction or not. + + + The property has effect only for methods like and + specifies if internal cache of already processed colors should be used or not. For each pixel in the original + image the color reduction routine does search in target color palette to find the best matching color. + To avoid doing the search again and again for already processed colors, the class may use internal dictionary + which maps colors of original image to indexes in target color palette. + + + The property provides a trade off. On one hand it may speedup color reduction routine, but on another + hand it increases memory usage. Also cache usage may not be efficient for very small target color tables. + + Default value is set to . + + + + + + Pixellate filter. + + + The filter processes an image creating the effect of an image with larger + pixels - pixellated image. The effect is achieved by filling image's rectangles of the + specified size by the color, which is mean color value for the corresponding rectangle. + The size of rectangles to process is set by and + properties. + + The filter accepts 8 bpp grayscale images and 24 bpp + color images for processing. + + Sample usage: + + // create filter + Pixellate filter = new Pixellate( ); + // apply the filter + filter.ApplyInPlace( image ); + + + Initial image: + + Result image: + + + + + + + Initializes a new instance of the class. + + + + + + Initializes a new instance of the class. + + + Pixel size. + + + + + Initializes a new instance of the class. + + + Pixel width. + Pixel height. + + + + + Process the filter on the specified image. + + + Source image data. + Image rectangle for processing by the filter. + + + + + Format translations dictionary. + + + + + Pixel width, [2, 32]. + + + Default value is set to 8. + + + + + + + + Pixel height, [2, 32]. + + + Default value is set to 8. + + + + + + + + Pixel size, [2, 32]. + + + The property is used to set both and + simultaneously. + + + + + Apply mask to the specified image. + + + The filter applies mask to the specified image - keeps all pixels + in the image if corresponding pixels/values of the mask are not equal to 0. For all + 0 pixels/values in mask, corresponding pixels in the source image are set to 0. + + Mask can be specified as .NET's managed Bitmap, as + UnmanagedImage or as byte array. + In the case if mask is specified as image, it must be 8 bpp grayscale image. In all case + mask size must be the same as size of the image to process. + + The filter accepts 8/16 bpp grayscale and 24/32/48/64 bpp color images for processing. + + + + + + Initializes a new instance of the class. + + + Mask image to use. + + + + + Initializes a new instance of the class. + + + Unmanaged mask image to use. + + + + + Initializes a new instance of the class. + + + to use. + + + + + Process the filter on the specified image. + + + Source image data. + Image rectangle for processing by the filter. + + None of the possible mask properties were set. Need to provide mask before applying the filter. + Invalid size of provided mask. Its size must be the same as the size of the image to mask. + + + + + Mask image to apply. + + + The property specifies mask image to use. The image must be grayscale + (8 bpp format) and have the same size as the source image to process. + + When the property is set, both and + properties are set to . + + + The mask image must be 8 bpp grayscale image. + + + + + Unmanaged mask image to apply. + + + The property specifies unmanaged mask image to use. The image must be grayscale + (8 bpp format) and have the same size as the source image to process. + + When the property is set, both and + properties are set to . + + + The mask image must be 8 bpp grayscale image. + + + + + Mask to apply. + + + The property specifies mask array to use. Size of the array must + be the same size as the size of the source image to process - its 0th dimension + must be equal to image's height and its 1st dimension must be equal to width. For + example, for 640x480 image, the mask array must be defined as: + + byte[,] mask = new byte[480, 640]; + + + + + + + Format translations dictionary. + + + See + documentation for additional information. + + + + + Canny edge detector. + + + The filter searches for objects' edges by applying Canny edge detector. + The implementation follows + Bill Green's Canny edge detection tutorial. + + The implemented canny edge detector has one difference with the above linked algorithm. + The difference is in hysteresis step, which is a bit simplified (getting faster as a result). On the + hysteresis step each pixel is compared with two threshold values: and + . If pixel's value is greater or equal to , then + it is kept as edge pixel. If pixel's value is greater or equal to , then + it is kept as edge pixel only if there is at least one neighbouring pixel (8 neighbours are checked) which + has value greater or equal to ; otherwise it is none edge pixel. In the case + if pixel's value is less than , then it is marked as none edge immediately. + + + The filter accepts 8 bpp grayscale images for processing. + + Sample usage: + + // create filter + CannyEdgeDetector filter = new CannyEdgeDetector( ); + // apply the filter + filter.ApplyInPlace( image ); + + + Initial image: + + Result image: + + + + + + + Initializes a new instance of the class. + + + + + + Initializes a new instance of the class. + + + Low threshold. + High threshold. + + + + + Initializes a new instance of the class. + + + Low threshold. + High threshold. + Gaussian sigma. + + + + + Process the filter on the specified image. + + + Source image data. + Destination image data. + Image rectangle for processing by the filter. + + + + + Format translations dictionary. + + + + + Low threshold. + + + Low threshold value used for hysteresis + (see tutorial + for more information). + + Default value is set to 20. + + + + + + High threshold. + + + High threshold value used for hysteresis + (see tutorial + for more information). + + Default value is set to 100. + + + + + + Gaussian sigma. + + + Sigma value for Gaussian bluring. + + + + + Gaussian size. + + + Size of Gaussian kernel. + + + + + Linear correction of RGB channels for images, which have 16 bpp planes (16 bit gray images or 48/64 bit colour images). + + + The filter performs linear correction of RGB channels by mapping specified + channels' input ranges to output ranges. This version of the filter processes only images + with 16 bpp colour planes. See for 8 bpp version. + + The filter accepts 16 bpp grayscale and 48/64 bpp colour images for processing. + + Sample usage: + + // create filter + LevelsLinear16bpp filter = new LevelsLinear16bpp( ); + // set ranges + filter.InRed = new IntRange( 3000, 42000 ); + filter.InGreen = new IntRange( 5000, 37500 ); + filter.InBlue = new IntRange( 1000, 60000 ); + // apply the filter + filter.ApplyInPlace( image ); + + + + + + + + + Initializes a new instance of the class. + + + + + Process the filter on the specified image. + + + Source image data. + Image rectangle for processing by the filter. + + + + + Calculate conversion map. + + + Input range. + Output range. + Conversion map. + + + + + Format translations dictionary. + + + + + Red component's input range. + + + + + Green component's input range. + + + + + Blue component's input range. + + + + + Gray component's input range. + + + + + Input range for RGB components. + + + The property allows to set red, green and blue input ranges to the same value. + + + + + Red component's output range. + + + + + Green component's output range. + + + + + Blue component's output range. + + + + + Gray component's output range. + + + + + Output range for RGB components. + + + The property allows to set red, green and blue output ranges to the same value. + + + + + Dithering using Sierra error diffusion. + + + The filter represents binarization filter, which is based on + error diffusion dithering with Sierra coefficients. Error is diffused + on 10 neighbor pixels with next coefficients: + + | * | 5 | 3 | + | 2 | 4 | 5 | 4 | 2 | + | 2 | 3 | 2 | + + / 32 + + + The filter accepts 8 bpp grayscale images for processing. + + Sample usage: + + // create filter + SierraDithering filter = new SierraDithering( ); + // apply the filter + filter.ApplyInPlace( image ); + + + Initial image: + + Result image: + + + + + + + + + + + + Initializes a new instance of the class. + + + + + + Dithering using Burkes error diffusion. + + + The filter represents binarization filter, which is based on + error diffusion dithering with Burkes coefficients. Error is diffused + on 7 neighbor pixels with next coefficients: + + | * | 8 | 4 | + | 2 | 4 | 8 | 4 | 2 | + + / 32 + + + The filter accepts 8 bpp grayscale images for processing. + + Sample usage: + + // create filter + BurkesDithering filter = new BurkesDithering( ); + // apply the filter + filter.ApplyInPlace( image ); + + + Initial image: + + Result image: + + + + + + + + + + + + Initializes a new instance of the class. + + + + + + Calculate difference between two images and threshold it. + + + The filter produces similar result as applying filter and + then filter - thresholded difference between two images. Result of this + image processing routine may be useful in motion detection applications or finding areas of significant + difference. + + The filter accepts 8 and 24/32color images for processing. + In the case of color images, the image processing routine differences sum over 3 RGB channels (Manhattan distance), i.e. + |diffR| + |diffG| + |diffB|. + + + Sample usage: + + // create filter + ThresholdedDifference filter = new ThresholdedDifference( 60 ); + // apply the filter + filter.OverlayImage = backgroundImage; + Bitmap resultImage = filter.Apply( sourceImage ); + + + Source image: + + Background image: + + Result image: + + + + + + + + + Initializes a new instance of the class. + + + + + + Initializes a new instance of the class. + + + Difference threshold (see ). + + + + + Process the filter on the specified image. + + + Source image data. + Overlay image data. + Destination image data + + + + + Difference threshold. + + + The property specifies difference threshold. If difference between pixels of processing image + and overlay image is greater than this value, then corresponding pixel of result image is set to white; otherwise + black. + + + Default value is set to 15. + + + + + Number of pixels which were set to white in destination image during last image processing call. + + + The property may be useful to determine amount of difference between two images which, + for example, may be treated as amount of motion in motion detection applications, etc. + + + + + Format translations dictionary. + + + See for more information. + + + + + Subtract filter - subtract pixel values of two images. + + + The subtract filter takes two images (source and overlay images) + of the same size and pixel format and produces an image, where each pixel equals + to the difference value of corresponding pixels from provided images (if difference is less + than minimum allowed value, 0, then it is truncated to that minimum value). + + The filter accepts 8 and 16 bpp grayscale images and 24, 32, 48 and 64 bpp + color images for processing. + + Sample usage: + + // create filter + Subtract filter = new Subtract( overlayImage ); + // apply the filter + Bitmap resultImage = filter.Apply( sourceImage ); + + + Source image: + + Overlay image: + + Result image: + + + + + + + + + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the class. + + + Overlay image + + + + + Initializes a new instance of the class. + + + Unmanaged overlay image. + + + + + Process the filter on the specified image. + + + Source image data. + Overlay image data. + + + + + Format translations dictionary. + + + + + Stereo anaglyph filter. + + + The image processing filter produces stereo anaglyph images which are + aimed to be viewed through anaglyph glasses with red filter over the left eye and + cyan over the right. + + + + The stereo image is produced by combining two images of the same scene taken + from a bit different points. The right image must be provided to the filter using + property, but the left image must be provided to + method, which creates the anaglyph image. + + The filter accepts 24 bpp color images for processing. + + See enumeration for the list of supported anaglyph algorithms. + + Sample usage: + + // create filter + StereoAnaglyph filter = new StereoAnaglyph( ); + // set right image as overlay + filter.Overlay = rightImage + // apply the filter (providing left image) + Bitmap resultImage = filter.Apply( leftImage ); + + + Source image (left): + + Overlay image (right): + + Result image: + + + + + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the class. + + + Algorithm to use for creating anaglyph images. + + + + + Process the filter on the specified image. + + + Source image data (left image). + Overlay image data (right image). + + + + + Algorithm to use for creating anaglyph images. + + + Default value is set to . + + + + + Format translations dictionary. + + + + + Enumeration of algorithms for creating anaglyph images. + + + See anaglyph methods comparison for + descipton of different algorithms. + + + + + + Creates anaglyph image using the below calculations: + + Ra=0.299*Rl+0.587*Gl+0.114*Bl; + Ga=0; + Ba=0.299*Rr+0.587*Gr+0.114*Br. + + + + + + Creates anaglyph image using the below calculations: + + Ra=0.299*Rl+0.587*Gl+0.114*Bl; + Ga=0.299*Rr+0.587*Gr+0.114*Br; + Ba=0.299*Rr+0.587*Gr+0.114*Br. + + + + + + Creates anaglyph image using the below calculations: + + Ra=Rl; + Ga=Gr; + Ba=Br. + + + + + + Creates anaglyph image using the below calculations: + + Ra=0.299*Rl+0.587*Gl+0.114*Bl; + Ga=Gr; + Ba=Br. + + + + + + Creates anaglyph image using the below calculations: + + Ra=0.7*Gl+0.3*Bl; + Ga=Gr; + Ba=Br. + + + + + diff --git a/HMI Label And Editor Control/bin/Debug/AForge.Math.dll b/HMI Label And Editor Control/bin/Debug/AForge.Math.dll new file mode 100644 index 0000000000000000000000000000000000000000..bdc5e5ba6296590cd41e656b3b04d40241390385 GIT binary patch literal 68096 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 literal 0 HcmV?d00001 diff --git a/HMI Label And Editor Control/bin/Debug/AForge.Video.DirectShow.dll b/HMI Label And Editor Control/bin/Debug/AForge.Video.DirectShow.dll new file mode 100644 index 0000000000000000000000000000000000000000..e3f806f345fc11b4633c7e5826d0ed04354b183d GIT binary patch literal 61440 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 J{r}ek{}*xX`*r{T literal 0 HcmV?d00001 diff --git a/HMI Label And Editor Control/bin/Debug/AForge.Video.DirectShow.xml b/HMI Label And Editor Control/bin/Debug/AForge.Video.DirectShow.xml new file mode 100644 index 0000000..5d62c10 --- /dev/null +++ b/HMI Label And Editor Control/bin/Debug/AForge.Video.DirectShow.xml @@ -0,0 +1,4108 @@ + + + + AForge.Video.DirectShow + + + + + A strongly-typed resource class, for looking up localized strings, etc. + + + + + Returns the cached ResourceManager instance used by this class. + + + + + Overrides the current thread's CurrentUICulture property for all + resource lookups using this strongly typed resource class. + + + + + This interface is exposed by all input and output pins of DirectShow filters. + + + + + + Connects the pin to another pin. + + + Other pin to connect to. + Type to use for the connections (optional). + + Return's HRESULT error code. + + + + + Makes a connection to this pin and is called by a connecting pin. + + + Connecting pin. + Media type of the samples to be streamed. + + Return's HRESULT error code. + + + + + Breaks the current pin connection. + + + Return's HRESULT error code. + + + + + Returns a pointer to the connecting pin. + + + Receives IPin interface of connected pin (if any). + + Return's HRESULT error code. + + + + + Returns the media type of this pin's connection. + + + Pointer to an structure. If the pin is connected, + the media type is returned. Otherwise, the structure is initialized to a default state in which + all elements are 0, with the exception of lSampleSize, which is set to 1, and + FixedSizeSamples, which is set to true. + + Return's HRESULT error code. + + + + + Retrieves information about this pin (for example, the name, owning filter, and direction). + + + structure that receives the pin information. + + Return's HRESULT error code. + + + + + Retrieves the direction for this pin. + + + Receives direction of the pin. + + Return's HRESULT error code. + + + + + Retrieves an identifier for the pin. + + + Pin identifier. + + Return's HRESULT error code. + + + + + Queries whether a given media type is acceptable by the pin. + + + structure that specifies the media type. + + Return's HRESULT error code. + + + + + Provides an enumerator for this pin's preferred media types. + + + Address of a variable that receives a pointer to the IEnumMediaTypes interface. + + Return's HRESULT error code. + + + + + Provides an array of the pins to which this pin internally connects. + + + Address of an array of IPin pointers. + On input, specifies the size of the array. When the method returns, + the value is set to the number of pointers returned in the array. + + Return's HRESULT error code. + + + + + Notifies the pin that no additional data is expected. + + + Return's HRESULT error code. + + + + + Begins a flush operation. + + + Return's HRESULT error code. + + + + + Ends a flush operation. + + + Return's HRESULT error code. + + + + + Specifies that samples following this call are grouped as a segment with a given start time, stop time, and rate. + + + Start time of the segment, relative to the original source, in 100-nanosecond units. + End time of the segment, relative to the original source, in 100-nanosecond units. + Rate at which this segment should be processed, as a percentage of the original rate. + + Return's HRESULT error code. + + + + + The interface provides methods for building a filter graph. An application can use it to add filters to + the graph, connect or disconnect filters, remove filters, and perform other basic operations. + + + + + + Adds a filter to the graph and gives it a name. + + + Filter to add to the graph. + Name of the filter. + + Return's HRESULT error code. + + + + + Removes a filter from the graph. + + + Filter to be removed from the graph. + + Return's HRESULT error code. + + + + + Provides an enumerator for all filters in the graph. + + + Filter enumerator. + + Return's HRESULT error code. + + + + + Finds a filter that was added with a specified name. + + + Name of filter to search for. + Interface of found filter. + + Return's HRESULT error code. + + + + + Connects two pins directly (without intervening filters). + + + Output pin. + Input pin. + Media type to use for the connection. + + Return's HRESULT error code. + + + + + Breaks the existing pin connection and reconnects it to the same pin. + + + Pin to disconnect and reconnect. + + Return's HRESULT error code. + + + + + Disconnects a specified pin. + + + Pin to disconnect. + + Return's HRESULT error code. + + + + + Sets the reference clock to the default clock. + + + Return's HRESULT error code. + + + + + The interface is exposed by source filters to set the file name and media type of the media file that they are to render. + + + + + + Loads the source filter with the file. + + + The name of the file to open. + Media type of the file. This can be null. + + Return's HRESULT error code. + + + + + Retrieves the current file. + + + Name of media file. + Receives media type. + + Return's HRESULT error code. + + + + + The interface controls certain video capture operations such as enumerating available + frame rates and image orientation. + + + + + + Retrieves the capabilities of the underlying hardware. + + + Pin to query capabilities from. + Get capabilities of the specified pin. + + Return's HRESULT error code. + + + + + Sets the video control mode of operation. + + + The pin to set the video control mode on. + Value specifying a combination of the flags to set the video control mode. + + Return's HRESULT error code. + + + + + Retrieves the video control mode of operation. + + + The pin to retrieve the video control mode from. + Gets combination of flags, which specify the video control mode. + + Return's HRESULT error code. + + + + + The method retrieves the actual frame rate, expressed as a frame duration in 100-nanosecond units. + USB (Universal Serial Bus) and IEEE 1394 cameras may provide lower frame rates than requested + because of bandwidth availability. This is only available during video streaming. + + + The pin to retrieve the frame rate from. + Gets frame rate in frame duration in 100-nanosecond units. + + Return's HRESULT error code. + + + + + Retrieves the maximum frame rate currently available based on bus bandwidth usage for connections + such as USB and IEEE 1394 camera devices where the maximum frame rate can be limited by bandwidth + availability. + + + The pin to retrieve the maximum frame rate from. + Index of the format to query for maximum frame rate. This index corresponds + to the order in which formats are enumerated by . + Frame image size (width and height) in pixels. + Gets maximum available frame rate. The frame rate is expressed as frame duration in 100-nanosecond units. + + Return's HRESULT error code. + + + + + Retrieves a list of available frame rates. + + + The pin to retrieve the maximum frame rate from. + Index of the format to query for maximum frame rate. This index corresponds + to the order in which formats are enumerated by . + Frame image size (width and height) in pixels. + Number of elements in the list of frame rates. + Array of frame rates in 100-nanosecond units. + + Return's HRESULT error code. + + + + + DirectShow filter categories. + + + + + Audio input device category. + + + Equals to CLSID_AudioInputDeviceCategory. + + + + + Video input device category. + + + Equals to CLSID_VideoInputDeviceCategory. + + + + + Video compressor category. + + + Equals to CLSID_VideoCompressorCategory. + + + + + Audio compressor category + + + Equals to CLSID_AudioCompressorCategory. + + + + + Provides the CLSID of an object that can be stored persistently in the system. Allows the object to specify which object + handler to use in the client process, as it is used in the default implementation of marshaling. + + + + + Retrieves the class identifier (CLSID) of the object. + + + + + + + The IAMCameraControl interface controls camera settings such as zoom, pan, aperture adjustment, + or shutter speed. To obtain this interface, query the filter that controls the camera. + + + + + Gets the range and default value of a specified camera property. + + + Specifies the property to query. + Receives the minimum value of the property. + Receives the maximum value of the property. + Receives the step size for the property. + Receives the default value of the property. + Receives a member of the CameraControlFlags enumeration, indicating whether the property is controlled automatically or manually. + + Return's HRESULT error code. + + + + + Sets a specified property on the camera. + + + Specifies the property to set. + Specifies the new value of the property. + Specifies the desired control setting, as a member of the CameraControlFlags enumeration. + + Return's HRESULT error code. + + + + + Gets the current setting of a camera property. + + + Specifies the property to retrieve. + Receives the value of the property. + Receives a member of the CameraControlFlags enumeration. + The returned value indicates whether the setting is controlled manually or automatically. + + Return's HRESULT error code. + + + + + Capabilities of video device such as frame size and frame rate. + + + + + Frame size supported by video device. + + + + + Average frame rate of video device for corresponding frame size. + + + + + Maximum frame rate of video device for corresponding frame size. + + + + + Number of bits per pixel provided by the camera. + + + + + Check if the video capability equals to the specified object. + + + Object to compare with. + + Returns true if both are equal are equal or false otherwise. + + + + + Check if two video capabilities are equal. + + + Second video capability to compare with. + + Returns true if both video capabilities are equal or false otherwise. + + + + + Get hash code of the object. + + + Returns hash code ot the object + + + + Equality operator. + + + First object to check. + Seconds object to check. + + Return true if both objects are equal or false otherwise. + + + + Inequality operator. + + + First object to check. + Seconds object to check. + + Return true if both objects are not equal or false otherwise. + + + + Frame rate supported by video device for corresponding frame size. + + + This field is depricated - should not be used. + Its value equals to . + + + + + + Specifies the physical type of pin (audio or video). + + + + + Default value of connection type. Physically it does not exist, but just either to specify that + connection type should not be changed (input) or was not determined (output). + + + + + Specifies a tuner pin for video. + + + + + Specifies a composite pin for video. + + + + + Specifies an S-Video (Y/C video) pin. + + + + + Specifies an RGB pin for video. + + + + + Specifies a YRYBY (Y, R–Y, B–Y) pin for video. + + + + + Specifies a serial digital pin for video. + + + + + Specifies a parallel digital pin for video. + + + + + Specifies a SCSI (Small Computer System Interface) pin for video. + + + + + Specifies an AUX (auxiliary) pin for video. + + + + + Specifies an IEEE 1394 pin for video. + + + + + Specifies a USB (Universal Serial Bus) pin for video. + + + + + Specifies a video decoder pin. + + + + + Specifies a video encoder pin. + + + + + Specifies a SCART (Peritel) pin for video. + + + + + Not used. + + + + + Specifies a tuner pin for audio. + + + + + Specifies a line pin for audio. + + + + + Specifies a microphone pin. + + + + + Specifies an AES/EBU (Audio Engineering Society/European Broadcast Union) digital pin for audio. + + + + + Specifies an S/PDIF (Sony/Philips Digital Interface Format) digital pin for audio. + + + + + Specifies a SCSI pin for audio. + + + + + Specifies an AUX pin for audio. + + + + + Specifies an IEEE 1394 pin for audio. + + + + + Specifies a USB pin for audio. + + + + + Specifies an audio decoder pin. + + + + + This enumeration indicates a pin's direction. + + + + + + Input pin. + + + + + Output pin. + + + + + The structure describes the format of a media sample. + + + + + + Globally unique identifier (GUID) that specifies the major type of the media sample. + + + + + GUID that specifies the subtype of the media sample. + + + + + If true, samples are of a fixed size. + + + + + If true, samples are compressed using temporal (interframe) compression. + + + + + Size of the sample in bytes. For compressed data, the value can be zero. + + + + + GUID that specifies the structure used for the format block. + + + + + Not used. + + + + + Size of the format block, in bytes. + + + + + Pointer to the format block. + + + + + Destroys the instance of the class. + + + + + + Dispose the object. + + + + + + Dispose the object + + + Indicates if disposing was initiated manually. + + + + + The structure contains information about a pin. + + + + + + Owning filter. + + + + + Direction of the pin. + + + + + Name of the pin. + + + + + Filter's name. + + + + + Owning graph. + + + + + The structure describes the bitmap and color information for a video image. + + + + + + structure that specifies the source video window. + + + + + structure that specifies the destination video window. + + + + + Approximate data rate of the video stream, in bits per second. + + + + + Data error rate, in bit errors per second. + + + + + The desired average display time of the video frames, in 100-nanosecond units. + + + + + structure that contains color and dimension information for the video image bitmap. + + + + + The structure describes the bitmap and color information for a video image (v2). + + + + + + structure that specifies the source video window. + + + + + structure that specifies the destination video window. + + + + + Approximate data rate of the video stream, in bits per second. + + + + + Data error rate, in bit errors per second. + + + + + The desired average display time of the video frames, in 100-nanosecond units. + + + + + Flags that specify how the video is interlaced. + + + + + Flag set to indicate that the duplication of the stream should be restricted. + + + + + The X dimension of picture aspect ratio. + + + + + The Y dimension of picture aspect ratio. + + + + + Reserved for future use. + + + + + Reserved for future use. + + + + + structure that contains color and dimension information for the video image bitmap. + + + + + The structure contains information about the dimensions and color format of a device-independent bitmap (DIB). + + + + + + Specifies the number of bytes required by the structure. + + + + + Specifies the width of the bitmap. + + + + + Specifies the height of the bitmap, in pixels. + + + + + Specifies the number of planes for the target device. This value must be set to 1. + + + + + Specifies the number of bits per pixel. + + + + + If the bitmap is compressed, this member is a FOURCC the specifies the compression. + + + + + Specifies the size, in bytes, of the image. + + + + + Specifies the horizontal resolution, in pixels per meter, of the target device for the bitmap. + + + + + Specifies the vertical resolution, in pixels per meter, of the target device for the bitmap. + + + + + Specifies the number of color indices in the color table that are actually used by the bitmap. + + + + + Specifies the number of color indices that are considered important for displaying the bitmap. + + + + + The structure defines the coordinates of the upper-left and lower-right corners of a rectangle. + + + + + + Specifies the x-coordinate of the upper-left corner of the rectangle. + + + + + Specifies the y-coordinate of the upper-left corner of the rectangle. + + + + + Specifies the x-coordinate of the lower-right corner of the rectangle. + + + + + Specifies the y-coordinate of the lower-right corner of the rectangle. + + + + + The CAUUID structure is a Counted Array of UUID or GUID types. + + + + + + Size of the array pointed to by pElems. + + + + + Pointer to an array of UUID values, each of which specifies UUID. + + + + + Performs manual marshaling of pElems to retrieve an array of Guid objects. + + + A managed representation of pElems. + + + + + Enumeration of DirectShow event codes. + + + + + Specifies a filter's state or the state of the filter graph. + + + + + Stopped. The filter is not processing data. + + + + + Paused. The filter is processing data, but not rendering it. + + + + + Running. The filter is processing and rendering data. + + + + + The interface is exposed by the Sample Grabber Filter. It enables an application to retrieve + individual media samples as they move through the filter graph. + + + + + + Specifies whether the filter should stop the graph after receiving one sample. + + + Boolean value specifying whether the filter should stop the graph after receiving one sample. + + Return's HRESULT error code. + + + + + Specifies the media type for the connection on the Sample Grabber's input pin. + + + Specifies the required media type. + + Return's HRESULT error code. + + + + + Retrieves the media type for the connection on the Sample Grabber's input pin. + + + structure, which receives media type. + + Return's HRESULT error code. + + + + + Specifies whether to copy sample data into a buffer as it goes through the filter. + + + Boolean value specifying whether to buffer sample data. + If true, the filter copies sample data into an internal buffer. + + Return's HRESULT error code. + + + + + Retrieves a copy of the sample that the filter received most recently. + + + Pointer to the size of the buffer. If pBuffer is NULL, this parameter receives the required size. + Pointer to a buffer to receive a copy of the sample, or NULL. + + Return's HRESULT error code. + + + + + Not currently implemented. + + + + + Return's HRESULT error code. + + + + + Specifies a callback method to call on incoming samples. + + + interface containing the callback method, or NULL to cancel the callback. + Index specifying the callback method. + + Return's HRESULT error code. + + + + + This interface builds capture graphs and other custom filter graphs. + + + + + + Specify filter graph for the capture graph builder to use. + + + Filter graph's interface. + + Return's HRESULT error code. + + + + + Retrieve the filter graph that the builder is using. + + + Filter graph's interface. + + Return's HRESULT error code. + + + + + Create file writing section of the filter graph. + + + GUID that represents either the media subtype of the output or the + class identifier (CLSID) of a multiplexer filter or file writer filter. + Output file name. + Receives the multiplexer's interface. + Receives the file writer's IFileSinkFilter interface. Can be NULL. + + Return's HRESULT error code. + + + + + Searche the graph for a specified interface, starting from a specified filter. + + + GUID that specifies the search criteria. + GUID that specifies the major media type of an output pin, or NULL. + interface of the filter. The method begins searching from this filter. + Interface identifier (IID) of the interface to locate. + Receives found interface. + + Return's HRESULT error code. + + + + + Connect an output pin on a source filter to a rendering filter, optionally through a compression filter. + + + Pin category. + Major-type GUID that specifies the media type of the output pin. + Starting filter for the connection. + Interface of an intermediate filter, such as a compression filter. Can be NULL. + Sink filter, such as a renderer or mux filter. + + Return's HRESULT error code. + + + + + Set the start and stop times for one or more streams of captured data. + + + Pin category. + Major-type GUID that specifies the media type. + interface that specifies which filter to control. + Start time. + Stop time. + Value that is sent as the second parameter of the + EC_STREAM_CONTROL_STARTED event notification. + Value that is sent as the second parameter of the + EC_STREAM_CONTROL_STOPPED event notification. + + Return's HRESULT error code. + + + + + Preallocate a capture file to a specified size. + + + File name to create or resize. + Size of the file to allocate, in bytes. + + Return's HRESULT error code. + + + + + Copy the valid media data from a capture file. + + + Old file name. + New file name. + Boolean value that specifies whether pressing the ESC key cancels the copy operation. + IAMCopyCaptureFileProgress interface to display progress information, or NULL. + + Return's HRESULT error code. + + + + + + + + Interface on a filter, or to an interface on a pin. + Pin direction (input or output). + Pin category. + Media type. + Boolean value that specifies whether the pin must be unconnected. + Zero-based index of the pin to retrieve, from the set of matching pins. + Interface of the matching pin. + + Return's HRESULT error code. + + + + + This interface provides methods that enable an application to build a filter graph. + + + + + + Adds a filter to the graph and gives it a name. + + + Filter to add to the graph. + Name of the filter. + + Return's HRESULT error code. + + + + + Removes a filter from the graph. + + + Filter to be removed from the graph. + + Return's HRESULT error code. + + + + + Provides an enumerator for all filters in the graph. + + + Filter enumerator. + + Return's HRESULT error code. + + + + + Finds a filter that was added with a specified name. + + + Name of filter to search for. + Interface of found filter. + + Return's HRESULT error code. + + + + + Connects two pins directly (without intervening filters). + + + Output pin. + Input pin. + Media type to use for the connection. + + Return's HRESULT error code. + + + + + Breaks the existing pin connection and reconnects it to the same pin. + + + Pin to disconnect and reconnect. + + Return's HRESULT error code. + + + + + Disconnects a specified pin. + + + Pin to disconnect. + + Return's HRESULT error code. + + + + + Sets the reference clock to the default clock. + + + Return's HRESULT error code. + + + + + Connects two pins. If they will not connect directly, this method connects them with intervening transforms. + + + Output pin. + Input pin. + + Return's HRESULT error code. + + + + + Adds a chain of filters to a specified output pin to render it. + + + Output pin. + + Return's HRESULT error code. + + + + + Builds a filter graph that renders the specified file. + + + Specifies a string that contains file name or device moniker. + Reserved. + + Return's HRESULT error code. + + + + + Adds a source filter to the filter graph for a specific file. + + + Specifies the name of the file to load. + Specifies a name for the source filter. + Variable that receives the interface of the source filter. + + Return's HRESULT error code. + + + + + Sets the file for logging actions taken when attempting to perform an operation. + + + Handle to the log file. + + Return's HRESULT error code. + + + + + Requests that the graph builder return as soon as possible from its current task. + + + Return's HRESULT error code. + + + + + Queries whether the current operation should continue. + + + Return's HRESULT error code. + + + + + The interface provides callback methods for the method. + + + + + + Callback method that receives a pointer to the media sample. + + + Starting time of the sample, in seconds. + Pointer to the sample's IMediaSample interface. + + Return's HRESULT error code. + + + + + Callback method that receives a pointer to the sample bufferю + + + Starting time of the sample, in seconds. + Pointer to a buffer that contains the sample data. + Length of the buffer pointed to by buffer, in bytes + + Return's HRESULT error code. + + + + + Local video device selection form. + + + The form provides a standard way of selecting local video + device (USB web camera, capture board, etc. - anything supporting DirectShow + interface), which can be reused across applications. It allows selecting video + device, video size and snapshots size (if device supports snapshots and + user needs them). + + + + + + + + Required designer variable. + + + + + Clean up any resources being used. + + true if managed resources should be disposed; otherwise, false. + + + + Required method for Designer support - do not modify + the contents of this method with the code editor. + + + + + Initializes a new instance of the class. + + + + + + Specifies if snapshot configuration should be done or not. + + + The property specifies if the dialog form should + allow configuration of snapshot sizes (if selected video source supports + snapshots). If the property is set to , then + the form will provide additional combo box enumerating supported + snapshot sizes. Otherwise the combo boxes will be hidden. + + + If the property is set to and selected + device supports snapshots, then + property of the configured device is set to + . + + Default value of the property is set to . + + + + + + Provides configured video device. + + + The property provides configured video device if user confirmed + the dialog using "OK" button. If user canceled the dialog, the property is + set to . + + + + + Moniker string of the selected video device. + + + The property allows to get moniker string of the selected device + on form completion or set video device which should be selected by default on + form loading. + + + + + Video frame size of the selected device. + + + The property allows to get video size of the selected device + on form completion or set the size to be selected by default on form loading. + + + + + + Snapshot frame size of the selected device. + + + The property allows to get snapshot size of the selected device + on form completion or set the size to be selected by default on form loading + (if property is set ). + + + + + Video input to use with video capture card. + + + The property allows to get video input of the selected device + on form completion or set it to be selected by default on form loading. + + + + + Some miscellaneous functions. + + + + + + Get filter's pin. + + + Filter to get pin of. + Pin's direction. + Pin's number. + + Returns filter's pin. + + + + + Get filter's input pin. + + + Filter to get pin of. + Pin's number. + + Returns filter's pin. + + + + + Get filter's output pin. + + + Filter to get pin of. + Pin's number. + + Returns filter's pin. + + + + + The interface indicates that an object supports property pages. + + + + + + Fills a counted array of GUID values where each GUID specifies the + CLSID of each property page that can be displayed in the property + sheet for this object. + + + Pointer to a CAUUID structure that must be initialized + and filled before returning. + + Return's HRESULT error code. + + + + + Enumerates pins on a filter. + + + + + + Retrieves a specified number of pins. + + + Number of pins to retrieve. + Array of size cPins that is filled with IPin pointers. + Receives the number of pins retrieved. + + Return's HRESULT error code. + + + + + Skips a specified number of pins in the enumeration sequence. + + + Number of pins to skip. + + Return's HRESULT error code. + + + + + Resets the enumeration sequence to the beginning. + + + Return's HRESULT error code. + + + + + Makes a copy of the enumerator with the same enumeration state. + + + Duplicate of the enumerator. + + Return's HRESULT error code. + + + + + This interface sets the output format on certain capture and compression filters, + for both audio and video. + + + + + + Set the output format on the pin. + + + Media type to set. + + Return's HRESULT error code. + + + + + Retrieves the audio or video stream's format. + + + Retrieved media type. + + Return's HRESULT error code. + + + + + Retrieve the number of format capabilities that this pin supports. + + + Variable that receives the number of format capabilities. + Variable that receives the size of the configuration structure in bytes. + + Return's HRESULT error code. + + + + + Retrieve a set of format capabilities. + + + Specifies the format capability to retrieve, indexed from zero. + Retrieved media type. + Byte array, which receives information about capabilities. + + Return's HRESULT error code. + + + + + Collection of filters' information objects. + + + The class allows to enumerate DirectShow filters of specified category. For + a list of categories see . + + Sample usage: + + // enumerate video devices + videoDevices = new FilterInfoCollection( FilterCategory.VideoInputDevice ); + // list devices + foreach ( FilterInfo device in videoDevices ) + { + // ... + } + + + + + + + Initializes a new instance of the class. + + + Guid of DirectShow filter category. See . + + Build collection of filters' information objects for the + specified filter category. + + + + + Get filter information object. + + + Index of filter information object to retrieve. + + Filter information object. + + + + + Video source for local video capture device (for example USB webcam). + + + This video source class captures video data from local video capture device, + like USB web camera (or internal), frame grabber, capture board - anything which + supports DirectShow interface. For devices which has a shutter button or + support external software triggering, the class also allows to do snapshots. Both + video size and snapshot size can be configured. + + Sample usage: + + // enumerate video devices + videoDevices = new FilterInfoCollection( FilterCategory.VideoInputDevice ); + // create video source + VideoCaptureDevice videoSource = new VideoCaptureDevice( videoDevices[0].MonikerString ); + // set NewFrame event handler + videoSource.NewFrame += new NewFrameEventHandler( video_NewFrame ); + // start the video source + videoSource.Start( ); + // ... + // signal to stop when you no longer need capturing + videoSource.SignalToStop( ); + // ... + + private void video_NewFrame( object sender, NewFrameEventArgs eventArgs ) + { + // get new frame + Bitmap bitmap = eventArgs.Frame; + // process the frame + } + + + + + + + Initializes a new instance of the class. + + + + + + Initializes a new instance of the class. + + + Moniker string of video capture device. + + + + + Start video source. + + + Starts video source and return execution to caller. Video source + object creates background thread and notifies about new frames with the + help of event. + + + + + Signal video source to stop its work. + + + Signals video source to stop its background thread, stop to + provide new frames and free resources. + + + + + Wait for video source has stopped. + + + Waits for source stopping after it was signalled to stop using + method. + + + + + Stop video source. + + + Stops video source aborting its thread. + + Since the method aborts background thread, its usage is highly not preferred + and should be done only if there are no other options. The correct way of stopping camera + is signaling it stop and then + waiting for background thread's completion. + + + + + + Free resource. + + + + + + Display property window for the video capture device providing its configuration + capabilities. + + + Handle of parent window. + + If you pass parent window's handle to this method, then the + displayed property page will become modal window and none of the controls from the + parent window will be accessible. In order to make it modeless it is required + to pass as parent window's handle. + + + + The video source does not support configuration property page. + + + + + Display property page of video crossbar (Analog Video Crossbar filter). + + + Handle of parent window. + + The Analog Video Crossbar filter is modeled after a general switching matrix, + with n inputs and m outputs. For example, a video card might have two external connectors: + a coaxial connector for TV, and an S-video input. These would be represented as input pins on + the filter. The displayed property page allows to configure the crossbar by selecting input + of a video card to use. + + This method can be invoked only when video source is running ( is + ). Otherwise it generates exception. + + Use method to check if running video source provides + crossbar configuration. + + + The video source must be running in order to display crossbar property page. + Crossbar configuration is not supported by currently running video source. + + + + + Check if running video source provides crossbar for configuration. + + + Returns if crossbar configuration is available or + otherwise. + + The method reports if the video source provides crossbar configuration + using . + + + + + + Simulates an external trigger. + + + The method simulates external trigger for video cameras, which support + providing still image snapshots. The effect is equivalent as pressing camera's shutter + button - a snapshot will be provided through event. + + The property must be set to + to enable receiving snapshots. + + + + + + Sets a specified property on the camera. + + + Specifies the property to set. + Specifies the new value of the property. + Specifies the desired control setting. + + Returns true on sucee or false otherwise. + + Video source is not specified - device moniker is not set. + Failed creating device object for moniker. + The video source does not support camera control. + + + + + Gets the current setting of a camera property. + + + Specifies the property to retrieve. + Receives the value of the property. + Receives the value indicating whether the setting is controlled manually or automatically + + Returns true on sucee or false otherwise. + + Video source is not specified - device moniker is not set. + Failed creating device object for moniker. + The video source does not support camera control. + + + + + Gets the range and default value of a specified camera property. + + + Specifies the property to query. + Receives the minimum value of the property. + Receives the maximum value of the property. + Receives the step size for the property. + Receives the default value of the property. + Receives a member of the enumeration, indicating whether the property is controlled automatically or manually. + + Returns true on sucee or false otherwise. + + Video source is not specified - device moniker is not set. + Failed creating device object for moniker. + The video source does not support camera control. + + + + + Worker thread. + + + + + + Notifies clients about new frame. + + + New frame's image. + + + + + Notifies clients about new snapshot frame. + + + New snapshot's image. + + + + + Current video input of capture card. + + + The property specifies video input to use for video devices like capture cards + (those which provide crossbar configuration). List of available video inputs can be obtained + from property. + + To check if the video device supports crossbar configuration, the + method can be used. + + This property can be set as before running video device, as while running it. + + By default this property is set to , which means video input + will not be set when running video device, but currently configured will be used. After video device + is started this property will be updated anyway to tell current video input. + + + + + + Available inputs of the video capture card. + + + The property provides list of video inputs for devices like video capture cards. + Such devices usually provide several video inputs, which can be selected using crossbar. + If video device represented by the object of this class supports crossbar, then this property + will list all video inputs. However if it is a regular USB camera, for example, which does not + provide crossbar configuration, the property will provide zero length array. + + Video input to be used can be selected using . See also + method, which provides crossbar configuration dialog. + + It is recomended not to call this property immediately after method, since + device may not start yet and provide its information. It is better to call the property + before starting device or a bit after (but not immediately after). + + + + + + Specifies if snapshots should be provided or not. + + + Some USB cameras/devices may have a shutter button, which may result into snapshot if it + is pressed. So the property specifies if the video source will try providing snapshots or not - it will + check if the camera supports providing still image snapshots. If camera supports snapshots and the property + is set to , then snapshots will be provided through + event. + + Check supported sizes of snapshots using property and set the + desired size using property. + + The property must be set before running the video source to take effect. + + Default value of the property is set to . + + + + + + New frame event. + + + Notifies clients about new available frame from video source. + + Since video source may have multiple clients, each client is responsible for + making a copy (cloning) of the passed video frame, because the video source disposes its + own original copy after notifying of clients. + + + + + + Snapshot frame event. + + + Notifies clients about new available snapshot frame - the one which comes when + camera's snapshot/shutter button is pressed. + + See documentation to for additional information. + + Since video source may have multiple clients, each client is responsible for + making a copy (cloning) of the passed snapshot frame, because the video source disposes its + own original copy after notifying of clients. + + + + + + + + Video source error event. + + + This event is used to notify clients about any type of errors occurred in + video source object, for example internal exceptions. + + + + + Video playing finished event. + + + This event is used to notify clients that the video playing has finished. + + + + + + Video source. + + + Video source is represented by moniker string of video capture device. + + + + + Received frames count. + + + Number of frames the video source provided from the moment of the last + access to the property. + + + + + + Received bytes count. + + + Number of bytes the video source provided from the moment of the last + access to the property. + + + + + + State of the video source. + + + Current state of video source object - running or not. + + + + + Obsolete - no longer in use + + + The property is obsolete. Use property instead. + Setting this property does not have any effect. + + + + + Obsolete - no longer in use + + + The property is obsolete. Use property instead. + Setting this property does not have any effect. + + + + + Obsolete - no longer in use. + + + The property is obsolete. Setting this property does not have any effect. + + + + + Video resolution to set. + + + The property allows to set one of the video resolutions supported by the camera. + Use property to get the list of supported video resolutions. + + The property must be set before camera is started to make any effect. + + Default value of the property is set to , which means default video + resolution is used. + + + + + + Snapshot resolution to set. + + + The property allows to set one of the snapshot resolutions supported by the camera. + Use property to get the list of supported snapshot resolutions. + + The property must be set before camera is started to make any effect. + + Default value of the property is set to , which means default snapshot + resolution is used. + + + + + + Video capabilities of the device. + + + The property provides list of device's video capabilities. + + It is recomended not to call this property immediately after method, since + device may not start yet and provide its information. It is better to call the property + before starting device or a bit after (but not immediately after). + + + + + + Snapshot capabilities of the device. + + + The property provides list of device's snapshot capabilities. + + If the array has zero length, then it means that this device does not support making + snapshots. + + See documentation to for additional information. + + It is recomended not to call this property immediately after method, since + device may not start yet and provide its information. It is better to call the property + before starting device or a bit after (but not immediately after). + + + + + + + + Source COM object of camera capture device. + + + The source COM object of camera capture device is exposed for the + case when user may need get direct access to the object for making some custom + configuration of camera through DirectShow interface, for example. + + + If camera is not running, the property is set to . + + + + + + The interface sets properties on the video window. + + + + + + Sets the video window caption. + + + Caption. + + Return's HRESULT error code. + + + + + Retrieves the video window caption. + + + Caption. + + Return's HRESULT error code. + + + + + Sets the window style on the video window. + + + Window style flags. + + Return's HRESULT error code. + + + + + Retrieves the window style on the video window. + + + Window style flags. + + Return's HRESULT error code. + + + + + Sets the extended window style on the video window. + + + Window extended style flags. + + Return's HRESULT error code. + + + + + Retrieves the extended window style on the video window. + + + Window extended style flags. + + Return's HRESULT error code. + + + + + Specifies whether the video renderer automatically shows the video window when it receives video data. + + + Specifies whether the video renderer automatically shows the video window. + + Return's HRESULT error code. + + + + + Queries whether the video renderer automatically shows the video window when it receives video data. + + + REceives window auto show flag. + + Return's HRESULT error code. + + + + + Shows, hides, minimizes, or maximizes the video window. + + + Window state. + + Return's HRESULT error code. + + + + + Queries whether the video window is visible, hidden, minimized, or maximized. + + + Window state. + + Return's HRESULT error code. + + + + + Specifies whether the video window realizes its palette in the background. + + + Value that specifies whether the video renderer realizes it palette in the background. + + Return's HRESULT error code. + + + + + Queries whether the video window realizes its palette in the background. + + + Receives state of background palette flag. + + Return's HRESULT error code. + + + + + Shows or hides the video window. + + + Value that specifies whether to show or hide the window. + + Return's HRESULT error code. + + + + + Queries whether the video window is visible. + + + Visibility flag. + + Return's HRESULT error code. + + + + + Sets the video window's x-coordinate. + + + Specifies the x-coordinate, in pixels. + + Return's HRESULT error code. + + + + + Retrieves the video window's x-coordinate. + + + x-coordinate, in pixels. + + Return's HRESULT error code. + + + + + Sets the width of the video window. + + + Specifies the width, in pixels. + + Return's HRESULT error code. + + + + + Retrieves the width of the video window. + + + Width, in pixels. + + Return's HRESULT error code. + + + + + Sets the video window's y-coordinate. + + + Specifies the y-coordinate, in pixels. + + Return's HRESULT error code. + + + + + Retrieves the video window's y-coordinate. + + + y-coordinate, in pixels. + + Return's HRESULT error code. + + + + + Sets the height of the video window. + + + Specifies the height, in pixels. + + Return's HRESULT error code. + + + + + Retrieves the height of the video window. + + + Height, in pixels. + + Return's HRESULT error code. + + + + + Specifies a parent window for the video windowю + + + Specifies a handle to the parent window. + + Return's HRESULT error code. + + + + + Retrieves the video window's parent window, if anyю + + + Parent window's handle. + + Return's HRESULT error code. + + + + + Specifies a window to receive mouse and keyboard messages from the video window. + + + Specifies a handle to the window. + + Return's HRESULT error code. + + + + + Retrieves the window that receives mouse and keyboard messages from the video window, if any. + + + Window's handle. + + Return's HRESULT error code. + + + + + Retrieves the color that appears around the edges of the destination rectangle. + + + Border's color. + + Return's HRESULT error code. + + + + + Sets the color that appears around the edges of the destination rectangle. + + + Specifies the border color. + + Return's HRESULT error code. + + + + + Queries whether the video renderer is in full-screen mode. + + + Full-screen mode. + + Return's HRESULT error code. + + + + + Enables or disables full-screen mode. + + + Boolean value that specifies whether to enable or disable full-screen mode. + + Return's HRESULT error code. + + + + + Places the video window at the top of the Z order. + + + Value that specifies whether to give the window focus. + + Return's HRESULT error code. + + + + + Forwards a message to the video window. + + + Handle to the window. + Specifies the message. + Message parameter. + Message parameter. + + Return's HRESULT error code. + + + + + Sets the position of the video windowю + + + Specifies the x-coordinate, in pixels. + Specifies the y-coordinate, in pixels. + Specifies the width, in pixels. + Specifies the height, in pixels. + + Return's HRESULT error code. + + + + + Retrieves the position of the video window. + + + x-coordinate, in pixels. + y-coordinate, in pixels. + Width, in pixels. + Height, in pixels. + + Return's HRESULT error code. + + + + + Retrieves the minimum ideal size for the video image. + + + Receives the minimum ideal width, in pixels. + Receives the minimum ideal height, in pixels. + + Return's HRESULT error code. + + + + + Retrieves the maximum ideal size for the video image. + + + Receives the maximum ideal width, in pixels. + Receives the maximum ideal height, in pixels. + + Return's HRESULT error code. + + + + + Retrieves the restored window position. + + + x-coordinate, in pixels. + y-coordinate, in pixels. + Width, in pixels. + Height, in pixels. + + Return's HRESULT error code. + + + + + Hides the cursor. + + + Specifies whether to hide or display the cursor. + + Return's HRESULT error code. + + + + + Queries whether the cursor is hidden. + + + Specifies if cursor is hidden or not. + + Return's HRESULT error code. + + + + + The IPropertyBag interface provides an object with a property bag in + which the object can persistently save its properties. + + + + + + Read a property from property bag. + + + Property name to read. + Property value. + Caller's error log. + + Return's HRESULT error code. + + + + + Write property to property bag. + + + Property name to read. + Property value. + + Return's HRESULT error code. + + + + + The interface provides methods for controlling the flow of data through the filter graph. + It includes methods for running, pausing, and stopping the graph. + + + + + + This method informs the filter to transition to the new state. + + + Return's HRESULT error code. + + + + + This method informs the filter to transition to the new state. + + + Return's HRESULT error code. + + + + + This method informs the filter to transition to the new (running) state. Passes a time value to synchronize independent streams. + + + Time value of the reference clock. The amount to be added to the IMediaSample time stamp to determine the time at which that sample should be rendered according to the reference clock. That is, it is the reference time at which a sample with a stream time of zero should be rendered. + + Return's HRESULT error code. + + + + + This method determines the filter's state. + + + Duration of the time-out, in milliseconds. To block indefinitely, pass INFINITE. + Returned state of the filter. States include stopped, paused, running, or intermediate (in the process of changing). + + Return's HRESULT error code. + + + + + This method identifies the reference clock to which the filter should synchronize activity. + + + Pointer to the IReferenceClock interface. + + Return's HRESULT error code. + + + + + This method retrieves the current reference clock in use by this filter. + + + Pointer to a reference clock; it will be set to the IReferenceClock interface. + + + Return's HRESULT error code. + + + + + The interface provides methods for controlling the flow of data through the filter graph. + It includes methods for running, pausing, and stopping the graph. + + + + + + Runs all the filters in the filter graph. + + + Return's HRESULT error code. + + + + + Pauses all filters in the filter graph. + + + Return's HRESULT error code. + + + + + Stops all the filters in the filter graph. + + + Return's HRESULT error code. + + + + + Retrieves the state of the filter graph. + + + Duration of the time-out, in milliseconds, or INFINITE to specify an infinite time-out. + Мariable that receives a member of the FILTER_STATE enumeration. + + Return's HRESULT error code. + + + + + Builds a filter graph that renders the specified file. + + + Name of the file to render + + Return's HRESULT error code. + + + + + Adds a source filter to the filter graph, for a specified file. + + + Name of the file containing the source video. + Receives interface of filter information object. + + Return's HRESULT error code. + + + + + Retrieves a collection of the filters in the filter graph. + + + Receives the IAMCollection interface. + + Return's HRESULT error code. + + + + + Retrieves a collection of all the filters listed in the registry. + + + Receives the IDispatch interface of IAMCollection object. + + Return's HRESULT error code. + + + + + Pauses the filter graph, allowing filters to queue data, and then stops the filter graph. + + + Return's HRESULT error code. + + + + + This interface extends the and + interfaces, which contain methods for building filter graphs. + + + + + + Adds a filter to the graph and gives it a name. + + + Filter to add to the graph. + Name of the filter. + + Return's HRESULT error code. + + + + + Removes a filter from the graph. + + + Filter to be removed from the graph. + + Return's HRESULT error code. + + + + + Provides an enumerator for all filters in the graph. + + + Filter enumerator. + + Return's HRESULT error code. + + + + + Finds a filter that was added with a specified name. + + + Name of filter to search for. + Interface of found filter. + + Return's HRESULT error code. + + + + + Connects two pins directly (without intervening filters). + + + Output pin. + Input pin. + Media type to use for the connection. + + Return's HRESULT error code. + + + + + Breaks the existing pin connection and reconnects it to the same pin. + + + Pin to disconnect and reconnect. + + Return's HRESULT error code. + + + + + Disconnects a specified pin. + + + Pin to disconnect. + + Return's HRESULT error code. + + + + + Sets the reference clock to the default clock. + + + Return's HRESULT error code. + + + + + Connects two pins. If they will not connect directly, this method connects them with intervening transforms. + + + Output pin. + Input pin. + + Return's HRESULT error code. + + + + + Adds a chain of filters to a specified output pin to render it. + + + Output pin. + + Return's HRESULT error code. + + + + + Builds a filter graph that renders the specified file. + + + Specifies a string that contains file name or device moniker. + Reserved. + + Return's HRESULT error code. + + + + + Adds a source filter to the filter graph for a specific file. + + + Specifies the name of the file to load. + Specifies a name for the source filter. + Variable that receives the interface of the source filter. + + Return's HRESULT error code. + + + + + Sets the file for logging actions taken when attempting to perform an operation. + + + Handle to the log file. + + Return's HRESULT error code. + + + + + Requests that the graph builder return as soon as possible from its current task. + + + Return's HRESULT error code. + + + + + Queries whether the current operation should continue. + + + Return's HRESULT error code. + + + + + + + + Moniker interface. + Bind context interface. + Name for the filter. + Receives source filter's IBaseFilter interface. + The caller must release the interface. + + Return's HRESULT error code. + + + + + Breaks the existing pin connection and reconnects it to the same pin, + using a specified media type. + + + Pin to disconnect and reconnect. + Media type to reconnect with. + + Return's HRESULT error code. + + + + + Render an output pin, with an option to use existing renderers only. + + + Interface of the output pin. + Flag that specifies how to render the pin. + Reserved. + + Return's HRESULT error code. + + + + + This interface is used by applications or other filters to determine + what filters exist in the filter graph. + + + + + + Retrieves the specified number of filters in the enumeration sequence. + + + Number of filters to retrieve. + Array in which to place interfaces. + Actual number of filters placed in the array. + + Return's HRESULT error code. + + + + + Skips a specified number of filters in the enumeration sequence. + + + Number of filters to skip. + + Return's HRESULT error code. + + + + + Resets the enumeration sequence to the beginning. + + + Return's HRESULT error code. + + + + + Makes a copy of the enumerator with the same enumeration state. + + + Duplicate of the enumerator. + + + Return's HRESULT error code. + + + + + + The ICreateDevEnum interface creates an enumerator for devices within a particular category, + such as video capture devices, audio capture devices, video compressors, and so forth. + + + + + + Creates a class enumerator for a specified device category. + + + Specifies the class identifier of the device category. + Address of a variable that receives an IEnumMoniker interface pointer + Bitwise combination of zero or more flags. If zero, the method enumerates every filter in the category. + + Return's HRESULT error code. + + + + + Some Win32 API used internally. + + + + + + Supplies a pointer to an implementation of IBindCtx (a bind context object). + This object stores information about a particular moniker-binding operation. + + + Reserved for future use; must be zero. + Address of IBindCtx* pointer variable that receives the + interface pointer to the new bind context object. + + Returns S_OK on success. + + + + + Converts a string into a moniker that identifies the object named by the string. + + + Pointer to the IBindCtx interface on the bind context object to be used in this binding operation. + Pointer to a zero-terminated wide character string containing the display name to be parsed. + Pointer to the number of characters of szUserName that were consumed. + Address of IMoniker* pointer variable that receives the interface pointer + to the moniker that was built from szUserName. + + Returns S_OK on success. + + + + + Copy a block of memory. + + + Destination pointer. + Source pointer. + Memory block's length to copy. + + Return's the value of dst - pointer to destination. + + + + + Invokes a new property frame, that is, a property sheet dialog box. + + + Parent window of property sheet dialog box. + Horizontal position for dialog box. + Vertical position for dialog box. + Dialog box caption. + Number of object pointers in ppUnk. + Pointer to the objects for property sheet. + Number of property pages in lpPageClsID. + Array of CLSIDs for each property page. + Locale identifier for property sheet locale. + Reserved. + Reserved. + + Returns S_OK on success. + + + + + The enumeration specifies a setting on a camera. + + + + + Pan control. + + + + + Tilt control. + + + + + Roll control. + + + + + Zoom control. + + + + + Exposure control. + + + + + Iris control. + + + + + Focus control. + + + + + The enumeration defines whether a camera setting is controlled manually or automatically. + + + + + No control flag. + + + + + Auto control Flag. + + + + + Manual control Flag. + + + + + Video input of a capture board. + + + The class is used to describe video input of devices like video capture boards, + which usually provide several inputs. + + + + + + Index of the video input. + + + + + Type of the video input. + + + + + Default video input. Used to specify that it should not be changed. + + + + + DirectShow filter information. + + + + + + Initializes a new instance of the class. + + + Filters's moniker string. + + + + + Initializes a new instance of the class. + + + Filter's moniker object. + + + + + Compare the object with another instance of this class. + + + Object to compare with. + + A signed number indicating the relative values of this instance and value. + + + + + Create an instance of the filter. + + + Filter's moniker string. + + Returns filter's object, which implements IBaseFilter interface. + + The returned filter's object should be released using Marshal.ReleaseComObject(). + + + + + Filter name. + + + + + Filters's moniker string. + + + + + + DirectShow class IDs. + + + + + System device enumerator. + + + Equals to CLSID_SystemDeviceEnum. + + + + + Filter graph. + + + Equals to CLSID_FilterGraph. + + + + + Sample grabber. + + + Equals to CLSID_SampleGrabber. + + + + + Capture graph builder. + + + Equals to CLSID_CaptureGraphBuilder2. + + + + + Async reader. + + + Equals to CLSID_AsyncReader. + + + + + DirectShow format types. + + + + + + VideoInfo. + + + Equals to FORMAT_VideoInfo. + + + + + VideoInfo2. + + + Equals to FORMAT_VideoInfo2. + + + + + DirectShow media types. + + + + + + Video. + + + Equals to MEDIATYPE_Video. + + + + + Interleaved. Used by Digital Video (DV). + + + Equals to MEDIATYPE_Interleaved. + + + + + Audio. + + + Equals to MEDIATYPE_Audio. + + + + + Text. + + + Equals to MEDIATYPE_Text. + + + + + Byte stream with no time stamps. + + + Equals to MEDIATYPE_Stream. + + + + + DirectShow media subtypes. + + + + + + YUY2 (packed 4:2:2). + + + Equals to MEDIASUBTYPE_YUYV. + + + + + IYUV. + + + Equals to MEDIASUBTYPE_IYUV. + + + + + A DV encoding format. (FOURCC 'DVSD') + + + Equals to MEDIASUBTYPE_DVSD. + + + + + RGB, 1 bit per pixel (bpp), palettized. + + + Equals to MEDIASUBTYPE_RGB1. + + + + + RGB, 4 bpp, palettized. + + + Equals to MEDIASUBTYPE_RGB4. + + + + + RGB, 8 bpp. + + + Equals to MEDIASUBTYPE_RGB8. + + + + + RGB 565, 16 bpp. + + + Equals to MEDIASUBTYPE_RGB565. + + + + + RGB 555, 16 bpp. + + + Equals to MEDIASUBTYPE_RGB555. + + + + + RGB, 24 bpp. + + + Equals to MEDIASUBTYPE_RGB24. + + + + + RGB, 32 bpp, no alpha channel. + + + Equals to MEDIASUBTYPE_RGB32. + + + + + Data from AVI file. + + + Equals to MEDIASUBTYPE_Avi. + + + + + Advanced Streaming Format (ASF). + + + Equals to MEDIASUBTYPE_Asf. + + + + + DirectShow pin categories. + + + + + + Capture pin. + + + Equals to PIN_CATEGORY_CAPTURE. + + + + + Still image pin. + + + Equals to PIN_CATEGORY_STILL. + + + + Equals to LOOK_UPSTREAM_ONLY. + + + Equals to LOOK_DOWNSTREAM_ONLY. + + + + The IReferenceClock interface provides the reference time for the filter graph. + + Filters that can act as a reference clock can expose this interface. It is also exposed by the System Reference Clock. + The filter graph manager uses this interface to synchronize the filter graph. Applications can use this interface to + retrieve the current reference time, or to request notification of an elapsed time. + + + + + The GetTime method retrieves the current reference time. + + + Pointer to a variable that receives the current time, in 100-nanosecond units. + + Return's HRESULT error code. + + + + + The AdviseTime method creates a one-shot advise request. + + + Base reference time, in 100-nanosecond units. See Remarks. + Stream offset time, in 100-nanosecond units. See Remarks. + Handle to an event, created by the caller. + Pointer to a variable that receives an identifier for the advise request. + + Return's HRESULT error code. + + + + + The AdvisePeriodic method creates a periodic advise request. + + + Time of the first notification, in 100-nanosecond units. Must be greater than zero and less than MAX_TIME. + Time between notifications, in 100-nanosecond units. Must be greater than zero. + Handle to a semaphore, created by the caller. + Pointer to a variable that receives an identifier for the advise request. + + Return's HRESULT error code. + + + + + The Unadvise method removes a pending advise request. + + + Identifier of the request to remove. Use the value returned by IReferenceClock::AdviseTime or IReferenceClock::AdvisePeriodic in the pdwAdviseToken parameter. + + Return's HRESULT error code. + + + + + The IAMCrossbar interface routes signals from an analog or digital source to a video capture filter. + + + + + Retrieves the number of input and output pins on the crossbar filter. + + + Variable that receives the number of output pins. + Variable that receives the number of input pins. + + Return's HRESULT error code. + + + + + Queries whether a specified input pin can be routed to a specified output pin. + + + Specifies the index of the output pin. + Specifies the index of input pin. + + Return's HRESULT error code. + + + + + Routes an input pin to an output pin. + + + Specifies the index of the output pin. + Specifies the index of the input pin. + + Return's HRESULT error code. + + + + + Retrieves the input pin that is currently routed to the specified output pin. + + + Specifies the index of the output pin. + Variable that receives the index of the input pin, or -1 if no input pin is routed to this output pin. + + Return's HRESULT error code. + + + + + Retrieves information about a specified pin. + + + Specifies the direction of the pin. Use one of the following values. + Specifies the index of the pin. + Variable that receives the index of the related pin, or –1 if no pin is related to this pin. + Variable that receives a member of the PhysicalConnectorType enumeration, indicating the pin's physical type. + + Return's HRESULT error code. + + + + + The IBaseFilter interface provides methods for controlling a filter. + All DirectShow filters expose this interface + + + + + + Returns the class identifier (CLSID) for the component object. + + + Points to the location of the CLSID on return. + + Return's HRESULT error code. + + + + + Stops the filter. + + + Return's HRESULT error code. + + + + + Pauses the filter. + + + Return's HRESULT error code. + + + + + Runs the filter. + + + Reference time corresponding to stream time 0. + + Return's HRESULT error code. + + + + + Retrieves the state of the filter (running, stopped, or paused). + + + Time-out interval, in milliseconds. + Pointer to a variable that receives filter's state. + + Return's HRESULT error code. + + + + + Sets the reference clock for the filter or the filter graph. + + + Pointer to the clock's IReferenceClock interface, or NULL. + + Return's HRESULT error code. + + + + + Retrieves the current reference clock. + + + Address of a variable that receives a pointer to the clock's IReferenceClock interface. + + Return's HRESULT error code. + + + + + Enumerates the pins on this filter. + + + Address of a variable that receives a pointer to the IEnumPins interface. + + Return's HRESULT error code. + + + + + Retrieves the pin with the specified identifier. + + + Pointer to a constant wide-character string that identifies the pin. + Address of a variable that receives a pointer to the pin's IPin interface. + + Return's HRESULT error code. + + + + + Retrieves information about the filter. + + + Pointer to FilterInfo structure. + + Return's HRESULT error code. + + + + + Notifies the filter that it has joined or left the filter graph. + + + Pointer to the Filter Graph Manager's IFilterGraph interface, or NULL + if the filter is leaving the graph. + String that specifies a name for the filter. + + Return's HRESULT error code. + + + + + Retrieves a string containing vendor information. + + + Receives a string containing the vendor information. + + Return's HRESULT error code. + + + + + The interface inherits contains methods for retrieving event notifications and for overriding the + filter graph's default handling of events. + + + + + Retrieves a handle to a manual-reset event that remains signaled while the queue contains event notifications. + + Pointer to a variable that receives the event handle. + + Return's HRESULT error code. + + + + + Retrieves the next event notification from the event queue. + + + Variable that receives the event code. + Pointer to a variable that receives the first event parameter. + Pointer to a variable that receives the second event parameter. + Time-out interval, in milliseconds. + + Return's HRESULT error code. + + + + + Waits for the filter graph to render all available data. + + + Time-out interval, in milliseconds. Pass zero to return immediately. + Pointer to a variable that receives an event code. + + Return's HRESULT error code. + + + + + Cancels the Filter Graph Manager's default handling for a specified event. + + + Event code for which to cancel default handling. + + Return's HRESULT error code. + + + + + Restores the Filter Graph Manager's default handling for a specified event. + + Event code for which to restore default handling. + + Return's HRESULT error code. + + + + + Frees resources associated with the parameters of an event. + + Event code. + First event parameter. + Second event parameter. + + Return's HRESULT error code. + + + + + Registers a window to process event notifications. + + + Handle to the window, or to stop receiving event messages. + Window message to be passed as the notification. + Value to be passed as the lParam parameter for the lMsg message. + + Return's HRESULT error code. + + + + + Enables or disables event notifications. + + + Value indicating whether to enable or disable event notifications. + + Return's HRESULT error code. + + + + + Determines whether event notifications are enabled. + + + Variable that receives current notification status. + + Return's HRESULT error code. + + + + + Video source for video files. + + + The video source provides access to video files. DirectShow is used to access video + files. + + Sample usage: + + // create video source + FileVideoSource videoSource = new FileVideoSource( fileName ); + // set NewFrame event handler + videoSource.NewFrame += new NewFrameEventHandler( video_NewFrame ); + // start the video source + videoSource.Start( ); + // ... + // signal to stop + videoSource.SignalToStop( ); + // ... + + // New frame event handler, which is invoked on each new available video frame + private void video_NewFrame( object sender, NewFrameEventArgs eventArgs ) + { + // get new frame + Bitmap bitmap = eventArgs.Frame; + // process the frame + } + + + + + + + Initializes a new instance of the class. + + + + + + Initializes a new instance of the class. + + + Video file name. + + + + + Start video source. + + + Starts video source and return execution to caller. Video source + object creates background thread and notifies about new frames with the + help of event. + + + + + Signal video source to stop its work. + + + Signals video source to stop its background thread, stop to + provide new frames and free resources. + + + + + Wait for video source has stopped. + + + Waits for source stopping after it was signalled to stop using + method. + + + + + Stop video source. + + + Stops video source aborting its thread. + + Since the method aborts background thread, its usage is highly not preferred + and should be done only if there are no other options. The correct way of stopping camera + is signaling it stop and then + waiting for background thread's completion. + + + + + + Free resource. + + + + + + Worker thread. + + + + + + Notifies client about new frame. + + + New frame's image. + + + + + New frame event. + + + Notifies clients about new available frame from video source. + + Since video source may have multiple clients, each client is responsible for + making a copy (cloning) of the passed video frame, because the video source disposes its + own original copy after notifying of clients. + + + + + + Video source error event. + + + This event is used to notify clients about any type of errors occurred in + video source object, for example internal exceptions. + + + + + Video playing finished event. + + + This event is used to notify clients that the video playing has finished. + + + + + + Video source. + + + Video source is represented by video file name. + + + + + Received frames count. + + + Number of frames the video source provided from the moment of the last + access to the property. + + + + + + Received bytes count. + + + Number of bytes the video source provided from the moment of the last + access to the property. + + + + + + State of the video source. + + + Current state of video source object - running or not. + + + + + Prevent video freezing after screen saver and workstation lock or not. + + + + The value specifies if the class should prevent video freezing during and + after screen saver or workstation lock. To prevent freezing the DirectShow graph + should not contain Renderer filter, which is added by Render() method + of graph. However, in some cases it may be required to call Render() method of graph, since + it may add some more filters, which may be required for playing video. So, the property is + a trade off - it is possible to prevent video freezing skipping adding renderer filter or + it is possible to keep renderer filter, but video may freeze during screen saver. + + The property may become obsolete in the future when approach to disable freezing + and adding all required filters is found. + + The property should be set before calling method + of the class to have effect. + + Default value of this property is set to false. + + + + + + + Enables/disables reference clock on the graph. + + + Disabling reference clocks causes DirectShow graph to run as fast as + it can process data. When enabled, it will process frames according to presentation + time of a video file. + + The property should be set before calling method + of the class to have effect. + + Default value of this property is set to true. + + + + + diff --git a/HMI Label And Editor Control/bin/Debug/AForge.Video.dll b/HMI Label And Editor Control/bin/Debug/AForge.Video.dll new file mode 100644 index 0000000000000000000000000000000000000000..dc67243ecc392d5d06b25405dc4edb5bb21ac267 GIT binary patch literal 20992 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 + + + AForge.Video + + + + + Proxy video source for asynchronous processing of another nested video source. + + + The class represents a simple proxy, which wraps the specified + with the aim of asynchronous processing of received video frames. The class intercepts + event from the nested video source and fires it to clients from its own thread, which is different from the thread + used by nested video source for video acquisition. This allows clients to perform processing of video frames + without blocking video acquisition thread, which continue to run and acquire next video frame while current is still + processed. + + For example, let’s suppose that it takes 100 ms for the nested video source to acquire single frame, so the original + frame rate is 10 frames per second. Also let’s assume that we have an image processing routine, which also takes + 100 ms to process a single frame. If the acquisition and processing are done sequentially, then resulting + frame rate will drop to 5 frames per second. However, if doing both in parallel, then there is a good chance to + keep resulting frame rate equal (or close) to the original frame rate. + + The class provides a bonus side effect - easer debugging of image processing routines, which are put into + event handler. In many cases video source classes fire their + event from a try/catch block, which makes it very hard to spot error made in user's code - the catch block simply + hides exception raised in user’s code. The does not have any try/catch blocks around + firing of event, so always user gets exception in the case it comes from his code. At the same time + nested video source is not affected by the user's exception, since it runs in different thread. + + Sample usage: + + // usage of AsyncVideoSource is the same as usage of any + // other video source class, so code change is very little + + // create nested video source, for example JPEGStream + JPEGStream stream = new JPEGStream( "some url" ); + // create async video source + AsyncVideoSource asyncSource = new AsyncVideoSource( stream ); + // set NewFrame event handler + asyncSource.NewFrame += new NewFrameEventHandler( video_NewFrame ); + // start the video source + asyncSource.Start( ); + // ... + + private void video_NewFrame( object sender, NewFrameEventArgs eventArgs ) + { + // get new frame + Bitmap bitmap = eventArgs.Frame; + // process the frame + } + + + + + + + Video source interface. + + + The interface describes common methods for different type of video sources. + + + + + Start video source. + + + Starts video source and return execution to caller. Video source + object creates background thread and notifies about new frames with the + help of event. + + + + + Signal video source to stop its work. + + + Signals video source to stop its background thread, stop to + provide new frames and free resources. + + + + + Wait for video source has stopped. + + + Waits for video source stopping after it was signalled to stop using + method. + + + + + Stop video source. + + + Stops video source aborting its thread. + + + + + New frame event. + + + This event is used to notify clients about new available video frame. + + Since video source may have multiple clients, each client is responsible for + making a copy (cloning) of the passed video frame, but video source is responsible for + disposing its own original copy after notifying of clients. + + + + + + Video source error event. + + + This event is used to notify clients about any type of errors occurred in + video source object, for example internal exceptions. + + + + + Video playing finished event. + + + This event is used to notify clients that the video playing has finished. + + + + + + Video source. + + + The meaning of the property depends on particular video source. + Depending on video source it may be a file name, URL or any other string + describing the video source. + + + + + Received frames count. + + + Number of frames the video source provided from the moment of the last + access to the property. + + + + + + Received bytes count. + + + Number of bytes the video source provided from the moment of the last + access to the property. + + + + + + State of the video source. + + + Current state of video source object - running or not. + + + + + Initializes a new instance of the class. + + + Nested video source which is the target for asynchronous processing. + + + + + Initializes a new instance of the class. + + + Nested video source which is the target for asynchronous processing. + Specifies if the object should skip frames from the nested video source + in the case if it is still busy processing the previous video frame. + + + + + Start video source. + + + Starts the nested video source and returns execution to caller. This object creates + an extra thread which is used to fire events, so the image processing could be + done on another thread without blocking video acquisition thread. + + + + + Signal video source to stop its work. + + + Signals video source to stop its background thread, stop to + provide new frames and free resources. + + + + + Wait for video source has stopped. + + + Waits for video source stopping after it was signalled to stop using + method. + + + + + Stop video source. + + + Stops nested video source by calling its method. + See documentation of the particular video source for additional details. + + + + + New frame event. + + + Notifies clients about new available frame from video source. + + This event is fired from a different thread other than the video acquisition thread created + by . This allows nested video frame to continue acquisition of the next + video frame while clients perform processing of the current video frame. + + Since video source may have multiple clients, each client is responsible for + making a copy (cloning) of the passed video frame, because the video source disposes its + own original copy after notifying of clients. + + + + + + Video source error event. + + + This event is used to notify clients about any type of errors occurred in + video source object, for example internal exceptions. + + Unlike event, this event is simply redirected to the corresponding + event of the , so it is fired from the thread of the nested video source. + + + + + + Video playing finished event. + + + This event is used to notify clients that the video playing has finished. + + Unlike event, this event is simply redirected to the corresponding + event of the , so it is fired from the thread of the nested video source. + + + + + + Nested video source which is the target for asynchronous processing. + + + The property is set through the class constructor. + + All calls to this object are actually redirected to the nested video source. The only + exception is the event, which is handled differently. This object gets + event from the nested class and then fires another + event, but from a different thread. + + + + + + Specifies if the object should skip frames from the nested video source when it is busy. + + + Specifies if the object should skip frames from the nested video source + in the case if it is still busy processing the previous video frame in its own thread. + + Default value is set to . + + + + + Video source string. + + + The property is redirected to the corresponding property of , + so check its documentation to find what it means. + + + + + Received frames count. + + + Number of frames the nested video source received from + the moment of the last access to the property. + + + + + + Received bytes count. + + + Number of bytes the nested video source received from + the moment of the last access to the property. + + + + + Processed frames count. + + + The property keeps the number of processed video frames since the last access to this property. + + + The value of this property equals to in most cases if the + property is set to - every received frame gets processed + sooner or later. However, if the property is set to , + then value of this property may be lower than the value of the property, which + means that nested video source performs acquisition faster than client perform processing of the received frame + and some frame are skipped from processing. + + + + + + State of the video source. + + + Current state of the video source object - running or not. + + + + + Screen capture video source. + + + The video source constantly captures the desktop screen. + + Sample usage: + + // get entire desktop area size + Rectangle screenArea = Rectangle.Empty; + foreach ( System.Windows.Forms.Screen screen in + System.Windows.Forms.Screen.AllScreens ) + { + screenArea = Rectangle.Union( screenArea, screen.Bounds ); + } + + // create screen capture video source + ScreenCaptureStream stream = new ScreenCaptureStream( screenArea ); + + // set NewFrame event handler + stream.NewFrame += new NewFrameEventHandler( video_NewFrame ); + + // start the video source + stream.Start( ); + + // ... + // signal to stop + stream.SignalToStop( ); + // ... + + private void video_NewFrame( object sender, NewFrameEventArgs eventArgs ) + { + // get new frame + Bitmap bitmap = eventArgs.Frame; + // process the frame + } + + + + + + + Initializes a new instance of the class. + + + Screen's rectangle to capture (the rectangle may cover multiple displays). + + + + + Initializes a new instance of the class. + + + Screen's rectangle to capture (the rectangle may cover multiple displays). + Time interval between making screen shots, ms. + + + + + Start video source. + + + Starts video source and return execution to caller. Video source + object creates background thread and notifies about new frames with the + help of event. + + Video source is not specified. + + + + + Signal video source to stop its work. + + + Signals video source to stop its background thread, stop to + provide new frames and free resources. + + + + + Wait for video source has stopped. + + + Waits for source stopping after it was signalled to stop using + method. + + + + + Stop video source. + + + Stops video source aborting its thread. + + Since the method aborts background thread, its usage is highly not preferred + and should be done only if there are no other options. The correct way of stopping camera + is signaling it stop and then + waiting for background thread's completion. + + + + + + Free resource. + + + + + + New frame event. + + + Notifies clients about new available frame from video source. + + Since video source may have multiple clients, each client is responsible for + making a copy (cloning) of the passed video frame, because the video source disposes its + own original copy after notifying of clients. + + + + + + Video source error event. + + + This event is used to notify clients about any type of errors occurred in + video source object, for example internal exceptions. + + + + + Video playing finished event. + + + This event is used to notify clients that the video playing has finished. + + + + + + Video source. + + + + + + Gets or sets the screen capture region. + + + This property specifies which region (rectangle) of the screen to capture. It may cover multiple displays + if those are available in the system. + + The property must be set before starting video source to have any effect. + + + + + + Time interval between making screen shots, ms. + + + The property specifies time interval in milliseconds between consequent screen captures. + Expected frame rate of the stream should be approximately 1000/FrameInteval. + + If the property is set to 0, then the stream will capture screen as fast as the system allows. + + Default value is set to 100. + + + + + + Received frames count. + + + Number of frames the video source provided from the moment of the last + access to the property. + + + + + + Received bytes count. + + + The property is not implemented for this video source and always returns 0. + + + + + + State of the video source. + + + Current state of video source object - running or not. + + + + + MJPEG video source. + + + The video source downloads JPEG images from the specified URL, which represents + MJPEG stream. + + Sample usage: + + // create MJPEG video source + MJPEGStream stream = new MJPEGStream( "some url" ); + // set event handlers + stream.NewFrame += new NewFrameEventHandler( video_NewFrame ); + // start the video source + stream.Start( ); + // ... + + + Some cameras produce HTTP header, which does not conform strictly to + standard, what leads to .NET exception. To avoid this exception the useUnsafeHeaderParsing + configuration option of httpWebRequest should be set, what may be done using application + configuration file. + + <configuration> + <system.net> + <settings> + <httpWebRequest useUnsafeHeaderParsing="true" /> + </settings> + </system.net> + </configuration> + + + + + + + Initializes a new instance of the class. + + + + + + Initializes a new instance of the class. + + + URL, which provides MJPEG stream. + + + + + Start video source. + + + Starts video source and return execution to caller. Video source + object creates background thread and notifies about new frames with the + help of event. + + Video source is not specified. + + + + + Signal video source to stop its work. + + + Signals video source to stop its background thread, stop to + provide new frames and free resources. + + + + + Wait for video source has stopped. + + + Waits for source stopping after it was signalled to stop using + method. + + + + + Stop video source. + + + Stops video source aborting its thread. + + Since the method aborts background thread, its usage is highly not preferred + and should be done only if there are no other options. The correct way of stopping camera + is signaling it stop and then + waiting for background thread's completion. + + + + + + Free resource. + + + + + + New frame event. + + + Notifies clients about new available frame from video source. + + Since video source may have multiple clients, each client is responsible for + making a copy (cloning) of the passed video frame, because the video source disposes its + own original copy after notifying of clients. + + + + + + Video source error event. + + + This event is used to notify clients about any type of errors occurred in + video source object, for example internal exceptions. + + + + + Video playing finished event. + + + This event is used to notify clients that the video playing has finished. + + + + + + Use or not separate connection group. + + + The property indicates to open web request in separate connection group. + + + + + Video source. + + + URL, which provides MJPEG stream. + + + + + Login value. + + + Login required to access video source. + + + + + Password value. + + + Password required to access video source. + + + + + Gets or sets proxy information for the request. + + + The local computer or application config file may specify that a default + proxy to be used. If the Proxy property is specified, then the proxy settings from the Proxy + property overridea the local computer or application config file and the instance will use + the proxy settings specified. If no proxy is specified in a config file + and the Proxy property is unspecified, the request uses the proxy settings + inherited from Internet Explorer on the local computer. If there are no proxy settings + in Internet Explorer, the request is sent directly to the server. + + + + + + User agent to specify in HTTP request header. + + + Some IP cameras check what is the requesting user agent and depending + on it they provide video in different formats or do not provide it at all. The property + sets the value of user agent string, which is sent to camera in request header. + + + Default value is set to "Mozilla/5.0". If the value is set to , + the user agent string is not sent in request header. + + + + + + Received frames count. + + + Number of frames the video source provided from the moment of the last + access to the property. + + + + + + Received bytes count. + + + Number of bytes the video source provided from the moment of the last + access to the property. + + + + + + Request timeout value. + + + The property sets timeout value in milliseconds for web requests. + Default value is 10000 milliseconds. + + + + + State of the video source. + + + Current state of video source object - running or not. + + + + + Force using of basic authentication when connecting to the video source. + + + For some IP cameras (TrendNET IP cameras, for example) using standard .NET's authentication via credentials + does not seem to be working (seems like camera does not request for authentication, but expects corresponding headers to be + present on connection request). So this property allows to force basic authentication by adding required HTTP headers when + request is sent. + + Default value is set to . + + + + + + Video related exception. + + + The exception is thrown in the case of some video related issues, like + failure of initializing codec, compression, etc. + + + + + Initializes a new instance of the class. + + + Exception's message. + + + + + Delegate for new frame event handler. + + + Sender object. + Event arguments. + + + + + Delegate for video source error event handler. + + + Sender object. + Event arguments. + + + + + Delegate for playing finished event handler. + + + Sender object. + Reason of finishing video playing. + + + + + Reason of finishing video playing. + + + When video source class fire the event, they + need to specify reason of finishing video playing. For example, it may be end of stream reached. + + + + + Video playing has finished because it end was reached. + + + + + Video playing has finished because it was stopped by user. + + + + + Video playing has finished because the device was lost (unplugged). + + + + + Video playing has finished because of some error happened the video source (camera, stream, file, etc.). + A error reporting event usually is fired to provide error information. + + + + + Arguments for new frame event from video source. + + + + + + Initializes a new instance of the class. + + + New frame. + + + + + New frame from video source. + + + + + + Arguments for video source error event from video source. + + + + + + Initializes a new instance of the class. + + + Error description. + + + + + Video source error description. + + + + + + JPEG video source. + + + The video source constantly downloads JPEG files from the specified URL. + + Sample usage: + + // create JPEG video source + JPEGStream stream = new JPEGStream( "some url" ); + // set NewFrame event handler + stream.NewFrame += new NewFrameEventHandler( video_NewFrame ); + // start the video source + stream.Start( ); + // ... + // signal to stop + stream.SignalToStop( ); + // ... + + private void video_NewFrame( object sender, NewFrameEventArgs eventArgs ) + { + // get new frame + Bitmap bitmap = eventArgs.Frame; + // process the frame + } + + + Some cameras produce HTTP header, which does not conform strictly to + standard, what leads to .NET exception. To avoid this exception the useUnsafeHeaderParsing + configuration option of httpWebRequest should be set, what may be done using application + configuration file. + + <configuration> + <system.net> + <settings> + <httpWebRequest useUnsafeHeaderParsing="true" /> + </settings> + </system.net> + </configuration> + + + + + + + Initializes a new instance of the class. + + + + + + Initializes a new instance of the class. + + + URL, which provides JPEG files. + + + + + Start video source. + + + Starts video source and return execution to caller. Video source + object creates background thread and notifies about new frames with the + help of event. + + Video source is not specified. + + + + + Signal video source to stop its work. + + + Signals video source to stop its background thread, stop to + provide new frames and free resources. + + + + + Wait for video source has stopped. + + + Waits for source stopping after it was signalled to stop using + method. + + + + + Stop video source. + + + Stops video source aborting its thread. + + Since the method aborts background thread, its usage is highly not preferred + and should be done only if there are no other options. The correct way of stopping camera + is signaling it stop and then + waiting for background thread's completion. + + + + + + Free resource. + + + + + + New frame event. + + + Notifies clients about new available frame from video source. + + Since video source may have multiple clients, each client is responsible for + making a copy (cloning) of the passed video frame, because the video source disposes its + own original copy after notifying of clients. + + + + + + Video source error event. + + + This event is used to notify clients about any type of errors occurred in + video source object, for example internal exceptions. + + + + + Video playing finished event. + + + This event is used to notify clients that the video playing has finished. + + + + + + Use or not separate connection group. + + + The property indicates to open web request in separate connection group. + + + + + Use or not caching. + + + If the property is set to true, then a fake random parameter will be added + to URL to prevent caching. It's required for clients, who are behind proxy server. + + + + + Frame interval. + + + The property sets the interval in milliseconds betwen frames. If the property is + set to 100, then the desired frame rate will be 10 frames per second. Default value is 0 - + get new frames as fast as possible. + + + + + Video source. + + + URL, which provides JPEG files. + + + + + Login value. + + + Login required to access video source. + + + + + Password value. + + + Password required to access video source. + + + + + Gets or sets proxy information for the request. + + + The local computer or application config file may specify that a default + proxy to be used. If the Proxy property is specified, then the proxy settings from the Proxy + property overridea the local computer or application config file and the instance will use + the proxy settings specified. If no proxy is specified in a config file + and the Proxy property is unspecified, the request uses the proxy settings + inherited from Internet Explorer on the local computer. If there are no proxy settings + in Internet Explorer, the request is sent directly to the server. + + + + + + Received frames count. + + + Number of frames the video source provided from the moment of the last + access to the property. + + + + + + Received bytes count. + + + Number of bytes the video source provided from the moment of the last + access to the property. + + + + + + Request timeout value. + + + The property sets timeout value in milliseconds for web requests. + + Default value is set 10000 milliseconds. + + + + + State of the video source. + + + Current state of video source object - running or not. + + + + + Force using of basic authentication when connecting to the video source. + + + For some IP cameras (TrendNET IP cameras, for example) using standard .NET's authentication via credentials + does not seem to be working (seems like camera does not request for authentication, but expects corresponding headers to be + present on connection request). So this property allows to force basic authentication by adding required HTTP headers when + request is sent. + + Default value is set to . + + + + + + Some internal utilities for handling arrays. + + + + + + Check if the array contains needle at specified position. + + + Source array to check for needle. + Needle we are searching for. + Start index in source array. + + Returns true if the source array contains the needle at + the specified index. Otherwise it returns false. + + + + + Find subarray in the source array. + + + Source array to search for needle. + Needle we are searching for. + Start index in source array. + Number of bytes in source array, where the needle is searched for. + + Returns starting position of the needle if it was found or -1 otherwise. + + + + diff --git a/HMI Label And Editor Control/bin/Debug/AForge.dll b/HMI Label And Editor Control/bin/Debug/AForge.dll new file mode 100644 index 0000000000000000000000000000000000000000..311cfe5a936fe9fa95ae19a23329151d243cc038 GIT binary patch literal 17920 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 + + + AForge + + + + + Event arguments holding a buffer sent or received during some communication process. + + + + + Initializes a new instance of the class. + + + Message being transfered during communication process. + + + + + Initializes a new instance of the class. + + + Buffer containing the message being transferred during communication process. + Starting index of the message within the buffer. + Length of the message within the buffer. + + + + + Get the transfered message. + + + Returns copy of the transfered message. + + + + + Get the transferred message as string. + + + Returns string encoding the transferred message. + + + + + Length of the transfered message. + + + + + Structure for representing a pair of coordinates of integer type. + + + The structure is used to store a pair of integer coordinates. + + Sample usage: + + // assigning coordinates in the constructor + IntPoint p1 = new IntPoint( 10, 20 ); + // creating a point and assigning coordinates later + IntPoint p2; + p2.X = 30; + p2.Y = 40; + // calculating distance between two points + float distance = p1.DistanceTo( p2 ); + + + + + + + X coordinate. + + + + + + Y coordinate. + + + + + + Initializes a new instance of the structure. + + + X axis coordinate. + Y axis coordinate. + + + + + Calculate Euclidean distance between two points. + + + Point to calculate distance to. + + Returns Euclidean distance between this point and + points. + + + + + Calculate squared Euclidean distance between two points. + + + Point to calculate distance to. + + Returns squared Euclidean distance between this point and + points. + + + + + Addition operator - adds values of two points. + + + First point for addition. + Second point for addition. + + Returns new point which coordinates equal to sum of corresponding + coordinates of specified points. + + + + + Addition operator - adds values of two points. + + + First point for addition. + Second point for addition. + + Returns new point which coordinates equal to sum of corresponding + coordinates of specified points. + + + + + Subtraction operator - subtracts values of two points. + + + Point to subtract from. + Point to subtract. + + Returns new point which coordinates equal to difference of corresponding + coordinates of specified points. + + + + + Subtraction operator - subtracts values of two points. + + + Point to subtract from. + Point to subtract. + + Returns new point which coordinates equal to difference of corresponding + coordinates of specified points. + + + + + Addition operator - adds scalar to the specified point. + + + Point to increase coordinates of. + Value to add to coordinates of the specified point. + + Returns new point which coordinates equal to coordinates of + the specified point increased by specified value. + + + + + Addition operator - adds scalar to the specified point. + + + Point to increase coordinates of. + Value to add to coordinates of the specified point. + + Returns new point which coordinates equal to coordinates of + the specified point increased by specified value. + + + + + Subtraction operator - subtracts scalar from the specified point. + + + Point to decrease coordinates of. + Value to subtract from coordinates of the specified point. + + Returns new point which coordinates equal to coordinates of + the specified point decreased by specified value. + + + + + Subtraction operator - subtracts scalar from the specified point. + + + Point to decrease coordinates of. + Value to subtract from coordinates of the specified point. + + Returns new point which coordinates equal to coordinates of + the specified point decreased by specified value. + + + + + Multiplication operator - multiplies coordinates of the specified point by scalar value. + + + Point to multiply coordinates of. + Multiplication factor. + + Returns new point which coordinates equal to coordinates of + the specified point multiplied by specified value. + + + + + Multiplication operator - multiplies coordinates of the specified point by scalar value. + + + Point to multiply coordinates of. + Multiplication factor. + + Returns new point which coordinates equal to coordinates of + the specified point multiplied by specified value. + + + + + Division operator - divides coordinates of the specified point by scalar value. + + + Point to divide coordinates of. + Division factor. + + Returns new point which coordinates equal to coordinates of + the specified point divided by specified value. + + + + + Division operator - divides coordinates of the specified point by scalar value. + + + Point to divide coordinates of. + Division factor. + + Returns new point which coordinates equal to coordinates of + the specified point divided by specified value. + + + + + Equality operator - checks if two points have equal coordinates. + + + First point to check. + Second point to check. + + Returns if coordinates of specified + points are equal. + + + + + Inequality operator - checks if two points have different coordinates. + + + First point to check. + Second point to check. + + Returns if coordinates of specified + points are not equal. + + + + + Check if this instance of equal to the specified one. + + + Another point to check equalty to. + + Return if objects are equal. + + + + + Get hash code for this instance. + + + Returns the hash code for this instance. + + + + + Implicit conversion to . + + + Integer point to convert to single precision point. + + Returns new single precision point which coordinates are implicitly converted + to floats from coordinates of the specified integer point. + + + + + Implicit conversion to . + + + Integer point to convert to double precision point. + + Returns new double precision point which coordinates are implicitly converted + to doubles from coordinates of the specified integer point. + + + + + Get string representation of the class. + + + Returns string, which contains values of the point in readable form. + + + + + Calculate Euclidean norm of the vector comprised of the point's + coordinates - distance from (0, 0) in other words. + + + Returns point's distance from (0, 0) point. + + + + + Evaluator of expressions written in reverse polish notation. + + + The class evaluates expressions writen in reverse postfix polish notation. + + The list of supported functuins is: + + Arithmetic functions: +, -, *, /; + sin - sine; + cos - cosine; + ln - natural logarithm; + exp - exponent; + sqrt - square root. + + + Arguments for these functions could be as usual constants, written as numbers, as variables, + writen as $<var_number> ($2, for example). The variable number is zero based index + of variables array. + + Sample usage: + + // expression written in polish notation + string expression = "2 $0 / 3 $1 * +"; + // variables for the expression + double[] vars = new double[] { 3, 4 }; + // expression evaluation + double result = PolishExpression.Evaluate( expression, vars ); + + + + + + + Evaluates specified expression. + + + Expression written in postfix polish notation. + Variables for the expression. + + Evaluated value of the expression. + + Unsupported function is used in the expression. + Incorrect postfix polish expression. + + + + + Represents a double range with minimum and maximum values. + + + + The class represents a double range with inclusive limits - + both minimum and maximum values of the range are included into it. + Mathematical notation of such range is [min, max]. + + Sample usage: + + // create [0.25, 1.5] range + DoubleRange range1 = new DoubleRange( 0.25, 1.5 ); + // create [1.00, 2.25] range + DoubleRange range2 = new DoubleRange( 1.00, 2.25 ); + // check if values is inside of the first range + if ( range1.IsInside( 0.75 ) ) + { + // ... + } + // check if the second range is inside of the first range + if ( range1.IsInside( range2 ) ) + { + // ... + } + // check if two ranges overlap + if ( range1.IsOverlapping( range2 ) ) + { + // ... + } + + + + + + + Initializes a new instance of the class. + + + Minimum value of the range. + Maximum value of the range. + + + + + Check if the specified value is inside of the range. + + + Value to check. + + True if the specified value is inside of the range or + false otherwise. + + + + + Check if the specified range is inside of the range. + + + Range to check. + + True if the specified range is inside of the range or + false otherwise. + + + + + Check if the specified range overlaps with the range. + + + Range to check for overlapping. + + True if the specified range overlaps with the range or + false otherwise. + + + + + Convert the signle precision range to integer range. + + + Specifies if inner integer range must be returned or outer range. + + Returns integer version of the range. + + If is set to , then the + returned integer range will always fit inside of the current single precision range. + If it is set to , then current single precision range will always + fit into the returned integer range. + + + + + Equality operator - checks if two ranges have equal min/max values. + + + First range to check. + Second range to check. + + Returns if min/max values of specified + ranges are equal. + + + + + Inequality operator - checks if two ranges have different min/max values. + + + First range to check. + Second range to check. + + Returns if min/max values of specified + ranges are not equal. + + + + + Check if this instance of equal to the specified one. + + + Another range to check equalty to. + + Return if objects are equal. + + + + + Get hash code for this instance. + + + Returns the hash code for this instance. + + + + + Get string representation of the class. + + + Returns string, which contains min/max values of the range in readable form. + + + + + Minimum value of the range. + + + The property represents minimum value (left side limit) or the range - + [min, max]. + + + + + Maximum value of the range. + + + The property represents maximum value (right side limit) or the range - + [min, max]. + + + + + Length of the range (deffirence between maximum and minimum values). + + + + + A delegate which is used by events notifying abount sent/received message. + + + Event sender. + Event arguments containing details about the transferred message. + + + + + Structure for representing a pair of coordinates of float type. + + + The structure is used to store a pair of floating point + coordinates with single precision. + + Sample usage: + + // assigning coordinates in the constructor + Point p1 = new Point( 10, 20 ); + // creating a point and assigning coordinates later + Point p2; + p2.X = 30; + p2.Y = 40; + // calculating distance between two points + float distance = p1.DistanceTo( p2 ); + + + + + + + X coordinate. + + + + + + Y coordinate. + + + + + + Initializes a new instance of the structure. + + + X axis coordinate. + Y axis coordinate. + + + + + Calculate Euclidean distance between two points. + + + Point to calculate distance to. + + Returns Euclidean distance between this point and + points. + + + + + Calculate squared Euclidean distance between two points. + + + Point to calculate distance to. + + Returns squared Euclidean distance between this point and + points. + + + + + Addition operator - adds values of two points. + + + First point for addition. + Second point for addition. + + Returns new point which coordinates equal to sum of corresponding + coordinates of specified points. + + + + + Addition operator - adds values of two points. + + + First point for addition. + Second point for addition. + + Returns new point which coordinates equal to sum of corresponding + coordinates of specified points. + + + + + Subtraction operator - subtracts values of two points. + + + Point to subtract from. + Point to subtract. + + Returns new point which coordinates equal to difference of corresponding + coordinates of specified points. + + + + + Subtraction operator - subtracts values of two points. + + + Point to subtract from. + Point to subtract. + + Returns new point which coordinates equal to difference of corresponding + coordinates of specified points. + + + + + Addition operator - adds scalar to the specified point. + + + Point to increase coordinates of. + Value to add to coordinates of the specified point. + + Returns new point which coordinates equal to coordinates of + the specified point increased by specified value. + + + + + Addition operator - adds scalar to the specified point. + + + Point to increase coordinates of. + Value to add to coordinates of the specified point. + + Returns new point which coordinates equal to coordinates of + the specified point increased by specified value. + + + + + Subtraction operator - subtracts scalar from the specified point. + + + Point to decrease coordinates of. + Value to subtract from coordinates of the specified point. + + Returns new point which coordinates equal to coordinates of + the specified point decreased by specified value. + + + + + Subtraction operator - subtracts scalar from the specified point. + + + Point to decrease coordinates of. + Value to subtract from coordinates of the specified point. + + Returns new point which coordinates equal to coordinates of + the specified point decreased by specified value. + + + + + Multiplication operator - multiplies coordinates of the specified point by scalar value. + + + Point to multiply coordinates of. + Multiplication factor. + + Returns new point which coordinates equal to coordinates of + the specified point multiplied by specified value. + + + + + Multiplication operator - multiplies coordinates of the specified point by scalar value. + + + Point to multiply coordinates of. + Multiplication factor. + + Returns new point which coordinates equal to coordinates of + the specified point multiplied by specified value. + + + + + Division operator - divides coordinates of the specified point by scalar value. + + + Point to divide coordinates of. + Division factor. + + Returns new point which coordinates equal to coordinates of + the specified point divided by specified value. + + + + + Division operator - divides coordinates of the specified point by scalar value. + + + Point to divide coordinates of. + Division factor. + + Returns new point which coordinates equal to coordinates of + the specified point divided by specified value. + + + + + Equality operator - checks if two points have equal coordinates. + + + First point to check. + Second point to check. + + Returns if coordinates of specified + points are equal. + + + + + Inequality operator - checks if two points have different coordinates. + + + First point to check. + Second point to check. + + Returns if coordinates of specified + points are not equal. + + + + + Check if this instance of equal to the specified one. + + + Another point to check equalty to. + + Return if objects are equal. + + + + + Get hash code for this instance. + + + Returns the hash code for this instance. + + + + + Explicit conversion to . + + + Single precision point to convert to integer point. + + Returns new integer point which coordinates are explicitly converted + to integers from coordinates of the specified single precision point by + casting float values to integers value. + + + + + Implicit conversion to . + + + Single precision point to convert to double precision point. + + Returns new double precision point which coordinates are implicitly converted + to doubles from coordinates of the specified single precision point. + + + + + Rounds the single precision point. + + + Returns new integer point, which coordinates equal to whole numbers + nearest to the corresponding coordinates of the single precision point. + + + + + Get string representation of the class. + + + Returns string, which contains values of the point in readable form. + + + + + Calculate Euclidean norm of the vector comprised of the point's + coordinates - distance from (0, 0) in other words. + + + Returns point's distance from (0, 0) point. + + + + + Represents an integer range with minimum and maximum values. + + + + The class represents an integer range with inclusive limits - + both minimum and maximum values of the range are included into it. + Mathematical notation of such range is [min, max]. + + Sample usage: + + // create [1, 10] range + IntRange range1 = new IntRange( 1, 10 ); + // create [5, 15] range + IntRange range2 = new IntRange( 5, 15 ); + // check if values is inside of the first range + if ( range1.IsInside( 7 ) ) + { + // ... + } + // check if the second range is inside of the first range + if ( range1.IsInside( range2 ) ) + { + // ... + } + // check if two ranges overlap + if ( range1.IsOverlapping( range2 ) ) + { + // ... + } + + + + + + + Initializes a new instance of the structure. + + + Minimum value of the range. + Maximum value of the range. + + + + + Check if the specified value is inside of the range. + + + Value to check. + + True if the specified value is inside of the range or + false otherwise. + + + + + Check if the specified range is inside of the range. + + + Range to check. + + True if the specified range is inside of the range or + false otherwise. + + + + + Check if the specified range overlaps with the range. + + + Range to check for overlapping. + + True if the specified range overlaps with the range or + false otherwise. + + + + + Implicit conversion to . + + + Integer range to convert to single precision range. + + Returns new single precision range which min/max values are implicitly converted + to floats from min/max values of the specified integer range. + + + + + Equality operator - checks if two ranges have equal min/max values. + + + First range to check. + Second range to check. + + Returns if min/max values of specified + ranges are equal. + + + + + Inequality operator - checks if two ranges have different min/max values. + + + First range to check. + Second range to check. + + Returns if min/max values of specified + ranges are not equal. + + + + + Check if this instance of equal to the specified one. + + + Another range to check equalty to. + + Return if objects are equal. + + + + + Get hash code for this instance. + + + Returns the hash code for this instance. + + + + + Get string representation of the class. + + + Returns string, which contains min/max values of the range in readable form. + + + + + Minimum value of the range. + + + The property represents minimum value (left side limit) or the range - + [min, max]. + + + + + Maximum value of the range. + + + The property represents maximum value (right side limit) or the range - + [min, max]. + + + + + Length of the range (deffirence between maximum and minimum values). + + + + + Thread safe version of the class. + + + The class inherits the and overrides + its random numbers generation methods providing thread safety by guarding call + to the base class with a lock. See documentation to for + additional information about the base class. + + + + + Initializes a new instance of the class. + + + See for more information. + + + + + Initializes a new instance of the class. + + + A number used to calculate a starting value for the pseudo-random number sequence. + If a negative number is specified, the absolute value of the number is used. + + + See for more information. + + + + + Returns a nonnegative random number. + + + Returns a 32-bit signed integer greater than or equal to zero and less than + . + + See for more information. + + + + + Returns a nonnegative random number less than the specified maximum. + + + The exclusive upper bound of the random number to be generated. + must be greater than or equal to zero. + + Returns a 32-bit signed integer greater than or equal to zero, and less than ; + that is, the range of return values ordinarily includes zero but not . + + See for more information. + + + + + Returns a random number within a specified range. + + + The inclusive lower bound of the random number returned. + The exclusive upper bound of the random number returned. + must be greater than or equal to . + + Returns a 32-bit signed integer greater than or equal to and less + than ; that is, the range of return values includes + but not . + + See for more information. + + + + + Fills the elements of a specified array of bytes with random numbers. + + + An array of bytes to contain random numbers. + + See for more information. + + + + + Returns a random number between 0.0 and 1.0. + + + Returns a double-precision floating point number greater than or equal to 0.0, and less than 1.0. + + See for more information. + + + + + Represents a range with minimum and maximum values, which are single precision numbers (floats). + + + + The class represents a single precision range with inclusive limits - + both minimum and maximum values of the range are included into it. + Mathematical notation of such range is [min, max]. + + Sample usage: + + // create [0.25, 1.5] range + Range range1 = new Range( 0.25f, 1.5f ); + // create [1.00, 2.25] range + Range range2 = new Range( 1.00f, 2.25f ); + // check if values is inside of the first range + if ( range1.IsInside( 0.75f ) ) + { + // ... + } + // check if the second range is inside of the first range + if ( range1.IsInside( range2 ) ) + { + // ... + } + // check if two ranges overlap + if ( range1.IsOverlapping( range2 ) ) + { + // ... + } + + + + + + + Initializes a new instance of the structure. + + + Minimum value of the range. + Maximum value of the range. + + + + + Check if the specified value is inside of the range. + + + Value to check. + + True if the specified value is inside of the range or + false otherwise. + + + + + Check if the specified range is inside of the range. + + + Range to check. + + True if the specified range is inside of the range or + false otherwise. + + + + + Check if the specified range overlaps with the range. + + + Range to check for overlapping. + + True if the specified range overlaps with the range or + false otherwise. + + + + + Convert the signle precision range to integer range. + + + Specifies if inner integer range must be returned or outer range. + + Returns integer version of the range. + + If is set to , then the + returned integer range will always fit inside of the current single precision range. + If it is set to , then current single precision range will always + fit into the returned integer range. + + + + + Equality operator - checks if two ranges have equal min/max values. + + + First range to check. + Second range to check. + + Returns if min/max values of specified + ranges are equal. + + + + + Inequality operator - checks if two ranges have different min/max values. + + + First range to check. + Second range to check. + + Returns if min/max values of specified + ranges are not equal. + + + + + Check if this instance of equal to the specified one. + + + Another range to check equalty to. + + Return if objects are equal. + + + + + Get hash code for this instance. + + + Returns the hash code for this instance. + + + + + Get string representation of the class. + + + Returns string, which contains min/max values of the range in readable form. + + + + + Minimum value of the range. + + + The property represents minimum value (left side limit) or the range - + [min, max]. + + + + + Maximum value of the range. + + + The property represents maximum value (right side limit) or the range - + [min, max]. + + + + + Length of the range (deffirence between maximum and minimum values). + + + + + The class provides support for parallel computations, paralleling loop's iterations. + + + The class allows to parallel loop's iteration computing them in separate threads, + what allows their simultaneous execution on multiple CPUs/cores. + + + + + + Executes a for-loop in which iterations may run in parallel. + + + Loop's start index. + Loop's stop index. + Loop's body. + + The method is used to parallel for-loop running its iterations in + different threads. The start and stop parameters define loop's + starting and ending loop's indexes. The number of iterations is equal to stop - start. + + + Sample usage: + + Parallel.For( 0, 20, delegate( int i ) + // which is equivalent to + // for ( int i = 0; i < 20; i++ ) + { + System.Diagnostics.Debug.WriteLine( "Iteration: " + i ); + // ... + } ); + + + + + + + Number of threads used for parallel computations. + + + The property sets how many worker threads are created for paralleling + loops' computations. + + By default the property is set to number of CPU's in the system + (see ). + + + + + + Delegate defining for-loop's body. + + + Loop's index. + + + + + Set of systems tools. + + + The class is a container of different system tools, which are used + across the framework. Some of these tools are platform specific, so their + implementation is different on different platform, like .NET and Mono. + + + + + + Copy block of unmanaged memory. + + + Destination pointer. + Source pointer. + Memory block's length to copy. + + Return's value of - pointer to destination. + + This function is required because of the fact that .NET does + not provide any way to copy unmanaged blocks, but provides only methods to + copy from unmanaged memory to managed memory and vise versa. + + + + + Copy block of unmanaged memory. + + + Destination pointer. + Source pointer. + Memory block's length to copy. + + Return's value of - pointer to destination. + + This function is required because of the fact that .NET does + not provide any way to copy unmanaged blocks, but provides only methods to + copy from unmanaged memory to managed memory and vise versa. + + + + + Fill memory region with specified value. + + + Destination pointer. + Filler byte's value. + Memory block's length to fill. + + Return's value of - pointer to destination. + + + + + Fill memory region with specified value. + + + Destination pointer. + Filler byte's value. + Memory block's length to fill. + + Return's value of - pointer to destination. + + + + + Connection failed exception. + + + The exception is thrown in the case if connection to device + has failed. + + + + + + Initializes a new instance of the class. + + + Exception's message. + + + + + Connection lost exception. + + + The exception is thrown in the case if connection to device + is lost. When the exception is caught, user may need to reconnect to the device. + + + + + + Initializes a new instance of the class. + + + Exception's message. + + + + + Not connected exception. + + + The exception is thrown in the case if connection to device + is not established, but user requests for its services. + + + + + + Initializes a new instance of the class. + + + Exception's message. + + + + + Device busy exception. + + + The exception is thrown in the case if access to certain device + is not available due to the fact that it is currently busy handling other request/connection. + + + + + + Initializes a new instance of the class. + + + Exception's message. + + + + + Device error exception. + + + The exception is thrown in the case if some error happens with a device, which + may need to be reported to user. + + + + + Initializes a new instance of the class. + + + Exception's message. + + + + + Structure for representing a pair of coordinates of double type. + + + The structure is used to store a pair of floating point + coordinates with double precision. + + Sample usage: + + // assigning coordinates in the constructor + DoublePoint p1 = new DoublePoint( 10, 20 ); + // creating a point and assigning coordinates later + DoublePoint p2; + p2.X = 30; + p2.Y = 40; + // calculating distance between two points + double distance = p1.DistanceTo( p2 ); + + + + + + + X coordinate. + + + + + + Y coordinate. + + + + + + Initializes a new instance of the structure. + + + X axis coordinate. + Y axis coordinate. + + + + + Calculate Euclidean distance between two points. + + + Point to calculate distance to. + + Returns Euclidean distance between this point and + points. + + + + + Calculate squared Euclidean distance between two points. + + + Point to calculate distance to. + + Returns squared Euclidean distance between this point and + points. + + + + + Addition operator - adds values of two points. + + + First point for addition. + Second point for addition. + + Returns new point which coordinates equal to sum of corresponding + coordinates of specified points. + + + + + Addition operator - adds values of two points. + + + First point for addition. + Second point for addition. + + Returns new point which coordinates equal to sum of corresponding + coordinates of specified points. + + + + + Subtraction operator - subtracts values of two points. + + + Point to subtract from. + Point to subtract. + + Returns new point which coordinates equal to difference of corresponding + coordinates of specified points. + + + + + Subtraction operator - subtracts values of two points. + + + Point to subtract from. + Point to subtract. + + Returns new point which coordinates equal to difference of corresponding + coordinates of specified points. + + + + + Addition operator - adds scalar to the specified point. + + + Point to increase coordinates of. + Value to add to coordinates of the specified point. + + Returns new point which coordinates equal to coordinates of + the specified point increased by specified value. + + + + + Addition operator - adds scalar to the specified point. + + + Point to increase coordinates of. + Value to add to coordinates of the specified point. + + Returns new point which coordinates equal to coordinates of + the specified point increased by specified value. + + + + + Subtraction operator - subtracts scalar from the specified point. + + + Point to decrease coordinates of. + Value to subtract from coordinates of the specified point. + + Returns new point which coordinates equal to coordinates of + the specified point decreased by specified value. + + + + + Subtraction operator - subtracts scalar from the specified point. + + + Point to decrease coordinates of. + Value to subtract from coordinates of the specified point. + + Returns new point which coordinates equal to coordinates of + the specified point decreased by specified value. + + + + + Multiplication operator - multiplies coordinates of the specified point by scalar value. + + + Point to multiply coordinates of. + Multiplication factor. + + Returns new point which coordinates equal to coordinates of + the specified point multiplied by specified value. + + + + + Multiplication operator - multiplies coordinates of the specified point by scalar value. + + + Point to multiply coordinates of. + Multiplication factor. + + Returns new point which coordinates equal to coordinates of + the specified point multiplied by specified value. + + + + + Division operator - divides coordinates of the specified point by scalar value. + + + Point to divide coordinates of. + Division factor. + + Returns new point which coordinates equal to coordinates of + the specified point divided by specified value. + + + + + Division operator - divides coordinates of the specified point by scalar value. + + + Point to divide coordinates of. + Division factor. + + Returns new point which coordinates equal to coordinates of + the specified point divided by specified value. + + + + + Equality operator - checks if two points have equal coordinates. + + + First point to check. + Second point to check. + + Returns if coordinates of specified + points are equal. + + + + + Inequality operator - checks if two points have different coordinates. + + + First point to check. + Second point to check. + + Returns if coordinates of specified + points are not equal. + + + + + Check if this instance of equal to the specified one. + + + Another point to check equalty to. + + Return if objects are equal. + + + + + Get hash code for this instance. + + + Returns the hash code for this instance. + + + + + Explicit conversion to . + + + Double precision point to convert to integer point. + + Returns new integer point which coordinates are explicitly converted + to integers from coordinates of the specified double precision point by + casting double values to integers value. + + + + + Explicit conversion to . + + + Double precision point to convert to single precision point. + + Returns new single precision point which coordinates are explicitly converted + to floats from coordinates of the specified double precision point by + casting double values to float value. + + + + + Rounds the double precision point. + + + Returns new integer point, which coordinates equal to whole numbers + nearest to the corresponding coordinates of the double precision point. + + + + + Get string representation of the class. + + + Returns string, which contains values of the point in readable form. + + + + + Calculate Euclidean norm of the vector comprised of the point's + coordinates - distance from (0, 0) in other words. + + + Returns point's distance from (0, 0) point. + + + + diff --git a/HMI Label And Editor Control/bin/Debug/CAM.tula b/HMI Label And Editor Control/bin/Debug/CAM.tula new file mode 100644 index 0000000000000000000000000000000000000000..5fc5f1e10986bc9226e47a2bf86b65d9622e8f7d GIT binary patch literal 20 OcmZR`Q#@+GfC>N_r2&Ni literal 0 HcmV?d00001 diff --git a/HMI Label And Editor Control/bin/Debug/EasyModbus.dll b/HMI Label And Editor Control/bin/Debug/EasyModbus.dll new file mode 100644 index 0000000000000000000000000000000000000000..55b9c063a5c3336f86259b8614e6367bf51fcfa3 GIT binary patch literal 72704 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 aeykqAfyVzAA&q%A{#cFv$*%vF2mTFyN%3$1 literal 0 HcmV?d00001 diff --git a/HMI Label And Editor Control/bin/Debug/Emgu.CV.DebuggerVisualizers.VS2012.dll b/HMI Label And Editor Control/bin/Debug/Emgu.CV.DebuggerVisualizers.VS2012.dll new file mode 100644 index 0000000000000000000000000000000000000000..412af74cb3edf3da4abd151f86b6f3da10ec98c7 GIT binary patch literal 8192 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 ZC)EQu(D+wEY1+H-lWO$;?fOr7;Gbm(@wxy2 literal 0 HcmV?d00001 diff --git a/HMI Label And Editor Control/bin/Debug/Emgu.CV.DebuggerVisualizers.VS2015.dll b/HMI Label And Editor Control/bin/Debug/Emgu.CV.DebuggerVisualizers.VS2015.dll new file mode 100644 index 0000000000000000000000000000000000000000..b8d31f81902c1f209406ef772c19c357eab85714 GIT binary patch literal 8192 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 Xu=+O*hUFKg|8?E|Pf!0nEbxB;=7 + + + Emgu.CV.UI.GL + + + + + Individual texture rotations + + + + + Update the rectangles location by a touch event + + The type of touch + The start point of the touch, may be PointF.Empty if touch type is down + The end point of the touch + The index of the rectangle when the shape is to be updated. + + + + The rectangles to be drawed. (0,0) point should be the image texture origin where (1,1) should match the opposite corner of the image. + + + + + Get or set the rotation of the whole GLImageView in degree + + + + + Required designer variable. + + + + + Clean up any resources being used. + + true if managed resources should be disposed; otherwise, false. + + + + Required method for Designer support - do not modify + the contents of this method with the code editor. + + + + diff --git a/HMI Label And Editor Control/bin/Debug/Emgu.CV.UI.dll b/HMI Label And Editor Control/bin/Debug/Emgu.CV.UI.dll new file mode 100644 index 0000000000000000000000000000000000000000..6267447fa87bd81f78a7ec407981bac6f960cada GIT binary patch literal 117760 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 + + + Emgu.CV.UI + + + +

+ The control that is used to display histogram + + + + + Construct a histogram control + + + + + Add a plot of the 1D histogram. You should call the Refresh() function to update the control after all modification is complete. + + The name of the histogram + The drawing color + The 1D histogram to be drawn + The size of the bin + The ranges + + + + Generate histograms for the image. One histogram is generated for each color channel. + You will need to call the Refresh function to do the painting afterward. + + The image to generate histogram from + The number of bins for each histogram + + + + Remove all the histogram from the control. You should call the Refresh() function to update the control after all modification is complete. + + + + + Paint the histogram + + + + + Required designer variable. + + + + + Clean up any resources being used. + + true if managed resources should be disposed; otherwise, false. + + + + Required method for Designer support - do not modify + the contents of this method with the code editor. + + + + + Get the zedgraph control from this histogram control + + + + + A view for histogram + + + + + A histogram viewer + + + + + Display the histograms of the specific image + + The image to retrieve hostigram from + + + + Display the histograms of the specific image + + The image to retrieve hostigram from + The numebr of bins in the histogram + + + + Required designer variable. + + + + + Clean up any resources being used. + + true if managed resources should be disposed; otherwise, false. + + + + Required method for Designer support - do not modify + the contents of this method with the code editor. + + + + + Get the histogram control of this viewer + + + + + An image box is a user control that is similar to picture box, but display Emgu CV IImage and provides enhenced functionalities. + + + + + A picture box with pan and zoom functionality + + + + + The zoom scale of the image to be displayed + + + + + The available zoom levels for the displayed image + + + + + Create a picture box with pan and zoom functionality + + + + + Paint the image + + The paint event + + + + Used for tracking the mouse position on the image + + + + + + + Get the size of the view area + + The size of the view area + + + + Get the size of the image + + The size of the image + + + + Get the minimum of the two sizes + + The first size + The second size + The minimum of the two sizes + + + + Draw a reversible rectangle on the control. + + The rectangle using the control's coordinate system + + + + Get the rectangle defined by the two points on the control + + The first point on the control + The second point on the control + the rectangle defined by the two points + + + + Set the new zoom scale for the displayed image + + The new zoom scale + The point to be fixed, in display coordinate + + + + Get or Set the property to enable(disable) Pan and Zoom + + + + + The event to fire when the zoom scale is changed + + + + + Get or Set the interpolation mode for zooming operation + + + + + Get the horizontal scroll bar from this control + + + + + Get the vertical scroll bar of this control + + + + + Get or Set the zoom scale + + + + + The image that is setted throught the Image property + + + + + The image that is displayed + + + + + A cache to store the ToolStripMenuItems for different types of images + + + + + The list of operations binded to this ImageBox + + + + + Timer used for caculating the frame rate + + + + + One of the parameters used for caculating the frame rate + + + + + Create a ImageBox + + + + + Push the specific operation to the operation collection + + The operation to be pushed onto the operation collection + + + + Remove all the operations from the collection + + + + + Remove the last added operation + + + + + Clean up any resources being used. + + true if managed resources should be disposed; otherwise, false. + + + + Required designer variable. + + + + + Required method for Designer support - do not modify + the contents of this method with the code editor. + + + + + Get or set the functional mode for the ImageBox + + + + + The event which will be trigerred when functional mode is changed + + + + + Set the image for this image box + + + + + The image that is being displayed. It's the Image following by some user defined image operation + + + + + The functional mode for ImageBox + + + + + The ImageBox is only used for displaying image. + No right-click menu nor Pan/Zoom available + + + + + Enable the right click menu + + + + + Enable Pan and Zoom + + + + + Support for the right click menu, Pan and Zoom + + + + + The control to display image properties + + + + + Create a ImageProperty control + + + + + Set the mouse position over the image. + It also set the color intensity of the pixel on the image where is mouse is at + + The location of the mouse on the image + + + + Set the description of the operation view + + + + + Clean up any resources being used. + + true if managed resources should be disposed; otherwise, false. + + + + Required designer variable. + + + + + Required method for Designer support - do not modify + the contents of this method with the code editor. + + + + + The parent imagebox for this property panel + + + + + Set the frame rate + + + + + A dialog to display the property of an image + + + + + Constructor + + + + + Required designer variable. + + + + + Clean up any resources being used. + + true if managed resources should be disposed; otherwise, false. + + + + Required method for Designer support - do not modify + the contents of this method with the code editor. + + + + + Get the image property panel + + + + + The Image viewer that display IImage + + + + + Create an ImageViewer + + + + + Create an ImageViewer from the specific + + The image to be displayed in this viewer + + + + Create an ImageViewer from the specific , using as window name + + The image to be displayed + The name of the image + + + + Create a ImageViewer with the specific image and show it. + + The image to be displayed in ImageViewer + + + + Create a ImageViewer with the specific image and show it. + + The image to be displayed in ImageViewer + The name of the window + + + + Required designer variable. + + + + + Clean up any resources being used. + + true if managed resources should be disposed; otherwise, false. + + + + Required method for Designer support - do not modify + the contents of this method with the code editor. + + + + + Get or Set the image in this ImageViewer + + + + + Get the image box hosted in this viewer + + + + + A control that is used to visualize a matrix + + + + + Create a MatrixBox + + + + + Required designer variable. + + + + + Clean up any resources being used. + + true if managed resources should be disposed; otherwise, false. + + + + Required method for Designer support - do not modify + the contents of this method with the code editor. + + + + + Get or Set the Matrix<TDepth> object; of this MatrixBox + + + + + A MatrixViewer that is used to visualize a matrix + + + + + Create a MatrixViewer + + + + + Required designer variable. + + + + + Clean up any resources being used. + + true if managed resources should be disposed; otherwise, false. + + + + Required method for Designer support - do not modify + the contents of this method with the code editor. + + + + + Get or Set the Matrix<> object; for this MatrixViewer + + + + + An operation contains the MethodInfo and the methods parameters. It provides a way to invoke a specific method with the specific parameters. + + + + + Craete an operation using the specific method and parameters + + The method info + The parameters for this method + + + + Call the specific method with the specific parameters on the provided + + The instance to call the method + + + + + Represent this operation as a string + + + + + + Represent this operation as code + + + + + + The MethodInfo + + + + + The parameters for this method + + + + + A user control to display the operations + + + + + Constructor + + + + + Display the operations + + The operations to be displayed + + + + Required designer variable. + + + + + Clean up any resources being used. + + true if managed resources should be disposed; otherwise, false. + + + + Required method for Designer support - do not modify + the contents of this method with the code editor. + + + + + Set the programming language for this Operation View + + + + + The dialog to ask user for parameters to the specific method + + + + + The List of parameter values + + + + + The array of parameter info + + + + + Get the name of the parameter + + the parameter + the name of the parameter + + + + Create a panel for the specific parameter + + the parameter to create panel for + The default value for the parameter + the panel + + + + Obtain the parameters for and put them in + + The method to Obtain parameters from + The list that will be used as the storage for the retrieved parameters, if it contains elements, those elements will be used as default value + True if successed, false otherwise + + + + Required designer variable. + + + + + Clean up any resources being used. + + true if managed resources should be disposed; otherwise, false. + + + + Required method for Designer support - do not modify + the contents of this method with the code editor. + + + + + Get the parameters obtained by this parameter input dialog + + + + + Return the value of the parameter input panel, if unable to retrieve value, return null + + The value of the parameter input panel, if unable to retrieve value, return null + + + + The function used to obtain the parameter from this input panel + + + + + A strongly-typed resource class, for looking up localized strings, etc. + + + + + Returns the cached ResourceManager instance used by this class. + + + + + Overrides the current thread's CurrentUICulture property for all + resource lookups using this strongly typed resource class. + + + + + Looks up a localized string similar to Cancel. + + + + + Looks up a localized string similar to Count. + + + + + Looks up a localized string similar to Histogram. + + + + + Looks up a localized string similar to File. + + + + + Looks up a localized string similar to Filters. + + + + + Looks up a localized string similar to Load Image.... + + + + + Looks up a localized string similar to OK. + + + + + Looks up a localized string similar to Only 1D histogram is supported. + + + + + Looks up a localized string similar to Parameter {0} is invalid.. + + + + + Looks up a localized string similar to Parameter type '{0}' is not supported. + + + + + Looks up a localized string similar to Please load an image first. + + + + + Looks up a localized string similar to Property. + + + + + Looks up a localized string similar to Save As.... + + + + + Looks up a localized string similar to File Saving. + + + + + Looks up a localized string similar to Unknown. + + + + + Looks up a localized string similar to Un-Zoom. + + + + + Looks up a localized string similar to Value. + + + + + Looks up a localized string similar to Zoom. + + + + + Looks up a localized string similar to Zoom In. + + + + + Looks up a localized string similar to Zoom Out. + + + + diff --git a/HMI Label And Editor Control/bin/Debug/Emgu.CV.World.dll b/HMI Label And Editor Control/bin/Debug/Emgu.CV.World.dll new file mode 100644 index 0000000000000000000000000000000000000000..8df25862b1c5c039f1c5c3c26a9febe58d8b5d44 GIT binary patch literal 508416 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

6CR=*aV4DY;v)>aH8l;fK!c5F5W3S2*_a1 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⋙>iAZiywauvX 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ξ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 + + + Emgu.CV.World + + + +

+ An abstract class that wrap around a disposable object + + + + Track whether Dispose has been called. + + + + The dispose function that implements IDisposable interface + + + + + Dispose(bool disposing) executes in two distinct scenarios. + If disposing equals true, the method has been called directly + or indirectly by a user's code. Managed and unmanaged resources + can be disposed. + If disposing equals false, the method has been called by the + runtime from inside the finalizer and you should not reference + other objects. Only unmanaged resources can be disposed. + + + If disposing equals false, the method has been called by the + runtime from inside the finalizer and you should not reference + other objects. Only unmanaged resources can be disposed. + + + + + Release the managed resources. This function will be called during the disposal of the current object. + override ride this function if you need to call the Dispose() function on any managed IDisposable object created by the current object + + + + + Release the unmanaged resources + + + + + Destructor + + + + + A generic EventArgs + + The type of arguments + + + + Create a generic EventArgs with the specific value + + The value + + + + The value of the EventArgs + + + + + A generic EventArgs + + The type of the first value + The type of the second value + + + + Create a generic EventArgs with two values + + The first value + The second value + + + + The first value + + + + + The second value + + + + + Implement this interface if the object can output code to generate it self. + + + + + Return the code to generate the object itself from the specific language + + The programming language to output code + The code to generate the object from the specific language + + + + An object that can be interpolated + + + + + Interpolate base on this point and the other point with the given index + + The other point + The interpolation index + The interpolated point + + + + The index that will be used for interpolation + + + + + A Pinnned array of the specific type + + The type of the array + + + + Create a Pinnned array of the specific type + + The size of the array + + + + Get the address of the pinned array + + A pointer to the address of the the pinned array + + + + Release the GCHandle + + + + + Disposed the unmanaged data + + + + + Get the array + + + + + Provide information for the platform which is using. + + + + + Get the type of the current operating system + + + + + Get the type of the current runtime environment + + + + + utilities functions for Emgu + + + + + Convert an object to an xml document + + The type of the object to be converted + The object to be serialized + An xml document that represents the object + + + + Convert an object to an xml document + + The type of the object to be converted + The object to be serialized + Other types that it must known ahead to serialize the object + An xml document that represents the object + + + + Convert an xml document to an object + + The type of the object to be converted to + The xml document + The object representation as a result of the deserialization of the xml document + + + + Convert an xml document to an object + + The type of the object to be converted to + The xml document + Other types that it must known ahead to deserialize the object + The object representation as a result of the deserialization of the xml document + + + + Convert an xml string to an object + + The type of the object to be converted to + The xml document as a string + The object representation as a result of the deserialization of the xml string + + + + Merges two byte vector into one + + the first byte vector to be merged + the second byte vector to be merged + The bytes that is a concatenation of a and b + + + + Call a command from command line + + The name of the executable + The arguments to the executable + The standard output + + + + Use reflection to find the base type. If such type do not exist, null is returned + + The type to search from + The name of the base class to search + The base type + + + + Convert some generic vector to vector of Bytes + + type of the input vector + array of data + the byte vector + + + + Perform first degree interpolation give the sorted data and the interpolation + + The sorted data that will be interpolated from + The indexes of the interpolate result + + + + + Get subsamples with the specific rate + + The source which the subsamples will be derived from + The subsample rate + subsampled with the specific rate + + + + Joining multiple index ascending IInterpolatables together as a single index ascending IInterpolatable. + + The type of objects that will be joined + The enumerables, each should be stored in index ascending order + A single enumerable sorted in index ascending order + + + + Maps the specified executable module into the address space of the calling process. + + The name of the dll + The handle to the library + + + + Decrements the reference count of the loaded dynamic-link library (DLL). When the reference count reaches zero, the module is unmapped from the address space of the calling process and the handle is no longer valid + + The handle to the library + If the function succeeds, the return value is true. If the function fails, the return value is false. + + + + Adds a directory to the search path used to locate DLLs for the application + + The directory to be searched for DLLs + True if success + + + + Type of operating system + + + + + Windows + + + + + Linux + + + + + Mac OSX + + + + + iOS devices. iPhone, iPad, iPod Touch + + + + + Android devices + + + + + The windows phone + + + + + The runtime environment + + + + + .Net runtime + + + + + Windows Store app runtime + + + + + Mono runtime + + + + + The type of Programming languages + + + + + C# + + + + + C++ + + + + + An Unmanaged Object is a disposable object with a Ptr property pointing to the unmanaged object + + + + + A pointer to the unmanaged object + + + + + Implicit operator for IntPtr + + The UnmanagedObject + The unmanaged pointer for this object + + + + Pointer to the unmanaged object + + + + + The base class for camera response calibration algorithms. + + + + + The pointer the the calibrateCRF object + + + + + Recovers inverse camera response. + + Vector of input images + 256x1 matrix with inverse camera response function + Vector of exposure time values for each image + + + + Library to invoke OpenCV functions + + + + + string marshaling type + + + + + Represent a bool value in C++ + + + + + Represent a int value in C++ + + + + + Opencv's calling convention + + + + + The file name of the cvextern library + + + + + The file name of the cvextern library + + + + + The file name of the opencv_ffmpeg library + + + + + Allocates and initialized the CvCapture structure for reading a video stream from the camera. Currently two camera interfaces can be used on Windows: Video for Windows (VFW) and Matrox Imaging Library (MIL); and two on Linux: V4L and FireWire (IEEE1394). + + Index of the camera to be used. If there is only one camera or it does not matter what camera to use -1 may be passed + Pointer to the capture structure + + + + Allocates and initialized the CvCapture structure for reading the video stream from the specified file. + After the allocated structure is not used any more it should be released by cvReleaseCapture function. + + Name of the video file. + Pointer to the capture structure. + + + + The function cvReleaseCapture releases the CvCapture structure allocated by cvCreateFileCapture or cvCreateCameraCapture + + pointer to video capturing structure. + + + + Grabs a frame from camera or video file, decompresses and returns it. This function is just a combination of cvGrabFrame and cvRetrieveFrame in one call. + + Video capturing structure + The output frame + true id a frame is read + The returned image should not be released or modified by user. + + + + Grab a frame + + Video capturing structure + True on success + + + + Get the frame grabbed with cvGrabFrame(..) + This function may apply some frame processing like frame decompression, flipping etc. + + Video capturing structure + The output image + The frame retrieve flag + True on success + The returned image should not be released or modified by user. + + + + Retrieves the specified property of camera or video file + + Video capturing structure + Property identifier + The specified property of camera or video file + + + + Sets the specified property of video capturing + + Video capturing structure + Property identifier + Value of the property + True on success + + + + Check to make sure all the unmanaged libraries are loaded + + True if library loaded + + + + Attempts to load opencv modules from the specific location + + The directory where the unmanaged modules will be loaded. If it is null, the default location will be used. + The names of opencv modules. e.g. "opencv_cxcore.dll" on windows. + True if all the modules has been loaded successfully + If is null, the default location on windows is the dll's path appended by either "x64" or "x86", depends on the applications current mode. + + + + Get the module format string. + + On Windows, "{0}".dll will be returned; On Linux, "lib{0}.so" will be returned; Otherwise {0} is returned. + + + + Attempts to load opencv modules from the specific location + + The names of opencv modules. e.g. "opencv_cxcore.dll" on windows. + True if all the modules has been loaded successfully + + + + Static Constructor to setup opencv environment + + + + + Get the corresponding depth type + + The opencv depth type + The equivalent depth type + + + + Get the corresponding opencv depth type + + The element type + The equivalent opencv depth type + + + + This function performs the same as MakeType macro + + The type of depth + The number of channels + An interger tha represent a mat type + + + + Check if the size of the C structures match those of C# + + True if the size matches + + + + Finds perspective transformation H=||h_ij|| between the source and the destination planes + + Point coordinates in the original plane + Point coordinates in the destination plane + The output homography matrix + FindHomography method + + The maximum allowed reprojection error to treat a point pair as an inlier. + The parameter is only used in RANSAC-based homography estimation. + E.g. if dst_points coordinates are measured in pixels with pixel-accurate precision, it makes sense to set this parameter somewhere in the range ~1..3 + + Optional output mask set by a robust method ( CV_RANSAC or CV_LMEDS ). Note that the input mask values are ignored. + The 3x3 homography matrix if found. Null if not found. + + + + Finds perspective transformation H=||hij|| between the source and the destination planes + + Point coordinates in the original plane, 2xN, Nx2, 3xN or Nx3 array (the latter two are for representation in homogeneous coordinates), where N is the number of points. + Point coordinates in the destination plane, 2xN, Nx2, 3xN or Nx3 array (the latter two are for representation in homogeneous coordinates) + The type of the method + The maximum allowed re-projection error to treat a point pair as an inlier. The parameter is only used in RANSAC-based homography estimation. E.g. if dst_points coordinates are measured in pixels with pixel-accurate precision, it makes sense to set this parameter somewhere in the range ~1..3 + The optional output mask set by a robust method (RANSAC or LMEDS). + Output 3x3 homography matrix. Homography matrix is determined up to a scale, thus it is normalized to make h33=1 + + + + Converts a rotation vector to rotation matrix or vice versa. Rotation vector is a compact representation of rotation matrix. Direction of the rotation vector is the rotation axis and the length of the vector is the rotation angle around the axis. + + The input rotation vector (3x1 or 1x3) or rotation matrix (3x3). + The output rotation matrix (3x3) or rotation vector (3x1 or 1x3), respectively + Optional output Jacobian matrix, 3x9 or 9x3 - partial derivatives of the output array components w.r.t the input array components + + + + Calculates fundamental matrix using one of four methods listed above and returns the number of fundamental matrices found (1 or 3) and 0, if no matrix is found. + + Array of N points from the first image. The point coordinates should be floating-point (single or double precision). + Array of the second image points of the same size and format as points1 + Method for computing the fundamental matrix + Parameter used for RANSAC. It is the maximum distance from a point to an epipolar line in pixels, beyond which the point is considered an outlier and is not used for computing the final fundamental matrix. It can be set to something like 1-3, depending on the accuracy of the point localization, image resolution, and the image noise. + Parameter used for the RANSAC or LMedS methods only. It specifies a desirable level of confidence (probability) that the estimated matrix is correct. + The optional pointer to output array of N elements, every element of which is set to 0 for outliers and to 1 for the "inliers", i.e. points that comply well with the estimated epipolar geometry. The array is computed only in RANSAC and LMedS methods. For other methods it is set to all 1. + The calculated fundamental matrix + + + + For every point in one of the two images of stereo-pair the function cvComputeCorrespondEpilines finds equation of a line that contains the corresponding point (i.e. projection of the same 3D point) in the other image. Each line is encoded by a vector of 3 elements l=[a,b,c]^T, so that: + l^T*[x, y, 1]^T=0, or + a*x + b*y + c = 0 + From the fundamental matrix definition (see cvFindFundamentalMatrix discussion), line l2 for a point p1 in the first image (which_image=1) can be computed as: + l2=F*p1 and the line l1 for a point p2 in the second image (which_image=1) can be computed as: + l1=F^T*p2Line coefficients are defined up to a scale. They are normalized (a2+b2=1) are stored into correspondent_lines + + The input points. 2xN, Nx2, 3xN or Nx3 array (where N number of points). Multi-channel 1xN or Nx1 array is also acceptable. + Index of the image (1 or 2) that contains the points + Fundamental matrix + Computed epilines, 3xN or Nx3 array + + + + Converts points from Euclidean to homogeneous space. + + Input vector of N-dimensional points. + Output vector of N+1-dimensional points. + + + + Converts points from homogeneous to Euclidean space. + + Input vector of N-dimensional points. + Output vector of N-1-dimensional points. + + + + Transforms 1-channel disparity map to 3-channel image, a 3D surface. + + Disparity map + 3-channel, 16-bit integer or 32-bit floating-point image - the output map of 3D points + The reprojection 4x4 matrix, can be arbitrary, e.g. the one, computed by cvStereoRectify + Indicates, whether the function should handle missing values (i.e. points where the disparity was not computed). + If handleMissingValues=true, then pixels with the minimal disparity that corresponds to the outliers (see StereoMatcher::compute ) + are transformed to 3D points with a very large Z value (currently set to 10000). + The optional output array depth. If it is -1, the output image will have CV_32F depth. ddepth can also be set to CV_16S, CV_32S or CV_32F. + + + + Computes projections of 3D points to the image plane given intrinsic and extrinsic camera parameters. + Optionally, the function computes jacobians - matrices of partial derivatives of image points as functions of all the input parameters w.r.t. the particular parameters, intrinsic and/or extrinsic. + The jacobians are used during the global optimization in cvCalibrateCamera2 and cvFindExtrinsicCameraParams2. + The function itself is also used to compute back-projection error for with current intrinsic and extrinsic parameters. + + Note, that with intrinsic and/or extrinsic parameters set to special values, the function can be used to compute just extrinsic transformation or just intrinsic transformation (i.e. distortion of a sparse set of points) + The array of object points. + The rotation vector, 1x3 or 3x1 + The translation vector, 1x3 or 3x1 + The camera matrix (A) [fx 0 cx; 0 fy cy; 0 0 1]. + The vector of distortion coefficients, 4x1 or 1x4 [k1, k2, p1, p2]. If it is IntPtr.Zero, all distortion coefficients are considered 0's + The output array of image points, 2xN or Nx2, where N is the total number of points in the view + Aspect ratio + Optional output 2Nx(10+<numDistCoeffs>) jacobian matrix of derivatives of image points with respect to components of the rotation vector, translation vector, focal lengths, coordinates of the principal point and the distortion coefficients. In the old interface different components of the jacobian are returned via different output parameters. + The array of image points which is the projection of + + + + Computes projections of 3D points to the image plane given intrinsic and extrinsic camera parameters. Optionally, the function computes jacobians - matrices of partial derivatives of image points as functions of all the input parameters w.r.t. the particular parameters, intrinsic and/or extrinsic. The jacobians are used during the global optimization in cvCalibrateCamera2 and cvFindExtrinsicCameraParams2. The function itself is also used to compute back-projection error for with current intrinsic and extrinsic parameters. + Note, that with intrinsic and/or extrinsic parameters set to special values, the function can be used to compute just extrinsic transformation or just intrinsic transformation (i.e. distortion of a sparse set of points). + + The array of object points, 3xN or Nx3, where N is the number of points in the view + The rotation vector, 1x3 or 3x1 + The translation vector, 1x3 or 3x1 + The camera matrix (A) [fx 0 cx; 0 fy cy; 0 0 1]. + The vector of distortion coefficients, 4x1 or 1x4 [k1, k2, p1, p2]. If it is IntPtr.Zero, all distortion coefficients are considered 0's + The output array of image points, 2xN or Nx2, where N is the total number of points in the view + Aspect ratio + Optional output 2Nx(10+<numDistCoeffs>) jacobian matrix of derivatives of image points with respect to components of the rotation vector, translation vector, focal lengths, coordinates of the principal point and the distortion coefficients. In the old interface different components of the jacobian are returned via different output parameters. + + + + Estimates intrinsic camera parameters and extrinsic parameters for each of the views + + The 3D location of the object points. The first index is the index of image, second index is the index of the point + The 2D image location of the points. The first index is the index of the image, second index is the index of the point + The size of the image, used only to initialize intrinsic camera matrix + The output 3xM or Mx3 array of rotation vectors (compact representation of rotation matrices, see cvRodrigues2). + The output 3xM or Mx3 array of translation vectors/// cCalibration type + The termination criteria + The output camera matrix (A) [fx 0 cx; 0 fy cy; 0 0 1]. If CV_CALIB_USE_INTRINSIC_GUESS and/or CV_CALIB_FIX_ASPECT_RATION are specified, some or all of fx, fy, cx, cy must be initialized + The output 4x1 or 1x4 vector of distortion coefficients [k1, k2, p1, p2] + The final reprojection error + + + + Estimates intrinsic camera parameters and extrinsic parameters for each of the views + + The joint matrix of object points, 3xN or Nx3, where N is the total number of points in all views + The joint matrix of corresponding image points, 2xN or Nx2, where N is the total number of points in all views + Size of the image, used only to initialize intrinsic camera matrix + The output camera matrix (A) [fx 0 cx; 0 fy cy; 0 0 1]. If CV_CALIB_USE_INTRINSIC_GUESS and/or CV_CALIB_FIX_ASPECT_RATION are specified, some or all of fx, fy, cx, cy must be initialized + The output 4x1 or 1x4 vector of distortion coefficients [k1, k2, p1, p2] + The output 3xM or Mx3 array of rotation vectors (compact representation of rotation matrices, see cvRodrigues2). + The output 3xM or Mx3 array of translation vectors + Different flags + The termination criteria + The final reprojection error + + + + Computes various useful camera (sensor/lens) characteristics using the computed camera calibration matrix, image frame resolution in pixels and the physical aperture size + + The matrix of intrinsic parameters + Image size in pixels + Aperture width in real-world units (optional input parameter). Set it to 0 if not used + Aperture width in real-world units (optional input parameter). Set it to 0 if not used + Field of view angle in x direction in degrees + Field of view angle in y direction in degrees + Focal length in real-world units + The principal point in real-world units + The pixel aspect ratio ~ fy/f + + + + Estimates extrinsic camera parameters using known intrinsic parameters and extrinsic parameters for each view. The coordinates of 3D object points and their correspondent 2D projections must be specified. This function also minimizes back-projection error. + + The array of object points + The array of corresponding image points + The camera matrix (A) [fx 0 cx; 0 fy cy; 0 0 1]. + The vector of distortion coefficients, 4x1 or 1x4 [k1, k2, p1, p2]. If it is IntPtr.Zero, all distortion coefficients are considered 0's. + The output 3x1 or 1x3 rotation vector (compact representation of a rotation matrix, see cvRodrigues2). + The output 3x1 or 1x3 translation vector + Use the input rotation and translation parameters as a guess + Method for solving a PnP problem + The extrinsic parameters + + + + Estimates extrinsic camera parameters using known intrinsic parameters and extrinsic parameters for each view. The coordinates of 3D object points and their correspondent 2D projections must be specified. This function also minimizes back-projection error + + The array of object points, 3xN or Nx3, where N is the number of points in the view + The array of corresponding image points, 2xN or Nx2, where N is the number of points in the view + The camera matrix (A) [fx 0 cx; 0 fy cy; 0 0 1]. + The vector of distortion coefficients, 4x1 or 1x4 [k1, k2, p1, p2]. If it is IntPtr.Zero, all distortion coefficients are considered 0's. + The output 3x1 or 1x3 rotation vector (compact representation of a rotation matrix, see cvRodrigues2). + The output 3x1 or 1x3 translation vector + Use the input rotation and translation parameters as a guess + Method for solving a PnP problem + + + + Finds an object pose from 3D-2D point correspondences using the RANSAC scheme. + + Array of object points in the object coordinate space, 3xN/Nx3 1-channel or 1xN/Nx1 3-channel, where N is the number of points. VectorOfPoint3D32f can be also passed here. + Array of corresponding image points, 2xN/Nx2 1-channel or 1xN/Nx1 2-channel, where N is the number of points. VectorOfPointF can be also passed here. + Input camera matrix + Input vector of distortion coefficients of 4, 5, 8 or 12 elements. If the vector is null/empty, the zero distortion coefficients are assumed. + Output rotation vector + Output translation vector. + If true, the function uses the provided rvec and tvec values as initial approximations of the rotation and translation vectors, respectively, and further optimizes them. + Number of iterations. + Inlier threshold value used by the RANSAC procedure. The parameter value is the maximum allowed distance between the observed and computed point projections to consider it an inlier. + Number of inliers. If the algorithm at some stage finds more inliers than minInliersCount, it finishes. + Output vector that contains indices of inliers in objectPoints and imagePoints . + Method for solving a PnP problem + + + + Estimates transformation between the 2 cameras making a stereo pair. If we have a stereo camera, where the relative position and orientatation of the 2 cameras is fixed, and if we computed poses of an object relative to the fist camera and to the second camera, (R1, T1) and (R2, T2), respectively (that can be done with cvFindExtrinsicCameraParams2), obviously, those poses will relate to each other, i.e. given (R1, T1) it should be possible to compute (R2, T2) - we only need to know the position and orientation of the 2nd camera relative to the 1st camera. That's what the described function does. It computes (R, T) such that: + R2=R*R1, + T2=R*T1 + T + + The 3D location of the object points. The first index is the index of image, second index is the index of the point + The 2D image location of the points for camera 1. The first index is the index of the image, second index is the index of the point + The 2D image location of the points for camera 2. The first index is the index of the image, second index is the index of the point + The input/output camera matrices [fxk 0 cxk; 0 fyk cyk; 0 0 1]. If CV_CALIB_USE_INTRINSIC_GUESS or CV_CALIB_FIX_ASPECT_RATIO are specified, some or all of the elements of the matrices must be initialized + The input/output vectors of distortion coefficients for each camera, 4x1, 1x4, 5x1 or 1x5 + The input/output camera matrices [fxk 0 cxk; 0 fyk cyk; 0 0 1]. If CV_CALIB_USE_INTRINSIC_GUESS or CV_CALIB_FIX_ASPECT_RATIO are specified, some or all of the elements of the matrices must be initialized + The input/output vectors of distortion coefficients for each camera, 4x1, 1x4, 5x1 or 1x5 + Size of the image, used only to initialize intrinsic camera matrix + The rotation matrix between the 1st and the 2nd cameras' coordinate systems + The translation vector between the cameras' coordinate systems + The optional output essential matrix + The optional output fundamental matrix + Termination criteria for the iterative optimization algorithm + The calibration flags + + + + Estimates transformation between the 2 cameras making a stereo pair. If we have a stereo camera, where the relative position and orientatation of the 2 cameras is fixed, and if we computed poses of an object relative to the fist camera and to the second camera, (R1, T1) and (R2, T2), respectively (that can be done with cvFindExtrinsicCameraParams2), obviously, those poses will relate to each other, i.e. given (R1, T1) it should be possible to compute (R2, T2) - we only need to know the position and orientation of the 2nd camera relative to the 1st camera. That's what the described function does. It computes (R, T) such that: + R2=R*R1, + T2=R*T1 + T + + The joint matrix of object points, 3xN or Nx3, where N is the total number of points in all views + The joint matrix of corresponding image points in the views from the 1st camera, 2xN or Nx2, where N is the total number of points in all views + The joint matrix of corresponding image points in the views from the 2nd camera, 2xN or Nx2, where N is the total number of points in all views + The input/output camera matrices [fxk 0 cxk; 0 fyk cyk; 0 0 1]. If CV_CALIB_USE_INTRINSIC_GUESS or CV_CALIB_FIX_ASPECT_RATIO are specified, some or all of the elements of the matrices must be initialized + The input/output vectors of distortion coefficients for each camera, 4x1, 1x4, 5x1 or 1x5 + The input/output camera matrices [fxk 0 cxk; 0 fyk cyk; 0 0 1]. If CV_CALIB_USE_INTRINSIC_GUESS or CV_CALIB_FIX_ASPECT_RATIO are specified, some or all of the elements of the matrices must be initialized + The input/output vectors of distortion coefficients for each camera, 4x1, 1x4, 5x1 or 1x5 + Size of the image, used only to initialize intrinsic camera matrix + The rotation matrix between the 1st and the 2nd cameras' coordinate systems + The translation vector between the cameras' coordinate systems + The optional output essential matrix + The optional output fundamental matrix + Termination criteria for the iterative optimization algorithm + The calibration flags + + + + + computes the rectification transformations without knowing intrinsic parameters of the cameras and their relative position in space, hence the suffix "Uncalibrated". Another related difference from cvStereoRectify is that the function outputs not the rectification transformations in the object (3D) space, but the planar perspective transformations, encoded by the homography matrices H1 and H2. The function implements the following algorithm [Hartley99]. + + + Note that while the algorithm does not need to know the intrinsic parameters of the cameras, it heavily depends on the epipolar geometry. Therefore, if the camera lenses have significant distortion, it would better be corrected before computing the fundamental matrix and calling this function. For example, distortion coefficients can be estimated for each head of stereo camera separately by using cvCalibrateCamera2 and then the images can be corrected using cvUndistort2 + + The array of 2D points + The array of 2D points + Fundamental matrix. It can be computed using the same set of point pairs points1 and points2 using cvFindFundamentalMat + Size of the image + The rectification homography matrices for the first images + The rectification homography matrices for the second images + If the parameter is greater than zero, then all the point pairs that do not comply the epipolar geometry well enough (that is, the points for which fabs(points2[i]T*F*points1[i])>threshold) are rejected prior to computing the homographies + + + + + computes the rotation matrices for each camera that (virtually) make both camera image planes the same plane. Consequently, that makes all the epipolar lines parallel and thus simplifies the dense stereo correspondence problem. On input the function takes the matrices computed by cvStereoCalibrate and on output it gives 2 rotation matrices and also 2 projection matrices in the new coordinates. The function is normally called after cvStereoCalibrate that computes both camera matrices, the distortion coefficients, R and T + + The camera matrices [fx_k 0 cx_k; 0 fy_k cy_k; 0 0 1] + The camera matrices [fx_k 0 cx_k; 0 fy_k cy_k; 0 0 1] + The vectors of distortion coefficients for first camera, 4x1, 1x4, 5x1 or 1x5 + The vectors of distortion coefficients for second camera, 4x1, 1x4, 5x1 or 1x5 + Size of the image used for stereo calibration + The rotation matrix between the 1st and the 2nd cameras' coordinate systems + The translation vector between the cameras' coordinate systems + 3x3 Rectification transforms (rotation matrices) for the first camera + 3x3 Rectification transforms (rotation matrices) for the second camera + 3x4 Projection matrices in the new (rectified) coordinate systems + 3x4 Projection matrices in the new (rectified) coordinate systems + The optional output disparity-to-depth mapping matrix, 4x4, see cvReprojectImageTo3D. + The operation flags, use ZeroDisparity for default + Use -1 for default + Use Size.Empty for default + The valid pixel ROI for image1 + The valid pixel ROI for image2 + + + + Attempts to determine whether the input image is a view of the chessboard pattern and locate internal chessboard corners + + Source chessboard view; it must be 8-bit grayscale or color image + The number of inner corners per chessboard row and column + Pointer to the output array of corners(PointF) detected + Various operation flags + True if all the corners have been found and they have been placed in a certain order (row by row, left to right in every row), otherwise, if the function fails to find all the corners or reorder them, it returns 0 + The coordinates detected are approximate, and to determine their position more accurately, the user may use the function cvFindCornerSubPix + + + + Draws the individual chessboard corners detected (as red circles) in case if the board was not found (pattern_was_found=0) or the colored corners connected with lines when the board was found (pattern_was_found != 0). + + The destination image; it must be 8-bit color image + The number of inner corners per chessboard row and column + The array of corners detected + Indicates whether the complete board was found (!=0) or not (=0). One may just pass the return value cvFindChessboardCorners here. + + + + Reconstructs points by triangulation. + + 3x4 projection matrix of the first camera. + 3x4 projection matrix of the second camera. + 2xN array of feature points in the first image. It can be also a vector of feature points or two-channel matrix of size 1xN or Nx1 + 2xN array of corresponding points in the second image. It can be also a vector of feature points or two-channel matrix of size 1xN or Nx1. + 4xN array of reconstructed points in homogeneous coordinates. + + + + Refines coordinates of corresponding points. + + 3x3 fundamental matrix. + 1xN array containing the first set of points. + 1xN array containing the second set of points. + The optimized points1. + The optimized points2. + + + + The default Exception callback to handle Error thrown by OpenCV + + + + + An error handler which will ignore any error and continue + + + + + A custom error handler for OpenCV + + The numeric code for error status + The source file name where error is encountered + A description of the error + The source file name where error is encountered + The line number in the source where error is encountered + Arbitrary pointer that is transparently passed to the error handler. + + + + + A custom error handler for OpenCV + + The numeric code for error status + The source file name where error is encountered + A description of the error + The source file name where error is encountered + The line number in the source where error is encountered + Arbitrary pointer that is transparently passed to the error handler. + + + + + Sets a new error handler that can be one of standard handlers or a custom handler that has the certain interface. The handler takes the same parameters as cvError function. If the handler returns non-zero value, the program is terminated, otherwise, it continues. The error handler may check the current error mode with cvGetErrMode to make a decision. + + The new error handler + Arbitrary pointer that is transparently passed to the error handler. + Pointer to the previously assigned user data pointer. + + + + + Sets a new error handler that can be one of standard handlers or a custom handler that has the certain interface. The handler takes the same parameters as cvError function. If the handler returns non-zero value, the program is terminated, otherwise, it continues. The error handler may check the current error mode with cvGetErrMode to make a decision. + + Pointer to the new error handler + Arbitrary pointer that is transparently passed to the error handler. + Pointer to the previously assigned user data pointer. + + + + + Sets the specified error mode. + + The error mode + + + + + Returns the current error mode + + + + + + Returns the current error status - the value set with the last cvSetErrStatus call. Note, that in Leaf mode the program terminates immediately after error occurred, so to always get control after the function call, one should call cvSetErrMode and set Parent or Silent error mode. + + the current error status + + + + Sets the error status to the specified value. Mostly, the function is used to reset the error status (set to it CV_StsOk) to recover after error. In other cases it is more natural to call cvError or CV_ERROR. + + The error status. + + + + Returns the textual description for the specified error status code. In case of unknown status the function returns NULL pointer. + + The error status + the textual description for the specified error status code. + + + + initializes CvMat header so that it points to the same data as the original array but has different shape - different number of channels, different number of rows or both + + Input array + Output header to be filled + New number of channels. new_cn = 0 means that number of channels remains unchanged + New number of rows. new_rows = 0 means that number of rows remains unchanged unless it needs to be changed according to new_cn value. destination array to be changed + + + + + Fills the destination array with source array tiled: + dst(i,j)=src(i mod rows(src), j mod cols(src))So the destination array may be as larger as well as smaller than the source array + + Source array, image or matrix + Destination array, image or matrix + Flag to specify how many times the src is repeated along the vertical axis. + Flag to specify how many times the src is repeated along the horizontal axis. + + + + This function is the opposite to cvSplit. If the destination array has N channels then if the first N input channels are not IntPtr.Zero, all they are copied to the destination array, otherwise if only a single source channel of the first N is not IntPtr.Zero, this particular channel is copied into the destination array, otherwise an error is raised. Rest of source channels (beyond the first N) must always be IntPtr.Zero. For IplImage cvCopy with COI set can be also used to insert a single channel into the image. + + Input vector of matrices to be merged; all the matrices in mv must have the same size and the same depth. + output array of the same size and the same depth as mv[0]; The number of channels will be the total number of channels in the matrix array. + + + + The function cvMixChannels is a generalized form of cvSplit and cvMerge and some forms of cvCvtColor. It can be used to change the order of the planes, add/remove alpha channel, extract or insert a single plane or multiple planes etc. + + The array of input arrays. + The array of output arrays + The array of pairs of indices of the planes copied. from_to[k*2] is the 0-based index of the input plane, and from_to[k*2+1] is the index of the output plane, where the continuous numbering of the planes over all the input and over all the output arrays is used. When from_to[k*2] is negative, the corresponding output plane is filled with 0's. + Unlike many other new-style C++ functions in OpenCV, mixChannels requires the output arrays to be pre-allocated before calling the function. + + + + Extract the specific channel from the image + + The source image + The channel + 0 based index of the channel to be extracted + + + + Insert the specific channel to the image + + The source channel + The destination image where the channel will be inserted into + 0-based index of the channel to be inserted + + + + Shuffles the matrix by swapping randomly chosen pairs of the matrix elements on each iteration (where each element may contain several components in case of multi-channel arrays) + + The input/output matrix. It is shuffled in-place. + Pointer to MCvRNG random number generator. Use 0 if not sure + The relative parameter that characterizes intensity of the shuffling performed. The number of iterations (i.e. pairs swapped) is round(iter_factor*rows(mat)*cols(mat)), so iter_factor=0 means that no shuffling is done, iter_factor=1 means that the function swaps rows(mat)*cols(mat) random pairs etc + + + + Inverses every bit of every array element: + + The source array + The destination array + The optional mask for the operation, use null to ignore + + + + Calculates per-element maximum of two arrays: + dst(I)=max(src1(I), src2(I)) + All the arrays must have a single channel, the same data type and the same size (or ROI size). + + The first source array + The second source array. + The destination array + + + + Returns the number of non-zero elements in arr: + result = sumI arr(I)!=0 + In case of IplImage both ROI and COI are supported. + + The image + the number of non-zero elements in image + + + + Find the location of the non-zero pixel + + The source array + The output array where the location of the pixels are sorted + + + + Computes PSNR image/video quality metric + + The first source image + The second source image + the quality metric + + + + Calculates per-element minimum of two arrays: + dst(I)=min(src1(I),src2(I)) + All the arrays must have a single channel, the same data type and the same size (or ROI size). + + The first source array + The second source array + The destination array + + + + Adds one array to another one: + dst(I)=src1(I)+src2(I) if mask(I)!=0All the arrays must have the same type, except the mask, and the same size (or ROI size) + + The first source array. + The second source array. + The destination array. + Operation mask, 8-bit single channel array; specifies elements of destination array to be changed. + Optional depth type of the output array + + + + Subtracts one array from another one: + dst(I)=src1(I)-src2(I) if mask(I)!=0 + All the arrays must have the same type, except the mask, and the same size (or ROI size) + + The first source array + The second source array + The destination array + Operation mask, 8-bit single channel array; specifies elements of destination array to be changed + Optional depth of the output array + + + + Divides one array by another: + dst(I)=scale * src1(I)/src2(I), if src1!=IntPtr.Zero; + dst(I)=scale/src2(I), if src1==IntPtr.Zero; + All the arrays must have the same type, and the same size (or ROI size) + + The first source array. If the pointer is IntPtr.Zero, the array is assumed to be all 1s. + The second source array + The destination array + Optional scale factor + Optional depth of the output array + + + + Calculates per-element product of two arrays: + dst(I)=scale*src1(I)*src2(I) + All the arrays must have the same type, and the same size (or ROI size) + + The first source array. + The second source array + The destination array + Optional scale factor + Optional depth of the output array + + + + Calculates per-element bit-wise logical conjunction of two arrays: + dst(I)=src1(I) & src2(I) if mask(I)!=0 + In the case of floating-point arrays their bit representations are used for the operation. All the arrays must have the same type, except the mask, and the same size + + The first source array + The second source array + The destination array + Operation mask, 8-bit single channel array; specifies elements of destination array to be changed + + + + Calculates per-element bit-wise disjunction of two arrays: + dst(I)=src1(I)|src2(I) + In the case of floating-point arrays their bit representations are used for the operation. All the arrays must have the same type, except the mask, and the same size + + The first source array + The second source array + The destination array + Operation mask, 8-bit single channel array; specifies elements of destination array to be changed + + + + Calculates per-element bit-wise logical conjunction of two arrays: + dst(I)=src1(I)^src2(I) if mask(I)!=0 + In the case of floating-point arrays their bit representations are used for the operation. All the arrays must have the same type, except the mask, and the same size + + The first source array + The second source array + The destination array + Mask, 8-bit single channel array; specifies elements of destination array to be changed. + + + + Copies selected elements from input array to output array: + dst(I)=src(I) if mask(I)!=0. + If any of the passed arrays is of IplImage type, then its ROI and COI fields are used. Both arrays must have the same type, the same number of dimensions and the same size. The function can also copy sparse arrays (mask is not supported in this case). + + The source array + The destination array + Operation mask, 8-bit single channel array; specifies elements of destination array to be changed + + + + Initializes scaled identity matrix: + arr(i,j)=value if i=j, + 0 otherwise + + The matrix to initialize (not necessarily square). + The value to assign to the diagonal elements. + + + + Initializes the matrix as following: + arr(i,j)=(end-start)*(i*cols(arr)+j)/(cols(arr)*rows(arr)) + + The matrix to initialize. It should be single-channel 32-bit, integer or floating-point + The lower inclusive boundary of the range + The upper exclusive boundary of the range + + + + Calculates either magnitude, angle, or both of every 2d vector (x(I),y(I)): + magnitude(I)=sqrt( x(I)2+y(I)2 ), + angle(I)=atan( y(I)/x(I) ) + The angles are calculated with ~0.1 degree accuracy. For (0,0) point the angle is set to 0 + + The array of x-coordinates + The array of y-coordinates + The destination array of magnitudes, may be set to IntPtr.Zero if it is not needed + The destination array of angles, may be set to IntPtr.Zero if it is not needed. The angles are measured in radians (0..2?) or in degrees (0..360?). + The flag indicating whether the angles are measured in radians or in degrees + + + + Calculates either x-coordinate, y-coordinate or both of every vector magnitude(I)* exp(angle(I)*j), j=sqrt(-1): + x(I)=magnitude(I)*cos(angle(I)), + y(I)=magnitude(I)*sin(angle(I)) + + Input floating-point array of magnitudes of 2D vectors; it can be an empty matrix (=Mat()), in this case, the function assumes that all the magnitudes are =1; if it is not empty, it must have the same size and type as angle + input floating-point array of angles of 2D vectors. + Output array of x-coordinates of 2D vectors; it has the same size and type as angle. + Output array of y-coordinates of 2D vectors; it has the same size and type as angle. + The flag indicating whether the angles are measured in radians or in degrees + + + + Raises every element of input array to p: + dst(I)=src(I)p, if p is integer + dst(I)=abs(src(I))p, otherwise + That is, for non-integer power exponent the absolute values of input array elements are used. However, it is possible to get true values for negative values using some extra operations, as the following sample, computing cube root of array elements, shows: + CvSize size = cvGetSize(src); + CvMat* mask = cvCreateMat( size.height, size.width, CV_8UC1 ); + cvCmpS( src, 0, mask, CV_CMP_LT ); /* find negative elements */ + cvPow( src, dst, 1./3 ); + cvSubRS( dst, cvScalarAll(0), dst, mask ); /* negate the results of negative inputs */ + cvReleaseMat( &mask ); + For some values of power, such as integer values, 0.5 and -0.5, specialized faster algorithms are used. + + The source array + The destination array, should be the same type as the source + The exponent of power + + + + Calculates exponent of every element of input array: + dst(I)=exp(src(I)) + Maximum relative error is 7e-6. Currently, the function converts denormalized values to zeros on output + + The source array + The destination array, it should have double type or the same type as the source + + + + Calculates natural logarithm of absolute value of every element of input array: + dst(I)=log(abs(src(I))), src(I)!=0 + dst(I)=C, src(I)=0 + Where C is large negative number (-700 in the current implementation) + + The source array + The destination array, it should have double type or the same type as the source + + + + finds real roots of a cubic equation: + coeffs[0]*x^3 + coeffs[1]*x^2 + coeffs[2]*x + coeffs[3] = 0 + (if coeffs is 4-element vector) + or + x^3 + coeffs[0]*x^2 + coeffs[1]*x + coeffs[2] = 0 + (if coeffs is 3-element vector) + + The equation coefficients, array of 3 or 4 elements + The output array of real roots. Should have 3 elements. Padded with zeros if there is only one root + the number of real roots found + + + + Finds all real and complex roots of any degree polynomial with real coefficients + + The (degree + 1)-length array of equation coefficients (CV_32FC1 or CV_64FC1) + The degree-length output array of real or complex roots (CV_32FC2 or CV_64FC2) + The maximum number of iterations + + + + Solves linear system (src1)*(dst) = (src2) + + The source matrix in the LHS + The source matrix in the RHS + The result + The method for solving the equation + 0 if src1 is a singular and CV_LU method is used + + + + Performs forward or inverse transform of 1D or 2D floating-point array + In case of real (single-channel) data, the packed format, borrowed from IPL, is used to to represent a result of forward Fourier transform or input for inverse Fourier transform + + Source array, real or complex + Destination array of the same size and same type as the source + Transformation flags + Number of nonzero rows to in the source array (in case of forward 2d transform), or a number of rows of interest in the destination array (in case of inverse 2d transform). If the value is negative, zero, or greater than the total number of rows, it is ignored. The parameter can be used to speed up 2d convolution/correlation when computing them via DFT. See the sample below + + + + Returns the minimum number N that is greater to equal to size0, such that DFT of a vector of size N can be computed fast. In the current implementation N=2^p x 3^q x 5^r for some p, q, r. + + Vector size + The minimum number N that is greater to equal to size0, such that DFT of a vector of size N can be computed fast. In the current implementation N=2^p x 3^q x 5^r for some p, q, r. + + + + Performs per-element multiplication of the two CCS-packed or complex matrices that are results of real or complex Fourier transform. + + The first source array + The second source array + The destination array of the same type and the same size of the sources + Operation flags; currently, the only supported flag is DFT_ROWS, which indicates that each row of src1 and src2 is an independent 1D Fourier spectrum. + Optional flag that conjugates the second input array before the multiplication (true) or not (false). + + + + Performs forward or inverse transform of 1D or 2D floating-point array + + Source array, real 1D or 2D array + Destination array of the same size and same type as the source + Transformation flags + + + + Calculates a part of the line segment which is entirely in the rectangle. + + The rectangle + First ending point of the line segment. It is modified by the function + Second ending point of the line segment. It is modified by the function. + It returns false if the line segment is completely outside the rectangle and true otherwise. + + + + Calculates absolute difference between two arrays. + dst(I)c = abs(src1(I)c - src2(I)c). + All the arrays must have the same data type and the same size (or ROI size) + + The first source array + The second source array + The destination array + + + + Calculated weighted sum of two arrays as following: + dst(I)=src1(I)*alpha+src2(I)*beta+gamma + All the arrays must have the same type and the same size (or ROI size) + + The first source array. + Weight of the first array elements. + The second source array. + Weight of the second array elements. + Scalar, added to each sum. + The destination array. + Optional depth of the output array; when both input arrays have the same depth + + + + Performs range check for every element of the input array: + dst(I)=lower(I)_0 <= src(I)_0 <= upper(I)_0 + For single-channel arrays, + dst(I)=lower(I)_0 <= src(I)_0 <= upper(I)_0 && + lower(I)_1 <= src(I)_1 <= upper(I)_1 + For two-channel arrays etc. + dst(I) is set to 0xff (all '1'-bits) if src(I) is within the range and 0 otherwise. All the arrays must have the same type, except the destination, and the same size (or ROI size) + + The source image + The lower values stored in an image of same type & size as + The upper values stored in an image of same type & size as + The resulting mask + + + + Returns the calculated norm. The multiple-channel array are treated as single-channel, that is, the results for all channels are combined. + + The first source image + The second source image. If it is null, the absolute norm of arr1 is calculated, otherwise absolute or relative norm of arr1-arr2 is calculated + Type of norm + The optional operation mask + The calculated norm + + + + Returns the calculated norm. The multiple-channel array are treated as single-channel, that is, the results for all channels are combined. + + The first source image + Type of norm + The optional operation mask + The calculated norm + + + + Creates the header and allocates data. + + Image width and height. + Bit depth of image elements + + Number of channels per element(pixel). Can be 1, 2, 3 or 4. The channels are interleaved, for example the usual data layout of a color image is: + b0 g0 r0 b1 g1 r1 ... + + A pointer to IplImage + + + + Allocates, initializes, and returns the structure IplImage. + + Image width and height. + Bit depth of image elements + + Number of channels per element(pixel). Can be 1, 2, 3 or 4. The channels are interleaved, for example the usual data layout of a color image is: + b0 g0 r0 b1 g1 r1 ... + + The structure IplImage + + + + Initializes the image header structure, pointer to which is passed by the user, and returns the pointer. + + Image header to initialize. + Image width and height. + Image depth + Number of channels + IPL_ORIGIN_TL or IPL_ORIGIN_BL. + Alignment for image rows, typically 4 or 8 bytes. + + + + + Assigns user data to the array header. + + Array header. + User data. + Full row length in bytes. + + + + Releases the header. + + Pointer to the deallocated header. + + + + Initializes already allocated CvMat structure. It can be used to process raw data with OpenCV matrix functions. + + Pointer to the matrix header to be initialized. + Number of rows in the matrix. + Number of columns in the matrix. + Type of the matrix elements. + Optional data pointer assigned to the matrix header + Full row width in bytes of the data assigned. By default, the minimal possible step is used, i.e., no gaps is assumed between subsequent rows of the matrix. + + + + + Sets the channel of interest to a given value. Value 0 means that all channels are selected, 1 means that the first channel is selected etc. If ROI is NULL and coi != 0, ROI is allocated. + + Image header + Channel of interest starting from 1. If 0, the COI is unset. + + + + Returns channel of interest of the image (it returns 0 if all the channels are selected). + + Image header. + channel of interest of the image (it returns 0 if all the channels are selected) + + + + Releases image ROI. After that the whole image is considered selected. + + Image header + + + + Sets the image ROI to a given rectangle. If ROI is NULL and the value of the parameter rect is not equal to the whole image, ROI is allocated. + + Image header. + ROI rectangle. + + + + Returns channel of interest of the image (it returns 0 if all the channels are selected). + + Image header. + channel of interest of the image (it returns 0 if all the channels are selected) + + + + Allocates header for the new matrix and underlying data, and returns a pointer to the created matrix. Matrices are stored row by row. All the rows are aligned by 4 bytes. + + Number of rows in the matrix. + Number of columns in the matrix. + Type of the matrix elements. + A pointer to the created matrix + + + + Initializes CvMatND structure allocated by the user + + Pointer to the array header to be initialized + Number of array dimensions + Array of dimension sizes + Type of array elements + Optional data pointer assigned to the matrix header + Pointer to the array header + + + + Decrements the matrix data reference counter and releases matrix header + + Double pointer to the matrix. + + + + The function allocates a multi-dimensional sparse array. Initially the array contain no elements, that is Get or GetReal returns zero for every index + + Number of array dimensions + Array of dimension sizes + Type of array elements + Pointer to the array header + + + + The function releases the sparse array and clears the array pointer upon exit. + + Reference of the pointer to the array + + + + Assign the new value to the particular element of single-channel array + + Input array + The first zero-based component of the element index + The assigned value + + + + Assign the new value to the particular element of single-channel array + + Input array + The first zero-based component of the element index + The second zero-based component of the element index + The assigned value + + + + Assign the new value to the particular element of single-channel array + + Input array + The first zero-based component of the element index + The second zero-based component of the element index + The third zero-based component of the element index + The assigned value + + + + Assign the new value to the particular element of single-channel array + + Input array + Array of the element indices + The assigned value + + + + Clears (sets to zero) the particular element of dense array or deletes the element of sparse array. If the element does not exists, the function does nothing + + Input array + Array of the element indices + + + + Assign the new value to the particular element of array + + Input array. + The first zero-based component of the element index + The second zero-based component of the element index + The assigned value + + + + Flips the array in one of different 3 ways (row and column indices are 0-based) + + Source array. + Destination array. + Specifies how to flip the array. + + + + Returns header, corresponding to a specified rectangle of the input array. In other words, it allows the user to treat a rectangular part of input array as a stand-alone array. ROI is taken into account by the function so the sub-array of ROI is actually extracted. + + Input array + Pointer to the resultant sub-array header. + Zero-based coordinates of the rectangle of interest. + the resultant sub-array header + + + + Return the header, corresponding to a specified row span of the input array + + Input array + Pointer to the prelocated memory of resulting sub-array header + Zero-based index of the starting row (inclusive) of the span + Zero-based index of the ending row (exclusive) of the span + Index step in the row span. That is, the function extracts every delta_row-th row from start_row and up to (but not including) end_row + The header, corresponding to a specified row span of the input array + + + + Return the header, corresponding to a specified row of the input array + + Input array + Pointer to the prelocate memory of the resulting sub-array header + Zero-based index of the selected row + The header, corresponding to a specified row of the input array + + + + Return the header, corresponding to a specified col span of the input array + + Input array + Pointer to the prelocated memory of the resulting sub-array header + Zero-based index of the selected column + Zero-based index of the ending column (exclusive) of the span + The header, corresponding to a specified col span of the input array + + + + Return the header, corresponding to a specified column of the input array + + Input array + Pointer to the prelocate memory of the resulting sub-array header + Zero-based index of the selected column + The header, corresponding to a specified column of the input array + + + + returns the header, corresponding to a specified diagonal of the input array + + Input array + Pointer to the resulting sub-array header + Array diagonal. Zero corresponds to the main diagonal, -1 corresponds to the diagonal above the main etc., 1 corresponds to the diagonal below the main etc + Pointer to the resulting sub-array header + + + + Returns number of rows (CvSize::height) and number of columns (CvSize::width) of the input matrix or image. In case of image the size of ROI is returned. + + array header + number of rows (CvSize::height) and number of columns (CvSize::width) of the input matrix or image. In case of image the size of ROI is returned. + + + + Draws a simple or filled circle with given center and radius. The circle is clipped by ROI rectangle. + + Image where the circle is drawn + Center of the circle + Radius of the circle. + Color of the circle + Thickness of the circle outline if positive, otherwise indicates that a filled circle has to be drawn + Line type + Number of fractional bits in the center coordinates and radius value + + + + Divides a multi-channel array into separate single-channel arrays. Two modes are available for the operation. If the source array has N channels then if the first N destination channels are not IntPtr.Zero, all they are extracted from the source array, otherwise if only a single destination channel of the first N is not IntPtr.Zero, this particular channel is extracted, otherwise an error is raised. Rest of destination channels (beyond the first N) must always be IntPtr.Zero. For IplImage cvCopy with COI set can be also used to extract a single channel from the image + + Input multi-channel array + Output array or vector of arrays + + + + Draws a simple or thick elliptic arc or fills an ellipse sector. The arc is clipped by ROI rectangle. A piecewise-linear approximation is used for antialiased arcs and thick arcs. All the angles are given in degrees. + + Image + Center of the ellipse + Length of the ellipse axes + Rotation angle + Starting angle of the elliptic arc + Ending angle of the elliptic arc + Ellipse color + Thickness of the ellipse arc + Type of the ellipse boundary + Number of fractional bits in the center coordinates and axes' values + + + + Draws a simple or thick elliptic arc or fills an ellipse sector. The arc is clipped by ROI rectangle. A piecewise-linear approximation is used for antialiased arcs and thick arcs. All the angles are given in degrees. + + Image + The box the define the ellipse area + Ellipse color + Thickness of the ellipse arc + Type of the ellipse boundary + Number of fractional bits in the center coordinates and axes' values + + + + Fills the destination array with values from the look-up table. Indices of the entries are taken from the source array. That is, the function processes each element of src as following: + dst(I)=lut[src(I)+DELTA] + where DELTA=0 if src has depth CV_8U, and DELTA=128 if src has depth CV_8S + + Source array of 8-bit elements + Destination array of arbitrary depth and of the same number of channels as the source array + Look-up table of 256 elements; should have the same depth as the destination array. In case of multi-channel source and destination arrays, the table should either have a single-channel (in this case the same table is used for all channels), or the same number of channels as the source/destination array + + + + This function has several different purposes and thus has several synonyms. It copies one array to another with optional scaling, which is performed first, and/or optional type conversion, performed after: + dst(I)=src(I)*scale + (shift,shift,...) + All the channels of multi-channel arrays are processed independently. + The type conversion is done with rounding and saturation, that is if a result of scaling + conversion can not be represented exactly by a value of destination array element type, it is set to the nearest representable value on the real axis. + In case of scale=1, shift=0 no prescaling is done. This is a specially optimized case and it has the appropriate cvConvert synonym. If source and destination array types have equal types, this is also a special case that can be used to scale and shift a matrix or an image and that fits to cvScale synonym. + + Source array + Destination array + Scale factor + Value added to the scaled source array elements + + + + Similar to cvCvtScale but it stores absolute values of the conversion results: + dst(I)=abs(src(I)*scale + (shift,shift,...)) + The function supports only destination arrays of 8u (8-bit unsigned integers) type, for other types the function can be emulated by combination of cvConvertScale and cvAbs functions. + + Source array + Destination array (should have 8u depth). + ScaleAbs factor + Value added to the scaled source array elements + + + + Calculates the average value M of array elements, independently for each channel: + N = sumI mask(I)!=0 + Mc = 1/N * sumI,mask(I)!=0 arr(I)c + If the array is IplImage and COI is set, the function processes the selected channel only and stores the average to the first scalar component (S0). + + The array + The optional operation mask + average (mean) of array elements + + + + The function cvAvgSdv calculates the average value and standard deviation of array elements, independently for each channel + + If the array is IplImage and COI is set, the function processes the selected channel only and stores the average and standard deviation to the first compoenents of output scalars (M0 and S0). + The array + Pointer to the mean value + Pointer to the standard deviation + The optional operation mask + + + + Calculates a mean and standard deviation of array elements. + + Input array that should have from 1 to 4 channels so that the results can be stored in MCvScalar + Calculated mean value + Calculated standard deviation + Optional operation mask + + + + Calculates sum S of array elements, independently for each channel + Sc = sumI arr(I)c + If the array is IplImage and COI is set, the function processes the selected channel only and stores the sum to the first scalar component (S0). + + The array + The sum of array elements + + + + Reduces matrix to a vector by treating the matrix rows/columns as a set of 1D vectors and performing the specified operation on the vectors until a single row/column is obtained. + + + The function can be used to compute horizontal and vertical projections of an raster image. + In case of CV_REDUCE_SUM and CV_REDUCE_AVG the output may have a larger element bit-depth to preserve accuracy. + And multi-channel arrays are also supported in these two reduction modes + + The input matrix + The output single-row/single-column vector that accumulates somehow all the matrix rows/columns + The dimension index along which the matrix is reduce. + The reduction operation type + Optional depth type of the output array + + + + Releases the header and the image data. + + Double pointer to the header of the deallocated image + + + + Draws contours outlines or filled contours. + + Image where the contours are to be drawn. Like in any other drawing function, the contours are clipped with the ROI + All the input contours. Each contour is stored as a point vector. + Parameter indicating a contour to draw. If it is negative, all the contours are drawn. + Color of the contours + Maximal level for drawn contours. If 0, only contour is drawn. If 1, the contour and all contours after it on the same level are drawn. If 2, all contours after and all contours one level below the contours are drawn, etc. If the value is negative, the function does not draw the contours following after contour but draws child contours of contour up to abs(maxLevel)-1 level. + Thickness of lines the contours are drawn with. If it is negative the contour interiors are drawn + Type of the contour segments + Optional information about hierarchy. It is only needed if you want to draw only some of the contours + Shift all the point coordinates by the specified value. It is useful in case if the contours retrieved in some image ROI and then the ROI offset needs to be taken into account during the rendering. + + + + Fills convex polygon interior. This function is much faster than The function cvFillPoly and can fill not only the convex polygons but any monotonic polygon, i.e. a polygon whose contour intersects every horizontal line (scan line) twice at the most + + Image + Array of pointers to a single polygon + Polygon color + Type of the polygon boundaries + Number of fractional bits in the vertex coordinates + + + + Fills the area bounded by one or more polygons. + + Image. + Array of polygons where each polygon is represented as an array of points. + Polygon color + Type of the polygon boundaries. + Number of fractional bits in the vertex coordinates. + Optional offset of all points of the contours. + + + + Renders the text in the image with the specified font and color. The printed text is clipped by ROI rectangle. Symbols that do not belong to the specified font are replaced with the rectangle symbol. + + Input image + String to print + Coordinates of the bottom-left corner of the first letter + Font type. + Font scale factor that is multiplied by the font-specific base size. + Text color + Thickness of the lines used to draw a text. + Line type + When true, the image data origin is at the bottom-left corner. Otherwise, it is at the top-left corner. + + + + Finds minimum and maximum element values and their positions. The extremums are searched over the whole array, selected ROI (in case of IplImage) or, if mask is not IntPtr.Zero, in the specified array region. If the array has more than one channel, it must be IplImage with COI set. In case if multi-dimensional arrays min_loc->x and max_loc->x will contain raw (linear) positions of the extremums + + The source array, single-channel or multi-channel with COI set + Pointer to returned minimum value + Pointer to returned maximum value + Pointer to returned minimum location + Pointer to returned maximum location + The optional mask that is used to select a subarray. Use IntPtr.Zero if not needed + + + + Copies the source 2D array into interior of destination array and makes a border of the specified type around the copied area. The function is useful when one needs to emulate border type that is different from the one embedded into a specific algorithm implementation. For example, morphological functions, as well as most of other filtering functions in OpenCV, internally use replication border type, while the user may need zero border or a border, filled with 1's or 255's + + The source image + The destination image + Type of the border to create around the copied source image rectangle + Value of the border pixels if bordertype=CONSTANT + Parameter specifying how many pixels in each direction from the source image rectangle to extrapolate. + Parameter specifying how many pixels in each direction from the source image rectangle to extrapolate. + Parameter specifying how many pixels in each direction from the source image rectangle to extrapolate. + Parameter specifying how many pixels in each direction from the source image rectangle to extrapolate. + + + + Return the particular array element + + Input array. Must have a single channel + The first zero-based component of the element index + the particular array element + + + + Return the particular array element + + Input array. Must have a single channel + The first zero-based component of the element index + The second zero-based component of the element index + the particular array element + + + + Return the particular array element + + Input array. Must have a single channel + The first zero-based component of the element index + The second zero-based component of the element index + The third zero-based component of the element index + the particular array element + + + + Return the particular element of single-channel array. If the array has multiple channels, runtime error is raised. Note that cvGet*D function can be used safely for both single-channel and multiple-channel arrays though they are a bit slower. + + Input array. Must have a single channel + The first zero-based component of the element index + the particular element of single-channel array + + + + Return the particular element of single-channel array. If the array has multiple channels, runtime error is raised. Note that cvGet*D function can be used safely for both single-channel and multiple-channel arrays though they are a bit slower. + + Input array. Must have a single channel + The first zero-based component of the element index + The second zero-based component of the element index + the particular element of single-channel array + + + + Return the particular element of single-channel array. If the array has multiple channels, runtime error is raised. Note that cvGet*D function can be used safely for both single-channel and multiple-channel arrays though they are a bit slower. + + Input array. Must have a single channel + The first zero-based component of the element index + The second zero-based component of the element index + The third zero-based component of the element index + the particular element of single-channel array + + + + Fills the array with normally distributed random numbers. + + Output array of random numbers; the array must be pre-allocated and have 1 to 4 channels. + Mean value (expectation) of the generated random numbers. + Standard deviation of the generated random numbers; it can be either a vector (in which case a diagonal standard deviation matrix is assumed) or a square matrix. + + + + Fills the array with normally distributed random numbers. + + Output array of random numbers; the array must be pre-allocated and have 1 to 4 channels. + Mean value (expectation) of the generated random numbers. + Standard deviation of the generated random numbers; it can be either a vector (in which case a diagonal standard deviation matrix is assumed) or a square matrix. + + + + Generates a single uniformly-distributed random number or an array of random numbers. + + Output array of random numbers; the array must be pre-allocated. + Inclusive lower boundary of the generated random numbers. + Exclusive upper boundary of the generated random numbers. + + + + Generates a single uniformly-distributed random number or an array of random numbers. + + Output array of random numbers; the array must be pre-allocated. + Inclusive lower boundary of the generated random numbers. + Exclusive upper boundary of the generated random numbers. + + + + Computes eigenvalues and eigenvectors of a symmetric matrix + + The input symmetric square matrix, modified during the processing + The output matrix of eigenvectors, stored as subsequent rows + The output vector of eigenvalues, stored in the descending order (order of eigenvalues and eigenvectors is syncronized, of course) + Currently the function is slower than cvSVD yet less accurate, so if A is known to be positivelydefined (for example, it is a covariance matrix)it is recommended to use cvSVD to find eigenvalues and eigenvectors of A, especially if eigenvectors are not required. + To calculate the largest eigenvector/-value set lowindex = highindex = 1. For legacy reasons this function always returns a square matrix the same size as the source matrix with eigenvectors and a vector the length of the source matrix with eigenvalues. The selected eigenvectors/-values are always in the first highindex - lowindex + 1 rows. + + + + normalizes the input array so that it's norm or value range takes the certain value(s). + + The input array + The output array; in-place operation is supported + The minimum/maximum value of the output array or the norm of output array + The maximum/minimum value of the output array + The normalization type + The operation mask. Makes the function consider and normalize only certain array elements + Optional depth type for the dst array + + + + Performs generalized matrix multiplication: + dst = alpha*op(src1)*op(src2) + beta*op(src3), where op(X) is X or XT + + The first source array. + The second source array. + The scalar + The third source array (shift). Can be null, if there is no shift. + The scalar + The destination array. + The Gemm operation type + + + + Performs matrix transformation of every element of array src and stores the results in dst + Both source and destination arrays should have the same depth and the same size or selected ROI size. transmat and shiftvec should be real floating-point matrices. + + The first source array + The destination array + transformation 2x2 or 2x3 floating-point matrix. + + + + Transforms every element of src in the following way: + (x, y) -> (x'/w, y'/w), + where + (x', y', w') = mat3x3 * (x, y, 1) + and w = w' if w'!=0, + inf otherwise + + The source points + 3x3 floating-point transformation matrix. + The destination points + + + + Transforms every element of src (by treating it as 2D or 3D vector) in the following way: + (x, y, z) -> (x'/w, y'/w, z'/w) or + (x, y) -> (x'/w, y'/w), + where + (x', y', z', w') = mat4x4 * (x, y, z, 1) or + (x', y', w') = mat3x3 * (x, y, 1) + and w = w' if w'!=0, + inf otherwise + + The source three-channel floating-point array + The destination three-channel floating-point array + 3x3 or 4x4 floating-point transformation matrix. + + + + Calculates the product of src and its transposition. + The function evaluates dst=scale(src-delta)*(src-delta)^T if order=0, and dst=scale(src-delta)^T*(src-delta) otherwise. + + The source matrix + The destination matrix + Order of multipliers + An optional array, subtracted from before multiplication + An optional scaling + Optional depth type of the output array + + + + Returns sum of diagonal elements of the matrix . + + the matrix + sum of diagonal elements of the matrix src1 + + + + Transposes matrix src1: + dst(i,j)=src(j,i) + Note that no complex conjugation is done in case of complex matrix. Conjugation should be done separately: look at the sample code in cvXorS for example + + The source matrix + The destination matrix + + + + Returns determinant of the square matrix mat. The direct method is used for small matrices and Gaussian elimination is used for larger matrices. For symmetric positive-determined matrices it is also possible to run SVD with U=V=NULL and then calculate determinant as a product of the diagonal elements of W + + The pointer to the matrix + determinant of the square matrix mat + + + + Inverts matrix src1 and stores the result in src2 + + The source matrix. + The destination matrix + Inversion method + + + + + Decomposes matrix A into a product of a diagonal matrix and two orthogonal matrices: + A=U*W*VT + Where W is diagonal matrix of singular values that can be coded as a 1D vector of singular values and U and V. All the singular values are non-negative and sorted (together with U and V columns) in descenting order. + + + SVD algorithm is numerically robust and its typical applications include: + 1. accurate eigenvalue problem solution when matrix A is square, symmetric and positively defined matrix, for example, when it is a covariation matrix. W in this case will be a vector of eigen values, and U=V is matrix of eigen vectors (thus, only one of U or V needs to be calculated if the eigen vectors are required) + 2. accurate solution of poor-conditioned linear systems + 3. least-squares solution of overdetermined linear systems. This and previous is done by cvSolve function with CV_SVD method + 4. accurate calculation of different matrix characteristics such as rank (number of non-zero singular values), condition number (ratio of the largest singular value to the smallest one), determinant (absolute value of determinant is equal to the product of singular values). All the things listed in this item do not require calculation of U and V matrices. + + Source MxN matrix + Resulting singular value matrix (MxN or NxN) or vector (Nx1). + Optional left orthogonal matrix (MxM or MxN). If CV_SVD_U_T is specified, the number of rows and columns in the sentence above should be swapped + Optional right orthogonal matrix (NxN) + Operation flags + + + + Performs a singular value back substitution. + + Singular values + Left singular vectors + Transposed matrix of right singular vectors. + Right-hand side of a linear system + Found solution of the system. + + + + Calculates the covariance matrix of a set of vectors. + + Samples stored either as separate matrices or as rows/columns of a single matrix. + Output covariance matrix of the type ctype and square size. + Input or output (depending on the flags) array as the average value of the input vectors. + Operation flags + Type of the matrix + + + + Calculates the weighted distance between two vectors and returns it + + The first 1D source vector + The second 1D source vector + The inverse covariation matrix + the Mahalanobis distance + + + + Performs Principal Component Analysis of the supplied dataset. + + Input samples stored as the matrix rows or as the matrix columns. + Optional mean value; if the matrix is empty, the mean is computed from the data. + The eigenvectors. + Maximum number of components that PCA should retain; by default, all the components are retained. + + + + Performs Principal Component Analysis of the supplied dataset. + + Input samples stored as the matrix rows or as the matrix columns. + Optional mean value; if the matrix is empty, the mean is computed from the data. + The eigenvectors. + Percentage of variance that PCA should retain. Using this parameter will let the PCA decided how many components to retain but it will always keep at least 2. + + + + Projects vector(s) to the principal component subspace. + + Input vector(s); must have the same dimensionality and the same layout as the input data used at PCA phase + The mean. + The eigenvectors. + The result. + + + + Reconstructs vectors from their PC projections. + + Coordinates of the vectors in the principal component subspace + The mean. + The eigenvectors. + The result. + + + + Fills output variables with low-level information about the array data. All output parameters are optional, so some of the pointers may be set to NULL. If the array is IplImage with ROI set, parameters of ROI are returned. + + Array header + Output pointer to the whole image origin or ROI origin if ROI is set + Output full row length in bytes + Output ROI size + + + + Returns matrix header for the input array that can be matrix - CvMat, image - IplImage or multi-dimensional dense array - CvMatND* (latter case is allowed only if allowND != 0) . In the case of matrix the function simply returns the input pointer. In the case of IplImage* or CvMatND* it initializes header structure with parameters of the current image ROI and returns pointer to this temporary structure. Because COI is not supported by CvMat, it is returned separately. + + Input array + Pointer to CvMat structure used as a temporary buffer + Optional output parameter for storing COI + If non-zero, the function accepts multi-dimensional dense arrays (CvMatND*) and returns 2D (if CvMatND has two dimensions) or 1D matrix (when CvMatND has 1 dimension or more than 2 dimensions). The array must be continuous + Returns matrix header for the input array + + + + Returns image header for the input array that can be matrix - CvMat*, or image - IplImage*. + + Input array. + Pointer to IplImage structure used as a temporary buffer. + Returns image header for the input array + + + + Checks that every array element is neither NaN nor Infinity. If CV_CHECK_RANGE is set, it also checks that every element is greater than or equal to minVal and less than maxVal. + + The array to check. + The operation flags, CHECK_NAN_INFINITY or combination of + CHECK_RANGE - if set, the function checks that every value of array is within [minVal,maxVal) range, otherwise it just checks that every element is neither NaN nor Infinity. + CHECK_QUIET - if set, the function does not raises an error if an element is invalid or out of range + + The inclusive lower boundary of valid values range. It is used only if CHECK_RANGE is set. + The exclusive upper boundary of valid values range. It is used only if CHECK_RANGE is set. + Returns nonzero if the check succeeded, i.e. all elements are valid and within the range, and zero otherwise. In the latter case if CV_CHECK_QUIET flag is not set, the function raises runtime error. + + + + Return the current number of threads that are used by parallelized (via OpenMP) OpenCV functions. + + the current number of threads that are used by parallelized (via OpenMP) OpenCV functions + + + + Sets the number of threads that are used by parallelized OpenCV functions. + + The number of threads that are used by parallelized OpenCV functions. When the argument is zero or negative, and at the beginning of the program, the number of threads is set to the number of processors in the system, as returned by the function omp_get_num_procs() from OpenMP runtime. + + + + Returns the index, from 0 to cvGetNumThreads()-1, of the thread that called the function. It is a wrapper for the function omp_get_thread_num() from OpenMP runtime. The retrieved index may be used to access local-thread data inside the parallelized code fragments. + + The index, from 0 to cvGetNumThreads()-1, of the thread that called the function. It is a wrapper for the function omp_get_thread_num() from OpenMP runtime. The retrieved index may be used to access local-thread data inside the parallelized code fragments. + + + + Compares the corresponding elements of two arrays and fills the destination mask array: + dst(I)=src1(I) op src2(I), + dst(I) is set to 0xff (all '1'-bits) if the particular relation between the elements is true and 0 otherwise. + All the arrays must have the same type, except the destination, and the same size (or ROI size) + + The first image to compare with + The second image to compare with + dst(I) is set to 0xff (all '1'-bits) if the particular relation between the elements is true and 0 otherwise. + The comparison operator type + + + + Converts CvMat, IplImage , or CvMatND to Mat. + + Input CvMat, IplImage , or CvMatND. + When true (default value), CvMatND is converted to 2-dimensional Mat, if it is possible (see the discussion below); if it is not possible, or when the parameter is false, the function will report an error + When false (default value), no data is copied and only the new header is created, in this case, the original array should not be deallocated while the new matrix header is used; if the parameter is true, all the data is copied and you may deallocate the original array right after the conversion. + Parameter specifying how the IplImage COI (when set) is handled. If coiMode=0 and COI is set, the function reports an error. If coiMode=1 , the function never reports an error. Instead, it returns the header to the whole original image and you will have to check and process COI manually. + The Mat header + + + + Horizontally concatenate two images + + The first image + The second image + The result image + + + + Vertically concatenate two images + + The first image + The second image + The result image + + + + Finishes OpenCL queue. + + + + + Get the OpenCL platform summary as a string + + An OpenCL platform summary + + + + Set the default opencl device + + The name of the opencl device + + + + Implements k-means algorithm that finds centers of cluster_count clusters and groups the input samples around the clusters. On output labels(i) contains a cluster index for sample stored in the i-th row of samples matrix + + Floating-point matrix of input samples, one row per sample + Output integer vector storing cluster indices for every sample + Specifies maximum number of iterations and/or accuracy (distance the centers move by between the subsequent iterations) + The number of attempts. Use 2 if not sure + Flags, use 0 if not sure + Pointer to array of centers, use IntPtr.Zero if not sure + Number of clusters to split the set by. + + + + The grab cut algorithm for segmentation + + The 8-bit 3-channel image to be segmented + Input/output 8-bit single-channel mask. The mask is initialized by the function + when mode is set to GC_INIT_WITH_RECT. Its elements may have one of following values: + 0 (GC_BGD) defines an obvious background pixels. + 1 (GC_FGD) defines an obvious foreground (object) pixel. + 2 (GC_PR_BGR) defines a possible background pixel. + 3 (GC_PR_FGD) defines a possible foreground pixel. + + The rectangle to initialize the segmentation + + Temporary array for the background model. Do not modify it while you are + processing the same image. + + + Temporary arrays for the foreground model. Do not modify it while you are + processing the same image. + + The number of iterations + The initialization type + + + + Calculate square root of each source array element. in the case of multichannel + arrays each channel is processed independently. The function accuracy is approximately + the same as of the built-in std::sqrt. + + The source floating-point array + The destination array; will have the same size and the same type as src + + + + Apply color map to the image + + + The source image. + This function expects Image<Bgr, Byte> or Image<Gray, Byte>. If the wrong image type is given, the original image + will be returned. + The destination image + The type of color map + + + + Check that every array element is neither NaN nor +- inf. The functions also check that each value + is between minVal and maxVal. in the case of multi-channel arrays each channel is processed + independently. If some values are out of range, position of the first outlier is stored in pos, + and then the functions either return false (when quiet=true) or throw an exception. + + The array to check + The flag indicating whether the functions quietly return false when the array elements are + out of range, or they throw an exception + This will be filled with the position of the first outlier + The inclusive lower boundary of valid values range + The exclusive upper boundary of valid values range + If quiet, return true if all values are in range + + + + Computes an optimal affine transformation between two 3D point sets. + + First input 3D point set. + Second input 3D point set. + Output 3D affine transformation matrix. + Output vector indicating which points are inliers. + Maximum reprojection error in the RANSAC algorithm to consider a point as an inlier. + Confidence level, between 0 and 1, for the estimated transformation. Anything between 0.95 and 0.99 is usually good enough. Values too close to 1 can slow down the estimation significantly. Values lower than 0.8-0.9 can result in an incorrectly estimated transformation. + + + + + Computes an optimal affine transformation between two 3D point sets. + + First input 3D point set. + Second input 3D point set. + Output 3D affine transformation matrix 3 x 4 + Output vector indicating which points are inliers. + Maximum reprojection error in the RANSAC algorithm to consider a point as an inlier. + Confidence level, between 0 and 1, for the estimated transformation. Anything between 0.95 and 0.99 is usually good enough. Values too close to 1 can slow down the estimation significantly. Values lower than 0.8-0.9 can result in an incorrectly estimated transformation. + + + + + Finds the global minimum and maximum in an array + + Input single-channel array. + The returned minimum value + The returned maximum value + The returned minimum location + The returned maximum location + The extremums are searched across the whole array if mask is IntPtr.Zert. Otherwise, search is performed in the specified array region. + + + + Applies arbitrary linear filter to the image. In-place operation is supported. When the aperture is partially outside the image, the function interpolates outlier pixel values from the nearest pixels that is inside the image + + The source image + The destination image + Convolution kernel, single-channel floating point matrix. If you want to apply different kernels to different channels, split the image using cvSplit into separate color planes and process them individually + The anchor of the kernel that indicates the relative position of a filtered point within the kernel. The anchor shoud lie within the kernel. The special default value (-1,-1) means that it is at the kernel center + The optional value added to the filtered pixels before storing them in dst + The pixel extrapolation method. + + + + Contrast Limited Adaptive Histogram Equalization (CLAHE) + + The source image + Clip Limit, use 40 for default + Tile grid size, use (8, 8) for default + The destination image + + + + This function retrieve the Open CV structure sizes in unmanaged code + + The structure that will hold the Open CV structure sizes + + + + Finds centers in the grid of circles + + Source chessboard view + The number of inner circle per chessboard row and column + Various operation flags + The feature detector. Use a SimpleBlobDetector for default + The center of circles detected if the chess board pattern is found, otherwise null is returned + + + + Finds centers in the grid of circles + + Source chessboard view + The number of inner circle per chessboard row and column + Various operation flags + The feature detector. Use a SimpleBlobDetector for default + output array of detected centers. + True if grid found. + + + + The List of the opencv modules + + + + + Creates a window which can be used as a placeholder for images and trackbars. Created windows are reffered by their names. + If the window with such a name already exists, the function does nothing. + + Name of the window which is used as window identifier and appears in the window caption + Flags of the window. + + + + Waits for key event infinitely (delay <= 0) or for "delay" milliseconds. + + Delay in milliseconds. + The code of the pressed key or -1 if no key were pressed until the specified timeout has elapsed + + + + Shows the image in the specified window + + Name of the window + Image to be shown + + + + Destroys the window with a given name + + Name of the window to be destroyed + + + + Destroys all of the HighGUI windows. + + + + + Loads an image from the specified file and returns the pointer to the loaded image. Currently the following file formats are supported: + Windows bitmaps - BMP, DIB; + JPEG files - JPEG, JPG, JPE; + Portable Network Graphics - PNG; + Portable image format - PBM, PGM, PPM; + Sun rasters - SR, RAS; + TIFF files - TIFF, TIF; + OpenEXR HDR images - EXR; + JPEG 2000 images - jp2. + + The name of the file to be loaded + The image loading type + The loaded image + + + + Saves the image to the specified file. The image format is chosen depending on the filename extension, see cvLoadImage. Only 8-bit single-channel or 3-channel (with 'BGR' channel order) images can be saved using this function. If the format, depth or channel order is different, use cvCvtScale and cvCvtColor to convert it before saving, or use universal cvSave to save the image to XML or YAML format + + The name of the file to be saved to + The image to be saved + The parameters + true if success + + + + Decode image stored in the buffer + + The buffer + The image loading type + The output placeholder for the decoded matrix. + + + + Decode image stored in the buffer + + The buffer + The image loading type + The output placeholder for the decoded matrix. + + + + encode image and store the result as a byte vector. + + The image format + The image + Output buffer resized to fit the compressed image. + The pointer to the array of intergers, which contains the parameter for encoding, use IntPtr.Zero for default + + + + Implements a particular case of application of line iterators. The function reads all the image points lying on the line between pt1 and pt2, including the ending points, and stores them into the buffer + + Image to sample the line from + Starting the line point. + Ending the line point + Buffer to store the line points; must have enough size to store max( |pt2.x-pt1.x|+1, |pt2.y-pt1.y|+1 ) points in case of 8-connected line and |pt2.x-pt1.x|+|pt2.y-pt1.y|+1 in case of 4-connected line + The line connectivity, 4 or 8 + + + + + Extracts pixels from src: + dst(x, y) = src(x + center.x - (width(dst)-1)*0.5, y + center.y - (height(dst)-1)*0.5) + where the values of pixels at non-integer coordinates are retrieved using bilinear interpolation. Every channel of multiple-channel images is processed independently. Whereas the rectangle center must be inside the image, the whole rectangle may be partially occluded. In this case, the replication border mode is used to get pixel values beyond the image boundaries. + + Source image + Size of the extracted patch. + Extracted rectangle + Depth of the extracted pixels. By default, they have the same depth as . + Floating point coordinates of the extracted rectangle center within the source image. The center must be inside the image. + + + + Resizes the image src down to or up to the specified size + + Source image. + Destination image + Output image size; if it equals zero, it is computed as: dsize=Size(round(fx*src.cols), round(fy * src.rows)). Either dsize or both fx and fy must be non-zero. + Scale factor along the horizontal axis + Scale factor along the vertical axis; + Interpolation method + + + + Applies an affine transformation to an image. + + Source image + Destination image + 2x3 transformation matrix + Size of the output image. + Interpolation method + Warp method + Pixel extrapolation method + A value used to fill outliers + + + + Calculates the matrix of an affine transform such that: + (x'_i,y'_i)^T=map_matrix (x_i,y_i,1)^T + where dst(i)=(x'_i,y'_i), src(i)=(x_i,y_i), i=0..2. + + Coordinates of 3 triangle vertices in the source image. If the array contains more than 3 points, only the first 3 will be used + Coordinates of the 3 corresponding triangle vertices in the destination image. If the array contains more than 3 points, only the first 3 will be used + The 2x3 rotation matrix that defines the Affine transform + + + + Calculates the matrix of an affine transform such that: + (x'_i,y'_i)^T=map_matrix (x_i,y_i,1)^T + where dst(i)=(x'_i,y'_i), src(i)=(x_i,y_i), i=0..2. + + Pointer to an array of PointF, Coordinates of 3 triangle vertices in the source image. + Pointer to an array of PointF, Coordinates of the 3 corresponding triangle vertices in the destination image + The destination 2x3 matrix + + + + Calculates rotation matrix + + Center of the rotation in the source image. + The rotation angle in degrees. Positive values mean couter-clockwise rotation (the coordiate origin is assumed at top-left corner). + Isotropic scale factor + Pointer to the destination 2x3 matrix + Pointer to the destination 2x3 matrix + + + + Applies a perspective transformation to an image + + Source image + Destination image + 3x3 transformation matrix + Size of the output image + Interpolation method + Warp method + Pixel extrapolation method + value used in case of a constant border + + + + calculates matrix of perspective transform such that: + (t_i x'_i,t_i y'_i,t_i)^T=map_matrix (x_i,y_i,1)T + where dst(i)=(x'_i,y'_i), src(i)=(x_i,y_i), i=0..3. + + Coordinates of 4 quadrangle vertices in the source image + Coordinates of the 4 corresponding quadrangle vertices in the destination image + The perspective transform matrix + + + + calculates matrix of perspective transform such that: + (t_i x'_i,t_i y'_i,t_i)^T=map_matrix (x_i,y_i,1)^T + where dst(i)=(x'_i,y'_i), src(i)=(x_i,y_i), i=0..3. + + Coordinates of 4 quadrangle vertices in the source image + Coordinates of the 4 corresponding quadrangle vertices in the destination image + The 3x3 Homography matrix + + + + Applies a generic geometrical transformation to an image. + + Source image + Destination image + The first map of either (x,y) points or just x values having the type CV_16SC2 , CV_32FC1 , or CV_32FC2 . See convertMaps() for details on converting a floating point representation to fixed-point for speed. + The second map of y values having the type CV_16UC1 , CV_32FC1 , or none (empty map if map1 is (x,y) points), respectively. + Interpolation method (see resize() ). The method 'Area' is not supported by this function. + Pixel extrapolation method + A value used to fill outliers + + + + Inverts an affine transformation + + Original affine transformation + Output reverse affine transformation. + + + + Returns the default new camera matrix. + + Input camera matrix. + Camera view image size in pixels. + Location of the principal point in the new camera matrix. The parameter indicates whether this location should be at the image center or not. + The default new camera matrix. + + + + The function emulates the human "foveal" vision and can be used for fast scale and rotation-invariant template matching, for object tracking etc. + + Source image + Destination image + The transformation center, where the output precision is maximal + Magnitude scale parameter + Interpolation method + warp method + + + + The function emulates the human "foveal" vision and can be used for fast scale and rotation-invariant template matching, for object tracking etc. + + Source image + Destination image + The transformation center, where the output precision is maximal + Maximum radius + Interpolation method + Warp method + + + + Performs downsampling step of Gaussian pyramid decomposition. First it convolves source image with the specified filter and then downsamples the image by rejecting even rows and columns. + + The source image. + The destination image, should have 2x smaller width and height than the source. + Border type + + + + Performs up-sampling step of Gaussian pyramid decomposition. First it upsamples the source image by injecting even zero rows and columns and then convolves result with the specified filter multiplied by 4 for interpolation. So the destination image is four times larger than the source image. + + The source image. + The destination image, should have 2x smaller width and height than the source. + Border type + + + + Implements one of the variants of watershed, non-parametric marker-based segmentation algorithm, described in [Meyer92] Before passing the image to the function, user has to outline roughly the desired regions in the image markers with positive (>0) indices, i.e. every region is represented as one or more connected components with the pixel values 1, 2, 3 etc. Those components will be "seeds" of the future image regions. All the other pixels in markers, which relation to the outlined regions is not known and should be defined by the algorithm, should be set to 0's. On the output of the function, each pixel in markers is set to one of values of the "seed" components, or to -1 at boundaries between the regions. + + Note, that it is not necessary that every two neighbor connected components are separated by a watershed boundary (-1's pixels), for example, in case when such tangent components exist in the initial marker image. + The input 8-bit 3-channel image + The input/output Int32 depth single-channel image (map) of markers. + + + + Finds minimum area rectangle that contains both input rectangles inside + + First rectangle + Second rectangle + The minimum area rectangle that contains both input rectangles inside + + + + Fits line to 2D or 3D point set + + Input vector of 2D or 3D points, stored in std::vector or Mat. + The distance used for fitting + Numerical parameter (C) for some types of distances, if 0 then some optimal value is chosen + Sufficient accuracy for radius (distance between the coordinate origin and the line), 0.01 would be a good default + Sufficient accuracy for angle, 0.01 would be a good default + Output line parameters. In case of 2D ?tting, it should be a vector of 4 elements (like Vec4f) - (vx, vy, x0, y0), where (vx, vy) is a normalized vector collinear to the line + and (x0, y0) is a point on the line. In case of 3D ?tting, it should be a vector of 6 elements + (like Vec6f) - (vx, vy, vz, x0, y0, z0), where (vx, vy, vz) is a normalized vector + collinear to the line and (x0, y0, z0) is a point on the line. + + + + + Fits line to 2D or 3D point set + + Input vector of 2D points. + The distance used for fitting + Numerical parameter (C) for some types of distances, if 0 then some optimal value is chosen + Sufficient accuracy for radius (distance between the coordinate origin and the line), 0.01 would be a good default + Sufficient accuracy for angle, 0.01 would be a good default + A normalized vector collinear to the line + A point on the line. + + + + Finds out if there is any intersection between two rotated rectangles. + + First rectangle + Second rectangle + The output array of the verticies of the intersecting region. It returns at most 8 vertices. Stored as VectorOfPointF or Mat as Mx1 of type CV_32FC2. + The intersect type + + + + Calculates vertices of the input 2d box. + + The box + The four vertices of rectangles. + + + + Calculates vertices of the input 2d box. + + The box + The output array of four vertices of rectangles. + + + + Fits an ellipse around a set of 2D points. + + Input 2D point set + The ellipse that fits best (in least-squares sense) to a set of 2D points + + + + Finds convex hull of 2D point set using Sklansky's algorithm + + The points to find convex hull from + Orientation flag. If it is true, the output convex hull is oriented clockwise. Otherwise, it is oriented counter-clockwise. The assumed coordinate system has its X axis pointing to the right, and its Y axis pointing upwards. + The convex hull of the points + + + + The function cvConvexHull2 finds convex hull of 2D point set using Sklansky's algorithm. + + Input 2D point set + Output convex hull. It is either an integer vector of indices or vector of points. In the first case, the hull elements are 0-based indices of the convex hull points in the original array (since the set of convex hull points is a subset of the original point set). In the second case, hull elements are the convex hull points themselves. + Orientation flag. If it is true, the output convex hull is oriented clockwise. Otherwise, it is oriented counter-clockwise. The assumed coordinate system has its X axis pointing to the right, and its Y axis pointing upwards. + Operation flag. In case of a matrix, when the flag is true, the function returns convex hull points. Otherwise, it returns indices of the convex hull points. When the output array is std::vector, the flag is ignored, and the output depends on the type of the vector + + + + The default morphology value. + + + + + Erodes the source image using the specified structuring element that determines the shape of a pixel neighborhood over which the minimum is taken: + dst=erode(src,element): dst(x,y)=min((x',y') in element)) src(x+x',y+y') + The function supports the in-place mode. Erosion can be applied several (iterations) times. In case of color image each channel is processed independently. + + Source image. + Destination image + Structuring element used for erosion. If it is IntPtr.Zero, a 3x3 rectangular structuring element is used. + Number of times erosion is applied. + Pixel extrapolation method + Border value in case of a constant border, use Constant for default + Position of the anchor within the element; default value (-1, -1) means that the anchor is at the element center. + + + + Dilates the source image using the specified structuring element that determines the shape of a pixel neighborhood over which the maximum is taken + The function supports the in-place mode. Dilation can be applied several (iterations) times. In case of color image each channel is processed independently + + Source image + Destination image + Structuring element used for erosion. If it is IntPtr.Zero, a 3x3 rectangular structuring element is used + Number of times erosion is applied + Pixel extrapolation method + Border value in case of a constant border + Position of the anchor within the element; default value (-1, -1) means that the anchor is at the element center. + + + + Blurs an image using a Gaussian filter. + + input image; the image can have any number of channels, which are processed independently, but the depth should be CV_8U, CV_16U, CV_16S, CV_32F or CV_64F. + output image of the same size and type as src. + Gaussian kernel size. ksize.width and ksize.height can differ but they both must be positive and odd. Or, they can be zero’s and then they are computed from sigma* . + Gaussian kernel standard deviation in X direction. + Gaussian kernel standard deviation in Y direction; if sigmaY is zero, it is set to be equal to sigmaX, if both sigmas are zeros, they are computed from ksize.width and ksize.height , respectively (see getGaussianKernel() for details); to fully control the result regardless of possible future modifications of all this semantics, it is recommended to specify all of ksize, sigmaX, and sigmaY. + Pixel extrapolation method + + + + Blurs an image using the normalized box filter. + + input image; it can have any number of channels, which are processed independently, but the depth should be CV_8U, CV_16U, CV_16S, CV_32F or CV_64F. + Output image of the same size and type as src. + Blurring kernel size. + Anchor point; default value Point(-1,-1) means that the anchor is at the kernel center. + Border mode used to extrapolate pixels outside of the image. + + + + Blurs an image using the median filter. + + Input 1-, 3-, or 4-channel image; when ksize is 3 or 5, the image depth should be CV_8U, CV_16U, or CV_32F, for larger aperture sizes, it can only be CV_8U. + Destination array of the same size and type as src. + Aperture linear size; it must be odd and greater than 1, for example: 3, 5, 7 ... + + + + Blurs an image using the box filter. + + Input image. + Output image of the same size and type as src. + The output image depth (-1 to use src.depth()). + Blurring kernel size. + Anchor point; default value Point(-1,-1) means that the anchor is at the kernel center. + Specifying whether the kernel is normalized by its area or not. + Border mode used to extrapolate pixels outside of the image. + + + + Applies the bilateral filter to an image. + + Source 8-bit or floating-point, 1-channel or 3-channel image. + Destination image of the same size and type as src . + Diameter of each pixel neighborhood that is used during filtering. If it is non-positive, it is computed from sigmaSpace . + Filter sigma in the color space. A larger value of the parameter means that farther colors within the pixel neighborhood (see sigmaSpace ) will be mixed together, resulting in larger areas of semi-equal color. + Filter sigma in the coordinate space. A larger value of the parameter means that farther pixels will influence each other as long as their colors are close enough (see sigmaColor ). When d>0 , it specifies the neighborhood size regardless of sigmaSpace. Otherwise, d is proportional to sigmaSpace. + Border mode used to extrapolate pixels outside of the image. + + + + The Sobel operators combine Gaussian smoothing and differentiation so the result is more or less robust to the noise. Most often, the function is called with (xorder=1, yorder=0, aperture_size=3) or (xorder=0, yorder=1, aperture_size=3) to calculate first x- or y- image derivative. The first case corresponds to +
 
+              |-1  0  1|
+              |-2  0  2|
+              |-1  0  1|
+ kernel and the second one corresponds to +
+              |-1 -2 -1|
+              | 0  0  0|
+              | 1  2  1|
+ or +
+              | 1  2  1|
+              | 0  0  0|
+              |-1 -2 -1|
+ kernel, depending on the image origin (origin field of IplImage structure). No scaling is done, so the destination image usually has larger by absolute value numbers than the source image. To avoid overflow, the function requires 16-bit destination image if the source image is 8-bit. The result can be converted back to 8-bit using cvConvertScale or cvConvertScaleAbs functions. Besides 8-bit images the function can process 32-bit floating-point images. Both source and destination must be single-channel images of equal size or ROI size +
+ Source image. + Destination image + output image depth; the following combinations of src.depth() and ddepth are supported: + src.depth() = CV_8U, ddepth = -1/CV_16S/CV_32F/CV_64F + src.depth() = CV_16U/CV_16S, ddepth = -1/CV_32F/CV_64F + src.depth() = CV_32F, ddepth = -1/CV_32F/CV_64F + src.depth() = CV_64F, ddepth = -1/CV_64F + when ddepth=-1, the destination image will have the same depth as the source; in the case of 8-bit input images it will result in truncated derivatives. + Order of the derivative x + Order of the derivative y + Size of the extended Sobel kernel, must be 1, 3, 5 or 7. + Pixel extrapolation method + Optional scale factor for the computed derivative values + Optional delta value that is added to the results prior to storing them in +
+ + + Calculates Laplacian of the source image by summing second x- and y- derivatives calculated using Sobel operator: + dst(x,y) = d2src/dx2 + d2src/dy2 + Specifying aperture_size=1 gives the fastest variant that is equal to convolving the image with the following kernel: + |0 1 0| + |1 -4 1| + |0 1 0| + Similar to cvSobel function, no scaling is done and the same combinations of input and output formats are supported. + + Source image. + Destination image. Should have type of float + Desired depth of the destination image. + Aperture size used to compute the second-derivative filters. + Optional scale factor for the computed Laplacian values. By default, no scaling is applied. + Optional delta value that is added to the results prior to storing them in dst. + Pixel extrapolation method. + + + + Finds the edges on the input and marks them in the output image edges using the Canny algorithm. The smallest of threshold1 and threshold2 is used for edge linking, the largest - to find initial segments of strong edges. + + Input image + Image to store the edges found by the function + The first threshold + The second threshold. + Aperture parameter for Sobel operator + a flag, indicating whether a more accurate norm should be used to calculate the image gradient magnitude ( L2gradient=true ), or whether the default norm is enough ( L2gradient=false ). + + + + The function tests whether the input contour is convex or not. The contour must be simple, that is, without self-intersections. Otherwise, the function output is undefined. + + Input vector of 2D points + true if input is convex + + + + Determines whether the point is inside contour, outside, or lies on an edge (or coinsides with a vertex). It returns positive, negative or zero value, correspondingly + + Input contour + The point tested against the contour + If != 0, the function estimates distance from the point to the nearest contour edge + + When measureDist = false, the return value is >0 (inside), <0 (outside) and =0 (on edge), respectively. + When measureDist != true, it is a signed distance between the point and the nearest contour edge + + + + + Finds the convexity defects of a contour. + + Input contour + Convex hull obtained using ConvexHull that should contain pointers or indices to the contour points, not the hull points themselves, i.e. return_points parameter in cvConvexHull2 should be 0 + The output vector of convexity defects. Each convexity defect is represented as 4-element integer vector (a.k.a. cv::Vec4i): (start_index, end_index, farthest_pt_index, fixpt_depth), where indices are 0-based indices in the original contour of the convexity defect beginning, end and the farthest point, and fixpt_depth is fixed-point approximation (with 8 fractional bits) of the distance between the farthest contour point and the hull. That is, to get the floating-point value of the depth will be fixpt_depth/256.0. + + + + Find the bounding rectangle for the specific array of points + + The collection of points + The bounding rectangle for the array of points + + + + Finds a rotated rectangle of the minimum area enclosing the input 2D point set. + + Input vector of 2D points + a circumscribed rectangle of the minimal area for 2D point set + + + + Finds the minimal circumscribed circle for 2D point set using iterative algorithm. It returns nonzero if the resultant circle contains all the input points and zero otherwise (i.e. algorithm failed) + + Sequence or array of 2D points + The minimal circumscribed circle for 2D point set + + + + Finds the minimal circumscribed circle for 2D point set using iterative algorithm. It returns nonzero if the resultant circle contains all the input points and zero otherwise (i.e. algorithm failed) + + Sequence or array of 2D points + The minimal circumscribed circle for 2D point set + + + + Finds a triangle of minimum area enclosing a 2D point set and returns its area. + + Input vector of 2D points with depth CV_32S or CV_32F + Output vector of three 2D points defining the vertices of the triangle. The depth of the OutputArray must be CV_32F. + The triangle's area + + + + Approximates a polygonal curve(s) with the specified precision. + + Input vector of a 2D point + Result of the approximation. The type should match the type of the input curve. + Parameter specifying the approximation accuracy. This is the maximum distance between the original curve and its approximation. + If true, the approximated curve is closed (its first and last vertices are connected). Otherwise, it is not closed. + + + + Returns the up-right bounding rectangle for 2d point set + + Input 2D point set, stored in std::vector or Mat. + The up-right bounding rectangle for 2d point set + + + + Calculates area of the whole contour or contour section. + + Input vector of 2D points (contour vertices), stored in std::vector or Mat. + Oriented area flag. If it is true, the function returns a signed area value, depending on the contour orientation (clockwise or counter-clockwise). + Using this feature you can determine orientation of a contour by taking the sign of an area. + By default, the parameter is false, which means that the absolute value is returned. + The area of the whole contour or contour section + + + + Calculates a contour perimeter or a curve length + + Sequence or array of the curve points + + Indicates whether the curve is closed or not. + + Contour perimeter or a curve length + + + + Applies fixed-level thresholding to single-channel array. The function is typically used to get bi-level (binary) image out of grayscale image (cvCmpS could be also used for this purpose) or for removing a noise, i.e. filtering out pixels with too small or too large values. There are several types of thresholding the function supports that are determined by threshold_type + + Source array (single-channel, 8-bit of 32-bit floating point). + Destination array; must be either the same type as src or 8-bit. + Threshold value + Maximum value to use with CV_THRESH_BINARY and CV_THRESH_BINARY_INV thresholding types + Thresholding type + + + + Transforms grayscale image to binary image. + Threshold calculated individually for each pixel. + For the method CV_ADAPTIVE_THRESH_MEAN_C it is a mean of x pixel + neighborhood, subtracted by param1. + For the method CV_ADAPTIVE_THRESH_GAUSSIAN_C it is a weighted sum (gaussian) of x pixel neighborhood, subtracted by param1. + + Source array (single-channel, 8-bit of 32-bit floating point). + Destination array; must be either the same type as src or 8-bit. + Maximum value to use with CV_THRESH_BINARY and CV_THRESH_BINARY_INV thresholding types + Adaptive_method + Thresholding type. must be one of CV_THRESH_BINARY, CV_THRESH_BINARY_INV + The size of a pixel neighborhood that is used to calculate a threshold value for the pixel: 3, 5, 7, ... + Constant subtracted from mean or weighted mean. It may be negative. + + + + Retrieves contours from the binary image and returns the number of retrieved contours. The pointer firstContour is filled by the function. It will contain pointer to the first most outer contour or IntPtr.Zero if no contours is detected (if the image is completely black). Other contours may be reached from firstContour using h_next and v_next links. The sample in cvDrawContours discussion shows how to use contours for connected component detection. Contours can be also used for shape analysis and object recognition - see squares.c in OpenCV sample directory + The function modifies the source image content + + The source 8-bit single channel image. Non-zero pixels are treated as 1s, zero pixels remain 0s - that is image treated as binary. To get such a binary image from grayscale, one may use cvThreshold, cvAdaptiveThreshold or cvCanny. The function modifies the source image content + Detected contours. Each contour is stored as a vector of points. + Optional output vector, containing information about the image topology. + Retrieval mode + Approximation method (for all the modes, except CV_RETR_RUNS, which uses built-in approximation). + Offset, by which every contour point is shifted. This is useful if the contours are extracted from the image ROI and then they should be analyzed in the whole image context + The number of countours + + + + Retrieves contours from the binary image as a contour tree. The pointer firstContour is filled by the function. It is provided as a convenient way to obtain the hierarchy value as int[,]. + The function modifies the source image content + + The source 8-bit single channel image. Non-zero pixels are treated as 1s, zero pixels remain 0s - that is image treated as binary. To get such a binary image from grayscale, one may use cvThreshold, cvAdaptiveThreshold or cvCanny. The function modifies the source image content + Detected contours. Each contour is stored as a vector of points. + Approximation method (for all the modes, except CV_RETR_RUNS, which uses built-in approximation). + Offset, by which every contour point is shifted. This is useful if the contours are extracted from the image ROI and then they should be analyzed in the whole image context + The contour hierarchy + + + + Convert raw data to bitmap + + The pointer to the raw data + The step + The size of the image + The source image color type + The number of channels + The source image depth type + Try to create Bitmap that shares the data with the image + The Bitmap + + + + Converts input image from one color space to another. The function ignores colorModel and channelSeq fields of IplImage header, so the source image color space should be specified correctly (including order of the channels in case of RGB space, e.g. BGR means 24-bit format with B0 G0 R0 B1 G1 R1 ... layout, whereas RGB means 24-bit format with R0 G0 B0 R1 G1 B1 ... layout). + + The source 8-bit (8u), 16-bit (16u) or single-precision floating-point (32f) image + The destination image of the same data type as the source one. The number of channels may be different + Source color type. + Destination color type + + + + Converts input image from one color space to another. The function ignores colorModel and channelSeq fields of IplImage header, so the source image color space should be specified correctly (including order of the channels in case of RGB space, e.g. BGR means 24-bit format with B0 G0 R0 B1 G1 R1 ... layout, whereas RGB means 24-bit format with R0 G0 B0 R1 G1 B1 ... layout). + + The source 8-bit (8u), 16-bit (16u) or single-precision floating-point (32f) image + The destination image of the same data type as the source one. The number of channels may be different + Color conversion operation that can be specifed using CV_src_color_space2dst_color_space constants + number of channels in the destination image; if the parameter is 0, the number of the channels is derived automatically from src and code . + + + + Finds circles in grayscale image using some modification of Hough transform + + The input 8-bit single-channel grayscale image + The storage for the circles detected. It can be a memory storage (in this case a sequence of circles is created in the storage and returned by the function) or single row/single column matrix (CvMat*) of type CV_32FC3, to which the circles' parameters are written. The matrix header is modified by the function so its cols or rows will contain a number of lines detected. If circle_storage is a matrix and the actual number of lines exceeds the matrix size, the maximum possible number of circles is returned. Every circle is encoded as 3 floating-point numbers: center coordinates (x,y) and the radius + Currently, the only implemented method is CV_HOUGH_GRADIENT + Resolution of the accumulator used to detect centers of the circles. For example, if it is 1, the accumulator will have the same resolution as the input image, if it is 2 - accumulator will have twice smaller width and height, etc + Minimum distance between centers of the detected circles. If the parameter is too small, multiple neighbor circles may be falsely detected in addition to a true one. If it is too large, some circles may be missed + The first method-specific parameter. In case of CV_HOUGH_GRADIENT it is the higher threshold of the two passed to Canny edge detector (the lower one will be twice smaller). + The second method-specific parameter. In case of CV_HOUGH_GRADIENT it is accumulator threshold at the center detection stage. The smaller it is, the more false circles may be detected. Circles, corresponding to the larger accumulator values, will be returned first + Minimal radius of the circles to search for + Maximal radius of the circles to search for. By default the maximal radius is set to max(image_width, image_height). + Pointer to the sequence of circles + + + + Finds circles in a grayscale image using the Hough transform + + 8-bit, single-channel, grayscale input image. + Detection method to use. Currently, the only implemented method is CV_HOUGH_GRADIENT , which is basically 21HT + Inverse ratio of the accumulator resolution to the image resolution. For example, if dp=1 , the accumulator has the same resolution as the input image. If dp=2 , the accumulator has half as big width and height. + Minimum distance between the centers of the detected circles. If the parameter is too small, multiple neighbor circles may be falsely detected in addition to a true one. If it is too large, some circles may be missed. + First method-specific parameter. In case of CV_HOUGH_GRADIENT , it is the higher threshold of the two passed to the Canny() edge detector (the lower one is twice smaller). + Second method-specific parameter. In case of CV_HOUGH_GRADIENT , it is the accumulator threshold for the circle centers at the detection stage. The smaller it is, the more false circles may be detected. Circles, corresponding to the larger accumulator values, will be returned first. + Minimum circle radius. + Maximum circle radius. + The circles detected + + + + Finds lines in a binary image using the standard Hough transform. + + 8-bit, single-channel binary source image. The image may be modified by the function. + Output vector of lines. Each line is represented by a two-element vector + Distance resolution of the accumulator in pixels. + Angle resolution of the accumulator in radians. + Accumulator threshold parameter. Only those lines are returned that get enough votes (> threshold) + For the multi-scale Hough transform, it is a divisor for the distance resolution rho . The coarse accumulator distance resolution is rho and the accurate accumulator resolution is rho/srn . If both srn=0 and stn=0 , the classical Hough transform is used. Otherwise, both these parameters should be positive. + For the multi-scale Hough transform, it is a divisor for the distance resolution theta + + + + Finds line segments in a binary image using the probabilistic Hough transform. + + 8-bit, single-channel binary source image. The image may be modified by the function. + Distance resolution of the accumulator in pixels + Angle resolution of the accumulator in radians + Accumulator threshold parameter. Only those lines are returned that get enough votes + Minimum line length. Line segments shorter than that are rejected. + Maximum allowed gap between points on the same line to link them. + The found line segments + + + + Finds line segments in a binary image using the probabilistic Hough transform. + + 8-bit, single-channel binary source image. The image may be modified by the function. + Output vector of lines. Each line is represented by a 4-element vector (x1, y1, x2, y2) + Distance resolution of the accumulator in pixels + Angle resolution of the accumulator in radians + Accumulator threshold parameter. Only those lines are returned that get enough votes + Minimum line length. Line segments shorter than that are rejected. + Maximum allowed gap between points on the same line to link them. + + + + Calculates spatial and central moments up to the third order and writes them to moments. The moments may be used then to calculate gravity center of the shape, its area, main axises and various shape characeteristics including 7 Hu invariants. + + Image (1-channel or 3-channel with COI set) or polygon (CvSeq of points or a vector of points) + (For images only) If the flag is true, all the zero pixel values are treated as zeroes, all the others are treated as 1s + The moment + + + + This function is similiar to cvCalcBackProjectPatch. It slids through image, compares overlapped patches of size wxh with templ using the specified method and stores the comparison results to result + + Image where the search is running. It should be 8-bit or 32-bit floating-point + Searched template; must be not greater than the source image and the same data type as the image + A map of comparison results; single-channel 32-bit floating-point. If image is WxH and templ is wxh then result must be W-w+1xH-h+1. + Specifies the way the template must be compared with image regions + + + + Compares two shapes. The 3 implemented methods all use Hu moments + + First contour or grayscale image + Second contour or grayscale image + Comparison method + Method-specific parameter (is not used now) + The result of the comparison + + + + Returns a structuring element of the specified size and shape for morphological operations. + + Element shape + Size of the structuring element. + Anchor position within the element. The value (-1, -1) means that the anchor is at the center. Note that only the shape of a cross-shaped element depends on the anchor position. In other cases the anchor just regulates how much the result of the morphological operation is shifted. + The structuring element + + + + Performs advanced morphological transformations. + + Source image. + Destination image. + Structuring element. + Type of morphological operation. + Number of times erosion and dilation are applied. + Pixel extrapolation method. + Anchor position with the kernel. Negative values mean that the anchor is at the kernel center. + Border value in case of a constant border. + + + + The algorithm normalizes brightness and increases contrast of the image + + The input 8-bit single-channel image + The output image of the same size and the same data type as src + + + + Calculates a histogram of a set of arrays. + + Source arrays. They all should have the same depth, CV_8U or CV_32F , and the same size. Each of them can have an arbitrary number of channels. + List of the channels used to compute the histogram. + Optional mask. If the matrix is not empty, it must be an 8-bit array of the same size as images[i] . The non-zero mask elements mark the array elements counted in the histogram. + Output histogram + Array of histogram sizes in each dimension. + Array of the dims arrays of the histogram bin boundaries in each dimension. + Accumulation flag. If it is set, the histogram is not cleared in the beginning when it is allocated. This feature enables you to compute a single histogram from several sets of arrays, or to update the histogram in time. + + + + Calculates the back projection of a histogram. + + Source arrays. They all should have the same depth, CV_8U or CV_32F , and the same size. Each of them can have an arbitrary number of channels. + Number of source images. + Input histogram that can be dense or sparse. + Destination back projection array that is a single-channel array of the same size and depth as images[0] . + Array of arrays of the histogram bin boundaries in each dimension. + Optional scale factor for the output back projection. + + + + Compares two histograms. + + First compared histogram. + Second compared histogram of the same size as H1 . + Comparison method + The distance between the histogram + + + + Retrieves the spatial moment, which in case of image moments is defined as: + M_{x_order,y_order}=sum_{x,y}(I(x,y) * x^{x_order} * y^{y_order}) + where I(x,y) is the intensity of the pixel (x, y). + + The moment state + x order of the retrieved moment, xOrder >= 0. + y order of the retrieved moment, yOrder >= 0 and xOrder + y_order <= 3 + The spatial moment + + + + Retrieves the central moment, which in case of image moments is defined as: + mu_{x_order,y_order}=sum_{x,y}(I(x,y)*(x-x_c)^{x_order} * (y-y_c)^{y_order}), + where x_c=M10/M00, y_c=M01/M00 - coordinates of the gravity center + + Reference to the moment state structure + x order of the retrieved moment, xOrder >= 0. + y order of the retrieved moment, yOrder >= 0 and xOrder + y_order <= 3 + The center moment + + + + Retrieves normalized central moment, which in case of image moments is defined as: + eta_{x_order,y_order}=mu_{x_order,y_order} / M00^{(y_order+x_order)/2+1}, + where mu_{x_order,y_order} is the central moment + + Reference to the moment state structure + x order of the retrieved moment, xOrder >= 0. + y order of the retrieved moment, yOrder >= 0 and xOrder + y_order <= 3 + The normalized center moment + + + + Adds the whole image or its selected region to accumulator sum + + Input image, 1- or 3-channel, 8-bit or 32-bit floating point. (each channel of multi-channel image is processed independently). + Accumulator of the same number of channels as input image, 32-bit or 64-bit floating-point. + Optional operation mask + + + + Adds the input or its selected region, raised to power 2, to the accumulator sqsum + + Input image, 1- or 3-channel, 8-bit or 32-bit floating point (each channel of multi-channel image is processed independently) + Accumulator of the same number of channels as input image, 32-bit or 64-bit floating-point + Optional operation mask + + + + Adds product of 2 images or thier selected regions to accumulator acc + + First input image, 1- or 3-channel, 8-bit or 32-bit floating point (each channel of multi-channel image is processed independently) + Second input image, the same format as the first one + Accumulator of the same number of channels as input images, 32-bit or 64-bit floating-point + Optional operation mask + + + + Calculates weighted sum of input and the accumulator acc so that acc becomes a running average of frame sequence: + acc(x,y)=(1-) * acc(x,y) + * image(x,y) if mask(x,y)!=0 + where regulates update speed (how fast accumulator forgets about previous frames). + + Input image, 1- or 3-channel, 8-bit or 32-bit floating point (each channel of multi-channel image is processed independently). + Accumulator of the same number of channels as input image, 32-bit or 64-bit floating-point. + Weight of input image + Optional operation mask + + + + Calculates seven Hu invariants + + Pointer to the moment state structure + Pointer to Hu moments structure. + + + + Runs the Harris edge detector on image. Similarly to cvCornerMinEigenVal and cvCornerEigenValsAndVecs, for each pixel it calculates 2x2 gradient covariation matrix M over block_size x block_size neighborhood. Then, it stores + det(M) - k*trace(M)^2 + to the destination image. Corners in the image can be found as local maxima of the destination image. + + Input image + Image to store the Harris detector responces. Should have the same size as image + Neighborhood size + Aperture parameter for Sobel operator (see cvSobel). format. In the case of floating-point input format this parameter is the number of the fixed float filter used for differencing. + Harris detector free parameter. + Pixel extrapolation method. + + + + Iterates to find the sub-pixel accurate location of corners, or radial saddle points + + Input image + Initial coordinates of the input corners and refined coordinates on output + Half sizes of the search window. For example, if win=(5,5) then 5*2+1 x 5*2+1 = 11 x 11 search window is used + Half size of the dead region in the middle of the search zone over which the summation in formulae below is not done. It is used sometimes to avoid possible singularities of the autocorrelation matrix. The value of (-1,-1) indicates that there is no such size + Criteria for termination of the iterative process of corner refinement. That is, the process of corner position refinement stops either after certain number of iteration or when a required accuracy is achieved. The criteria may specify either of or both the maximum number of iteration and the required accuracy + + + + Calculates one or more integral images for the source image + Using these integral images, one may calculate sum, mean, standard deviation over arbitrary up-right or rotated rectangular region of the image in a constant time. + It makes possible to do a fast blurring or fast block correlation with variable window size etc. In case of multi-channel images sums for each channel are accumulated independently. + + The source image, WxH, 8-bit or floating-point (32f or 64f) image. + The integral image, W+1xH+1, 32-bit integer or double precision floating-point (64f). + The integral image for squared pixel values, W+1xH+1, double precision floating-point (64f). + The integral for the image rotated by 45 degrees, W+1xH+1, the same data type as sum. + Desired depth of the integral and the tilted integral images, CV_32S, CV_32F, or CV_64F. + Desired depth of the integral image of squared pixel values, CV_32F or CV_64F. + + + + Calculates distance to closest zero pixel for all non-zero pixels of source image + + Source 8-bit single-channel (binary) image. + Output image with calculated distances (32-bit floating-point, single-channel). + Type of distance + Size of distance transform mask; can be 3 or 5. + In case of CV_DIST_L1 or CV_DIST_C the parameter is forced to 3, because 3x3 mask gives the same result as 5x5 yet it is faster. + The optional output 2d array of labels of integer type and the same size as src and dst. Can be null if not needed + Type of the label array to build. If labelType==CCOMP then each connected component of zeros in src (as well as all the non-zero pixels closest to the connected component) will be assigned the same label. If labelType==PIXEL then each zero pixel (and all the non-zero pixels closest to it) gets its own label. + + + + Fills a connected component with given color. + + Input 1- or 3-channel, 8-bit or floating-point image. It is modified by the function unless CV_FLOODFILL_MASK_ONLY flag is set. + The starting point. + New value of repainted domain pixels. + Maximal lower brightness/color difference + between the currently observed pixel and one of its neighbor belong to the component + or seed pixel to add the pixel to component. + In case of 8-bit color images it is packed value. + Maximal upper brightness/color difference + between the currently observed pixel and one of its neighbor belong to the component + or seed pixel to add the pixel to component. + In case of 8-bit color images it is packed value. + The operation flags. + Lower bits contain connectivity value, 4 (by default) or 8, used within the function. + Connectivity determines which neighbors of a pixel are considered. + Upper bits can be 0 or combination of the following flags: + CV_FLOODFILL_FIXED_RANGE - if set the difference between the current pixel and seed pixel is considered, + otherwise difference between neighbor pixels is considered (the range is floating). + CV_FLOODFILL_MASK_ONLY - if set, the function does not fill the image (new_val is ignored), + but the fills mask (that must be non-NULL in this case). + Operation mask, + should be singe-channel 8-bit image, 2 pixels wider and 2 pixels taller than image. + If not IntPtr.Zero, the function uses and updates the mask, so user takes responsibility of initializing mask content. + Floodfilling can't go across non-zero pixels in the mask, for example, an edge detector output can be used as a mask to stop filling at edges. + Or it is possible to use the same mask in multiple calls to the function to make sure the filled area do not overlap. + Note: because mask is larger than the filled image, pixel in mask that corresponds to (x,y) pixel in image will have coordinates (x+1,y+1). + Output parameter set by the function to the minimum bounding rectangle of the repainted domain. + Flood fill connectivity + + + + Filters image using meanshift algorithm + + Source image + Result image + The spatial window radius. + The color window radius. + Maximum level of the pyramid for the segmentation. Use 1 as default value + Termination criteria: when to stop meanshift iterations. Use new MCvTermCriteria(5, 1) as default value + + + + Converts image transformation maps from one representation to another. + + The first input map of type CV_16SC2 , CV_32FC1 , or CV_32FC2 . + The second input map of type CV_16UC1 , CV_32FC1 , or none (empty matrix), respectively. + The first output map that has the type dstmap1type and the same size as src . + The second output map. + Depth type of the first output map that should be CV_16SC2 , CV_32FC1 , or CV_32FC2. + The number of channels in the dst map. + Flag indicating whether the fixed-point maps are used for the nearest-neighbor or for a more complex interpolation. + + + + Transforms the image to compensate radial and tangential lens distortion. + + The input (distorted) image + The output (corrected) image + The camera matrix (A) [fx 0 cx; 0 fy cy; 0 0 1]. + The vector of distortion coefficients, 4x1 or 1x4 [k1, k2, p1, p2]. + Camera matrix of the distorted image. By default it is the same as cameraMatrix, but you may additionally scale and shift the result by using some different matrix + + + + This function is an extended version of cvInitUndistortMap. That is, in addition to the correction of lens distortion, the function can also apply arbitrary perspective transformation R and finally it can scale and shift the image according to the new camera matrix + + The camera matrix A=[fx 0 cx; 0 fy cy; 0 0 1] + The vector of distortion coefficients, 4x1, 1x4, 5x1 or 1x5 + The rectification transformation in object space (3x3 matrix). R1 or R2, computed by cvStereoRectify can be passed here. If the parameter is IntPtr.Zero, the identity matrix is used + The new camera matrix A'=[fx' 0 cx'; 0 fy' cy'; 0 0 1] + Depth type of the first output map that can be CV_32FC1 or CV_16SC2 . + The first output map. + The second output map. + Undistorted image size. + + + + Similar to cvInitUndistortRectifyMap and is opposite to it at the same time. + The functions are similar in that they both are used to correct lens distortion and to perform the optional perspective (rectification) transformation. + They are opposite because the function cvInitUndistortRectifyMap does actually perform the reverse transformation in order to initialize the maps properly, while this function does the forward transformation. + + The observed point coordinates + The ideal point coordinates, after undistortion and reverse perspective transformation. + The camera matrix A=[fx 0 cx; 0 fy cy; 0 0 1] + The vector of distortion coefficients, 4x1, 1x4, 5x1 or 1x5. + The rectification transformation in object space (3x3 matrix). R1 or R2, computed by cvStereoRectify can be passed here. If the parameter is IntPtr.Zero, the identity matrix is used. + The new camera matrix (3x3) or the new projection matrix (3x4). P1 or P2, computed by cvStereoRectify can be passed here. If the parameter is IntPtr.Zero, the identity matrix is used. + + + + Computes the 'minimal work' distance between two weighted point configurations. + + First signature, a size1 x dims + 1 floating-point matrix. Each row stores the point weight followed by the point coordinates. The matrix is allowed to have a single column (weights only) if the user-defined cost matrix is used. + Second signature of the same format as signature1 , though the number of rows may be different. The total weights may be different. In this case an extra 'dummy' point is added to either signature1 or signature2 + Used metric. CV_DIST_L1, CV_DIST_L2 , and CV_DIST_C stand for one of the standard metrics. CV_DIST_USER means that a pre-calculated cost matrix cost is used. + User-defined size1 x size2 cost matrix. Also, if a cost matrix is used, lower boundary lowerBound cannot be calculated because it needs a metric function. + Optional input/output parameter: lower boundary of a distance between the two signatures that is a distance between mass centers. The lower boundary may not be calculated if the user-defined cost matrix is used, the total weights of point configurations are not equal, or if the signatures consist of weights only (the signature matrices have a single column). + Resultant size1 x size2 flow matrix + The 'minimal work' distance between two weighted point configurations. + + + + The function is used to detect translational shifts that occur between two images. The operation takes advantage of the Fourier shift theorem for detecting the translational shift in the frequency domain. It can be used for fast image registration as well as motion estimation. + + Source floating point array (CV_32FC1 or CV_64FC1) + Source floating point array (CV_32FC1 or CV_64FC1) + Floating point array with windowing coefficients to reduce edge effects (optional). + Signal power within the 5x5 centroid around the peak, between 0 and 1 + The translational shifts that occur between two images + + + + This function computes a Hanning window coefficients in two dimensions. + + Destination array to place Hann coefficients in + The window size specifications + Created array type + + + + Draws the line segment between pt1 and pt2 points in the image. The line is clipped by the image or ROI rectangle. For non-antialiased lines with integer coordinates the 8-connected or 4-connected Bresenham algorithm is used. Thick lines are drawn with rounding endings. Antialiased lines are drawn using Gaussian filtering. + + The image + First point of the line segment + Second point of the line segment + Line color + Line thickness. + Type of the line: + 8 (or 0) - 8-connected line. + 4 - 4-connected line. + CV_AA - antialiased line. + + Number of fractional bits in the point coordinates + + + + Draws a arrow segment pointing from the first point to the second one. + + Image + The point the arrow starts from. + The point the arrow points to. + Line color. + Line thickness. + Type of the line. + Number of fractional bits in the point coordinates. + The length of the arrow tip in relation to the arrow length + + + + Draws a single or multiple polygonal curves + + Image + Array points + + Indicates whether the polylines must be drawn closed. + If !=0, the function draws the line from the last vertex of every contour to the first vertex. + + Polyline color + Thickness of the polyline edges + Type of the line segments, see cvLine description + Number of fractional bits in the vertex coordinates + + + + Draws a single or multiple polygonal curves + + Image + Array of pointers to polylines + + Indicates whether the polylines must be drawn closed. + If !=0, the function draws the line from the last vertex of every contour to the first vertex. + + Polyline color + Thickness of the polyline edges + Type of the line segments, see cvLine description + Number of fractional bits in the vertex coordinates + + + + Draws a rectangle specified by a CvRect structure + + /// Image + The rectangle to be drawn + Line color + Thickness of lines that make up the rectangle. Negative values make the function to draw a filled rectangle. + Type of the line + Number of fractional bits in the point coordinates + + + + Computes the connected components labeled image of boolean image + + The boolean image + The connected components labeled image of boolean image + 4 or 8 way connectivity + Specifies the output label image type, an important consideration based on the total number of labels or alternatively the total number of pixels in the source image + N, the total number of labels [0, N-1] where 0 represents the background label. + + + + Computes the connected components labeled image of boolean image + + The boolean image + The connected components labeled image of boolean image + Statistics output for each label, including the background label, see below for available statistics. Statistics are accessed via stats(label, COLUMN) where COLUMN is one of cv::ConnectedComponentsTypes. The data type is CV_32S + Centroid output for each label, including the background label. Centroids are accessed via centroids(label, 0) for x and centroids(label, 1) for y. The data type CV_64F. + 4 or 8 way connectivity + Specifies the output label image type, an important consideration based on the total number of labels or alternatively the total number of pixels in the source image + N, the total number of labels [0, N-1] where 0 represents the background label. + + + + Solve given (non-integer) linear programming problem using the Simplex Algorithm (Simplex Method). + What we mean here by “linear programming problem” (or LP problem, for short) can be formulated as: + Maximize c x subject to: Ax <= b and x >= 0 + + This row-vector corresponds to c in the LP problem formulation (see above). It should contain 32- or 64-bit floating point numbers. As a convenience, column-vector may be also submitted, in the latter case it is understood to correspond to c^T. + m-by-n+1 matrix, whose rightmost column corresponds to b in formulation above and the remaining to A. It should containt 32- or 64-bit floating point numbers. + The solution will be returned here as a column-vector - it corresponds to c in the formulation above. It will contain 64-bit floating point numbers. + The return codes + + + + Primal-dual algorithm is an algorithm for solving special types of variational problems (that is, finding a function to minimize some functional). + As the image denoising, in particular, may be seen as the variational problem, primal-dual algorithm then can be used to perform + denoising and this is exactly what is implemented. + + This array should contain one or more noised versions of the image that is to be restored. + Here the denoised image will be stored. There is no need to do pre-allocation of storage space, as it will be automatically allocated, if necessary. + Corresponds to in the formulas above. As it is enlarged, the smooth (blurred) images are treated more favorably than detailed (but maybe more noised) ones. Roughly speaking, as it becomes smaller, the result will be more blur but more sever outliers will be removed. + Number of iterations that the algorithm will run. Of course, as more iterations as better, but it is hard to quantitatively refine this statement, so just use the default and increase it if the results are poor. + + + + Reconstructs the selected image area from the pixel near the area boundary. The function may be used to remove dust and scratches from a scanned photo, or to remove undesirable objects from still images or video. + + The input 8-bit 1-channel or 3-channel image + The inpainting mask, 8-bit 1-channel image. Non-zero pixels indicate the area that needs to be inpainted + The output image of the same format and the same size as input + The inpainting method + The radius of circular neighborhood of each point inpainted that is considered by the algorithm + + + + Perform image denoising using Non-local Means Denoising algorithm: + http://www.ipol.im/pub/algo/bcm_non_local_means_denoising/ + with several computational optimizations. Noise expected to be a gaussian white noise. + + Input 8-bit 1-channel, 2-channel or 3-channel image. + Output image with the same size and type as src. + Parameter regulating filter strength. Big h value perfectly removes noise but also removes image details, smaller h value preserves details but also preserves some noise. + Size in pixels of the template patch that is used to compute weights. Should be odd. + Size in pixels of the window that is used to compute weighted average for given pixel. Should be odd. Affect performance linearly: greater searchWindowsSize - greater denoising time. + + + + Perform image denoising using Non-local Means Denoising algorithm (modified for color image): + http://www.ipol.im/pub/algo/bcm_non_local_means_denoising/ + with several computational optimizations. Noise expected to be a gaussian white noise. + The function converts image to CIELAB colorspace and then separately denoise L and AB components with given h parameters using fastNlMeansDenoising function. + + Input 8-bit 1-channel, 2-channel or 3-channel image. + Output image with the same size and type as src. + Parameter regulating filter strength. Big h value perfectly removes noise but also removes image details, smaller h value preserves details but also preserves some noise. + The same as h but for color components. For most images value equals 10 will be enought to remove colored noise and do not distort colors. + Size in pixels of the template patch that is used to compute weights. Should be odd. + Size in pixels of the window that is used to compute weighted average for given pixel. Should be odd. Affect performance linearly: greater searchWindowsSize - greater denoising time. + + + + Filtering is the fundamental operation in image and video processing. Edge-preserving smoothing filters are used in many different applications. + + Input 8-bit 3-channel image + Output 8-bit 3-channel image + Edge preserving filters + Range between 0 to 200 + Range between 0 to 1 + + + + This filter enhances the details of a particular image. + + Input 8-bit 3-channel image + Output image with the same size and type as src + Range between 0 to 200 + Range between 0 to 1 + + + + Pencil-like non-photorealistic line drawing + + Input 8-bit 3-channel image + Output 8-bit 1-channel image + Output image with the same size and type as src + Range between 0 to 200 + Range between 0 to 1 + Range between 0 to 0.1 + + + + Stylization aims to produce digital imagery with a wide variety of effects not focused on photorealism. Edge-aware filters are ideal for stylization, as they can abstract regions of low contrast while preserving, or enhancing, high-contrast features. + + Input 8-bit 3-channel image. + Output image with the same size and type as src. + Range between 0 to 200. + Range between 0 to 1. + + + + Given an original color image, two differently colored versions of this image can be mixed seamlessly. + + Input 8-bit 3-channel image. + Input 8-bit 1 or 3-channel image. + Output image with the same size and type as src . + R-channel multiply factor. Multiplication factor is between .5 to 2.5. + G-channel multiply factor. Multiplication factor is between .5 to 2.5. + B-channel multiply factor. Multiplication factor is between .5 to 2.5. + + + + Applying an appropriate non-linear transformation to the gradient field inside the selection and then integrating back with a Poisson solver, modifies locally the apparent illumination of an image. + + Input 8-bit 3-channel image. + Input 8-bit 1 or 3-channel image. + Output image with the same size and type as src. + Value ranges between 0-2. + Value ranges between 0-2. + + + + By retaining only the gradients at edge locations, before integrating with the Poisson solver, one washes out the texture of the selected region, giving its contents a flat aspect. Here Canny Edge Detector is used. + + Input 8-bit 3-channel image. + Input 8-bit 1 or 3-channel image. + Output image with the same size and type as src. + Range from 0 to 100. + Value > 100 + The size of the Sobel kernel to be used. + + + + Implements CAMSHIFT object tracking algorithm ([Bradski98]). First, it finds an object center using cvMeanShift and, after that, calculates the object size and orientation. + + Back projection of object histogram + Initial search window + Criteria applied to determine when the window search should be finished + Circumscribed box for the object, contains object size and orientation + + + + Iterates to find the object center given its back projection and initial position of search window. The iterations are made until the search window center moves by less than the given value and/or until the function has done the maximum number of iterations. + + Back projection of object histogram + Initial search window + Criteria applied to determine when the window search should be finished. + The number of iterations made + + + + Updates the motion history image as following: + mhi(x,y)=timestamp if silhouette(x,y)!=0 + 0 if silhouette(x,y)=0 and mhi(x,y)<timestamp-duration + mhi(x,y) otherwise + That is, MHI pixels where motion occurs are set to the current timestamp, while the pixels where motion happened far ago are cleared. + + Silhouette mask that has non-zero pixels where the motion occurs. + Motion history image, that is updated by the function (single-channel, 32-bit floating-point) + Current time in milliseconds or other units. + Maximal duration of motion track in the same units as timestamp. + + + + Calculates the derivatives Dx and Dy of mhi and then calculates gradient orientation as: + orientation(x,y)=arctan(Dy(x,y)/Dx(x,y)) + where both Dx(x,y)' and Dy(x,y)' signs are taken into account (as in cvCartToPolar function). After that mask is filled to indicate where the orientation is valid (see delta1 and delta2 description). + + Motion history image + Mask image; marks pixels where motion gradient data is correct. Output parameter. + Motion gradient orientation image; contains angles from 0 to ~360. + The function finds minimum (m(x,y)) and maximum (M(x,y)) mhi values over each pixel (x,y) neihborhood and assumes the gradient is valid only if min(delta1,delta2) <= M(x,y)-m(x,y) <= max(delta1,delta2). + The function finds minimum (m(x,y)) and maximum (M(x,y)) mhi values over each pixel (x,y) neihborhood and assumes the gradient is valid only if min(delta1,delta2) <= M(x,y)-m(x,y) <= max(delta1,delta2). + Aperture size of derivative operators used by the function: CV_SCHARR, 1, 3, 5 or 7 (see cvSobel). + + + + Finds all the motion segments and marks them in segMask with individual values each (1,2,...). It also returns a sequence of CvConnectedComp structures, one per each motion components. After than the motion direction for every component can be calculated with cvCalcGlobalOrientation using extracted mask of the particular component (using cvCmp) + + Motion history image + Image where the mask found should be stored, single-channel, 32-bit floating-point + Current time in milliseconds or other units + Segmentation threshold; recommended to be equal to the interval between motion history "steps" or greater + Vector containing ROIs of motion connected components. + + + + Calculates the general motion direction in the selected region and returns the angle between 0 and 360. At first the function builds the orientation histogram and finds the basic orientation as a coordinate of the histogram maximum. After that the function calculates the shift relative to the basic orientation as a weighted sum of all orientation vectors: the more recent is the motion, the greater is the weight. The resultant angle is a circular sum of the basic orientation and the shift. + + Motion gradient orientation image; calculated by the function cvCalcMotionGradient. + Mask image. It may be a conjunction of valid gradient mask, obtained with cvCalcMotionGradient and mask of the region, whose direction needs to be calculated. + Motion history image. + Current time in milliseconds or other units, it is better to store time passed to cvUpdateMotionHistory before and reuse it here, because running cvUpdateMotionHistory and cvCalcMotionGradient on large images may take some time. + Maximal duration of motion track in milliseconds, the same as in cvUpdateMotionHistory + The angle + + + + Calculates optical flow for a sparse feature set using iterative Lucas-Kanade method in pyramids + + First frame, at time t + Second frame, at time t + dt + Array of points for which the flow needs to be found + Size of the search window of each pyramid level + Maximal pyramid level number. If 0 , pyramids are not used (single level), if 1 , two levels are used, etc + Specifies when the iteration process of finding the flow for each point on each pyramid level should be stopped + Flags + Array of 2D points containing calculated new positions of input features in the second image + Array. Every element of the array is set to 1 if the flow for the corresponding feature has been found, 0 otherwise + Array of double numbers containing difference between patches around the original and moved points + the algorithm calculates the minimum eigen value of a 2x2 normal matrix of optical flow equations (this matrix is called a spatial gradient matrix in [Bouguet00]), divided by number of pixels in a window; if this value is less than minEigThreshold, then a corresponding feature is filtered out and its flow is not processed, so it allows to remove bad points and get a performance boost. + + + + Implements sparse iterative version of Lucas-Kanade optical flow in pyramids ([Bouguet00]). It calculates coordinates of the feature points on the current video frame given their coordinates on the previous frame. The function finds the coordinates with sub-pixel accuracy. + + Both parameters prev_pyr and curr_pyr comply with the following rules: if the image pointer is 0, the function allocates the buffer internally, calculates the pyramid, and releases the buffer after processing. Otherwise, the function calculates the pyramid and stores it in the buffer unless the flag CV_LKFLOW_PYR_A[B]_READY is set. The image should be large enough to fit the Gaussian pyramid data. After the function call both pyramids are calculated and the readiness flag for the corresponding image can be set in the next call (i.e., typically, for all the image pairs except the very first one CV_LKFLOW_PYR_A_READY is set). + First frame, at time t. + Second frame, at time t + dt . + Array of points for which the flow needs to be found. + Array of 2D points containing calculated new positions of input + Size of the search window of each pyramid level. + Maximal pyramid level number. If 0 , pyramids are not used (single level), if 1 , two levels are used, etc. + Array. Every element of the array is set to 1 if the flow for the corresponding feature has been found, 0 otherwise. + Array of double numbers containing difference between patches around the original and moved points. Optional parameter; can be NULL + Specifies when the iteration process of finding the flow for each point on each pyramid level should be stopped. + Miscellaneous flags + the algorithm calculates the minimum eigen value of a 2x2 normal matrix of optical flow equations (this matrix is called a spatial gradient matrix in [Bouguet00]), divided by number of pixels in a window; if this value is less than minEigThreshold, then a corresponding feature is filtered out and its flow is not processed, so it allows to remove bad points and get a performance boost. + + + + Computes dense optical flow using Gunnar Farneback's algorithm + + The first 8-bit single-channel input image + The second input image of the same size and the same type as prevImg + The computed flow image for x-velocity; will have the same size as prevImg + The computed flow image for y-velocity; will have the same size as prevImg + Specifies the image scale (!1) to build the pyramids for each image. pyrScale=0.5 means the classical pyramid, where each next layer is twice smaller than the previous + The number of pyramid layers, including the initial image. levels=1 means that no extra layers are created and only the original images are used + The averaging window size; The larger values increase the algorithm robustness to image noise and give more chances for fast motion detection, but yield more blurred motion field + The number of iterations the algorithm does at each pyramid level + Size of the pixel neighborhood used to find polynomial expansion in each pixel. The larger values mean that the image will be approximated with smoother surfaces, yielding more robust algorithm and more blurred motion field. Typically, poly n=5 or 7 + Standard deviation of the Gaussian that is used to smooth derivatives that are used as a basis for the polynomial expansion. For poly n=5 you can set poly sigma=1.1, for poly n=7 a good value would be poly sigma=1.5 + The operation flags + + + + Computes dense optical flow using Gunnar Farneback's algorithm + + The first 8-bit single-channel input image + The second input image of the same size and the same type as prevImg + The computed flow image; will have the same size as prevImg and type CV 32FC2 + Specifies the image scale (!1) to build the pyramids for each image. pyrScale=0.5 means the classical pyramid, where each next layer is twice smaller than the previous + The number of pyramid layers, including the initial image. levels=1 means that no extra layers are created and only the original images are used + The averaging window size; The larger values increase the algorithm robustness to image noise and give more chances for fast motion detection, but yield more blurred motion field + The number of iterations the algorithm does at each pyramid level + Size of the pixel neighborhood used to find polynomial expansion in each pixel. The larger values mean that the image will be approximated with smoother surfaces, yielding more robust algorithm and more blurred motion field. Typically, poly n=5 or 7 + Standard deviation of the Gaussian that is used to smooth derivatives that are used as a basis for the polynomial expansion. For poly n=5 you can set poly sigma=1.1, for poly n=7 a good value would be poly sigma=1.5 + The operation flags + + + + Estimate rigid transformation between 2 point sets. + + The points from the source image + The corresponding points from the destination image + Indicates if full affine should be performed + If success, the 2x3 rotation matrix that defines the Affine transform. Otherwise null is returned. + + + + Estimate rigid transformation between 2 images or 2 point sets. + + First image or 2D point set (as a 2 channel Matrix<float>) + First image or 2D point set (as a 2 channel Matrix<float>) + Indicates if full affine should be performed + The resulting Matrix<double> that represent the affine transformation + + + + Release the InputArray + + Pointer to the input array + + + + Release the input / output array + + Pointer to the input output array + + + + Release the input / output array + + Pointer to the input / output array + + + + Creates video writer structure. + + Name of the output video file. + 4-character code of codec used to compress the frames. For example, CV_FOURCC('P','I','M','1') is MPEG-1 codec, CV_FOURCC('M','J','P','G') is motion-jpeg codec etc. + Framerate of the created video stream. + Size of video frames. + If != 0, the encoder will expect and encode color frames, otherwise it will work with grayscale frames + The video writer + + + + Finishes writing to video file and releases the structure. + + pointer to video file writer structure + + + + Writes/appends one frame to video file. + + video writer structure. + the written frame + True on success, false otherwise + + + + Enables or disables the optimized code. + + + true if [use optimized]; otherwise, false. + + The function can be used to dynamically turn on and off optimized code (code that uses SSE2, AVX, and other instructions on the platforms that support it). It sets a global flag that is further checked by OpenCV functions. Since the flag is not checked in the inner OpenCV loops, it is only safe to call the function on the very top level in your application where you can be sure that no other OpenCV function is currently executed. + + + + Check if we have OpenCL + + + + + Get or set if OpenCL should be used + + + + + Gets a value indicating whether this device have open CL compatible gpu device. + + true if have open CL compatible gpu device; otherwise, false. + + + + Define an error callback that can be registered using cvRedirectError function + + The numeric code for error status + The source file name where error is encountered + A description of the error + The source file name where error is encountered + The line number in the source where error is encountered + Arbitrary pointer that is transparently passed to the error handler. + + + + + Camera calibration functions + + + + + Estimates intrinsic camera parameters and extrinsic parameters for each of the views + + The 3D location of the object points. The first index is the index of image, second index is the index of the point + The 2D image location of the points. The first index is the index of the image, second index is the index of the point + The size of the image, used only to initialize intrinsic camera matrix + The intrisinc parameters, might contains some initial values. The values will be modified by this function. + cCalibration type + The termination criteria + The output array of extrinsic parameters. + The final reprojection error + + + + Estimates transformation between the 2 cameras making a stereo pair. If we have a stereo camera, where the relative position and orientatation of the 2 cameras is fixed, and if we computed poses of an object relative to the fist camera and to the second camera, (R1, T1) and (R2, T2), respectively (that can be done with cvFindExtrinsicCameraParams2), obviously, those poses will relate to each other, i.e. given (R1, T1) it should be possible to compute (R2, T2) - we only need to know the position and orientation of the 2nd camera relative to the 1st camera. That's what the described function does. It computes (R, T) such that: + R2=R*R1, + T2=R*T1 + T + + The 3D location of the object points. The first index is the index of image, second index is the index of the point + The 2D image location of the points for camera 1. The first index is the index of the image, second index is the index of the point + The 2D image location of the points for camera 2. The first index is the index of the image, second index is the index of the point + The intrisinc parameters for camera 1, might contains some initial values. The values will be modified by this function. + The intrisinc parameters for camera 2, might contains some initial values. The values will be modified by this function. + Size of the image, used only to initialize intrinsic camera matrix + Different flags + The extrinsic parameters which contains: + R - The rotation matrix between the 1st and the 2nd cameras' coordinate systems; + T - The translation vector between the cameras' coordinate systems. + The essential matrix + Termination criteria for the iterative optimiziation algorithm + The fundamental matrix + + + + Estimates extrinsic camera parameters using known intrinsic parameters and extrinsic parameters for each view. The coordinates of 3D object points and their correspondent 2D projections must be specified. This function also minimizes back-projection error. + + The array of object points + The array of corresponding image points + The intrinsic parameters + Method for solving a PnP problem + The extrinsic parameters + + + + Computes projections of 3D points to the image plane given intrinsic and extrinsic camera parameters. + Optionally, the function computes jacobians - matrices of partial derivatives of image points as functions of all the input parameters w.r.t. the particular parameters, intrinsic and/or extrinsic. + The jacobians are used during the global optimization in cvCalibrateCamera2 and cvFindExtrinsicCameraParams2. + The function itself is also used to compute back-projection error for with current intrinsic and extrinsic parameters. + + Note, that with intrinsic and/or extrinsic parameters set to special values, the function can be used to compute just extrinsic transformation or just intrinsic transformation (i.e. distortion of a sparse set of points) + The array of object points. + Extrinsic parameters + Intrinsic parameters + Optional matrix supplied in the following order: dpdrot, dpdt, dpdf, dpdc, dpddist + The array of image points which is the projection of + + + + Calculates the matrix of an affine transform such that: + (x'_i,y'_i)^T=map_matrix (x_i,y_i,1)^T + where dst(i)=(x'_i,y'_i), src(i)=(x_i,y_i), i=0..2. + + Coordinates of 3 triangle vertices in the source image. If the array contains more than 3 points, only the first 3 will be used + Coordinates of the 3 corresponding triangle vertices in the destination image. If the array contains more than 3 points, only the first 3 will be used + The 2x3 rotation matrix that defines the Affine transform + + + + Estimate rigid transformation between 2 point sets. + + The points from the source image + The corresponding points from the destination image + Indicates if full affine should be performed + If success, the 2x3 rotation matrix that defines the Affine transform. Otherwise null is returned. + + + + Extrinsic camera parameters + + + + + Create the extrinsic camera parameters + + + + + Create the extrinsic camera parameters using the specific rotation and translation matrix + + The rotation vector + The translation vector + + + + Return true if the two extrinsic camera parameters are equal + + The other extrinsic camera parameters to compare with + True if the two extrinsic camera parameters are equal + + + + Get or Set the rodrigus rotation vector + + + + + Get or Set the translation vector ( as 3 x 1 matrix) + + + + + Get the 3 x 4 extrinsic matrix: [[r11 r12 r13 t1] [r21 r22 r23 t2] [r31 r32 r33 t2]] + + + + + Intrinsic camera parameters + + + + + Create the intrinsic camera parameters + + + + + Create the intrinsic camera parameters + + The number of distortion coefficients. Should be either 4, 5 or 8. + + + + Pre-computes the undistortion map - coordinates of the corresponding pixel in the distorted image for every pixel in the corrected image. Then, the map (together with input and output images) can be passed to cvRemap function. + + The width of the image + The height of the image + The output array of x-coordinates of the map + The output array of y-coordinates of the map + + + + computes various useful camera (sensor/lens) characteristics using the computed camera calibration matrix, image frame resolution in pixels and the physical aperture size + + Image width in pixels + Image height in pixels + Aperture width in realworld units (optional input parameter). Set it to 0 if not used + Aperture width in realworld units (optional input parameter). Set it to 0 if not used + Field of view angle in x direction in degrees + Field of view angle in y direction in degrees + Focal length in realworld units + The principal point in realworld units + The pixel aspect ratio ~ fy/f + + + + Similar to cvInitUndistortRectifyMap and is opposite to it at the same time. + The functions are similar in that they both are used to correct lens distortion and to perform the optional perspective (rectification) transformation. + They are opposite because the function cvInitUndistortRectifyMap does actually perform the reverse transformation in order to initialize the maps properly, while this function does the forward transformation. + + The observed point coordinates + Optional rectification transformation in object space (3x3 matrix). R1 or R2, computed by cvStereoRectify can be passed here. If null, the identity matrix is used. + Optional new camera matrix (3x3) or the new projection matrix (3x4). P1 or P2, computed by cvStereoRectify can be passed here. If null, the identity matrix is used. + + + + Transforms the image to compensate radial and tangential lens distortion. + The camera matrix and distortion parameters can be determined using cvCalibrateCamera2. For every pixel in the output image the function computes coordinates of the corresponding location in the input image using the formulae in the section beginning. Then, the pixel value is computed using bilinear interpolation. If the resolution of images is different from what was used at the calibration stage, fx, fy, cx and cy need to be adjusted appropriately, while the distortion coefficients remain the same + + The color type of the image + The depth of the image + The distorted image + The corrected image + + + + Return true if the two intrinsic camera parameters are equal + + The other intrinsic camera parameters to compare with + True if the two intrinsic camera parameters are equal + + + + Get or Set the DistortionCoeffs ( as a 5x1 (default), 4x1 or 8x1 matrix ). + The ordering of the distortion coefficients is the following: + (k1, k2, p1, p2[, k3 [,k4, k5, k6]]). + That is, the first 2 radial distortion coefficients are followed by 2 tangential distortion coefficients and then, optionally, by the third radial distortion coefficients. Such ordering is used to keep backward compatibility with previous versions of OpenCV + + + + + Get or Set the intrinsic matrix (3x3) + + + + + A unit quaternions that defines rotation in 3D + + + + + Create a quaternion with the specific values + + The W component of the quaternion: the value for cos(rotation angle / 2) + The X component of the vector: rotation axis * sin(rotation angle / 2) + The Y component of the vector: rotation axis * sin(rotation angle / 2) + The Z component of the vector: rotation axis * sin(rotation angle / 2) + + + + Set the value of the quaternions using euler angle + + Rotation around x-axis (roll) in radian + Rotation around y-axis (pitch) in radian + rotation around z-axis (yaw) in radian + + + + Get the equivalent euler angle + + Rotation around x-axis (roll) in radian + Rotation around y-axis (pitch) in radian + rotation around z-axis (yaw) in radian + + + + Fill the (3x3) rotation matrix with the value such that it represent the quaternions + + The (3x3) rotation matrix which values will be set to represent this quaternions + + + + Rotate the points in and save the result in . In-place operation is supported ( == ). + + The points to be rotated + The result of the rotation, should be the same size as , can be as well for inplace rotation + + + + Rotate the specific point and return the result + + The point to be rotated + The rotated point + + + + Multiply the current Quaternions with + + The other rotation + A composition of the two rotations + + + + Perform quaternions linear interpolation + + The other quaternions to interpolate with + If 0.0, the result is the same as this quaternions. If 1.0 the result is the same as + The linear interpolated quaternions + + + + Computes the multiplication of two quaternions + + The quaternions to be multiplied + The quaternions to be multiplied + The multiplication of two quaternions + + + + Get the quaternions that represent a rotation of 0 degrees. + + + + + Compute the conjugate of the quaternions + + + + + Check if this quaternions equals to + + The quaternions to be compared + True if two quaternions equals, false otherwise + + + + Get the string representation of the Quaternions + + The string representation + + + + The W component of the quaternion: the value for cos(rotation angle / 2) + + + + + The X component of the vector: rotation axis * sin(rotation angle / 2) + + + + + The Y component of the vector: rotation axis * sin(rotation angle / 2) + + + + + The Z component of the vector: rotation axis * sin(rotation angle / 2) + + + + + Get or set the equivalent axis angle representation. (x,y,z) is the rotation axis and |(x,y,z)| is the rotation angle in radians + + + + + Get the rotation axis of the quaternion + + + + + Get the rotation angle in radian + + + + + A (2x3) 2D rotation matrix. This Matrix defines an Affine Transform + + + + + The equivalent of cv::Mat + + + + + Matrix data allocator. Base class for Mat that handles the matrix data allocation and deallocation + + + + + Release resource associated with this object + + + + + Get the managed data used by the Mat + + + + + IImage interface + + + + + This type is very similar to InputArray except that it is used for input/output function parameters. + + + + + This is the proxy class for passing read-only input arrays into OpenCV functions. + + + + + The unmanaged pointer to the input array. + + + + + This type is very similar to InputArray except that it is used for output function parameters. + + + + + The unmanaged pointer to the output array + + + + + InputArrayOfArrays + + + + + The unmanaged pointer to the input/output array + + + + + Returns the min / max location and values for the image + + + Returns the min / max location and values for the image + + + + + Split current IImage into an array of gray scale images where each element + in the array represent a single color channel of the original image + + + An array of gray scale images where each element + in the array represent a single color channel of the original image + + + + + Save the image to the specific + + The file name of the image + + + + Convert this image into Bitmap, when available, data is shared with this image. + + The Bitmap, when available, data is shared with this image + + + + The size of this image + + + + + Get the pointer to the unmanaged memory + + + + + Get the number of channels for this image + + + + + Constructor used to deserialize runtime serialized object + + The serialization info + The streaming context + + + + A function used for runtime deserailization of the object + + Serialization info + Streaming context + + + + A function used for runtime serialization of the object + + Serialization info + streaming context + + + + Copy data from this Mat to the managed array + + The type of managed data array + The managed array where data will be copied to. + + + + Copy data from managed array to this Mat + + The type of managed data array + The managed array where data will be copied from + + + + Create an empty cv::Mat + + + + + Create a mat of the specific type. + + Number of rows in a 2D array. + Number of columns in a 2D array. + Mat element type + Number of channels + + + + Create a mat of the specific type. + + Size of the Mat + Mat element type + Number of channels + + + + Create a Mat header from existing data + + Number of rows in a 2D array. + Number of columns in a 2D array. + Mat element type + Number of channels + Pointer to the user data. Matrix constructors that take data and step parameters do not allocate matrix data. Instead, they just initialize the matrix header that points to the specified data, which means that no data is copied. This operation is very efficient and can be used to process external data using OpenCV functions. The external data is not automatically deallocated, so you should take care of it. + Number of bytes each matrix row occupies. The value should include the padding bytes at the end of each row, if any. + + + + Create multi-dimension mat using existing data. + + The sizes of each dimension + The type of data + The pointer to the unmanaged data + The steps + + + + Create a Mat header from existing data + + Size of the Mat + Mat element type + Number of channels + Pointer to the user data. Matrix constructors that take data and step parameters do not allocate matrix data. Instead, they just initialize the matrix header that points to the specified data, which means that no data is copied. This operation is very efficient and can be used to process external data using OpenCV functions. The external data is not automatically deallocated, so you should take care of it. + Number of bytes each matrix row occupies. The value should include the padding bytes at the end of each row, if any. + + + + Load the Mat from file + + The name of the file + File loading method + + + + Create a mat header for the specific ROI + + The mat where the new Mat header will share data from + The region of interest + + + + Convert this Mat to UMat + + Access type + The UMat + + + + Allocates new array data if needed. + + New number of rows. + New number of columns. + New matrix element depth type. + New matrix number of channels + + + + Gets the binary data from the specific indices. + + The indices. + + Indices of length more than 2 is not implemented + + + + Copy the data in this cv::Mat to an output array + + The output array to copy to + Operation mask. Its non-zero elements indicate which matrix elements need to be copied. + + + + Converts an array to another data type with optional scaling. + + Output matrix; if it does not have a proper size or type before the operation, it is reallocated. + Desired output matrix type or, rather, the depth since the number of channels are the same as the input has; if rtype is negative, the output matrix will have the same type as the input. + Optional scale factor. + Optional delta added to the scaled values. + + + + Changes the shape and/or the number of channels of a 2D matrix without copying the data. + + New number of channels. If the parameter is 0, the number of channels remains the same. + New number of rows. If the parameter is 0, the number of rows remains the same. + A new mat header that has different shape + + + + Release all the unmanaged memory associated with this object. + + + + + Pointer to the InputArray + + + + + Pointer to the OutputArray + + + + + Pointer to the InputOutputArray + + + + + Get the minimum and maximum value across all channels of the mat + + The range that contains the minimum and maximum values + + + + Convert this Mat to Image + + The type of Color + The type of Depth + The image + + + + Set the mat to the specific value + + The value to set to + Optional mask + + + + Set the mat to the specific value + + The value to set to + Optional mask + + + + Returns the min / max location and values for the image + + The maximum locations for each channel + The maximum values for each channel + The minimum locations for each channel + The minimum values for each channel + + + + Create a Mat object with data pointed towards the specific row of the original matrix + + The row number + A Mat object with data pointed towards the specific row of the original matrix + + + + Save this image to the specific file. + + The name of the file to be saved to + The image format is chosen depending on the filename extension, see cvLoadImage. Only 8-bit single-channel or 3-channel (with 'BGR' channel order) images can be saved using this function. If the format, depth or channel order is different, use cvCvtScale and cvCvtColor to convert it before saving, or use universal cvSave to save the image to XML or YAML format. + + + + Make a clone of the current Mat + + A clone fo the current Mat + + + + Split current Image into an array of gray scale images where each element + in the array represent a single color channel of the original image + + + An array of gray scale images where each element + in the array represent a single color channel of the original image + + + + + Compares two Mats and check if they are equal + + The other mat to compare with + True if the two Mats are equal + + + + Computes a dot-product of two vectors. + + Another dot-product operand + The dot-product of two vectors. + + + + Computes a cross-product of two 3-element vectors. + + Another cross-product operand. + Cross-product of two 3-element vectors. + + + + The method removes one or more rows from the bottom of the matrix + + + + + Adds elements to the bottom of the matrix + + + + + Gets or sets the data as byte array. + + + The bytes. + + + + + The size of this matrix + + + + + The number of rows + + + + + The number of columns + + + + + Pointer to the beginning of the raw data + + + + + Step + + + + + The size of the elements in this matrix + + + + + Get the width of the mat + + + + + Get the height of the mat. + + + + + The Get property provide a more efficient way to convert Image<Gray, Byte>, Image<Bgr, Byte> and Image<Bgra, Byte> into Bitmap + such that the image data is shared with Bitmap. + If you change the pixel value on the Bitmap, you change the pixel values on the Image object as well! + For other types of image this property has the same effect as ToBitmap() + Take extra caution not to use the Bitmap after the Mat object is disposed + The Set property convert the bitmap to this Image type. + + + + + Get an array of the size of the dimensions. e.g. if the mat is 9x10x11, the array of {9, 10, 11} will be returned. + + + + + True if the data is continues + + + + + True if the matrix is a submatrix of another matrix + + + + + Depth type + + + + + True if the Mat is empty + + + + + Number of channels + + + + + The method returns the number of array elements (a number of pixels if the array represents an image) + + + + + The matrix dimensionality + + + + + Create an empty (2x3) 2D rotation matrix + + + + + Create a (2x3) 2D rotation matrix + + Center of the rotation in the source image + The rotation angle in degrees. Positive values mean couter-clockwise rotation (the coordiate origin is assumed at top-left corner). + Isotropic scale factor. + + + + Set the values of the rotation matrix + + Center of the rotation in the source image + The rotation angle in degrees. Positive values mean couter-clockwise rotation (the coordiate origin is assumed at top-left corner). + Isotropic scale factor. + + + + Rotate the , the value of the input will be changed. + + The points to be rotated, its value will be modified + + + + Rotate the , the value of the input will be changed. + + The points to be rotated, its value will be modified + + + + Rotate the , the value of the input will be changed. + + The line segments to be rotated + + + + Rotate the single channel Nx2 matrix where N is the number of 2D points. The value of the matrix is changed after rotation. + + The depth of the points, must be double or float + The N 2D-points to be rotated + + + + Return a clone of the Matrix + + A clone of the Matrix + + + + Create a rotation matrix for rotating an image + + The rotation angle in degrees. Positive values mean couter-clockwise rotation (the coordiate origin is assumed at image centre). + The rotation center + The source image size + The minimun size of the destination image + The rotation matrix that rotate the source image to the destination image. + + + + A (3x1) Rodrigues rotation vector. Rotation vector is a compact representation of rotation matrix. Direction of the rotation vector is the rotation axis and the length of the vector is the rotation angle around the axis. + + + + + A Matrix is a wrapper to cvMat of OpenCV. + + Depth of this matrix (either Byte, SByte, Single, double, UInt16, Int16 or Int32) + + + + Wrapped CvArr + + The type of elements in this CvArray + + + + The size of the elements in the CvArray, it is the cached value of Marshal.SizeOf(typeof(TDepth)). + + + + + The pinned GCHandle to _array; + + + + + Allocate data for the array + + The number of rows + The number of columns + The number of channels of this cvArray + + + + Calculates and returns the Euclidean dot product of two arrays. + src1 dot src2 = sumI(src1(I)*src2(I)) + + In case of multiple channel arrays the results for all channels are accumulated. In particular, cvDotProduct(a,a), where a is a complex vector, will return ||a||^2. The function can process multi-dimensional arrays, row by row, layer by layer and so on. + The other Array to apply dot product with + src1 dot src2 + + + + Check that every array element is neither NaN nor +- inf. The functions also check that each value + is between and . in the case of multi-channel arrays each channel is processed + independently. If some values are out of range, position of the first outlier is stored in pos, + and then the functions return false. + + The inclusive lower boundary of valid values range + The exclusive upper boundary of valid values range + This will be filled with the position of the first outlier + True if all values are in range + + + + Reduces matrix to a vector by treating the matrix rows/columns as a set of 1D vectors and performing the specified operation on the vectors until a single row/column is obtained. + + + The function can be used to compute horizontal and vertical projections of an raster image. + In case of CV_REDUCE_SUM and CV_REDUCE_AVG the output may have a larger element bit-depth to preserve accuracy. + And multi-channel arrays are also supported in these two reduction modes + + The destination single-row/single-column vector that accumulates somehow all the matrix rows/columns + The dimension index along which the matrix is reduce. + The reduction operation type + The type of depth of the reduced array + + + + Copy the current array to + + The destination Array + + + + Set the element of the Array to , using the specific + + The value to be set + The mask for the operation + + + + Set the element of the Array to , using the specific + + The value to be set + The mask for the operation + + + + Inplace fills Array with uniformly distributed random numbers + + the inclusive lower boundary of random numbers range + the exclusive upper boundary of random numbers range + + + + Inplace fills Array with normally distributed random numbers + + the mean value of random numbers + the standard deviation of random numbers + + + + Initializes scaled identity matrix + + The value on the diagonal + + + + Set the values to zero + + + + + Initialize the identity matrix + + + + + Inplace multiply elements of the Array by + + The scale to be multiplyed + + + + Inplace elementwise multiply the current Array with + + The other array to be elementwise multiplied with + + + + Free the _dataHandle if it is set + + + + + Inplace compute the elementwise minimum value + + The value to compare with + + + + Inplace elementwise minimize the current Array with + + The other array to be elementwise minimized with this array + + + + Inplace compute the elementwise maximum value with + + The value to be compare with + + + + Inplace elementwise maximize the current Array with + + The other array to be elementwise maximized with this array + + + + Inplace And operation with + + The other array to perform AND operation + + + + Inplace Or operation with + + The other array to perform OR operation + + + + Inplace compute the complement for all array elements + + + + + Save the CvArray as image + + The name of the image to save + + + + Get the xml schema + + the xml schema + + + + Function to call when deserializing this object from XML + + The xml reader + + + + Function to call when serializing this object to XML + + The xml writer + + + + A function used for runtime serialization of the object + + Serialization info + Streaming context + + + + A function used for runtime deserailization of the object + + Serialization info + Streaming context + + + + The Mat header that represent this CvArr + + + + + The unmanaged pointer to the input array. + + + + + The unmanaged pointer to the output array. + + + + + The unmanaged pointer to the input output array. + + + + + Get the umat representation of this mat + + The UMat + + + + Get or set the Compression Ratio for serialization. A number between 0 - 9. + 0 means no compression at all, while 9 means best compression + + + + + Get the size of element in bytes + + + + The pointer to the internal structure + + + + Get the size of the array + + + + + Get the width (#Cols) of the cvArray. + If ROI is set, the width of the ROI + + + + + Get the height (#Rows) of the cvArray. + If ROI is set, the height of the ROI + + + + + Get the number of channels of the array + + + + + The number of rows for this array + + + + + The number of cols for this array + + + + + Get or Set an Array of bytes that represent the data in this array + + Should only be used for serialization & deserialization + + + + Get the underneath managed array + + + + + Sum of diagonal elements of the matrix + + + + + The norm of this Array + + + + + Get the Mat header that represent this CvArr + + + + + The default constructor which allows Data to be set later on + + + + + Create a Matrix (only header is allocated) using the Pinned/Unmanaged . The is not freed by the disposed function of this class + + The number of rows + The number of cols + The Pinned/Unmanaged data, the data must not be release before the Matrix is Disposed + The step (row stride in bytes) + The caller is responsible for allocating and freeing the block of memory specified by the data parameter, however, the memory should not be released until the related Matrix is released. + + + + Create a Matrix (only header is allocated) using the Pinned/Unmanaged . The is not freed by the disposed function of this class + + The number of rows + The number of cols + The number of channels + The Pinned/Unmanaged data, the data must not be release before the Matrix is Disposed + The step (row stride in bytes) + The caller is responsible for allocating and freeing the block of memory specified by the data parameter, however, the memory should not be released until the related Matrix is released. + + + + Create a Matrix (only header is allocated) using the Pinned/Unmanaged . The is not freed by the disposed function of this class + + The number of rows + The number of cols + The Pinned/Unmanaged data, the data must not be release before the Matrix is Disposed + The caller is responsible for allocating and freeing the block of memory specified by the data parameter, however, the memory should not be released until the related Matrix is released. + + + + Create a matrix of the specific size + + The number of rows (height) + The number of cols (width) + + + + Create a matrix of the specific size + + The size of the matrix + + + + Create a matrix of the specific size and channels + + The number of rows + The number of cols + The number of channels + + + + Create a matrix using the specific data + + + + + Create a matrix using the specific + + the data for this matrix + + + + Return a matrix of the same size with all elements equals 0 + + A matrix of the same size with all elements equals 0 + + + + Make a copy of this matrix + + A copy if this matrix + + + + Get reshaped matrix which also share the same data with the current matrix + + the new number of channles + The new number of rows + A reshaped matrix which also share the same data with the current matrix + + + + Convert this matrix to different depth + + The depth type to convert to + Matrix of different depth + + + Returns the transpose of this matrix + The transpose of this matrix + + + + Allocate data for the array + + The number of rows + The number of columns + The number of channels for this matrix + + + + Get a submatrix corresponding to a specified rectangle + + the rectangle area of the sub-matrix + A submatrix corresponding to a specified rectangle + + + + Get the specific row of the matrix + + the index of the row to be reterived + the specific row of the matrix + + + + Return the matrix corresponding to a specified row span of the input array + + Zero-based index of the starting row (inclusive) of the span + Zero-based index of the ending row (exclusive) of the span + Index step in the row span. That is, the function extracts every delta_row-th row from start_row and up to (but not including) end_row + A matrix corresponding to a specified row span of the input array + + + + Get the specific column of the matrix + + the index of the column to be reterived + the specific column of the matrix + + + + Get the Matrix, corresponding to a specified column span of the input array + + Zero-based index of the ending column (exclusive) of the span + Zero-based index of the selected column + the specific column span of the matrix + + + + Return the specific diagonal elements of this matrix + + Array diagonal. Zero corresponds to the main diagonal, -1 corresponds to the diagonal above the main etc., 1 corresponds to the diagonal below the main etc + The specific diagonal elements of this matrix + + + + Return the main diagonal element of this matrix + + The main diagonal element of this matrix + + + + Return the matrix without a specified row span of the input array + + Zero-based index of the starting row (inclusive) of the span + Zero-based index of the ending row (exclusive) of the span + The matrix without a specified row span of the input array + + + + Return the matrix without a specified column span of the input array + + Zero-based index of the starting column (inclusive) of the span + Zero-based index of the ending column (exclusive) of the span + The matrix without a specified column span of the input array + + + + Concate the current matrix with another matrix vertically. If this matrix is n1 x m and is n2 x m, the resulting matrix is (n1+n2) x m. + + The other matrix to concate + A new matrix that is the vertical concatening of this matrix and + + + + Concate the current matrix with another matrix horizontally. If this matrix is n x m1 and is n x m2, the resulting matrix is n x (m1 + m2). + + The other matrix to concate + A matrix that is the horizontal concatening of this matrix and + + + + Returns the min / max locations and values for the matrix + + + + Elementwise add another matrix with the current matrix + The matrix to be added to the current matrix + The result of elementwise adding mat2 to the current matrix + + + Elementwise add a color to the current matrix + The value to be added to the current matrix + The result of elementwise adding from the current matrix + + + Elementwise subtract another matrix from the current matrix + The matrix to be subtracted to the current matrix + The result of elementwise subtracting mat2 from the current matrix + + + Elementwise subtract a color to the current matrix + The value to be subtracted from the current matrix + The result of elementwise subtracting from the current matrix + + + + result = val - this + + The value which subtract this matrix + val - this + + + Multiply the current matrix with + The scale to be multiplied + The scaled matrix + + + Multiply the current matrix with + The matrix to be multiplied + Result matrix of the multiplication + + + + Elementwise add with + + The Matrix to be added + The Matrix to be added + The elementwise sum of the two matrices + + + + Elementwise add with + + The Matrix to be added + The value to be added + The matrix plus the value + + + + + + + The Matrix to be added + The value to be added + The matrix plus the value + + + + - + + The Matrix to be subtracted + The value to be subtracted + - + + + + - + + The Matrix to be subtracted + The matrix to subtract + - + + + + - + + The Matrix to be subtracted + The value to be subtracted + - + + + + * + + The Matrix to be multiplied + The value to be multiplied + * + + + + * + + The matrix to be multiplied + The value to be multiplied + * + + + + / + + The Matrix to be divided + The value to be divided + / + + + + * + + The Matrix to be multiplied + The Matrix to be multiplied + * + + + + Constructor used to deserialize runtime serialized object + + The serialization info + The streaming context + + + + Release the matrix and all the memory associate with it + + + + + This function compare the current matrix with and returns the comparison mask + + The other matrix to compare with + Comparison type + The comparison mask + + + + Get all channels for the multi channel matrix + + Each individual channel of this matrix + + + + Return true if every element of this matrix equals elements in + + The other matrix to compare with + true if every element of this matrix equals elements in + + + + Get the underneath managed array + + + + + Get or Set the data for this matrix + + + + + Get the number of channels for this matrix + + + + + The MCvMat structure format + + + + + Returns determinant of the square matrix + + + + + Return the sum of the elements in this matrix + + + + + Get or Set the value in the specific and + + the row of the element + the col of the element + The element on the specific and + + + + Get the size of the array + + + + + Constructor used to deserialize 3D rotation vector + + The serialization info + The streaming context + + + + Create a 3D rotation vector (3x1 Matrix). + + + + + Create a rotation vector using the specific values + + The values of the (3 x 1) Rodrigues rotation vector + + + + Get or Set the (3x3) rotation matrix represented by this rotation vector. + + + + + Capture images from either camera or video file. + + + + + The interface to request a duplex image capture + + + + + Request a frame from server + + + + + Request a frame from server which is half width and half height + + + + The interface that is used for WCF to provide a image capture service + + + Capture a Bgr image frame + A Bgr image frame + + + Capture a Bgr image frame that is half width and half heigh + A Bgr image frame that is half width and half height + + + + the type of flipping + + + + + Create a capture using the specific camera + + The capture type + + + Create a capture using the default camera + + + Create a capture using the specific camera + The index of the camera to create capture from, starting from 0 + + + + Create a capture from file or a video stream + + The name of a file, or an url pointed to a stream. + + + + Release the resource for this capture + + + + + Obtain the capture property + + The index for the property + The value of the specific property + + + + Sets the specified property of video capturing + + Property identifier + Value of the property + True if success + + + + Grab a frame + + True on success + + + + Start the grab process in a separate thread. Once started, use the ImageGrabbed event handler and RetrieveGrayFrame/RetrieveBgrFrame to obtain the images. + + + + + Pause the grab process if it is running. + + + + + Stop the grabbing thread + + + + + Retrieve a Gray image frame after Grab() + + The output image + The channel to retrieve image + True if the frame can be retrieved + + + + Capture a Bgr image frame + + A Bgr image frame. If no more frames are available, null will be returned. + + + + Capture a Bgr image frame that is half width and half height. + Mainly used by WCF when sending image to remote locations in a bandwidth conservative scenario + + Internally, this is a cvQueryFrame operation follow by a cvPyrDown + A Bgr image frame that is half width and half height + + + + Query a frame duplexly over WCF + + + + + Query a small frame duplexly over WCF + + + + + Get the type of the capture module + + + + + Get and set the flip type + + + + + Get or Set if the captured image should be flipped horizontally + + + + + Get or Set if the captured image should be flipped vertically + + + + The width of this capture + + + The height of this capture + + + + The event to be called when an image is grabbed + + + + + The type of capture source + + + + + Capture from camera + + + + + Capture from file using HighGUI + + + + + The interface for DuplexCaptureCallback + + + + + Function to call when an image is received + + The image received + + + + Kinect Camera capture + + + + + Create the Kinect Camera capture object + + The kinect device type + The output mode + + + + Retrieve Gray frame from Kinect + + A Gray frame from Kinect + + + + Retrieve Bgr frame from Kinect + + A Bgr frame from Kinect + + + + Retrieve disparity map (in pixels) from Kinect + + The disparity map from Kinect + + + + Retrieve disparity map (in pixels) from Kinect + + The disparity map from Kinect + + + + Retrieve the valid depth map from Kinect + + The valid depth map from Kinect + + + + Retrieve the depth map from Kinect (in mm) + + The depth map from Kinect (in mm) + + + + Retrieve all the points (x, y, z position in meters) from Kinect, row by row. + + All the points (x, y, z position in meters) from Kinect, row by row. + + + + Get an enumerator of the colored points from Kinect. This function can only be called after the Grab() function. + + The mask that controls which points should be returned. You can use the result from RetrieveValidDepthMap() function. Use null if you want all points to be returned + An enumerator of the colored points from Kinect + + + + Given the minimum distance in mm, return the maximum valid disparity value. + + The minimum distance that an object is away from the camera + The maximum valid disparity + + + + Camera output mode + + + + + VGA resolution + + + + + SXVGA resolution + + + + + SXVGA resolution + + + + + QVGA resolution + + + + + QVGA resolution + + + + + Open ni data type used by the retrieve functions + + + + + Depth values in mm (CV_16UC1) + + + + + XYZ in meters (CV_32FC3) + + + + + Disparity in pixels (CV_8UC1) + + + + + Disparity in pixels (CV_32FC1) + + + + + CV_8UC1 + + + + + Bgr image + + + + + Gray Image + + + + + Kinect device type + + + + + kinect + + + + + Asus xtion + + + + + The Cascade Classifier + + + + + A dummy constructor that mainly aimed for those who would like to inherite this class + + + + Create a CascadeClassifier from the specific file + The name of the file that contains the CascadeClassifier + + + + Load the cascade classifier from a file node + + The file node, The file may contain a new cascade classifier only. + True if the classifier can be imported. + + + + Finds rectangular regions in the given image that are likely to contain objects the cascade has been trained for and returns those regions as a sequence of rectangles. + The function scans the image several times at different scales. Each time it considers overlapping regions in the image. + It may also apply some heuristics to reduce number of analyzed regions, such as Canny prunning. + After it has proceeded and collected the candidate rectangles (regions that passed the classifier cascade), it groups them and returns a sequence of average rectangles for each large enough group. + + The image where the objects are to be detected from + The factor by which the search window is scaled between the subsequent scans, for example, 1.1 means increasing window by 10% + Minimum number (minus 1) of neighbor rectangles that makes up an object. All the groups of a smaller number of rectangles than min_neighbors-1 are rejected. If min_neighbors is 0, the function does not any grouping at all and returns all the detected candidate rectangles, which may be useful if the user wants to apply a customized grouping procedure. Use 3 for default. + Minimum window size. Use Size.Empty for default, where it is set to the size of samples the classifier has been trained on (~20x20 for face detection) + Maximum window size. Use Size.Empty for default, where the parameter will be ignored. + The objects detected, one array per channel + + + + Release the CascadeClassifier Object and all the memory associate with it + + + + + Get if the cascade is old format + + + + + Get the original window size + + + + + Defines a Bgr (Blue Green Red) color + + + + + A color type + + + + + The equivalent MCvScalar value + + + + + Get the dimension of the color type + + + + + The MCvScalar representation of the color intensity + + + + Create a BGR color using the specific values + The blue value for this color + The green value for this color + The red value for this color + + + + Create a Bgr color using the System.Drawing.Color + + System.Drawing.Color + + + + Return true if the two color equals + + The other color to compare with + true if the two color equals + + + + Represent this color as a String + + The string representation of this color + + + Get or set the intensity of the blue color channel + + + Get or set the intensity of the green color channel + + + Get or set the intensity of the red color channel + + + + Get the dimension of this color + + + + + Get or Set the equivalent MCvScalar value + + + + + Defines a Bgra (Blue Green Red Alpha) color + + + + + The MCvScalar representation of the color intensity + + + + Create a BGRA color using the specific values + The blue value for this color + The green value for this color + The red value for this color + The alpha value for this color + + + + Return true if the two color equals + + The other color to compare with + true if the two color equals + + + + Represent this color as a String + + The string representation of this color + + + Get or set the intensity of the blue color channel + + + Get or set the intensity of the green color channel + + + Get or set the intensity of the red color channel + + + Get or set the intensity of the alpha color channel + + + + Get the dimension of this color + + + + + Get or Set the equivalent MCvScalar value + + + + + Attribute used to specify color information + + + + + The code which is used for color conversion + + + + + The code which is used for color conversion + + + + + The code which is used for color conversion + + + + Defines a Gray color + + + + The MCvScalar representation of the color intensity + + + + Create a Gray color with the given intensity + The intensity for this color + + + + Returns the hash code for this color + + the hash code + + + + Return true if the two color equals + + The other color to compare with + true if the two color equals + + + + Represent this color as a String + + The string representation of this color + + + The intensity of the gray color + The intensity of the gray color + + + + Get the dimension of this color + + + + + Get or Set the equivalent MCvScalar value + + + + + Defines a Hls (Hue Lightness Satuation) color + + + + + The MCvScalar representation of the color intensity + + + + Create a Hls color using the specific values + The hue value for this color ( 0 < hue < 180 ) + The satuation for this color + The lightness for this color + + + + Return true if the two color equals + + The other color to compare with + true if the two color equals + + + + Represent this color as a String + + The string representation of this color + + + Get or set the intensity of the hue color channel ( 0 < hue < 180 ) + + + Get or set the intensity of the lightness color channel + + + Get or set the intensity of the satuation color channel + + + + Get the dimension of this color + + + + + Get or Set the equivalent MCvScalar value + + + + + Defines a HSV (Hue Satuation Value) color + + + + + The MCvScalar representation of the color intensity + + + + Create a HSV color using the specific values + The hue value for this color ( 0 < hue < 180 ) + The satuation value for this color + The value for this color + + + + Return true if the two color equals + + The other color to compare with + true if the two color equals + + + + Represent this color as a String + + The string representation of this color + + + Get or set the intensity of the hue color channel ( 0 < hue < 180 ) + + + Get or set the intensity of the satuation color channel + + + Get or set the intensity of the value color channel + + + + Get the dimension of this color + + + + + Get or Set the equivalent MCvScalar value + + + + + Defines a CIE Lab color + + + + + The MCvScalar representation of the color intensity + + + + Create a CIE Lab color using the specific values + The z value for this color + The y value for this color + The x value for this color + + + + Return true if the two color equals + + The other color to compare with + true if the two color equals + + + + Represent this color as a String + + The string representation of this color + + + Get or set the intensity of the x color channel + + + Get or set the intensity of the y color channel + + + Get or set the intensity of the z color channel + + + + Get the dimension of this color + + + + + Get or Set the equivalent MCvScalar value + + + + + Defines a CIE Luv color + + + + + The MCvScalar representation of the color intensity + + + + Create a CIE Lab color using the specific values + The z value for this color + The y value for this color + The x value for this color + + + + Return true if the two color equals + + The other color to compare with + true if the two color equals + + + + Represent this color as a String + + The string representation of this color + + + The intensity of the x color channel + + + The intensity of the y color channel + + + The intensity of the z color channel + + + + Get the dimension of this color + + + + + Get or Set the equivalent MCvScalar value + + + + + Defines a Rgb (Red Green Blue) color + + + + + The MCvScalar representation of the color intensity + + + + Create a RGB color using the specific values + The blue value for this color + The green value for this color + The red value for this color + + + + Create a Rgb color using the System.Drawing.Color + + System.Drawing.Color + + + + Return true if the two color equals + + The other color to compare with + true if the two color equals + + + + Represent this color as a String + + The string representation of this color + + + Get or set the intensity of the red color channel + + + Get or set the intensity of the green color channel + + + Get or set the intensity of the blue color channel + + + + Get the dimension of this color + + + + + Get or Set the equivalent MCvScalar value + + + + + Defines a Bgr565 (Blue Green Red) color + + + + + The MCvScalar representation of the color intensity + + + + Create a Bgr565 color using the specific values + The blue value for this color + The green value for this color + The red value for this color + + + + Create a Bgr565 color using the System.Drawing.Color + + System.Drawing.Color + + + + Return true if the two color equals + + The other color to compare with + true if the two color equals + + + + Represent this color as a String + + The string representation of this color + + + Get or set the intensity of the red color channel + + + Get or set the intensity of the green color channel + + + Get or set the intensity of the blue color channel + + + + Get the dimension of this color + + + + + Get or Set the equivalent MCvScalar value + + + + + Defines a Rgba (Red Green Blue Alpha) color + + + + + The MCvScalar representation of the color intensity + + + + Create a RGBA color using the specific values + The blue value for this color + The green value for this color + The red value for this color + The alpha value for this color + + + + Return true if the two color equals + + The other color to compare with + true if the two color equals + + + + Represent this color as a String + + The string representation of this color + + + Get or set the intensity of the red color channel + + + Get or set the intensity of the green color channel + + + Get or set the intensity of the blue color channel + + + Get or set the intensity of the alpha color channel + + + + Get the dimension of this color + + + + + Get or Set the equivalent MCvScalar value + + + + + Defines a Xyz color (CIE XYZ.Rec 709 with D65 white point) + + + + + The MCvScalar representation of the color intensity + + + + Create a Xyz color using the specific values + The z value for this color + The y value for this color + The x value for this color + + + + Return true if the two color equals + + The other color to compare with + true if the two color equals + + + + Represent this color as a String + + The string representation of this color + + + Get or set the intensity of the z color channel + + + Get or set the intensity of the y color channel + + + Get or set the intensity of the x color channel + + + + Get the dimension of this color + + + + + Get or Set the equivalent MCvScalar value + + + + + Defines a Ycc color (YCrCb JPEG) + + + + + The MCvScalar representation of the color intensity + + + + Create a Ycc color using the specific values + The Y value for this color + The Cr value for this color + The Cb value for this color + + + + Return true if the two color equals + + The other color to compare with + true if the two color equals + + + + Represent this color as a String + + The string representation of this color + + + Get or set the intensity of the Y color channel + + + Get or set the intensity of the Cr color channel + + + Get or set the intensity of the Cb color channel + + + + Get the dimension of this color + + + + + Get or Set the equivalent MCvScalar value + + + + + A convolution kernel + + + + + The center of the convolution kernel + + + + + Create a convolution kernel with the specific number of and + + The number of raws for the convolution kernel + The number of columns for the convolution kernel + + + + Create a convolution kernel using the specific matrix and center + + The values for the convolution kernel + The center of the kernel + + + + Create a convolution kernel using the specific floating point matrix + + The values for the convolution kernel + + + + Create a convolution kernel using the specific floating point matrix and center + + The values for the convolution kernel + The center for the convolution kernel + + + Get a flipped copy of the convolution kernel + The type of the flipping + The flipped copy of this image + + + + Obtain the transpose of the convolution kernel + + A transposed convolution kernel + + + + The center of the convolution kernel + + + + + CvBlob + + + + + Get the contour that defines the blob + + The contour of the blob + + + + Implicit operator for IntPtr + + The CvBlob + The unmanaged pointer for this object + + + + Get the blob label + + + + + The minimum bounding box of the blob + + + + + Get the Blob Moments + + + + + The centroid of the blob + + + + + The number of pixels in this blob + + + + + Pointer to the blob + + + + + Blob Moments + + + + + Mement 00 + + + + + Moment 10 + + + + + Moment 01 + + + + + Moment 11 + + + + + Moment 20 + + + + + Moment 02 + + + + + Central moment 11 + + + + + Central moment 20 + + + + + Central moment 02 + + + + + Normalized central moment 11 + + + + + Normalized central moment 20 + + + + + Normalized central moment 02 + + + + + Hu moment 1 + + + + + Hu moment 2 + + + + + Wrapper for the CvBlob detection functions. + The Ptr property points to the label image of the cvb::cvLabel function. + + Algorithm based on paper "A linear-time component-labeling algorithm using contour tracing technique" of Fu Chang, Chun-Jen Chen and Chi-Jen Lu. + + + + Detect blobs from input image. + + The input image + The storage for the detected blobs + Number of pixels that has been labeled. + + + + Calculates mean color of a blob in an image. + + The blob. + The original image + Average color + + + + Draw the blobs on the image + + The binary mask. + The blobs. + Drawing type. + The alpha value. 1.0 for solid color and 0.0 for transparent + The images with the blobs drawn + + + + Get the binary mask for the blobs listed in the CvBlobs + + The blobs + The binary mask for the specific blobs + + + + Release all the unmanaged memory associated with this Blob detector + + + + + Blob rendering type + + + + + Render each blog with a different color. + + + + + Render centroid. + + + + + Render bounding box. + + + + + Render angle. + + + + + Print blob data to log out. + + + + + Print blob data to std out. + + + + + The default rendering type + + + + + CvBlobs + + + + + Create a new CvBlobs + + + + + Release all the unmanaged resources used by this CvBlobs + + + + + Filter blobs by area. Those blobs whose areas are not in range will be erased from the input list of blobs. + + Minimun area + Maximun area + + + + Adds the specified label and blob to the dictionary. + + The label of the blob + The blob + + + + Determines whether the CvBlobs contains the specified label. + + The label (key) to be located + True if the CvBlobs contains an element with the specific label + + + + Removes the blob with the specific label + + The label of the blob + True if the element is successfully found and removed; otherwise, false. + + + + Gets the blob associated with the specified label. + + The blob label + When this method returns, contains the blob associated with the specified labe, if the label is found; otherwise, null. This parameter is passed uninitialized. + True if the blobs contains a blob with the specific label; otherwise, false + + + + Adds the specified label and blob to the CvBlobs. + + The structure representing the label and blob to add to the CvBlobs + + + + Removes all keys and values + + + + + Determines whether the CvBlobs contains a specific label and CvBlob. + + The label and blob to be located + True if the specific label and blob is found in the CvBlobs; otherwise, false. + + + + Copies the elements to the , starting at the specific arrayIndex. + + The one-dimensional array that is the defination of the elements copied from the CvBlobs. The array must have zero-base indexing. + The zero-based index in at which copying begins. + + + + Removes a key and value from the dictionary. + + The structure representing the key and value to be removed + True if the key are value is sucessfully found and removed; otherwise false. + + + + Returns an enumerator that iterates through the collection. + + An enumerator that can be used to iterate through the collection + + + + Returns a pointer to CvBlobs + + Pointer to CvBlobs + + + + Get a collection containing the labels in the CvBlobs + + + + + Get a collection containing the blobs in the CvBlobs. + + + + + Get the blob with the speicific label. Set function is not implemented + + The label for the blob + + + + Gets the number of label/Blob pairs contained in the collection + + + + + Always false + + + + + CvTrack + + + + + Track identification number + + + + + Label assigned to the blob related to this track + + + + + X min + + + + + X max + + + + + Y min + + + + + y max + + + + + Centroid + + + + + Indicates how much frames the object has been in scene + + + + + Indicates number of frames that has been active from last inactive period. + + + + + Indicates number of frames that has been missing. + + + + + Compares CvTrack for equality + + The other track to compares with + True if the two CvTrack are equal; otherwise false. + + + + Get the minimun bounding rectanble for this track + + + + + Blobs tracking + + + Tracking based on: + A. Senior, A. Hampapur, Y-L Tian, L. Brown, S. Pankanti, R. Bolle. Appearance Models for + Occlusion Handling. Second International workshop on Performance Evaluation of Tracking and + Surveillance Systems & CVPR'01. December, 2001. + (http://www.research.ibm.com/peoplevision/PETS2001.pdf) + + + + + Create a new CvTracks + + + + + Release all the unmanaged resources used by this CvBlobs + + + + + Updates list of tracks based on current blobs. + + List of blobs + Distance Max distance to determine when a track and a blob match + Inactive Max number of frames a track can be inactive + Active If a track becomes inactive but it has been active less than thActive frames, the track will be deleted. + + + + Adds the specified id and track to the dictionary. + + The id of the track + The track + + + + Determines whether the CvTracks contains the specified id. + + The id (key) to be located + True if the CvTracks contains an element with the specific id + + + + Removes the track with the specific id + + The id of the track + True if the element is successfully found and removed; otherwise, false. + + + + Gets the track associated with the specified id. + + The track id + When this method returns, contains the track associated with the specified id, if the id is found; otherwise, an empty track. This parameter is passed uninitialized. + True if the tracks contains a track with the specific id; otherwise, false + + + + Adds the specified id and track to the CvTracks. + + The structure representing the id and track to add to the CvTracks + + + + Removes all keys and values + + + + + Determines whether the CvTracks contains a specific id and CvTrack. + + The id and CvTrack to be located + True if the is found in the CvTracks; otherwise, false. + + + + Copies the elements to the , starting at the specific arrayIndex. + + The one-dimensional array that is the defination of the elements copied from the CvTracks. The array must have zero-base indexing. + The zero-based index in at which copying begins. + + + + Removes a key and value from the dictionary. + + The structure representing the key and value to be removed + True if the key are value is sucessfully found and removed; otherwise false. + + + + Returns an enumerator that iterates through the collection. + + An enumerator that can be used to iterate through the collection + + + + Returns a pointer to CvBlobs + + Pointer to CvBlobs + + + + Get a collection containing the ids in the CvTracks. + + + + + Get a collection containing the tracks in the CvTracks. + + + + + Get or Set the Track with the specific id. + + The id of the Track + + + + Gets the number of id/track pairs contained in the collection. + + + + + Always false. + + + + + A Uniform Multi-dimensional Dense Histogram + + + + + Creates a uniform 1-D histogram of the specified size + + The number of bins in this 1-D histogram. + The upper and lower boundary of the bin + + + + Creates a uniform multi-dimension histogram of the specified size + + The length of this array is the dimension of the histogram. The values of the array contains the number of bins in each dimension. The total number of bins eaquals the multiplication of all numbers in the array + the upper and lower boundaries of the bins + + + + Clear this histogram + + + + + Project the images to the histogram bins + + The type of depth of the image + images to project + If it is true, the histogram is not cleared in the beginning. This feature allows user to compute a single histogram from several images, or to update the histogram online. + Can be null if not needed. The operation mask, determines what pixels of the source images are counted + + + + Project the matrices to the histogram bins + + The type of depth of the image + Matrices to project + If it is true, the histogram is not cleared in the beginning. This feature allows user to compute a single histogram from several images, or to update the histogram online. + Can be null if not needed. The operation mask, determines what pixels of the source images are counted + + + + Backproject the histogram into a gray scale image + + Source images, all are of the same size and type + Destination back projection image of the same type as the source images + The type of depth of the image + + + + Backproject the histogram into a matrix + + Source matrices, all are of the same size and type + Destination back projection matrix of the sametype as the source matrices + The type of depth of the matrix + + + + Gets the bin values. + + The bin values + + + + Get the size of the bin dimensions + + + + + Get the ranges of this histogram + + + + + Dense Optical flow + + + + + This is the algorithm class + + + + + Return the pointer to the algorithm object + + The pointer to the algorithm object + + + + Gets the dense optical flow pointer. + + + The dense optical flow . + + + + + Extension methods for IDenseOpticalFlow + + + + + Calculates an optical flow. + + First 8-bit single-channel input image. + Second input image of the same size and the same type as prev. + Computed flow image that has the same size as prev and type CV_32FC2 + The dense optical flow object + + + + Dual TV L1 Optical Flow Algorithm. + + + + + Create Dual TV L1 Optical Flow. + + + + + Release the unmanaged resources + + + + + Gets the dense optical flow pointer. + + + The pointer to the dense optical flow object. + + + + + Return the pointer to the algorithm object + + + + + Time step of the numerical scheme + + + + + Weight parameter for the data term, attachment parameter + + + + + Weight parameter for (u - v)^2, tightness parameter + + + + + Coefficient for additional illumination variation term + + + + + Number of scales used to create the pyramid of images + + + + + Number of warpings per scale + + + + + Stopping criterion threshold used in the numerical scheme, which is a trade-off between precision and running time + + + + + Inner iterations (between outlier filtering) used in the numerical scheme + + + + + Outer iterations (number of inner loops) used in the numerical scheme + + + + + Use initial flow + + + + + Step between scales (less than 1) + + + + + Median filter kernel size (1 = no filter) (3 or 5) + + + + + Wrapped AKAZE detector + + + + + The feature 2D base class + + + + + The pointer to the Feature2D object + + + + + The pointer to the Algorithm object. + + + + + Detect keypoints in an image and compute the descriptors on the image from the keypoint locations. + + The image + The optional mask, can be null if not needed + The detected keypoints will be stored in this vector + The descriptors from the keypoints + If true, the method will skip the detection phase and will compute descriptors for the provided keypoints + + + + Reset the pointers + + + + + Detect the features in the image + + The result vector of keypoints + The image from which the features will be detected from + The optional mask. + + + + Detect the keypoints from the image + + The image to extract keypoints from + The optional mask. + An array of key points + + + + Compute the descriptors on the image from the given keypoint locations. + + The image to compute descriptors from + The keypoints where the descriptor computation is perfromed + The descriptors from the given keypoints + + + + Get the pointer to the Feature2D object + + The pointer to the Feature2D object + + + + Get the number of elements in the descriptor. + + The number of elements in the descriptor + + + + Create AKAZE using the specific values + + Type of the extracted descriptor + Size of the descriptor in bits. 0 -> Full size + Number of channels in the descriptor (1, 2, 3) + Detector response threshold to accept point + Default number of sublevels per scale level + Maximum octave evolution of the image + Diffusivity type + + + + Release the unmanaged resources associated with this object + + + + + Type of the extracted descriptor + + + + + The kaze upright + + + + + The kaze + + + + + The MLDB upright + + + + + The MLDB + + + + + The match distance type + + + + + + + + + + Manhattan distance (city block distance) + + + + + Squared Euclidean distance + + + + + Euclidean distance + + + + + Hamming distance functor - counts the bit differences between two strings - useful for the Brief descriptor, + bit count of A exclusive XOR'ed with B. + + + + + Hamming distance functor - counts the bit differences between two strings - useful for the Brief descriptor, + bit count of A exclusive XOR'ed with B. + + + + + Wrapped BFMatcher + + + + + Descriptor matcher + + + + + The pointer to the Descriptor matcher + + + + + Find the k-nearest match + + An n x m matrix of descriptors to be query for nearest neighbours. n is the number of descriptor and m is the size of the descriptor + Number of nearest neighbors to search for + Can be null if not needed. An n x 1 matrix. If 0, the query descriptor in the corresponding row will be ignored. + Matches. Each matches[i] is k or less matches for the same query descriptor. + + + + Add the model descriptors + + The model descriptors + + + + Create a BFMatcher of the specific distance type + + The distance type + Specify whether or not cross check is needed. Use false for default. + + + + Release the unmanaged resource associated with the BFMatcher + + + + + Class to compute an image descriptor using the bag of visual words. Such a computation consists of the following + steps: + 1. Compute descriptors for a given image and its key points set. + 2. Find the nearest visual words from the vocabulary for each key point descriptor. + 3. Compute the bag-of-words image descriptor as is a normalized histogram of vocabulary words encountered in + the image. The i-th bin of the histogram is a frequency of i-th word of the vocabulary in the given image. + + + + + + + Descriptor extractor that is used to compute descriptors for an input image and its key points. + Descriptor matcher that is used to find the nearest word of the trained vocabulary for each key point descriptor of the image. + + + + Sets a visual vocabulary. + + The vocabulary + + + + Computes an image descriptor using the set visual vocabulary. + + Image, for which the descriptor is computed + Key points detected in the input image. + The output image descriptors. + + + + Release all the unmanaged memory associated with this object + + + + + Kmeans-based class to train visual vocabulary using the bag of visual words approach. + + + + + Create a new BOWKmeans trainer + + Number of clusters to split the set by. + Specifies maximum number of iterations and/or accuracy (distance the centers move by between the subsequent iterations). Use empty termcrit for default. + The number of attemps. Use 3 for default + Kmeans initialization flag. Use PPCenters for default. + + + + Add the descriptors to the trainer + + The descriptors to be added to the trainer + + + + Cluster the descriptors and return the cluster centers + + The cluster centers + + + + Release all the unmanaged memory associated with this object + + + + + Get the number of descriptors + + + + + BRISK: Binary Robust Invariant Scalable Keypoints + + + + + Create a BRISK keypoint detector and descriptor extractor. + + Feature parameters. + The number of octave layers. + Pattern scale + + + + Release the unmanaged resources associated with this object + + + + + FAST(Features from Accelerated Segment Test) keypoint detector. + See Detects corners using FAST algorithm by E. Rosten ("Machine learning for high-speed corner + detection, 2006). + + + + + Create a fast detector with the specific parameters + + Threshold on difference between intensity of center pixel and pixels on circle around + this pixel. + Specify if non-maximum suppression should be used. + One of the three neighborhoods as defined in the paper + + + + Release the unmanaged memory associated with this detector. + + + + + One of the three neighborhoods as defined in the paper + + + + + The type5_8 + + + + + The type7_12 + + + + + The type9_16 + + + + + Tools for features 2D + + + + + Draw the keypoints found on the image. + + The image + The keypoints to be drawn + The color used to draw the keypoints + The drawing type + The image with the keypoints drawn + + + + Draw the matched keypoints between the model image and the observered image. + + The model image + The keypoints in the model image + The observed image + The keypoints in the observed image + The color for the match correspondence lines + The color for highlighting the keypoints + The mask for the matches. Use null for all matches. + The drawing type + The image where model and observed image is displayed side by side. Matches are drawn as indicated by the flag + Matches. Each matches[i] is k or less matches for the same query descriptor. + + + + Eliminate the matched features whose scale and rotation do not aggree with the majority's scale and rotation. + + The numbers of bins for rotation, a good value might be 20 (which means each bin covers 18 degree) + This determines the different in scale for neighbor hood bins, a good value might be 1.5 (which means matched features in bin i+1 is scaled 1.5 times larger than matched features in bin i + The keypoints from the model image + The keypoints from the observed image + This is both input and output. This matrix indicates which row is valid for the matches. + Matches. Each matches[i] is k or less matches for the same query descriptor. + The number of non-zero elements in the resulting mask + + + + Recover the homography matrix using RANDSAC. If the matrix cannot be recovered, null is returned. + + The model keypoints + The observed keypoints + + The maximum allowed reprojection error to treat a point pair as an inlier. + If srcPoints and dstPoints are measured in pixels, it usually makes sense to set this parameter somewhere in the range 1 to 10. + + + The mask matrix of which the value might be modified by the function. + As input, if the value is 0, the corresponding match will be ignored when computing the homography matrix. + If the value is 1 and RANSAC determine the match is an outlier, the value will be set to 0. + + The homography matrix, if it cannot be found, null is returned + Matches. Each matches[i] is k or less matches for the same query descriptor. + + + + Filter the matched Features, such that if a match is not unique, it is rejected. + + The distance different ratio which a match is consider unique, a good number will be 0.8 + This is both input and output. This matrix indicates which row is valid for the matches. + Matches. Each matches[i] is k or less matches for the same query descriptor. + + + + Define the Keypoint draw type + + + + + Two source image, matches and single keypoints will be drawn. + For each keypoint only the center point will be drawn (without + the circle around keypoint with keypoint size and orientation). + + + + + Single keypoints will not be drawn. + + + + + For each keypoint the circle around keypoint with keypoint size and + orientation will be drawn. + + + + + Wrapping class for feature detection using the goodFeaturesToTrack() function. + + + + + Create a Good Feature to Track detector + + The function first calculates the minimal eigenvalue for every source image pixel using cvCornerMinEigenVal function and stores them in eig_image. Then it performs non-maxima suppression (only local maxima in 3x3 neighborhood remain). The next step is rejecting the corners with the minimal eigenvalue less than quality_level?max(eig_image(x,y)). Finally, the function ensures that all the corners found are distanced enough one from another by considering the corners (the most strongest corners are considered first) and checking that the distance between the newly considered feature and the features considered earlier is larger than min_distance. So, the function removes the features than are too close to the stronger features + The maximum number of features to be detected. + Multiplier for the maxmin eigenvalue; specifies minimal accepted quality of image corners. + Limit, specifying minimum possible distance between returned corners; Euclidian distance is used. + Size of the averaging block, passed to underlying cvCornerMinEigenVal or cvCornerHarris used by the function. + If true, will use Harris corner detector. + K + + + + Release the unmanaged memory associated with this detector. + + + + + Wrapped KAZE detector + + + + + Create KAZE using the specific values + + + + + Release the unmanaged resources associated with this object + + + + + The diffusivity + + + + + PM G1 + + + + + PM G2 + + + + + Weickert + + + + + Charbonnier + + + + + MSER detector + + + + + Create a MSER detector using the specific parameters + + In the code, it compares (size_{i}-size_{i-delta})/size_{i-delta} + Prune the area which bigger than max_area + Prune the area which smaller than min_area + Prune the area have similar size to its children + Trace back to cut off mser with diversity < min_diversity + For color image, the evolution steps + The area threshold to cause re-initialize + Ignore too small margin + The aperture size for edge blur + + + + Release the unmanaged memory associated with this detector. + + + + + Wrapped ORB detector + + + + + Create a ORBDetector using the specific values + + The number of desired features. + Coefficient by which we divide the dimensions from one scale pyramid level to the next. + The number of levels in the scale pyramid. + The level at which the image is given. If 1, that means we will also look at the image. times bigger + How far from the boundary the points should be. + How many random points are used to produce each cell of the descriptor (2, 3, 4 ...). + Type of the score to use. + Patch size. + FAST threshold + + + + Release the unmanaged resources associated with this object + + + + + The score type + + + + + Harris + + + + + Fast + + + + + Simple Blob detector + + + + + Create a simple blob detector + + + + + Release the unmanaged memory associated with this detector. + + + + + Create parameters for simple blob detector and use default values. + + + + + Release all the unmanaged memory associated with this simple blob detector parameter. + + + + + Threshold step + + + + + Min threshold + + + + + Max threshold + + + + + Min dist between blobs + + + + + Filter by color + + + + + Blob color + + + + + Filter by area + + + + + Min area + + + + + Max area + + + + + Filter by circularity + + + + + Min circularity + + + + + Max circularity + + + + + Filter by inertia + + + + + Min inertia ratio + + + + + Max inertia ratio + + + + + Filter by convexity + + + + + Min Convexity + + + + + Max Convexity + + + + + Min Repeatability + + + + + File Storage Node class. + The node is used to store each and every element of the file storage opened for reading. When + XML/YAML file is read, it is first parsed and stored in the memory as a hierarchical collection of + nodes. Each node can be a “leaf” that is contain a single number or a string, or be a collection of + other nodes. There can be named collections (mappings) where each element has a name and it is + accessed by a name, and ordered collections (sequences) where elements do not have names but rather + accessed by index. Type of the file node can be determined using FileNode::type method. + Note that file nodes are only used for navigating file storages opened for reading. When a file + storage is opened for writing, no data is stored in memory after it is written. + + + + + Reads a Mat from the node + + The Mat where the result is read into + The default mat. + + + + Release the unmanaged resources + + + + + Reads the string from the node + + The string from the node + + + + Reads the int from the node. + + The int from the node. + + + + Reads the float from the node. + + The float from the node. + + + + Reads the double from the node. + + The double from the node. + + + + Gets a value indicating whether this instance is empty. + + + true if this instance is empty; otherwise, false. + + + + + Gets the type of the node. + + + The type of the node. + + + + + Type of the file storage node + + + + + Empty node + + + + + an integer + + + + + Floating-point number + + + + + Synonym or Real + + + + + Text string in UTF-8 encoding + + + + + Synonym for Str + + + + + Integer of size size_t. Typically used for storing complex dynamic structures where some elements reference the others + + + + + The sequence + + + + + Mapping + + + + + The type mask + + + + + Compact representation of a sequence or mapping. Used only by YAML writer + + + + + A registered object (e.g. a matrix) + + + + + Empty structure (sequence or mapping) + + + + + The node has a name (i.e. it is element of a mapping) + + + + + XML/YAML file storage class that encapsulates all the information necessary for writing or reading data to/from a file. + + + + + Initializes a new instance of the class. + + Name of the file to open or the text string to read the data from. Extension of the + file (.xml or .yml/.yaml) determines its format (XML or YAML respectively). Also you can append .gz + to work with compressed files, for example myHugeMatrix.xml.gz. If both FileStorage::WRITE and + FileStorage::MEMORY flags are specified, source is used just to specify the output file format (e.g. + mydata.xml, .yml etc.). + Mode of operation. + Encoding of the file. Note that UTF-16 XML encoding is not supported currently and + you should use 8-bit encoding instead of it. + + + + Writes the specified Mat to the node with the specific + + The Mat to be written to the file storage + The name of the node. + + + + Writes the specified Mat to the node with the specific + + The value to be written to the file storage + The name of the node. + + + + Writes the specified Mat to the node with the specific + + The value to be written to the file storage + The name of the node. + + + + Writes the specified Mat to the node with the specific + + The value to be written to the file storage + The name of the node. + + + + Writes the specified Mat to the node with the specific + + The value to be written to the file storage + The name of the node. + + + + Closes the file and releases all the memory buffers + Call this method after all I/O operations with the storage are finished. If the storage was + opened for writing data and FileStorage.Mode.Write was specified + + The string that represent the text in the FileStorage + + + + Gets the top-level mapping. + + Zero-based index of the stream. In most cases there is only one stream in the file. + However, YAML supports multiple streams and so there can be several. + The top-level mapping + + + + Gets the first element of the top-level mapping. + + The first element of the top-level mapping. + + + + Gets the specified element of the top-level mapping. + + Name of the node. + The specified element of the top-level mapping. + + + + Release the unmanaged resources + + + + + Gets a value indicating whether this instance is opened. + + + true if the object is associated with the current file; otherwise, false. + + + + + Gets the with the specified node name. + + + The . + + Name of the node. + + + + + File storage mode + + + + + Open the file for reading + + + + + Open the file for writing + + + + + Open the file for appending + + + + + ReadMat data from source or write data to the internal buffer + + + + + Mask for format flags + + + + + Auto format + + + + + XML format + + + + + YAML format + + + + + The Kmeans center initiation types + + + + + Random + + + + + + + + + + + + + + + The index parameters interface + + + + + Gets the pointer to the index parameter. + + + The index parameter pointer. + + + + + Flann index + + + + + Create a flann index + + A row by row matrix of descriptors + The index parameter + + + + Perform k-nearest-neighbours (KNN) search + + A row by row matrix of descriptors to be query for nearest neighbours + The result of the indices of the k-nearest neighbours + The square of the Eculidean distance between the neighbours + Number of nearest neighbors to search for + The number of times the tree(s) in the index should be recursively traversed. A + higher value for this parameter would give better search precision, but also take more + time. If automatic configuration was used when the index was created, the number of + checks required to achieve the specified precision was also computed, in which case + this parameter is ignored + + + + Performs a radius nearest neighbor search for multiple query points + + The query points, one per row + Indices of the nearest neighbors found + The square of the Eculidean distance between the neighbours + The search radius + The maximum number of results + The number of times the tree(s) in the index should be recursively traversed. A + higher value for this parameter would give better search precision, but also take more + time. If automatic configuration was used when the index was created, the number of + checks required to achieve the specified precision was also computed, in which case + this parameter is ignored + The number of points in the search radius + + + + Release the unmanaged memory associated with this Flann Index + + + + + Create index for 3D points + + + + + Create a flann index for 3D points + + The IPosition3D array + The index parameters + + + + Find the approximate nearest position in 3D + + The position to start the search from + The square distance of the nearest neighbour + The index with the nearest 3D position + + + + Release the resource used by this object + + + + + When passing an object of this type, the index will perform a linear, brute-force search. + + + + + Initializes a new instance of the class. + + + + + Release all the memory associated with this IndexParam + + + + + When passing an object of this type the index constructed will consist of a set of randomized kd-trees which will be searched in parallel. + + + + + Initializes a new instance of the class. + + The number of parallel kd-trees to use. Good values are in the range [1..16] + + + + Release all the memory associated with this IndexParam + + + + + When using a parameters object of this type the index created uses multi-probe LSH (by Multi-Probe LSH: Efficient Indexing for High-Dimensional Similarity Search by Qin Lv, William Josephson, Zhe Wang, Moses Charikar, Kai Li., Proceedings of the 33rd International Conference on Very Large Data Bases (VLDB). Vienna, Austria. September 2007) + + + + + Initializes a new instance of the class. + + The number of hash tables to use (between 10 and 30 usually). + The size of the hash key in bits (between 10 and 20 usually). + The number of bits to shift to check for neighboring buckets (0 is regular LSH, 2 is recommended). + + + + Release all the memory associated with this IndexParam + + + + + When passing an object of this type the index constructed will be a hierarchical k-means tree. + + + + + Initializes a new instance of the class. + + The branching factor to use for the hierarchical k-means tree + The maximum number of iterations to use in the k-means clustering stage when building the k-means tree. A value of -1 used here means that the k-means clustering should be iterated until convergence + The algorithm to use for selecting the initial centers when performing a k-means clustering step. The possible values are CENTERS_RANDOM (picks the initial cluster centers randomly), CENTERS_GONZALES (picks the initial centers using Gonzales’ algorithm) and CENTERS_KMEANSPP (picks the initial centers using the algorithm suggested in arthur_kmeanspp_2007 ) + This parameter (cluster boundary index) influences the way exploration is performed in the hierarchical kmeans tree. When cb_index is zero the next kmeans domain to be explored is chosen to be the one with the closest center. A value greater then zero also takes into account the size of the domain. + + + + Release all the memory associated with this IndexParam + + + + + When using a parameters object of this type the index created combines the randomized kd-trees and the hierarchical k-means tree. + + + + + Initializes a new instance of the class. + + The number of parallel kd-trees to use. Good values are in the range [1..16] + The branching factor to use for the hierarchical k-means tree + The maximum number of iterations to use in the k-means clustering stage when building the k-means tree. A value of -1 used here means that the k-means clustering should be iterated until convergence + The algorithm to use for selecting the initial centers when performing a k-means clustering step. The possible values are CENTERS_RANDOM (picks the initial cluster centers randomly), CENTERS_GONZALES (picks the initial centers using Gonzales’ algorithm) and CENTERS_KMEANSPP (picks the initial centers using the algorithm suggested in arthur_kmeanspp_2007 ) + This parameter (cluster boundary index) influences the way exploration is performed in the hierarchical kmeans tree. When cb_index is zero the next kmeans domain to be explored is chosen to be the one with the closest center. A value greater then zero also takes into account the size of the domain. + + + + Release all the memory associated with this IndexParam + + + + + When passing an object of this type the index created is automatically tuned to offer the best performance, by choosing the optimal index type (randomized kd-trees, hierarchical kmeans, linear) and parameters for the dataset provided. + + + + + Initializes a new instance of the class. + + Is a number between 0 and 1 specifying the percentage of the approximate nearest-neighbor searches that return the exact nearest-neighbor. Using a higher value for this parameter gives more accurate results, but the search takes longer. The optimum value usually depends on the application. + Specifies the importance of the index build time reported to the nearest-neighbor search time. In some applications it’s acceptable for the index build step to take a long time if the subsequent searches in the index can be performed very fast. In other applications it’s required that the index be build as fast as possible even if that leads to slightly longer search times. + Is used to specify the trade off between time (index build time and search time) and memory used by the index. A value less than 1 gives more importance to the time spent and a value greater than 1 gives more importance to the memory usage. + Is a number between 0 and 1 indicating what fraction of the dataset to use in the automatic parameter configuration algorithm. Running the algorithm on the full dataset gives the most accurate results, but for very large datasets can take longer than desired. In such case using just a fraction of the data helps speeding up this algorithm while still giving good approximations of the optimum parameters. + + + + Release all the memory associated with this IndexParam + + + + + Hierarchical Clustering Index Parameters + + + + + Initializes a new instance of the . + + + + + Release all the memory associated with this IndexParam + + + + + Search parameters + + + + + Initializes a new instance of the class. + + how many leafs to visit when searching for neighbors (-1 for unlimited) + Search for eps-approximate neighbors + Only for radius search, require neighbors sorted by distance + + + + Release all the memory associated with this IndexParam + + + + + A geodetic coordinate that is defined by its latitude, longitude and altitude + + + + + Indicates the origin of the Geodetic Coordinate + + + + + Create a geodetic coordinate using the specific values + + Latitude in radian + Longitude in radian + Altitude in meters + + + + Compute the sum of two GeodeticCoordinates + + The first coordinate to be added + The second coordinate to be added + The sum of two GeodeticCoordinates + + + + Compute - + + The first coordinate + The coordinate to be subtracted + - + + + + Compute * + + The coordinate + The scale to be multiplied + * + + + + Check if this Geodetic coordinate equals + + The other coordinate to be compared with + True if two coordinates equals + + + + Convert radian to degree + + radian + degree + + + + Convert degree to radian + + degree + radian + + + + Latitude (phi) in radian + + + + + Longitude (lambda) in radian + + + + + Altitude (height) in meters + + + + + A HOG descriptor + + + + + Create a new HOGDescriptor + + + + + Create a new HOGDescriptor using the specific parameters. + + Block size in cells. Use (16, 16) for default. + Cell size. Use (8, 8) for default. + Block stride. Must be a multiple of cell size. Use (8,8) for default. + Do gamma correction preprocessing or not. Use true for default. + L2-Hys normalization method shrinkage. + Number of bins. + Gaussian smoothing window parameter. + Detection window size. Must be aligned to block size and block stride. Must match the size of the training image. Use (64, 128) for default. + + + + + Create a new HOGDescriptor using the specific parameters. + + The template image to be detected. + Block size in cells. Use (16, 16) for default. + Cell size. Use (8, 8) for default. + Block stride. Must be a multiple of cell size. Use (8,8) for default. + Do gamma correction preprocessing or not. Use true for default. + L2-Hys normalization method shrinkage. Use 0.2 for default. + Number of bins. Use 9 for default. + Gaussian smoothing window parameter. Use -1 for default. + Use 1 for default. + + + + Create a new HogDescriptor using the specific template and default parameters. + + The template image to be detected. + + + + Return the default people detector + + The default people detector + + + + Set the SVM detector + + The SVM detector + + + + Performs object detection with increasing detection window. + + The image to search in + + Threshold for the distance between features and SVM classifying plane. + Usually it is 0 and should be specified in the detector coefficients (as the last free coefficient). + But if the free coefficient is omitted (which is allowed), you can specify it manually here. + + Window stride. Must be a multiple of block stride. + + Coefficient of the detection window increase. + After detection some objects could be covered by many rectangles. This coefficient regulates similarity threshold. 0 means don't perform grouping. Should be an integer if not using meanshift grouping. Use 2.0 for default + If true, it will use meanshift grouping. + The regions where positives are found + + + + + + The image + Window stride. Must be a multiple of block stride. Use Size.Empty for default + Padding. Use Size.Empty for default + Locations for the computation. Can be null if not needed + The descriptor vector + + + + Release the unmanaged memory associated with this HOGDescriptor + + + + + Get the size of the descriptor + + + + + Apply converter and compute result for each channel of the image, for single channel image, apply converter directly, for multiple channel image, make a copy of each channel to a temperary image and apply the convertor + + The return type + The source image + The converter such that accept the IntPtr of a single channel IplImage, and image channel index which returning result of type R + An array which contains result for each channel + + + + Apply converter and compute result for each channel of the image, for single channel image, apply converter directly, for multiple channel image, make a copy of each channel to a temperary image and apply the convertor + + The source image + The converter such that accept the IntPtr of a single channel IplImage, and image channel index which returning result of type R + An array which contains result for each channel + + + + An Image is a wrapper to IplImage of OpenCV. + + Color type of this image (either Gray, Bgr, Bgra, Hsv, Hls, Lab, Luv, Xyz, Ycc, Rgb or Rbga) + Depth of this image (either Byte, SByte, Single, double, UInt16, Int16 or Int32) + + + + The dimension of color + + + + + Create an empty Image + + + + + Create image from the specific multi-dimensional data, where the 1st dimesion is # of rows (height), the 2nd dimension is # cols (width) and the 3rd dimension is the channel + + The multi-dimensional data where the 1st dimension is # of rows (height), the 2nd dimension is # cols (width) and the 3rd dimension is the channel + + + + Create an Image from unmanaged data. + + The width of the image + The height of the image + Size of aligned image row in bytes + Pointer to aligned image data, where each row should be 4-align + The caller is responsible for allocating and freeing the block of memory specified by the scan0 parameter, however, the memory should not be released until the related Image is released. + + + + Allocate the image from the image header. + + This should be only a header to the image. When the image is disposed, the cvReleaseImageHeader will be called on the pointer. + + + + Read image from a file + + the name of the file that contains the image + + + + Load the specific file using Bitmap + + + + + + Load the specific file using OpenCV + + + + + + Obtain the image from the specific Bitmap + + The bitmap which will be converted to the image + + + + Create a blank Image of the specified width, height and color. + + The width of the image + The height of the image + The initial color of the image + + + + Create a blank Image of the specified width and height. + + The width of the image + The height of the image + + + + Create a blank Image of the specific size + + The size of the image + + + + Allocate data for the array + + The number of rows + The number of columns + The number of channels of this image + + + + Create a multi-channel image from multiple gray scale images + + The image channels to be merged into a single image + + + + Constructor used to deserialize runtime serialized object + + The serialization info + The streaming context + + + + A function used for runtime serialization of the object + + Serialization info + streaming context + + + + Get the average value on this image + + The average color of the image + + + + Get the average value on this image, using the specific mask + + The mask for find the average value + The average color of the masked area + + + Get the sum for each color channel + The sum for each color channel + + + + Set every pixel of the image to the specific color + + The color to be set + + + + Set every pixel of the image to the specific color, using a mask + + The color to be set + The mask for setting color + + + + Copy the masked area of this image to destination + + the destination to copy to + the mask for copy + + + + Make a copy of the image using a mask, if ROI is set, only copy the ROI + + the mask for coping + A copy of the image + + + + Make a copy of the specific ROI (Region of Interest) from the image + + The roi to be copied + The roi region on the image + + + + Get a copy of the boxed region of the image + + The boxed region of the image + A copy of the boxed region of the image + + + Make a copy of the image, if ROI is set, only copy the ROI + A copy of the image + + + + Create an image of the same size + + The initial pixel in the image equals zero + The image of the same size + + + + Make a clone of the current image. All image data as well as the COI and ROI are cloned + + A clone of the current image. All image data as well as the COI and ROI are cloned + + + + Get a subimage which image data is shared with the current image. + + The rectangle area of the sub-image + A subimage which image data is shared with the current image + + + Draw an Rectangle of the specific color and thickness + The rectangle to be drawn + The color of the rectangle + If thickness is less than 1, the rectangle is filled up + Line type + Number of fractional bits in the center coordinates and radius value + + + Draw a 2D Cross using the specific color and thickness + The 2D Cross to be drawn + The color of the cross + Must be > 0 + + + Draw a line segment using the specific color and thickness + The line segment to be drawn + The color of the line segment + The thickness of the line segment + Line type + Number of fractional bits in the center coordinates and radius value + + + Draw a line segment using the specific color and thickness + The line segment to be drawn + The color of the line segment + The thickness of the line segment + Line type + Number of fractional bits in the center coordinates and radius value + + + Draw a convex polygon using the specific color and thickness + The convex polygon to be drawn + The color of the triangle + If thickness is less than 1, the triangle is filled up + + + + Fill the convex polygon with the specific color + + The array of points that define the convex polygon + The color to fill the polygon with + Line type + Number of fractional bits in the center coordinates and radius value + + + + Draw the polyline defined by the array of 2D points + + A polyline defined by its point + if true, the last line segment is defined by the last point of the array and the first point of the array + the color used for drawing + the thinkness of the line + Line type + Number of fractional bits in the center coordinates and radius value + + + + Draw the polylines defined by the array of array of 2D points + + An array of polylines each represented by an array of points + if true, the last line segment is defined by the last point of the array and the first point of the array + the color used for drawing + the thinkness of the line + Line type + Number of fractional bits in the center coordinates and radius value + + + Draw a Circle of the specific color and thickness + The circle to be drawn + The color of the circle + If thickness is less than 1, the circle is filled up + Line type + Number of fractional bits in the center coordinates and radius value + + + Draw a Ellipse of the specific color and thickness + The ellipse to be draw + The color of the ellipse + If thickness is less than 1, the ellipse is filled up + Line type + Number of fractional bits in the center coordinates and radius value + + + + Draw the text using the specific font on the image + + The text message to be draw + Font type. + Font scale factor that is multiplied by the font-specific base size. + The location of the bottom left corner of the font + The color of the text + Thickness of the lines used to draw a text. + Line type + When true, the image data origin is at the bottom-left corner. Otherwise, it is at the top-left corner. + + + + Draws contour outlines in the image if thickness>=0 or fills area bounded by the contours if thickness<0 + + All the input contours. Each contour is stored as a point vector. + Parameter indicating a contour to draw. If it is negative, all the contours are drawn. + Color of the contours + Maximal level for drawn contours. If 0, only contour is drawn. If 1, the contour and all contours after it on the same level are drawn. If 2, all contours after and all contours one level below the contours are drawn, etc. If the value is negative, the function does not draw the contours following after contour but draws child contours of contour up to abs(maxLevel)-1 level. + Thickness of lines the contours are drawn with. If it is negative the contour interiors are drawn + Type of the contour segments + Optional information about hierarchy. It is only needed if you want to draw only some of the contours + Shift all the point coordinates by the specified value. It is useful in case if the contours retrived in some image ROI and then the ROI offset needs to be taken into account during the rendering. + + + + Draws contour outlines in the image if thickness>=0 or fills area bounded by the contours if thickness<0 + + The input contour stored as a point vector. + Color of the contours + Thickness of lines the contours are drawn with. If it is negative the contour interiors are drawn + Type of the contour segments + Shift all the point coordinates by the specified value. It is useful in case if the contours retrived in some image ROI and then the ROI offset needs to be taken into account during the rendering. + + + + Apply Probabilistic Hough transform to find line segments. + The current image must be a binary image (eg. the edges as a result of the Canny edge detector) + + Distance resolution in pixel-related units. + Angle resolution measured in radians + A line is returned by the function if the corresponding accumulator value is greater than threshold + Minimum width of a line + Minimum gap between lines + The line segments detected for each of the channels + + + + Apply Canny Edge Detector follows by Probabilistic Hough transform to find line segments in the image + + The threshhold to find initial segments of strong edges + The threshold used for edge Linking + Distance resolution in pixel-related units. + Angle resolution measured in radians + A line is returned by the function if the corresponding accumulator value is greater than threshold + Minimum width of a line + Minimum gap between lines + The line segments detected for each of the channels + + + + First apply Canny Edge Detector on the current image, + then apply Hough transform to find circles + + The higher threshold of the two passed to Canny edge detector (the lower one will be twice smaller). + Accumulator threshold at the center detection stage. The smaller it is, the more false circles may be detected. Circles, corresponding to the larger accumulator values, will be returned first + Resolution of the accumulator used to detect centers of the circles. For example, if it is 1, the accumulator will have the same resolution as the input image, if it is 2 - accumulator will have twice smaller width and height, etc + Minimal radius of the circles to search for + Maximal radius of the circles to search for + Minimum distance between centers of the detected circles. If the parameter is too small, multiple neighbor circles may be falsely detected in addition to a true one. If it is too large, some circles may be missed + The circle detected for each of the channels + + + + Return parameters based on ROI + + The Pointer to the IplImage + The address of the pointer that point to the start of the Bytes taken into consideration ROI + ROI.Width * ColorType.Dimension + The number of bytes in a row taken into consideration ROI + The number of rows taken into consideration ROI + The width step required to jump to the next row + + + + Apply convertor and compute result for each channel of the image. + + + For single channel image, apply converter directly. + For multiple channel image, set the COI for the specific channel before appling the convertor + + The return type + The converter such that accept the IntPtr of a single channel IplImage, and image channel index which returning result of type R + An array which contains result for each channel + + + + If the image has only one channel, apply the action directly on the IntPtr of this image and , + otherwise, make copy each channel of this image to a temperary one, apply action on it and another temperory image and copy the resulting image back to image2 + + The type of the depth of the image + The function which acepts the src IntPtr, dest IntPtr and index of the channel as input + The destination image + + + + Calculates the image derivative by convolving the image with the appropriate kernel + The Sobel operators combine Gaussian smoothing and differentiation so the result is more or less robust to the noise. Most often, the function is called with (xorder=1, yorder=0, aperture_size=3) or (xorder=0, yorder=1, aperture_size=3) to calculate first x- or y- image derivative. + + Order of the derivative x + Order of the derivative y + Size of the extended Sobel kernel, must be 1, 3, 5 or 7. In all cases except 1, aperture_size xaperture_size separable kernel will be used to calculate the derivative. + The result of the sobel edge detector + + + + Calculates Laplacian of the source image by summing second x- and y- derivatives calculated using Sobel operator. + Specifying aperture_size=1 gives the fastest variant that is equal to convolving the image with the following kernel: + + |0 1 0| + |1 -4 1| + |0 1 0| + + Aperture size + The Laplacian of the image + + + Find the edges on this image and marked them in the returned image. + The threshhold to find initial segments of strong edges + The threshold used for edge Linking + The edges found by the Canny edge detector + + + Find the edges on this image and marked them in the returned image. + The threshhold to find initial segments of strong edges + The threshold used for edge Linking + The aperture size, use 3 for default + a flag, indicating whether a more accurate norm should be used to calculate the image gradient magnitude ( L2gradient=true ), or whether the default norm is enough ( L2gradient=false ). + The edges found by the Canny edge detector + + + + Iterates to find the sub-pixel accurate location of corners, or radial saddle points + + Coordinates of the input corners, the values will be modified by this function call + Half sizes of the search window. For example, if win=(5,5) then 5*2+1 x 5*2+1 = 11 x 11 search window is used + Half size of the dead region in the middle of the search zone over which the summation in formulae below is not done. It is used sometimes to avoid possible singularities of the autocorrelation matrix. The value of (-1,-1) indicates that there is no such size + Criteria for termination of the iterative process of corner refinement. That is, the process of corner position refinement stops either after certain number of iteration or when a required accuracy is achieved. The criteria may specify either of or both the maximum number of iteration and the required accuracy + Refined corner coordinates + + + + The function slids through image, compares overlapped patches of size wxh with templ using the specified method and return the comparison results + + Searched template; must be not greater than the source image and the same data type as the image + Specifies the way the template must be compared with image regions + The comparison result: width = this.Width - template.Width + 1; height = this.Height - template.Height + 1 + + + Perform an elementwise AND operation with another image and return the result + The second image for the AND operation + The result of the AND operation + + + + Perform an elementwise AND operation with another image, using a mask, and return the result + + The second image for the AND operation + The mask for the AND operation + The result of the AND operation + + + Perform an binary AND operation with some color + The color for the AND operation + The result of the AND operation + + + Perform an binary AND operation with some color using a mask + The color for the AND operation + The mask for the AND operation + The result of the AND operation + + + Perform an elementwise OR operation with another image and return the result + The second image for the OR operation + The result of the OR operation + + + Perform an elementwise OR operation with another image, using a mask, and return the result + The second image for the OR operation + The mask for the OR operation + The result of the OR operation + + + Perform an elementwise OR operation with some color + The value for the OR operation + The result of the OR operation + + + Perform an elementwise OR operation with some color using a mask + The color for the OR operation + The mask for the OR operation + The result of the OR operation + + + Perform an elementwise XOR operation with another image and return the result + The second image for the XOR operation + The result of the XOR operation + + + + Perform an elementwise XOR operation with another image, using a mask, and return the result + + The second image for the XOR operation + The mask for the XOR operation + The result of the XOR operation + + + + Perform an binary XOR operation with some color + + The value for the XOR operation + The result of the XOR operation + + + + Perform an binary XOR operation with some color using a mask + + The color for the XOR operation + The mask for the XOR operation + The result of the XOR operation + + + + Compute the complement image + + The complement image + + + Find the elementwise maximum value + The second image for the Max operation + An image where each pixel is the maximum of this image and the parameter image + + + Find the elementwise maximum value + The value to compare with + An image where each pixel is the maximum of this image and + + + Find the elementwise minimum value + The second image for the Min operation + An image where each pixel is the minimum of this image and the parameter image + + + Find the elementwise minimum value + The value to compare with + An image where each pixel is the minimum of this image and + + + Checks that image elements lie between two scalars + The inclusive lower limit of color value + The inclusive upper limit of color value + res[i,j] = 255 if <= this[i,j] <= , 0 otherwise + + + Checks that image elements lie between values defined by two images of same size and type + The inclusive lower limit of color value + The inclusive upper limit of color value + res[i,j] = 255 if [i,j] <= this[i,j] <= [i,j], 0 otherwise + + + + Compare the current image with and returns the comparison mask + + The other image to compare with + The comparison type + The result of the comparison as a mask + + + + Compare the current image with and returns the comparison mask + + The value to compare with + The comparison type + The result of the comparison as a mask + + + + Compare two images, returns true if the each of the pixels are equal, false otherwise + + The other image to compare with + true if the each of the pixels for the two images are equal, false otherwise + + + + Use grabcut to perform background foreground segmentation. + + The initial rectangle region for the foreground + The number of iterations to run GrabCut + The background foreground mask where 2 indicates background and 3 indicates foreground + + + Elementwise subtract another image from the current image + The second image to be subtracted from the current image + The result of elementwise subtracting img2 from the current image + + + Elementwise subtract another image from the current image, using a mask + The image to be subtracted from the current image + The mask for the subtract operation + The result of elementwise subtrating img2 from the current image, using the specific mask + + + Elementwise subtract a color from the current image + The color value to be subtracted from the current image + The result of elementwise subtracting color 'val' from the current image + + + + result = val - this + + the value which subtract this image + val - this + + + + result = val - this, using a mask + + The value which subtract this image + The mask for subtraction + val - this, with mask + + + Elementwise add another image with the current image + The image to be added to the current image + The result of elementwise adding img2 to the current image + + + Elementwise add with the current image, using a mask + The image to be added to the current image + The mask for the add operation + The result of elementwise adding img2 to the current image, using the specific mask + + + Elementwise add a color to the current image + The color value to be added to the current image + The result of elementwise adding color from the current image + + + Elementwise multiply another image with the current image and the + The image to be elementwise multiplied to the current image + The scale to be multiplied + this .* img2 * scale + + + Elementwise multiply with the current image + The image to be elementwise multiplied to the current image + this .* img2 + + + Elementwise multiply the current image with + The scale to be multiplied + The scaled image + + + + Accumulate to the current image using the specific mask + + The image to be added to the current image + the mask + + + + Accumulate to the current image using the specific mask + + The image to be added to the current image + + + + Return the weighted sum such that: res = this * alpha + img2 * beta + gamma + + img2 in: res = this * alpha + img2 * beta + gamma + alpha in: res = this * alpha + img2 * beta + gamma + beta in: res = this * alpha + img2 * beta + gamma + gamma in: res = this * alpha + img2 * beta + gamma + this * alpha + img2 * beta + gamma + + + + Update Running Average. this = (1-alpha)*this + alpha*img + + Input image, 1- or 3-channel, Byte or Single (each channel of multi-channel image is processed independently). + the weight of + + + + Update Running Average. this = (1-alpha)*this + alpha*img, using the mask + + Input image, 1- or 3-channel, Byte or Single (each channel of multi-channel image is processed independently). + The weight of + The mask for the running average + + + + Computes absolute different between this image and the other image + + The other image to compute absolute different with + The image that contains the absolute different value + + + + Computes absolute different between this image and the specific color + + The color to compute absolute different with + The image that contains the absolute different value + + + + Raises every element of input array to p + dst(I)=src(I)^p, if p is integer + dst(I)=abs(src(I))^p, otherwise + + The exponent of power + The power image + + + + Calculates exponent of every element of input array: + dst(I)=exp(src(I)) + + Maximum relative error is ~7e-6. Currently, the function converts denormalized values to zeros on output. + The exponent image + + + + Calculates natural logarithm of absolute value of every element of input array + + Natural logarithm of absolute value of every element of input array + + + Sample the pixel values on the specific line segment + The line to obtain samples + The values on the (Eight-connected) line + + + + Sample the pixel values on the specific line segment + + The line to obtain samples + The sampling type + The values on the line, the first dimension is the index of the point, the second dimension is the index of color channel + + + + Scale the image to the specific size + + The width of the returned image. + The height of the returned image. + The type of interpolation + The resized image + + + + Scale the image to the specific size + + The width of the returned image. + The height of the returned image. + The type of interpolation + if true, the scale is preservered and the resulting image has maximum width(height) possible that is <= (), if false, this function is equaivalent to Resize(int width, int height) + The resized image + + + + Scale the image to the specific size: width *= scale; height *= scale + + The scale to resize + The type of interpolation + The scaled image + + + + Rotate the image the specified angle cropping the result to the original size + + The angle of rotation in degrees. + The color with wich to fill the background + The image rotates by the specific angle + + + + Transforms source image using the specified matrix + + 2x3 transformation matrix + Interpolation type + Warp type + Pixel extrapolation method + A value used to fill outliers + The result of the transformation + + + + Transforms source image using the specified matrix + + 2x3 transformation matrix + The width of the resulting image + the height of the resulting image + Interpolation type + Warp type + Pixel extrapolation method + A value used to fill outliers + The result of the transformation + + + + Transforms source image using the specified matrix + + 3x3 transformation matrix + Interpolation type + Warp type + Pixel extrapolation method + A value used to fill outliers + The depth type of , should be either float or double + The result of the transformation + + + + Transforms source image using the specified matrix + + 3x3 transformation matrix + The width of the resulting image + the height of the resulting image + Interpolation type + Warp type + Border type + A value used to fill outliers + The depth type of , should be either float or double + The result of the transformation + + + + Rotate this image the specified + + The angle of rotation in degrees. + The color with wich to fill the background + If set to true the image is cropped to its original size, possibly losing corners information. If set to false the result image has different size than original and all rotation information is preserved + The rotated image + + + + Rotate this image the specified + + The angle of rotation in degrees. Positive means clockwise. + The color with with to fill the background + If set to true the image is cropped to its original size, possibly losing corners information. If set to false the result image has different size than original and all rotation information is preserved + The center of rotation + The interpolation method + The rotated image + + + + Convert the image to log polar, simulating the human foveal vision + + The transformation center, where the output precision is maximal + Magnitude scale parameter + interpolation type + Warp type + The converted image + + + Convert the current image to the specific color and depth + The type of color to be converted to + The type of pixel depth to be converted to + Image of the specific color and depth + + + + Convert the source image to the current image, if the size are different, the current image will be a resized version of the srcImage. + + The color type of the source image + The color depth of the source image + The sourceImage + + + + Convert the source image to the current image, if the size are different, the current image will be a resized version of the srcImage. + + The sourceImage + + + Convert the current image to the specific depth, at the same time scale and shift the values of the pixel + The value to be multipled with the pixel + The value to be added to the pixel + The type of depth to convert to + Image of the specific depth, val = val * scale + shift + + + + Utility function for Bitmap Set property + + + + + + Convert this image into Bitmap, the pixel values are copied over to the Bitmap + + For better performance on Image<Gray, Byte> and Image<Bgr, Byte>, consider using the Bitmap property + This image in Bitmap format, the pixel data are copied over to the Bitmap + + + Create a Bitmap image of certain size + The width of the bitmap + The height of the bitmap + This image in Bitmap format of the specific size + + + + Performs downsampling step of Gaussian pyramid decomposition. + First it convolves this image with the specified filter and then downsamples the image + by rejecting even rows and columns. + + The downsampled image + + + + Performs up-sampling step of Gaussian pyramid decomposition. + First it upsamples this image by injecting even zero rows and columns and then convolves + result with the specified filter multiplied by 4 for interpolation. + So the resulting image is four times larger than the source image. + + The upsampled image + + + + Compute the image pyramid + + The number of level's for the pyramid; Level 0 referes to the current image, level n is computed by calling the PyrDown() function on level n-1 + The image pyramid + + + Use inpaint to recover the intensity of the pixels which location defined by mask on this image + The inpainting mask. Non-zero pixels indicate the area that needs to be inpainted + The radius of circular neighborhood of each point inpainted that is considered by the algorithm + The inpainted image + + + + Perform advanced morphological transformations using erosion and dilation as basic operations. + + Structuring element + Anchor position with the kernel. Negative values mean that the anchor is at the kernel center. + Type of morphological operation + Number of times erosion and dilation are applied + Border type + Border value + The result of the morphological operation + + + + Perform inplace advanced morphological transformations using erosion and dilation as basic operations. + + Structuring element + Anchor position with the kernel. Negative values mean that the anchor is at the kernel center. + Type of morphological operation + Number of times erosion and dilation are applied + Border type + Border value + + + + Erodes this image using a 3x3 rectangular structuring element. + Erosion are applied several (iterations) times + + The number of erode iterations + The eroded image + + + + Dilates this image using a 3x3 rectangular structuring element. + Dilation are applied several (iterations) times + + The number of dilate iterations + The dialated image + + + + Erodes this image inplace using a 3x3 rectangular structuring element. + Erosion are applied several (iterations) times + + The number of erode iterations + + + + Dilates this image inplace using a 3x3 rectangular structuring element. + Dilation are applied several (iterations) times + + The number of dilate iterations + + + + perform an generic action based on each element of the image + + The action to be applied to each element of the image + + + + Perform an generic operation based on the elements of the two images + + The depth of the second image + The second image to perform action on + An action such that the first parameter is the a single channel of a pixel from the first image, the second parameter is the corresponding channel of the correspondind pixel from the second image + + + + Compute the element of a new image based on the value as well as the x and y positions of each pixel on the image + + + + Compute the element of the new image based on element of this image + + + Compute the element of the new image based on the elements of the two image + + + Compute the element of the new image based on the elements of the three image + + + Compute the element of the new image based on the elements of the four image + + + + Release all unmanaged memory associate with the image + + + + + Perform an elementwise AND operation on the two images + + The first image to AND + The second image to AND + The result of the AND operation + + + + Perform an elementwise AND operation using an images and a color + + The first image to AND + The color to AND + The result of the AND operation + + + + Perform an elementwise AND operation using an images and a color + + The first image to AND + The color to AND + The result of the AND operation + + + + Perform an elementwise AND operation using an images and a color + + The first image to AND + The color to AND + The result of the AND operation + + + + Perform an elementwise AND operation using an images and a color + + The first image to AND + The color to AND + The result of the AND operation + + + Perform an elementwise OR operation with another image and return the result + The first image to apply bitwise OR operation + The second image to apply bitwise OR operation + The result of the OR operation + + + + Perform an binary OR operation with some color + + The image to OR + The color to OR + The result of the OR operation + + + + Perform an binary OR operation with some color + + The image to OR + The color to OR + The result of the OR operation + + + + Perform an binary OR operation with some color + + The image to OR + The color to OR + The result of the OR operation + + + + Perform an binary OR operation with some color + + The image to OR + The color to OR + The result of the OR operation + + + Compute the complement image + The image to be inverted + The complement image + + + + Elementwise add with + + The first image to be added + The second image to be added + The sum of the two images + + + + Elementwise add with + + The image to be added + The value to be added + The images plus the color + + + + Elementwise add with + + The image to be added + The value to be added + The images plus the color + + + + Elementwise add with + + The image to be added + The color to be added + The images plus the color + + + + Elementwise add with + + The image to be added + The color to be added + The images plus the color + + + + Elementwise subtract another image from the current image + + The image to be subtracted + The second image to be subtracted from + The result of elementwise subtracting img2 from + + + + Elementwise subtract another image from the current image + + The image to be subtracted + The color to be subtracted + The result of elementwise subtracting from + + + + Elementwise subtract another image from the current image + + The image to be subtracted + The color to be subtracted + - + + + + - + + The image to be subtracted + The value to be subtracted + - + + + + Elementwise subtract another image from the current image + + The image to be subtracted + The value to be subtracted + - + + + + * + + The image + The multiplication scale + * + + + + * + + The image + The multiplication scale + * + + + + Perform the convolution with on + + The image + The kernel + Result of the convolution + + + + / + + The image + The division scale + / + + + + / + + The image + The scale + / + + + + Summation over a pixel param1 x param2 neighborhood with subsequent scaling by 1/(param1 x param2) + + The width of the window + The height of the window + The result of blur + + + + Summation over a pixel param1 x param2 neighborhood. If scale is true, the result is subsequent scaled by 1/(param1 x param2) + + The width of the window + The height of the window + If true, the result is subsequent scaled by 1/(param1 x param2) + The result of blur + + + + Finding median of x neighborhood + + The size (width & height) of the window + The result of mediam smooth + + + + Applying bilateral 3x3 filtering + + Color sigma + Space sigma + The size of the bilatral kernel + The result of bilateral smooth + + + Perform Gaussian Smoothing in the current image and return the result + The size of the Gaussian kernel ( x ) + The smoothed image + + + Perform Gaussian Smoothing in the current image and return the result + The width of the Gaussian kernel + The height of the Gaussian kernel + The standard deviation of the Gaussian kernel in the horizontal dimwnsion + The standard deviation of the Gaussian kernel in the vertical dimwnsion + The smoothed image + + + Perform Gaussian Smoothing inplace for the current image + The size of the Gaussian kernel ( x ) + + + Perform Gaussian Smoothing inplace for the current image + The width of the Gaussian kernel + The height of the Gaussian kernel + The standard deviation of the Gaussian kernel in the horizontal dimwnsion + The standard deviation of the Gaussian kernel in the vertical dimwnsion + + + + Performs a convolution using the specific + + The convolution kernel + The result of the convolution + + + + Calculates integral images for the source image + + The integral image + + + + Calculates integral images for the source image + + The integral image + The integral image for squared pixel values + The integral image + + + + Calculates one or more integral images for the source image + + The integral image + The integral image for squared pixel values + The integral for the image rotated by 45 degrees + + + + Transforms grayscale image to binary image. + Threshold calculated individually for each pixel. + For the method CV_ADAPTIVE_THRESH_MEAN_C it is a mean of x pixel + neighborhood, subtracted by param1. + For the method CV_ADAPTIVE_THRESH_GAUSSIAN_C it is a weighted sum (gaussian) of x pixel neighborhood, subtracted by param1. + + Maximum value to use with CV_THRESH_BINARY and CV_THRESH_BINARY_INV thresholding types + Adaptive_method + Thresholding type. must be one of CV_THRESH_BINARY, CV_THRESH_BINARY_INV + The size of a pixel neighborhood that is used to calculate a threshold value for the pixel: 3, 5, 7, ... + Constant subtracted from mean or weighted mean. It may be negative. + The result of the adaptive threshold + + + + the base threshold method shared by public threshold functions + + + + Threshold the image such that: dst(x,y) = src(x,y), if src(x,y)>threshold; 0, otherwise + The threshold value + dst(x,y) = src(x,y), if src(x,y)>threshold; 0, otherwise + + + + Threshold the image such that: dst(x,y) = 0, if src(x,y)>threshold; src(x,y), otherwise + + The threshold value + The image such that: dst(x,y) = 0, if src(x,y)>threshold; src(x,y), otherwise + + + + Threshold the image such that: dst(x,y) = threshold, if src(x,y)>threshold; src(x,y), otherwise + + The threshold value + The image such that: dst(x,y) = threshold, if src(x,y)>threshold; src(x,y), otherwise + + + + Threshold the image such that: dst(x,y) = max_value, if src(x,y)>threshold; 0, otherwise + + The image such that: dst(x,y) = max_value, if src(x,y)>threshold; 0, otherwise + + + Threshold the image such that: dst(x,y) = 0, if src(x,y)>threshold; max_value, otherwise + The threshold value + The maximum value of the pixel on the result + The image such that: dst(x,y) = 0, if src(x,y)>threshold; max_value, otherwise + + + Threshold the image inplace such that: dst(x,y) = src(x,y), if src(x,y)>threshold; 0, otherwise + The threshold value + + + Threshold the image inplace such that: dst(x,y) = 0, if src(x,y)>threshold; src(x,y), otherwise + The threshold value + + + Threshold the image inplace such that: dst(x,y) = threshold, if src(x,y)>threshold; src(x,y), otherwise + The threshold value + + + Threshold the image inplace such that: dst(x,y) = max_value, if src(x,y)>threshold; 0, otherwise + The threshold value + The maximum value of the pixel on the result + + + Threshold the image inplace such that: dst(x,y) = 0, if src(x,y)>threshold; max_value, otherwise + The threshold value + The maximum value of the pixel on the result + + + + Calculates the average value and standard deviation of array elements, independently for each channel + + The avg color + The standard deviation for each channel + The operation mask + + + + Calculates the average value and standard deviation of array elements, independently for each channel + + The avg color + The standard deviation for each channel + + + + Count the non Zero elements for each channel + + Count the non Zero elements for each channel + + + + Returns the min / max location and values for the image + + The maximum locations for each channel + The maximum values for each channel + The minimum locations for each channel + The minimum values for each channel + + + Return a flipped copy of the current image + The type of the flipping + The flipped copy of this image + + + Inplace flip the image + The type of the flipping + The flipped copy of this image + + + + Concate the current image with another image vertically. + + The other image to concate + A new image that is the vertical concatening of this image and + + + + Concate the current image with another image horizontally. + + The other image to concate + A new image that is the horizontal concatening of this image and + + + + Calculates spatial and central moments up to the third order and writes them to moments. The moments may be used then to calculate gravity center of the shape, its area, main axises and various shape characteristics including 7 Hu invariants. + + If the flag is true, all the zero pixel values are treated as zeroes, all the others are treated as 1's + spatial and central moments up to the third order + + + + Gamma corrects this image inplace. The image must have a depth type of Byte. + + The gamma value + + + + Split current Image into an array of gray scale images where each element + in the array represent a single color channel of the original image + + + An array of gray scale images where each element + in the array represent a single color channel of the original image + + + + + Save this image to the specific file. + + The name of the file to be saved to + The image format is chosen depending on the filename extension, see cvLoadImage. Only 8-bit single-channel or 3-channel (with 'BGR' channel order) images can be saved using this function. If the format, depth or channel order is different, use cvCvtScale and cvCvtColor to convert it before saving, or use universal cvSave to save the image to XML or YAML format. + + + + The algorithm inplace normalizes brightness and increases contrast of the image. + For color images, a HSV representation of the image is first obtained and the V (value) channel is histogram normalized + + + + + This function load the image data from Mat + + The Mat + + + + This function load the image data from the iplImage pointer + + The pointer to the iplImage + + + + Get the managed image from an unmanaged IplImagePointer + + The pointer to the iplImage + The managed image from the iplImage pointer + + + + Get the jpeg representation of the image + + An byte array that contains the image as jpeg data + + + + Get or Set the data for this matrix. The Get function has O(1) complexity. The Set function make a copy of the data + + + If the image contains Byte and width is not a multiple of 4. The second dimension of the array might be larger than the Width of this image. + This is necessary since the length of a row need to be 4 align for OpenCV optimization. + The Set function always make a copy of the specific value. If the image contains Byte and width is not a multiple of 4. The second dimension of the array created might be larger than the Width of this image. + + + + + The IplImage structure + + + + + Get or Set the region of interest for this image. To clear the ROI, set it to System.Drawing.Rectangle.Empty + + + + + Get the number of channels for this image + + + + + Get the underneath managed array + + + + + Get the equivalent opencv depth type for this image + + + + + Indicates if the region of interest has been set + + + + + Get or Set the specific channel of the current image. + For Get operation, a copy of the specific channel is returned. + For Set operation, the specific channel is copied to this image. + + The channel to get from the current image, zero based index + The specific channel of the current image + + + + Get or Set the color in the th row (y direction) and th column (x direction) + + The zero-based row (y direction) of the pixel + The zero-based column (x direction) of the pixel + The color in the specific and + + + + Get or Set the color in the + + the location of the pixel + the color in the + + + + The Get property provide a more efficient way to convert Image<Gray, Byte>, Image<Bgr, Byte> and Image<Bgra, Byte> into Bitmap + such that the image data is shared with Bitmap. + If you change the pixel value on the Bitmap, you change the pixel values on the Image object as well! + For other types of image this property has the same effect as ToBitmap() + Take extra caution not to use the Bitmap after the Image object is disposed + The Set property convert the bitmap to this Image type. + + + + + Get the size of the array + + + + + Constants used by the image class + + + + + Offset of roi + + + + + The stereo matcher interface + + + + + Pointer to the stereo matcher + + + + + The class implements a standard Kalman filter. However, you can modify transitionMatrix, controlMatrix, and measurementMatrix to get + an extended Kalman filter functionality. + + + + + Initializes a new instance of the class. + + Dimensionality of the state. + Dimensionality of the measurement. + Dimensionality of the control vector. + Type of the created matrices that should be Cv32F or Cv64F + + + + Perform the predict operation using the option control input + + The control. + The predicted state. + + + + Updates the predicted state from the measurement. + + The measured system parameters + + + + + Release the unmanaged resources + + + + + Predicted state (x'(k)): x(k)=A*x(k-1)+B*u(k) + + + + + Corrected state (x(k)): x(k)=x'(k)+K(k)*(z(k)-H*x'(k)) + + + + + State transition matrix (A) + + + + + Control matrix (B) (not used if there is no control) + + + + + Measurement matrix (H) + + + + + Process noise covariance matrix (Q) + + + + + Measurement noise covariance matrix (R) + + + + + priori error estimate covariance matrix (P'(k)): P'(k)=A*P(k-1)*At + Q) + + + + + Kalman gain matrix (K(k)): K(k)=P'(k)*Ht*inv(H*P'(k)*Ht+R) + + + + + posteriori error estimate covariance matrix (P(k)): P(k)=(I-K(k)*H)*P'(k) + + + + + A Map is similar to an Image, except that the location of the pixels is defined by + its area and resolution + + The color of this map + The depth of this map + + + + Create a new Image Map defined by the Rectangle area. The center (0.0, 0.0) of this map is + defined by the center of the rectangle. + + + The resolution of x (y), (e.g. a value of 0.5 means each cell in the map is 0.5 unit in x (y) dimension) + The initial color of the map + + + + Create a new Image Map defined by the Rectangle area. The center (0.0, 0.0) of this map is + defined by the center of the rectangle. The initial value of the map is 0.0 + + + The resolution of x (y), (e.g. a value of 0.5 means each cell in the map is 0.5 unit in x (y) dimension) + + + + Map a point to a position in the internal image + + + + + + + Map a point to a position in the internal image + + + + + + + Map an image point to a Map point + + The point on image + The point on map + + + + Get a copy of the map in the specific area + + the area of the map to be retrieve + The area of the map + + + + Draw a rectangle in the map + + The rectangle to draw + The color for the rectangle + The thickness of the rectangle, any value less than or equal to 0 will result in a filled rectangle + + + + Draw a line segment in the map + + The line to be draw + The color for the line + The thickness of the line + Line type + Number of fractional bits in the center coordinates and radius value + + + Draw a Circle of the specific color and thickness + The circle to be drawn + The color of the circle + If thickness is less than 1, the circle is filled up + Line type + Number of fractional bits in the center coordinates and radius value + + + Draw a convex polygon of the specific color and thickness + The convex polygon to be drawn + The color of the convex polygon + If thickness is less than 1, the triangle is filled up + + + + Draw the text using the specific font on the image + + The text message to be draw + Font type. + Font scale factor that is multiplied by the font-specific base size. + The location of the bottom left corner of the font + The color of the text + Thickness of the lines used to draw a text. + Line type + When true, the image data origin is at the bottom-left corner. Otherwise, it is at the top-left corner. + + + + Draw the polyline defined by the array of 2D points + + the points that defines the poly line + if true, the last line segment is defined by the last point of the array and the first point of the array + the color used for drawing + the thinkness of the line + + + + Constructor used to deserialize runtime serialized object + + The serialization info + The streaming context + + + + A function used for runtime serialization of the object + + Serialization info + streaming context + + + + Get the area of this map as a rectangle + + + + + Get the resolution of this map as a 2D point + + + + + Get or Set the region of interest for this map. To clear the ROI, set it to System.Drawing.RectangleF.Empty + + + + + A MatND is a wrapper to cvMatND of OpenCV. + + The type of depth + + + + Create a N-dimensional matrix + + The size for each dimension + + + + Constructor used to deserialize runtime serialized object + + The serialization info + The streaming context + + + + This function is not implemented for MatND + + Not implemented + Not implemented + Not implemented + + + + Release the matrix and all the memory associate with it + + + + + A function used for runtime serialization of the object + + Serialization info + Streaming context + + + + A function used for runtime deserailization of the object + + Serialization info + Streaming context + + + + Not Implemented + + The XmlReader + + + + Not Implemented + + The XmlWriter + + + + Convert this matrix to different depth + + The depth type to convert to + Matrix of different depth + + + + Check if the two MatND are equal + + The other MatND to compares to + True if the two MatND equals + + + + This function is not implemented for MatND + + + + + Get the underneath managed array + + + + Get the depth representation for openCV + + + + The MCvMatND structure + + + + + The base class algorithms that can merge exposure sequence to a single image. + + + + + The pointer to the unmanaged MergeExposure object + + + + + Merges images. + + Vector of input images + Result image + Vector of exposure time values for each image + 256x1 matrix with inverse camera response function for each pixel value, it should have the same number of channels as images. + + + + The motion history class + + + For help on using this class, take a look at the Motion Detection example + + + + + Create a motion history object + + In second, the duration of motion history you wants to keep + In second. Any change happens between a time interval greater than this will not be considered + In second. Any change happens between a time interval smaller than this will not be considered. + + + + Create a motion history object + + In second, the duration of motion history you wants to keep + In second. Any change happens between a time interval larger than this will not be considered + In second. Any change happens between a time interval smaller than this will not be considered. + The start time of the motion history + + + + Update the motion history with the specific image and current timestamp + + The image to be added to history + + + + Update the motion history with the specific image and the specific timestamp + + The foreground of the image to be added to history + The time when the image is captured + + + + Get a sequence of motion component + + A sequence of motion components + + + + Given a rectangle area of the motion, output the angle of the motion and the number of pixels that are considered to be motion pixel + + The rectangle area of the motion + The orientation of the motion + Number of motion pixels within silhouette ROI + The foreground mask used to calculate the motion info. + + + + Release unmanaged resources + + + + + Release any images associated with this object + + + + + The motion mask. + Do not dispose this image. + + + + + This class contains ocl runtime information + + + + + Create a empty OclDevice object + + + + + Release all the unmanaged memory associated with this OclInfo + + + + + Set the native device pointer + + + + + + Get the string representation of this oclDevice + + A string representation of this oclDevice + + + + Get the default OclDevice. Do not dispose this device. + + + + + Get the native device pointer + + + + + Indicates if this is an NVidia device + + + + + Indicates if this is an Intel device + + + + + Indicates if this is an AMD device + + + + + The AddressBits + + + + + Indicates if the linker is available + + + + + Indicates if the compiler is available + + + + + Indicates if the device is available + + + + + The maximum work group size + + + + + The max compute unit + + + + + The local memory size + + + + + The maximum memory allocation size + + + + + The device major version number + + + + + The device minor version number + + + + + The device half floating point configuration + + + + + The device single floating point configuration + + + + + The device double floating point configuration + + + + + True if the device use unified memory + + + + + The global memory size + + + + + The image 2d max width + + + + + The image2d max height + + + + + The ocl device type + + + + + The device name + + + + + The device version + + + + + The device vendor name + + + + + The device driver version + + + + + The device extensions + + + + + The device OpenCL version + + + + + The device OpenCL C version + + + + + Ocl Device Type + + + + + Default + + + + + Cpu + + + + + Gpu + + + + + Accerlerator + + + + + DGpu + + + + + IGpu + + + + + All + + + + + Floating point configuration + + + + + Denorm + + + + + inf, nan + + + + + round to nearest + + + + + round to zero + + + + + round to infinite + + + + + FMA + + + + + soft float + + + + + Correctly rounded divide sqrt + + + + + Class that contains ocl functions + + + Class that contains ocl functions. + + + Class that contains ocl functions. + + + + + Get all the platform info as a vector + + The vector of Platfom info + + + + An opencl kernel + + + + + Create an opencl kernel + + + + + Create an opencl kernel + + The name of the kernel + The program source code + The build options + Option error message container that can be passed to this function + True if the kernel can be created + + + + Release the opencl kernel + + + + + Indicates if the kernel is empty + + + + + The pointer to the native kernel + + + + + This class contains ocl platform information + + + + + Release all the unmanaged memory associated with this OclInfo + + + + + Get the OclDevice with the specific index + + The index of the ocl device + The ocl device with the specific index + + + + Get the string that represent this oclPlatformInfo object + + A string that represent this oclPlatformInfo object + + + + The platform name + + + + + The platform version + + + + + The platform vendor + + + + + The number of devices + + + + + Type for cvNorm + + + + + if arr2 is NULL, norm = ||arr1||_C = max_I abs(arr1(I)); + if arr2 is not NULL, norm = ||arr1-arr2||_C = max_I abs(arr1(I)-arr2(I)) + + + + + if arr2 is NULL, norm = ||arr1||_L1 = sum_I abs(arr1(I)); + if arr2 is not NULL, norm = ||arr1-arr2||_L1 = sum_I abs(arr1(I)-arr2(I)) + + + + + if arr2 is NULL, norm = ||arr1||_L2 = sqrt( sum_I arr1(I)^2); + if arr2 is not NULL, norm = ||arr1-arr2||_L2 = sqrt( sum_I (arr1(I)-arr2(I))^2 ) + + + + + + + + + + It is used in combination with either CV_C, CV_L1 or CV_L2 + + + + + It is used in combination with either CV_C, CV_L1 or CV_L2 + + + + + + + + + + + + + + + + + + + + + + + + + norm = ||arr1-arr2||_C/||arr2||_C + + + + + norm = ||arr1-arr2||_L1/||arr2||_L1 + + + + + norm = ||arr1-arr2||_L2/||arr2||_L2 + + + + + Type used for cvReduce function + + + + + The output is the sum of all the matrix rows/columns + + + + + The output is the mean vector of all the matrix rows/columns + + + + + The output is the maximum (column/row-wise) of all the matrix rows/columns + + + + + The output is the minimum (column/row-wise) of all the matrix rows/columns + + + + + Type used for cvReduce function + + + + + The matrix is reduced to a single row + + + + + The matrix is reduced to a single column + + + + + The dimension is chosen automatically by analysing the dst size + + + + + Type used for cvCmp function + + + + + src1(I) "equal to" src2(I) + + + + + src1(I) "greater than" src2(I) + + + + + src1(I) "greater or equal" src2(I) + + + + + src1(I) "less than" src2(I) + + + + + src1(I) "less or equal" src2(I) + + + + + src1(I) "not equal to" src2(I) + + + + + CV Capture property identifier + + + + + Turn the feature off (not controlled manually nor automatically) + + + + + Set automatically when a value of the feature is set by the user + + + + + DC1394 mode auto + + + + + DC1394 mode one push auto + + + + + Film current position in milliseconds or video capture timestamp + + + + + 0-based index of the frame to be decoded/captured next + + + + + Position in relative units (0 - start of the file, 1 - end of the file) + + + + + Width of frames in the video stream + + + + + Height of frames in the video stream + + + + + Frame rate + + + + + 4-character code of codec + + + + + Number of frames in video file + + + + + Format + + + + + Mode + + + + + Brightness + + + + + Contrast + + + + + Saturation + + + + + Hue + + + + + Gain + + + + + Exposure + + + + + Convert RGB + + + + + White balance blue u + + + + + Rectification + + + + + Monochrome + + + + + Sharpness + + + + + Exposure control done by camera, user can adjust reference level using this feature + + + + + Gamma + + + + + Temperature + + + + + Trigger + + + + + Trigger delay + + + + + White balance red v + + + + + Zoom + + + + + Focus + + + + + GUID + + + + + ISO SPEED + + + + + MAX DC1394 + + + + + Backlight + + + + + Pan + + + + + Tilt + + + + + Roll + + + + + Iris + + + + + Settings + + + + + property for highgui class CvCapture_Android only + + + + + readonly, tricky property, returns cpnst char* indeed + + + + + readonly, tricky property, returns cpnst char* indeed + + + + + OpenNI map generators + + + + + OpenNI map generators + + + + + OpenNI map generators + + + + + Properties of cameras available through OpenNI interfaces + + + + + Properties of cameras available through OpenNI interfaces, in mm. + + + + + Properties of cameras available through OpenNI interfaces, in mm. + + + + + Properties of cameras available through OpenNI interfaces, in pixels. + + + + + Flag that synchronizes the remapping depth map to image map + by changing depth generator's view point (if the flag is "on") or + sets this view point to its normal one (if the flag is "off"). + + + + + Flag that synchronizes the remapping depth map to image map + by changing depth generator's view point (if the flag is "on") or + sets this view point to its normal one (if the flag is "off"). + + + + + Approx frame sync + + + + + Max buffer size + + + + + Circle buffer + + + + + Max time duration + + + + + Generator present + + + + + Openni image generator present + + + + + Image generator output mode + + + + + Depth generator baseline, in mm. + + + + + Depth generator focal length, in pixels. + + + + + Openni generator registration + + + + + Openni generator registration on + + + + + Properties of cameras available through GStreamer interface. Default is 1 + + + + + Ip for enable multicast master mode. 0 for disable multicast + + + + + Change image resolution by binning or skipping. + + + + + Output data format + + + + + Horizontal offset from the origin to the area of interest (in pixels). + + + + + Vertical offset from the origin to the area of interest (in pixels). + + + + + Defines source of trigger. + + + + + Generates an internal trigger. PRM_TRG_SOURCE must be set to TRG_SOFTWARE. + + + + + Selects general purpose input + + + + + Set general purpose input mode + + + + + Get general purpose level + + + + + Selects general purpose output + + + + + Set general purpose output mode + + + + + Selects camera signaling LED + + + + + Define camera signaling LED functionality + + + + + Calculates White Balance(must be called during acquisition) + + + + + Automatic white balance + + + + + Automatic exposure/gain + + + + + Exposure priority (0.5 - exposure 50%, gain 50%). + + + + + Maximum limit of exposure in AEAG procedure + + + + + Maximum limit of gain in AEAG procedure + + + + + Average intensity of output signal AEAG should achieve(in %) + + + + + Image capture timeout in milliseconds + + + + + Android flash mode + + + + + Android focus mode + + + + + Android white balance + + + + + Android anti banding + + + + + Android focal length + + + + + Android focus distance near + + + + + Android focus distance optimal + + + + + Android focus distance far + + + + + iOS device focus + + + + + iOS device exposure + + + + + iOS device flash + + + + + iOS device white-balance + + + + + iOS device torch + + + + + Smartek Giganetix Ethernet Vision: frame offset X + + + + + Smartek Giganetix Ethernet Vision: frame offset Y + + + + + Smartek Giganetix Ethernet Vision: frame width max + + + + + Smartek Giganetix Ethernet Vision: frame height max + + + + + Smartek Giganetix Ethernet Vision: frame sens width + + + + + Smartek Giganetix Ethernet Vision: frame sens height + + + + + The named window type + + + + + The user can resize the window (no constraint) / also use to switch a fullscreen window to a normal size + + + + + The user cannot resize the window, the size is constrainted by the image displayed + + + + + Window with opengl support + + + + + Change the window to fullscreen + + + + + The image expends as much as it can (no ratio constraint) + + + + + the ratio of the image is respected + + + + + contour approximation method + + + + + output contours in the Freeman chain code. All other methods output polygons (sequences of vertices). + + + + + translate all the points from the chain code into points; + + + + + compress horizontal, vertical, and diagonal segments, that is, the function leaves only their ending points; + + + + + + + + + + apply one of the flavors of Teh-Chin chain approximation algorithm + + + + + use completely different contour retrieval algorithm via linking of horizontal segments of 1s. Only LIST retrieval mode can be used with this method + + + + + Color Conversion code + + + + + Convert BGR color to BGRA color + + + + + Convert RGB color to RGBA color + + + + + Convert BGRA color to BGR color + + + + + Convert RGBA color to RGB color + + + + + Convert BGR color to RGBA color + + + + + Convert RGB color to BGRA color + + + + + Convert RGBA color to BGR color + + + + + Convert BGRA color to RGB color + + + + + Convert BGR color to RGB color + + + + + Convert RGB color to BGR color + + + + + Convert BGRA color to RGBA color + + + + + Convert RGBA color to BGRA color + + + + + Convert BGR color to GRAY color + + + + + Convert RGB color to GRAY color + + + + + Convert GRAY color to BGR color + + + + + Convert GRAY color to RGB color + + + + + Convert GRAY color to BGRA color + + + + + Convert GRAY color to RGBA color + + + + + Convert BGRA color to GRAY color + + + + + Convert RGBA color to GRAY color + + + + + Convert BGR color to BGR565 color + + + + + Convert RGB color to BGR565 color + + + + + Convert BGR565 color to BGR color + + + + + Convert BGR565 color to RGB color + + + + + Convert BGRA color to BGR565 color + + + + + Convert RGBA color to BGR565 color + + + + + Convert BGR565 color to BGRA color + + + + + Convert BGR565 color to RGBA color + + + + + Convert GRAY color to BGR565 color + + + + + Convert BGR565 color to GRAY color + + + + + Convert BGR color to BGR555 color + + + + + Convert RGB color to BGR555 color + + + + + Convert BGR555 color to BGR color + + + + + Convert BGR555 color to RGB color + + + + + Convert BGRA color to BGR555 color + + + + + Convert RGBA color to BGR555 color + + + + + Convert BGR555 color to BGRA color + + + + + Convert BGR555 color to RGBA color + + + + + Convert GRAY color to BGR555 color + + + + + Convert BGR555 color to GRAY color + + + + + Convert BGR color to XYZ color + + + + + Convert RGB color to XYZ color + + + + + Convert XYZ color to BGR color + + + + + Convert XYZ color to RGB color + + + + + Convert BGR color to YCrCb color + + + + + Convert RGB color to YCrCb color + + + + + Convert YCrCb color to BGR color + + + + + Convert YCrCb color to RGB color + + + + + Convert BGR color to HSV color + + + + + Convert RGB colot to HSV color + + + + + Convert BGR color to Lab color + + + + + Convert RGB color to Lab color + + + + + Convert BayerBG color to BGR color + + + + + Convert BayerGB color to BGR color + + + + + Convert BayerRG color to BGR color + + + + + Convert BayerGR color to BGR color + + + + + Convert BayerBG color to BGR color + + + + + Convert BayerRG color to BGR color + + + + + Convert BayerRG color to RGB color + + + + + Convert BayerGR color to RGB color + + + + + Convert BGR color to Luv color + + + + + Convert RGB color to Luv color + + + + + Convert BGR color to HLS color + + + + + Convert RGB color to HLS color + + + + + Convert HSV color to BGR color + + + + + Convert HSV color to RGB color + + + + + Convert Lab color to BGR color + + + + + Convert Lab color to RGB color + + + + + Convert Luv color to BGR color + + + + + Convert Luv color to RGB color + + + + + Convert HLS color to BGR color + + + + + Convert HLS color to RGB color + + + + + Convert BayerBG pattern to BGR color using VNG + + + + + Convert BayerGB pattern to BGR color using VNG + + + + + Convert BayerRG pattern to BGR color using VNG + + + + + Convert BayerGR pattern to BGR color using VNG + + + + + Convert BayerBG pattern to RGB color using VNG + + + + + Convert BayerGB pattern to RGB color using VNG + + + + + Convert BayerRG pattern to RGB color using VNG + + + + + Convert BayerGR pattern to RGB color using VNG + + + + + Convert BGR to HSV + + + + + Convert RGB to HSV + + + + + Convert BGR to HLS + + + + + Convert RGB to HLS + + + + + Convert HSV color to BGR color + + + + + Convert HSV color to RGB color + + + + + Convert HLS color to BGR color + + + + + Convert HLS color to RGB color + + + + + Convert sBGR color to Lab color + + + + + Convert sRGB color to Lab color + + + + + Convert sBGR color to Luv color + + + + + Convert sRGB color to Luv color + + + + + Convert Lab color to sBGR color + + + + + Convert Lab color to sRGB color + + + + + Convert Luv color to sBGR color + + + + + Convert Luv color to sRGB color + + + + + Convert BGR color to YUV + + + + + Convert RGB color to YUV + + + + + Convert YUV color to BGR + + + + + Convert YUV color to RGB + + + + + Convert BayerBG to GRAY + + + + + Convert BayerGB to GRAY + + + + + Convert BayerRG to GRAY + + + + + Convert BayerGR to GRAY + + + + + Convert YUV420i to RGB + + + + + Convert YUV420i to BGR + + + + + Convert YUV420sp to RGB + + + + + Convert YUV320sp to BGR + + + + + Convert YUV320i to RGBA + + + + + Convert YUV420i to BGRA + + + + + Convert YUV420sp to RGBA + + + + + Convert YUV420sp to BGRA + + + + + Convert YUV (YV12) to RGB + + + + + Convert YUV (YV12) to BGR + + + + + Convert YUV (iYUV) to RGB + + + + + Convert YUV (iYUV) to BGR + + + + + Convert YUV (i420) to RGB + + + + + Convert YUV (i420) to BGR + + + + + Convert YUV (420p) to RGB + + + + + Convert YUV (420p) to BGR + + + + + Convert YUV (YV12) to RGBA + + + + + Convert YUV (YV12) to BGRA + + + + + Convert YUV (iYUV) to RGBA + + + + + Convert YUV (iYUV) to BGRA + + + + + Convert YUV (i420) to RGBA + + + + + Convert YUV (i420) to BGRA + + + + + Convert YUV (420p) to RGBA + + + + + Convert YUV (420p) to BGRA + + + + + Convert YUV 420 to Gray + + + + + Convert YUV NV21 to Gray + + + + + Convert YUV NV12 to Gray + + + + + Convert YUV YV12 to Gray + + + + + Convert YUV (iYUV) to Gray + + + + + Convert YUV (i420) to Gray + + + + + Convert YUV (420sp) to Gray + + + + + Convert YUV (420p) to Gray + + + + + Convert YUV (UYVY) to RGB + + + + + Convert YUV (UYVY) to BGR + + + + + Convert YUV (Y422) to RGB + + + + + Convert YUV (Y422) to BGR + + + + + Convert YUV (UYNY) to RGB + + + + + Convert YUV (UYNV) to BGR + + + + + Convert YUV (UYVY) to RGBA + + + + + Convert YUV (VYUY) to BGRA + + + + + Convert YUV (Y422) to RGBA + + + + + Convert YUV (Y422) to BGRA + + + + + Convert YUV (UYNV) to RGBA + + + + + Convert YUV (UYNV) to BGRA + + + + + Convert YUV (YUY2) to RGB + + + + + Convert YUV (YUY2) to BGR + + + + + Convert YUV (YVYU) to RGB + + + + + Convert YUV (YVYU) to BGR + + + + + Convert YUV (YUYV) to RGB + + + + + Convert YUV (YUYV) to BGR + + + + + Convert YUV (YUNV) to RGB + + + + + Convert YUV (YUNV) to BGR + + + + + Convert YUV (YUY2) to RGBA + + + + + Convert YUV (YUY2) to BGRA + + + + + Convert YUV (YVYU) to RGBA + + + + + Convert YUV (YVYU) to BGRA + + + + + Convert YUV (YUYV) to RGBA + + + + + Convert YUV (YUYV) to BGRA + + + + + Convert YUV (YUNV) to RGBA + + + + + Convert YUV (YUNV) to BGRA + + + + + Convert YUV (UYVY) to Gray + + + + + Convert YUV (YUY2) to Gray + + + + + Convert YUV (Y422) to Gray + + + + + Convert YUV (UYNV) to Gray + + + + + Convert YUV (YVYU) to Gray + + + + + Convert YUV (YUYV) to Gray + + + + + Convert YUV (YUNV) to Gray + + + + + Alpha premultiplication + + + + + Alpha premultiplication + + + + + Convert RGB to YUV_I420 + + + + + Convert BGR to YUV_I420 + + + + + Convert RGB to YUV_IYUV + + + + + Convert BGR to YUV_IYUV + + + + + Convert RGBA to YUV_I420 + + + + + Convert BGRA to YUV_I420 + + + + + Convert RGBA to YUV_IYUV + + + + + Convert BGRA to YUV_IYUV + + + + + Convert RGB to YUV_YV12 + + + + + Convert BGR to YUV_YV12 + + + + + Convert RGBA to YUV_YV12 + + + + + Convert BGRA to YUV_YV12 + + + + + Convert BayerBG to BGR (Edge-Aware Demosaicing) + + + + + Convert BayerGB to BGR (Edge-Aware Demosaicing) + + + + + Convert BayerRG to BGR (Edge-Aware Demosaicing) + + + + + Convert BayerGR to BGR (Edge-Aware Demosaicing) + + + + + Convert BayerBG to RGB (Edge-Aware Demosaicing) + + + + + Convert BayerGB to RGB (Edge-Aware Demosaicing) + + + + + Convert BayerRG to RGB (Edge-Aware Demosaicing) + + + + + Convert BayerGR to RGB (Edge-Aware Demosaicing) + + + + + The max number, do not use + + + + + Fonts + + + + + Hershey simplex + + + + + Hershey plain + + + + + Hershey duplex + + + + + Hershey complex + + + + + Hershey triplex + + + + + Hershey complex small + + + + + Hershey script simplex + + + + + Hershey script complex + + + + + Flags used for GEMM function + + + + + Do not apply transpose to neither matrices + + + + + transpose src1 + + + + + transpose src2 + + + + + transpose src3 + + + + + Hough detection type + + + + + + + + + + Inpaint type + + + + + Navier-Stokes based method. + + + + + The method by Alexandru Telea + + + + + Edge preserving filter flag + + + + + Recurs filter + + + + + Norm conv filter + + + + + Interpolation types + + + + + Nearest-neighbor interpolation + + + + + Bilinear interpolation + + + + + Resampling using pixel area relation. It is the preferred method for image decimation that gives moire-free results. In case of zooming it is similar to CV_INTER_NN method + + + + + Bicubic interpolation + + + + + LANCZOS 4 + + + + + Interpolation type + + + + + (simple blur with no scaling) - summation over a pixel param1xparam2 neighborhood. If the neighborhood size may vary, one may precompute integral image with cvIntegral function + + + + + (simple blur) - summation over a pixel param1xparam2 neighborhood with subsequent scaling by 1/(param1xparam2). + + + + + (Gaussian blur) - convolving image with param1xparam2 Gaussian kernel. + + + + + (median blur) - finding median of param1xparam1 neighborhood (i.e. the neighborhood is square). + + + + + (bilateral filter) - applying bilateral 3x3 filtering with color sigma=param1 and space sigma=param2. Information about bilateral filtering can be found + + + + + cvLoadImage type + + + + + 8bit, color or not + + + + + 8bit, gray + + + + + ?, color + + + + + any depth, ? + + + + + ?, any color + + + + + OpenCV depth type + + + + + default + + + + + Byte + + + + + SByte + + + + + UInt16 + + + + + Int16 + + + + + Int32 + + + + + float + + + + + double + + + + + contour retrieval mode + + + + + retrieve only the extreme outer contours + + + + + retrieve all the contours and puts them in the list + + + + + retrieve all the contours and organizes them into two-level hierarchy: top level are external boundaries of the components, second level are bounda boundaries of the holes + + + + + retrieve all the contours and reconstructs the full hierarchy of nested contours + + + + + The bit to shift for SEQ_ELTYPE + + + + + The mask of CV_SEQ_ELTYPE + + + + + The bits to shift for SEQ_KIND + + + + + The bits to shift for SEQ_FLAG + + + + + Sequence element type + + + + + (x,y) + + + + + freeman code: 0..7 + + + + + unspecified type of sequence elements + + + + + =6 + + + + + pointer to element of other sequence + + + + + index of element of some other sequence + + + + + next_o, next_d, vtx_o, vtx_d + + + + + first_edge, (x,y) + + + + + vertex of the binary tree + + + + + connected component + + + + + (x,y,z) + + + + + The kind of sequence available + + + + + generic (unspecified) kind of sequence + + + + + dense sequence subtypes + + + + + dense sequence subtypes + + + + + sparse sequence (or set) subtypes + + + + + sparse sequence (or set) subtypes + + + + + Sequence flag + + + + + close sequence + + + + + + + + + + + + + + + + + + + + Sequence type for point sets + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + CV_TERMCRIT + + + + + Iteration + + + + + Epsilon + + + + + Types of thresholding + + + + + value = value > threshold ? max_value : 0 + + + + + value = value > threshold ? 0 : max_value + + + + + value = value > threshold ? threshold : value + + + + + value = value > threshold ? value : 0 + + + + + value = value > threshold ? 0 : value + + + + + + + + + + use Otsu algorithm to choose the optimal threshold value; + combine the flag with one of the above CV_THRESH_* values + + + + + Methods for comparing two array + + + + + R(x,y)=sumx',y'[T(x',y')-I(x+x',y+y')]2 + + + + + R(x,y)=sumx',y'[T(x',y')-I(x+x',y+y')]2/sqrt[sumx',y'T(x',y')2 sumx',y'I(x+x',y+y')2] + + + + + R(x,y)=sumx',y'[T(x',y') I(x+x',y+y')] + + + + + R(x,y)=sumx',y'[T(x',y') I(x+x',y+y')]/sqrt[sumx',y'T(x',y')2 sumx',y'I(x+x',y+y')2] + + + + + R(x,y)=sumx',y'[T'(x',y') I'(x+x',y+y')], + where T'(x',y')=T(x',y') - 1/(wxh) sumx",y"T(x",y") + I'(x+x',y+y')=I(x+x',y+y') - 1/(wxh) sumx",y"I(x+x",y+y") + + + + + R(x,y)=sumx',y'[T'(x',y') I'(x+x',y+y')]/sqrt[sumx',y'T'(x',y')2 sumx',y'I'(x+x',y+y')2] + + + + + IPL_DEPTH + + + + + indicates if the value is signed + + + + + 1bit unsigned + + + + + 8bit unsigned (Byte) + + + + + 16bit unsigned + + + + + 32bit float (Single) + + + + + 8bit signed + + + + + 16bit signed + + + + + 32bit signed + + + + + double + + + + + Enumeration used by cvFlip + + + + + No flipping + + + + + Flip horizontally + + + + + Flip vertically + + + + + Enumeration used by cvCheckArr + + + + + Checks that every element is neither NaN nor Infinity + + + + + If set, the function checks that every value of array is within [minVal,maxVal) range, otherwise it just checks that every element is neigther NaN nor Infinity + + + + + If set, the function does not raises an error if an element is invalid or out of range + + + + + Type of floodfill operation + + + + + The default type + + + + + If set the difference between the current pixel and seed pixel is considered, + otherwise difference between neighbor pixels is considered (the range is floating). + + + + + If set, the function does not fill the image (new_val is ignored), + but the fills mask (that must be non-NULL in this case). + + + + + The type for cvSampleLine + + + + + 8-connected + + + + + 4-connected + + + + + The type of line for drawing + + + + + 8-connected + + + + + 4-connected + + + + + Anti-alias + + + + + Distance transform algorithm flags + + + + + Connected component + + + + + The pixel + + + + + Defines for Distance Transform + + + + + User defined distance + + + + + distance = |x1-x2| + |y1-y2| + + + + + Simple euclidean distance + + + + + distance = max(|x1-x2|,|y1-y2|) + + + + + L1-L2 metric: distance = 2(sqrt(1+x*x/2) - 1)) + + + + + distance = c^2(|x|/c-log(1+|x|/c)), c = 1.3998 + + + + + distance = c^2/2(1-exp(-(x/c)^2)), c = 2.9846 + + + + + distance = |x|<c ? x^2/2 : c(|x|-c/2), c=1.345 + + + + + The types for cvMulSpectrums + + + + + The default type + + + + + Do forward or inverse transform of every individual row of the input matrix. This flag allows user to transform multiple vectors simultaneously and can be used to decrease the overhead (which is sometimes several times larger than the processing itself), to do 3D and higher-dimensional transforms etc + + + + + Conjugate the second argument of cvMulSpectrums + + + + + Flag used for cvDFT + + + + + Do forward 1D or 2D transform. The result is not scaled + + + + + Do inverse 1D or 2D transform. The result is not scaled. CV_DXT_FORWARD and CV_DXT_INVERSE are mutually exclusive, of course + + + + + Scale the result: divide it by the number of array elements. Usually, it is combined with CV_DXT_INVERSE, and one may use a shortcut + + + + + Do forward or inverse transform of every individual row of the input matrix. This flag allows user to transform multiple vectors simultaneously and can be used to decrease the overhead (which is sometimes several times larger than the processing itself), to do 3D and higher-dimensional transforms etc + + + + + Inverse and scale + + + + + Flag used for cvDCT + + + + + Do forward 1D or 2D transform. The result is not scaled + + + + + Do inverse 1D or 2D transform. The result is not scaled. CV_DXT_FORWARD and CV_DXT_INVERSE are mutually exclusive, of course + + + + + Do forward or inverse transform of every individual row of the input matrix. This flag allows user to transform multiple vectors simultaneously and can be used to decrease the overhead (which is sometimes several times larger than the processing itself), to do 3D and higher-dimensional transforms etc + + + + + Calculates fundamental matrix given a set of corresponding points + + + + + for 7-point algorithm. N == 7 + + + + + for 8-point algorithm. N >= 8 + + + + + for LMedS algorithm. N >= 8 + + + + + for RANSAC algorithm. N >= 8 + + + + + CV_FM_LMEDS_ONLY | CV_FM_8POINT + + + + + CV_FM_RANSAC_ONLY | CV_FM_8POINT + + + + + General enumeration + + + + + + + + + + + + + + + + + + + + Error codes + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Types for WarpAffine + + + + + Neither FILL_OUTLIERS nor CV_WRAP_INVERSE_MAP + + + + + Fill all the destination image pixels. If some of them correspond to outliers in the source image, they are set to fillval. + + + + + Indicates that matrix is inverse transform from destination image to source and, thus, can be used directly for pixel interpolation. Otherwise, the function finds the inverse transform from map_matrix. + + + + + Types of Adaptive Threshold + + + + + indicates that "Mean minus C" should be used for adaptive threshold. + + + + + indicates that "Gaussian minus C" should be used for adaptive threshold. + + + + + Shape of the Structuring Element + + + + + A rectangular element. + + + + + A cross-shaped element. + + + + + An elliptic element. + + + + + A user-defined element. + + + + + PCA Type + + + + + the vectors are stored as rows (i.e. all the components of a certain vector are stored continously) + + + + + the vectors are stored as columns (i.e. values of a certain vector component are stored continuously) + + + + + use pre-computed average vector + + + + + cvInvert method + + + + + Gaussian elimination with optimal pivot element chose + In case of LU method the function returns src1 determinant (src1 must be square). If it is 0, the matrix is not inverted and src2 is filled with zeros. + + + + + Singular value decomposition (SVD) method + In case of SVD methods the function returns the inversed condition number of src1 (ratio of the smallest singular value to the largest singular value) and 0 if src1 is all zeros. The SVD methods calculate a pseudo-inverse matrix if src1 is singular + + + + + Eig + + + + + method for a symmetric positively-defined matrix + + + + + QR decomposition + + + + + Normal + + + + + cvCalcCovarMatrix method types + + + + + Calculates covariation matrix for a set of vectors + transpose([v1-avg, v2-avg,...]) * [v1-avg,v2-avg,...] + + + + + [v1-avg, v2-avg,...] * transpose([v1-avg,v2-avg,...]) + + + + + Do not calc average (i.e. mean vector) - use the input vector instead + (useful for calculating covariance matrix by parts) + + + + + Scale the covariance matrix coefficients by number of the vectors + + + + + All the input vectors are stored in a single matrix, as its rows + + + + + All the input vectors are stored in a single matrix, as its columns + + + + + Type for cvSVD + + + + + The default type + + + + + enables modification of matrix src1 during the operation. It speeds up the processing. + + + + + indicates that only a vector of singular values `w` is to be processed, while u and vt will be set to empty matrices + + + + + when the matrix is not square, by default the algorithm produces u and vt matrices of + sufficiently large size for the further A reconstruction; if, however, FULL_UV flag is + specified, u and vt will be full-size square orthogonal matrices. + + + + + Type for cvCalcOpticalFlowPyrLK + + + + + The default type + + + + + Uses initial estimations, stored in nextPts; if the flag is not set, then prevPts is copied to nextPts and is considered the initial estimate. + + + + + use minimum eigen values as an error measure (see minEigThreshold description); if the flag is not set, then L1 distance between patches around the original and a moved point, divided by number of pixels in a window, is used as a error measure. + + + + + Various camera calibration flags + + + + + The default value + + + + + intrinsic_matrix contains valid initial values of fx, fy, cx, cy that are optimized further. Otherwise, (cx, cy) is initially set to the image center (image_size is used here), and focal distances are computed in some least-squares fashion + + + + + The optimization procedure consider only one of fx and fy as independent variable and keeps the aspect ratio fx/fy the same as it was set initially in intrinsic_matrix. In this case the actual initial values of (fx, fy) are either taken from the matrix (when CV_CALIB_USE_INTRINSIC_GUESS is set) or estimated somehow (in the latter case fx, fy may be set to arbitrary values, only their ratio is used) + + + + + The principal point is not changed during the global optimization, it stays at the center and at the other location specified (when CV_CALIB_FIX_FOCAL_LENGTH - Both fx and fy are fixed. + CV_CALIB_USE_INTRINSIC_GUESS is set as well) + + + + + Tangential distortion coefficients are set to zeros and do not change during the optimization + + + + + The focal length is fixed + + + + + The 1st distortion coefficient (k1) is fixed to 0 or to the initial passed value if CV_CALIB_USE_INTRINSIC_GUESS is passed + + + + + The 2nd distortion coefficient (k2) is fixed to 0 or to the initial passed value if CV_CALIB_USE_INTRINSIC_GUESS is passed + + + + + The 3rd distortion coefficient (k3) is fixed to 0 or to the initial passed value if CV_CALIB_USE_INTRINSIC_GUESS is passed + + + + + The 4th distortion coefficient (k4) is fixed (see above) + + + + + The 5th distortion coefficient (k5) is fixed to 0 or to the initial passed value if CV_CALIB_USE_INTRINSIC_GUESS is passed + + + + + The 6th distortion coefficient (k6) is fixed to 0 or to the initial passed value if CV_CALIB_USE_INTRINSIC_GUESS is passed + + + + + Rational model + + + + + Type of chessboard calibration + + + + + Default type + + + + + Use adaptive thresholding to convert the image to black-n-white, rather than a fixed threshold level (computed from the average image brightness) + + + + + Normalize the image using cvNormalizeHist before applying fixed or adaptive thresholding. + + + + + Use additional criteria (like contour area, perimeter, square-like shape) to filter out false quads that are extracted at the contour retrieval stage + + + + + If it is on, then this check is performed before the main algorithm and if a chessboard is not found, the function returns 0 instead of wasting 0.3-1s on doing the full search. + + + + + Type of circles grid calibration + + + + + symmetric grid + + + + + asymmetric grid + + + + + Clustering + + + + + IO type for eigen object related functions + + + + + No callback + + + + + input callback + + + + + output callback + + + + + both callback + + + + + CvNextEdgeType + + + + + next around the edge origin (eOnext) + + + + + next around the edge vertex (eDnext) + + + + + previous around the edge origin (reversed eRnext) + + + + + previous around the edge destination (reversed eLnext) + + + + + next around the left facet (eLnext) + + + + + next around the right facet (eRnext) + + + + + previous around the left facet (reversed eOnext) + + + + + previous around the right facet (reversed eDnext) + + + + + orientation + + + + + clockwise + + + + + counter clockwise + + + + + Stereo Block Matching Prefilter type + + + + + No prefilter + + + + + XSobel + + + + + Type of cvHomography method + + + + + regular method using all the point pairs + + + + + Least-Median robust method + + + + + RANSAC-based robust method + + + + + Type used by cvMatchShapes + + + + + I_1(A,B)=sum_{i=1..7} abs(1/m^A_i - 1/m^B_i) where m^A_i=sign(h^A_i) log(h^A_i), m^B_i=sign(h^B_i) log(h^B_i), h^A_i, h^B_i - Hu moments of A and B, respectively + + + + + I_2(A,B)=sum_{i=1..7} abs(m^A_i - m^B_i) where m^A_i=sign(h^A_i) log(h^A_i), m^B_i=sign(h^B_i) log(h^B_i), h^A_i, h^B_i - Hu moments of A and B, respectively + + + + + I_3(A,B)=sum_{i=1..7} abs(m^A_i - m^B_i)/abs(m^A_i) where m^A_i=sign(h^A_i) log(h^A_i), m^B_i=sign(h^B_i) log(h^B_i), h^A_i, h^B_i - Hu moments of A and B, respectively + + + + + The result type of cvSubdiv2DLocate. + + + + + One of input arguments is invalid. + + + + + Point is outside the subdivision reference rectangle + + + + + Point falls into some facet + + + + + Point coincides with one of subdivision vertices + + + + + Point falls onto the edge + + + + + Type used in cvStereoRectify + + + + + Shift one of the image in horizontal or vertical direction (depending on the orientation of epipolar lines) in order to maximise the useful image area + + + + + Makes the principal points of each camera have the same pixel coordinates in the rectified views + + + + + The type for CopyMakeBorder function + + + + + Used by some cuda methods, will pass the value -1 to the function + + + + + Border is filled with the fixed value, passed as last parameter of the function + + + + + The pixels from the top and bottom rows, the left-most and right-most columns are replicated to fill the border + + + + + Reflect + + + + + Wrap + + + + + Reflect 101 + + + + + Transparent + + + + + The default border interpolation type. + + + + + do not look outside of ROI + + + + + The types for haar detection + + + + + The default type where no optimization is done. + + + + + If it is set, the function uses Canny edge detector to reject some image regions that contain too few or too much edges and thus can not contain the searched object. The particular threshold values are tuned for face detection and in this case the pruning speeds up the processing + + + + + For each scale factor used the function will downscale the image rather than "zoom" the feature coordinates in the classifier cascade. Currently, the option can only be used alone, i.e. the flag can not be set together with the others + + + + + If it is set, the function finds the largest object (if any) in the image. That is, the output sequence will contain one (or zero) element(s) + + + + + It should be used only when CV_HAAR_FIND_BIGGEST_OBJECT is set and min_neighbors > 0. If the flag is set, the function does not look for candidates of a smaller size as soon as it has found the object (with enough neighbor candidates) at the current scale. Typically, when min_neighbors is fixed, the mode yields less accurate (a bit larger) object rectangle than the regular single-object mode (flags=CV_HAAR_FIND_BIGGEST_OBJECT), but it is much faster, up to an order of magnitude. A greater value of min_neighbors may be specified to improve the accuracy + + + + + Specific if it is back or front + + + + + Back + + + + + Front + + + + + The file storage operation type + + + + + The storage is open for reading + + + + + The storage is open for writing + + + + + The storage is open for append + + + + + Histogram comparison method + + + + + Correlation/ + + + + + Chi-Square + + + + + Intersection + + + + + Bhattacharyya distance + + + + + Synonym for Bhattacharyya + + + + + Alternative Chi-Square + + + + + The available flags for Farneback optical flow computation + + + + + Default + + + + + Use the input flow as the initial flow approximation + + + + + Use a Gaussian winsize x winsizefilter instead of box + filter of the same size for optical flow estimation. Usually, this option gives more accurate + flow than with a box filter, at the cost of lower speed (and normally winsize for a + Gaussian window should be set to a larger value to achieve the same level of robustness) + + + + + Grabcut initialization type + + + + + Initialize with rectangle + + + + + Initialize with mask + + + + + Eval + + + + + CvCapture type. This is the equivalent to CV_CAP_ macros. + + + + + Auto detect + + + + + Platform native + + + + + Platform native + + + + + Platform native + + + + + IEEE 1394 drivers + + + + + IEEE 1394 drivers + + + + + IEEE 1394 drivers + + + + + IEEE 1394 drivers + + + + + QuickTime + + + + + Unicap drivers + + + + + DirectShow (via videoInput) + + + + + PvAPI, Prosilica GigE SDK + + + + + OpenNI (for Kinect) + + + + + OpenNI (for Asus Xtion) + + + + + Android + + + + + XIMEA Camera API + + + + + AVFoundation framework for iOS (OS X Lion will have the same API) + + + + + Smartek Giganetix GigEVisionSDK + + + + + Microsoft Media Foundation (via videoInput) + + + + + Microsoft Windows Runtime using Media Foundation + + + + + Intel Perceptual Computing SDK + + + + + OpenNI2 (for Kinect) + + + + + OpenNI2 (for Asus Xtion and Occipital Structure sensors) + + + + + gPhoto2 connection + + + + + GStreamer + + + + + FFMPEG + + + + + OpenCV Image Sequence (e.g. img_%02d.jpg) + + + + + KMeans initialization type + + + + + Chooses random centers for k-Means initialization + + + + + Uses the user-provided labels for K-Means initialization + + + + + Uses k-Means++ algorithm for initialization + + + + + The type of color map + + + + + Autumn + + + + + Bone + + + + + Jet + + + + + Winter + + + + + Rainbow + + + + + Ocean + + + + + Summer + + + + + Spring + + + + + Cool + + + + + Hsv + + + + + Pink + + + + + Hot + + + + + The return value for solveLP function + + + + + Problem is unbounded (target function can achieve arbitrary high values) + + + + + Problem is unfeasible (there are no points that satisfy all the constraints imposed) + + + + + There is only one maximum for target function + + + + + there are multiple maxima for target function - the arbitrary one is returned + + + + + Morphology operation type + + + + + Erode + + + + + Dilate + + + + + Open + + + + + Close + + + + + Gradient + + + + + Tophat + + + + + Blackhat + + + + + Access type + + + + + Read + + + + + Write + + + + + Read and write + + + + + Mask + + + + + Dast + + + + + Rectangle intersect type + + + + + No intersection + + + + + There is a partial intersection + + + + + One of the rectangle is fully enclosed in the other + + + + + Method for solving a PnP problem + + + + + Iterative + + + + + F.Moreno-Noguer, V.Lepetit and P.Fua "EPnP: Efficient Perspective-n-Point Camera Pose Estimation" + + + + + X.S. Gao, X.-R. Hou, J. Tang, H.-F. Chang; "Complete Solution Classification for the Perspective-Three-Point Problem" + + + + + White balance algorithms + + + + + Simple + + + + + Grayworld + + + + + Connected components algorithm output formats + + + + + The leftmost (x) coordinate which is the inclusive start of the bounding box in the horizontal direction. + + + + + The topmost (y) coordinate which is the inclusive start of the bounding box in the vertical direction. + + + + + The horizontal size of the bounding box. + + + + + The vertical size of the bounding box. + + + + + The total area (in pixels) of the connected component. + + + + + + + + + + Fisheye Camera model + + + + + Projects points using fisheye model. The function computes projections of 3D points to the image plane given intrinsic and extrinsic camera parameters. Optionally, the function computes Jacobians - matrices of partial derivatives of image points coordinates (as functions of all the input parameters) with respect to the particular parameters, intrinsic and/or extrinsic. + + Array of object points, 1xN/Nx1 3-channel (or vector<Point3f> ), where N is the number of points in the view. + Output array of image points, 2xN/Nx2 1-channel or 1xN/Nx1 2-channel, or vector<Point2f>. + rotation vector + translation vector + Camera matrix + Input vector of distortion coefficients (k1,k2,k3,k4). + The skew coefficient. + Optional output 2Nx15 jacobian matrix of derivatives of image points with respect to components of the focal lengths, coordinates of the principal point, distortion coefficients, rotation vector, translation vector, and the skew. In the old interface different components of the jacobian are returned via different output parameters. + + + + + + Computes undistortion and rectification maps for image transform by cv::remap(). If D is empty zero distortion is used, if R or P is empty identity matrixes are used. + + Camera matrix + Input vector of distortion coefficients (k1,k2,k3,k4). + Rectification transformation in the object space: 3x3 1-channel, or vector: 3x1/1x3 1-channel or 1x1 3-channel + New camera matrix (3x3) or new projection matrix (3x4) + Undistorted image size. + Type of the first output map that can be CV_32FC1 or CV_16SC2 . See convertMaps() for details. + The first output map. + The second output map. + + + + Transforms an image to compensate for fisheye lens distortion. The function is simply a combination of fisheye::initUndistortRectifyMap (with unity R ) and remap (with bilinear interpolation). + + Image with fisheye lens distortion. + Output image with compensated fisheye lens distortion. + Camera matrix + Input vector of distortion coefficients (k1,k2,k3,k4). + Camera matrix of the distorted image. By default, it is the identity matrix but you may additionally scale and shift the result by using a different matrix. + The function transforms an image to compensate radial and tangential lens distortion. + + + + Estimates new camera matrix for undistortion or rectification. + + Camera matrix + Input vector of distortion coefficients (k1,k2,k3,k4). + + Rectification transformation in the object space: 3x3 1-channel, or vector: 3x1/1x3 1-channel or 1x1 3-channel + New camera matrix (3x3) or new projection matrix (3x4) + Sets the new focal length in range between the min focal length and the max focal length. Balance is in range of [0, 1] + + Divisor for new focal length. + + + + Stereo rectification for fisheye camera model. + + First camera matrix. + First camera distortion parameters. + Second camera matrix. + Second camera distortion parameters. + Size of the image used for stereo calibration. + Rotation matrix between the coordinate systems of the first and the second cameras. + Translation vector between coordinate systems of the cameras. + Output 3x3 rectification transform (rotation matrix) for the first camera. + Output 3x3 rectification transform (rotation matrix) for the second camera. + Output 3x4 projection matrix in the new (rectified) coordinate systems for the first camera. + Output 3x4 projection matrix in the new (rectified) coordinate systems for the second camera. + Output 4×4 disparity-to-depth mapping matrix (see reprojectImageTo3D ). + Operation flags that may be zero or ZeroDisparity . If the flag is set, the function makes the principal points of each camera have the same pixel coordinates in the rectified views. And if the flag is not set, the function may still shift the images in the horizontal or vertical direction (depending on the orientation of epipolar lines) to maximize the useful image area. + New image resolution after rectification. The same size should be passed to initUndistortRectifyMap. When (0,0) is passed (default), it is set to the original imageSize . Setting it to larger value can help you preserve details in the original image, especially when there is a big radial distortion. + Sets the new focal length in range between the min focal length and the max focal length. Balance is in range of [0, 1]. + Divisor for new focal length. + + + + Performs camera calibaration. + + vector of vectors of calibration pattern points in the calibration pattern coordinate space. + vector of vectors of the projections of calibration pattern points. imagePoints.size() and objectPoints.size() and imagePoints[i].size() must be equal to objectPoints[i].size() for each i. + Size of the image used only to initialize the intrinsic camera matrix. + Output 3x3 floating-point camera matrix. If UseIntrisicGuess is specified, some or all of fx, fy, cx, cy must be initialized before calling the function. + Output vector of distortion coefficients (k1,k2,k3,k4). + Output vector of rotation vectors (see Rodrigues ) estimated for each pattern view. That is, each k-th rotation vector together with the corresponding k-th translation vector (see the next output parameter description) brings the calibration pattern from the model coordinate space (in which object points are specified) to the world coordinate space, that is, a real position of the calibration pattern in the k-th pattern view (k=0.. M -1). + Output vector of translation vectors estimated for each pattern view. + Different flags + Termination criteria for the iterative optimization algorithm. + + + + Performs stereo calibration. + + Vector of vectors of the calibration pattern points. + Vector of vectors of the projections of the calibration pattern points, observed by the first camera. + Vector of vectors of the projections of the calibration pattern points, observed by the second camera. + Input/output first camera matrix.If FixIntrinsic is specified, some or all of the matrix components must be initialized. + Input/output vector of distortion coefficients (k1,k2,k3,k4) of 4 elements. + Input/output second camera matrix. The parameter is similar to + Input/output lens distortion coefficients for the second camera. The parameter is similar to + Size of the image used only to initialize intrinsic camera matrix. + Output rotation matrix between the 1st and the 2nd camera coordinate systems. + Output translation vector between the coordinate systems of the cameras. + Fish eye calibration flags + Termination criteria for the iterative optimization algorithm. + + + + Default flag + + + + + cameraMatrix contains valid initial values of fx, fy, cx, cy that are optimized further. Otherwise, (cx, cy) is initially set to the image center ( imageSize is used), and focal distances are computed in a least-squares fashion. + + + + + Extrinsic will be recomputed after each iteration of intrinsic optimization. + + + + + The functions will check validity of condition number. + + + + + Skew coefficient (alpha) is set to zero and stay zero. + + + + + Selected distortion coefficients are set to zeros and stay zero. + + + + + Selected distortion coefficients are set to zeros and stay zero. + + + + + Selected distortion coefficients are set to zeros and stay zero. + + + + + Selected distortion coefficients are set to zeros and stay zero. + + + + + Fix intrinsic + + + + + A point with Bgr color information + + + + + The position in meters + + + + + The blue color + + + + + The green color + + + + + The red color + + + + + A solid resembling a cube, with the rectangular faces not all equal; a rectangular parallelepiped. + + + + + The coordinate of the upper corner + + + + + The coordinate of the lower corner + + + + + Check if the specific point is in the Cuboid + + The point to be checked + True if the point is in the cuboid + + + + Get the centroid of this cuboid + + + + + This is used to hold the sizes of the Open CV structures + + + + + The size of CvPoint + + + + + The size of CvPoint2D32f + + + + + The size of CvPoint3D32f + + + + + The size of CvSize + + + + + The size of CvSize2D32f + + + + + The size of CvScalar + + + + + The size of CvRect + + + + + The size of CvBox2D + + + + + The size of CvMat + + + + + The size of CvMatND + + + + + The size of CvTermCriteria + + + + + The size of CvSeq + + + + + The size of CvContour + + + + + The size of IplImage + + + + + Result of cvHaarDetectObjects + + + + + Bounding rectangle for the object (average rectangle of a group) + + + + + Number of neighbor rectangles in the group + + + + + Wrapper to the CvBlob structure + + + + + The center of the blob + + + + + Blob size + + + + + Blob ID + + + + + Convert a MCvBlob to RectangleF + + The blob + The equivalent RectangleF + + + + Convert a MCvBlob to RectangleF + + The blob + The equivalent RectangleF + + + + Check if the two blobs are equal + + The blob to compares with + True if equals + + + + Get an empty blob + + + + + Managed structure equivalent to CvChain + + + + + micsellaneous flags + + + + + size of sequence header + + + + + previous sequence + + + + + next sequence + + + + + 2nd previous sequence + + + + + 2nd next sequence + + + + + total number of elements + + + + + size of sequence element in bytes + + + + + maximal bound of the last block + + + + + current write pointer + + + + + how many elements allocated when the seq grows + + + + + where the seq is stored + + + + + free blocks list + + + + + pointer to the first sequence block + + + + + The origin of the chain + + + + + Managed structure equivalent to CvConDensation + + + + + Dimension of measurement vector + + + + + Dimension of state vector + + + + + Matrix of the linear Dynamics system + + + + + Vector of State + + + + + Number of the Samples + + + + + Array of the Sample Vectors + + + + + Temporary array of the Sample Vectors + + + + + Confidence for each Sample + + + + + Cumulative confidence + + + + + Temporary vector + + + + + RandomVector to update sample set + + + + + Array of structures to generate random vectors + + + + + Managed structure equivalent to CvConnectedComp + + + + + area of the segmented component + + + + + scalar value + + + + + ROI of the segmented component + + + + + Pointer to the CvSeq + + + + + Managed structure equivalent to CvContour + + + + + Micsellaneous flags + + + + + Size of sequence header + + + + + Pointer to the previous sequence + + + + + Pointer to the next sequence + + + + + Pointer to the 2nd previous sequence + + + + + Pointer to the 2nd next sequence + + + + + Total number of elements + + + + + Size of sequence element in bytes + + + + + Maximal bound of the last block + + + + + Current write pointer + + + + + How many elements allocated when the seq grows + + + + + Where the seq is stored + + + + + Free blocks list + + + + + Pointer to the first sequence block + + + + + If computed, stores the minimum enclosing rectangle + + + + + Color + + + + + Reserved0 + + + + + Reserved1 + + + + + Reserved2 + + + + + Managed CvKalman structure + + + + + number of measurement vector dimensions + + + + + number of state vector dimensions + + + + + number of control vector dimensions + + + + + =state_pre->data.fl + + + + + =state_post->data.fl + + + + + =transition_matrix->data.fl + + + + + =measurement_matrix->data.fl + + + + + =measurement_noise_cov->data.fl + + + + + =process_noise_cov->data.fl + + + + + =gain->data.fl + + + + + =error_cov_pre->data.fl + + + + + =error_cov_post->data.fl + + + + + temp1->data.fl + + + + + temp2->data.fl + + + + + predicted state (x'(k)): + x(k)=A*x(k-1)+B*u(k) + + + + + corrected state (x(k)): + x(k)=x'(k)+K(k)*(z(k)-H*x'(k)) + + + + + state transition matrix (A) + + + + + control matrix (B) + (it is not used if there is no control) + + + + + measurement matrix (H) + + + + + process noise covariance matrix (Q) + + + + + measurement noise covariance matrix (R) + + + + + priori error estimate covariance matrix P'(k)=A*P(k-1)*At + Q) + + + + + Kalman gain matrix (K(k)): + K(k)=P'(k)*Ht*inv(H*P'(k)*Ht+R) + + + + + posteriori error estimate covariance matrix P(k)=(I-K(k)*H)*P'(k) + + + + + temporary matrices + + + + + temporary matrices + + + + + temporary matrices + + + + + temporary matrices + + + + + temporary matrices + + + + + Managed structure equivalent to CvMat + + + + + CvMat signature (CV_MAT_MAGIC_VAL), element type and flags + + + + + full row length in bytes + + + + + underlying data reference counter + + + + + Header reference count + + + + + data pointers + + + + + number of rows + + + + + number of columns + + + + + Width + + + + + Height + + + + + Get the number of channels + + + + + Constants used by the MCvMat structure + + + + + Offset of roi + + + + + Managed structure equivalent to CvMatND + + + + + CvMatND signature (CV_MATND_MAGIC_VAL), element type and flags + + + + + number of array dimensions + + + + + underlying data reference counter + + + + + Header reference count + + + + + data pointers + + + + + pairs (number of elements, distance between elements in bytes) + + + + + pairs (number of elements, distance between elements in bytes) + + + + + pairs (number of elements, distance between elements in bytes) + + + + + pairs (number of elements, distance between elements in bytes) + + + + + pairs (number of elements, distance between elements in bytes) + + + + + pairs (number of elements, distance between elements in bytes) + + + + + pairs (number of elements, distance between elements in bytes) + + + + + pairs (number of elements, distance between elements in bytes) + + + + + pairs (number of elements, distance between elements in bytes) + + + + + pairs (number of elements, distance between elements in bytes) + + + + + pairs (number of elements, distance between elements in bytes) + + + + + pairs (number of elements, distance between elements in bytes) + + + + + pairs (number of elements, distance between elements in bytes) + + + + + pairs (number of elements, distance between elements in bytes) + + + + + pairs (number of elements, distance between elements in bytes) + + + + + pairs (number of elements, distance between elements in bytes) + + + + + pairs (number of elements, distance between elements in bytes) + + + + + pairs (number of elements, distance between elements in bytes) + + + + + pairs (number of elements, distance between elements in bytes) + + + + + pairs (number of elements, distance between elements in bytes) + + + + + pairs (number of elements, distance between elements in bytes) + + + + + pairs (number of elements, distance between elements in bytes) + + + + + pairs (number of elements, distance between elements in bytes) + + + + + pairs (number of elements, distance between elements in bytes) + + + + + pairs (number of elements, distance between elements in bytes) + + + + + pairs (number of elements, distance between elements in bytes) + + + + + pairs (number of elements, distance between elements in bytes) + + + + + pairs (number of elements, distance between elements in bytes) + + + + + pairs (number of elements, distance between elements in bytes) + + + + + pairs (number of elements, distance between elements in bytes) + + + + + pairs (number of elements, distance between elements in bytes) + + + + + pairs (number of elements, distance between elements in bytes) + + + + + pairs (number of elements, distance between elements in bytes) for every dimension + + + + + The MatND Dimension + + + + + Number of elements in this dimension + + + + + distance between elements in bytes for this dimension + + + + + spatial and central moments + + + + + spatial moments + + + + + spatial moments + + + + + spatial moments + + + + + spatial moments + + + + + spatial moments + + + + + spatial moments + + + + + spatial moments + + + + + spatial moments + + + + + spatial moments + + + + + spatial moments + + + + + central moments + + + + + central moments + + + + + central moments + + + + + central moments + + + + + central moments + + + + + central moments + + + + + central moments + + + + + m00 != 0 ? 1/sqrt(m00) : 0 + + + + + Retrieves the spatial moment, which in case of image moments is defined as: + M_{x_order,y_order}=sum_{x,y}(I(x,y) * x^{x_order} * y^{y_order}) + where I(x,y) is the intensity of the pixel (x, y). + + x order of the retrieved moment, x_order >= 0 + y order of the retrieved moment, y_order >= 0 and x_order + y_order <= 3 + The spatial moment of the specific order + + + + Retrieves the central moment, which in case of image moments is defined as: + mu_{x_order,y_order}=sum_{x,y}(I(x,y)*(x-x_c)^{x_order} * (y-y_c)^{y_order}), + where x_c=M10/M00, y_c=M01/M00 - coordinates of the gravity center + + x order of the retrieved moment, x_order >= 0. + y order of the retrieved moment, y_order >= 0 and x_order + y_order <= 3 + The center moment + + + + Retrieves normalized central moment, which in case of image moments is defined as: + eta_{x_order,y_order}=mu_{x_order,y_order} / M00^{(y_order+x_order)/2+1}, + where mu_{x_order,y_order} is the central moment + + x order of the retrieved moment, x_order >= 0. + y order of the retrieved moment, y_order >= 0 and x_order + y_order <= 3 + The normalized center moment + + + + Get the HuMoments + + The Hu moment computed from this moment + + + + The Gravity Center of this Moment + + + + + Structure contains the bounding box and confidence level for detected object + + + + + Bounding box for a detected object + + + + + Confidence level + + + + + The class identifier + + + + + Managed Structure equivalent to CvPoint2D64f + + + + + x-coordinate + + + + + y-coordinate + + + + + Create a MCvPoint2D64f structure with the specific x and y coordinates + + x-coordinate + y-coordinate + + + + Compute the sum of two 3D points + + The first point to be added + The second point to be added + The sum of two points + + + + Subtract from + + The first point + The point to be added + The sum of two points + + + + Multiply the point with a scale + + The point to be multiplied + The scale + The point multiplied by the scale + + + + Multiply the point with a scale + + The point to be multiplied + The scale + The point multiplied by the scale + + + + Returns true if the two points equals. + + The other point to compare with + True if the two points equals + + + + Managed Structure equivalent to CvPoint3D32f + + + + + x-coordinate + + + + + y-coordinate + + + + + z-coordinate + + + + + Create a MCvPoint3D32f structure with the specific x and y coordinates + + x-coordinate + y-coordinate + z-coordinate + + + + Return the cross product of two 3D point + + the other 3D point + The cross product of the two 3D point + + + + Return the dot product of two 3D point + + the other 3D point + The dot product of the two 3D point + + + + Get the normalized point + + + + + + The implicit operator to convert MCvPoint3D32f to MCvPoint3D64f + + The point to be converted + The converted point + + + + Subtract one point from the other + + The point to subtract from + The value to be subtracted + The subtraction of one point from the other + + + + Compute the sum of two 3D points + + The first point to be added + The second point to be added + The sum of two points + + + + Multiply the point with a scale + + The point to be multiplied + The scale + The point multiplied by the scale + + + + Multiply the point with a scale + + The point to be multiplied + The scale + The point multiplied by the scale + + + + Return true if the location of the two points are equal + + The other point to compare with + True if the location of the two points are equal + + + + return the norm of this 3D point + + + + + Managed Structure equivalent to CvPoint3D64f + + + + + x-coordinate + + + + + y-coordinate + + + + + z-coordinate + + + + + Create a MCvPoint3D64f structure with the specific x and y coordinates + + x-coordinate + y-coordinate + z-coordinate + + + + Return the cross product of two 3D point + + the other 3D point + The cross product of the two 3D point + + + + Return the dot product of two 3D point + + the other 3D point + The dot product of the two 3D point + + + + Compute the sum of two 3D points + + The first point to be added + The second point to be added + The sum of two points + + + + Subtract from + + The first point + The point to be added + The sum of two points + + + + Multiply the point with a scale + + The point to be multiplied + The scale + The point multiplied by the scale + + + + Multiply the point with a scale + + The point to be multiplied + The scale + The point multiplied by the scale + + + + Check if the other point equals to this point + + The point to be compared + True if the two points are equal + + + + Managed structure equivalent to CvScalar + + + + + The scalar value + + + + + The scalar value + + + + + The scalar value + + + + + The scalar value + + + + + The scalar values as a vector (of size 4) + + The scalar values as an array + + + + Create a new MCvScalar structure using the specific values + + v0 + + + + Create a new MCvScalar structure using the specific values + + v0 + v1 + + + + Create a new MCvScalar structure using the specific values + + v0 + v1 + v2 + + + + Create a new MCvScalar structure using the specific values + + v0 + v1 + v2 + v3 + + + + Return the code to generate this MCvScalar from specific language + + The programming language to generate code from + The code to generate this MCvScalar from specific language + + + + Return true if the two MCvScalar equals + + The other MCvScalar to compare with + true if the two MCvScalar equals + + + + Managed structure equivalent to CvSeq + + + + + Micsellaneous flags + + + + + Size of sequence header + + + + + Previous sequence + + + + + Next sequence + + + + + 2nd previous sequence + + + + + 2nd next sequence + + + + + Total number of elements + + + + + Size of sequence element in bytes + + + + + Maximal bound of the last block + + + + + Current write pointer + + + + + How many elements allocated when the sequence grows (sequence granularity + + + + + Where the seq is stored + + + + + Free blocks list + + + + + Pointer to the first sequence block + + + + + Managed structure equivalent to CvSeqBlock + + + + + Previous sequence block. + + + + + Next sequence block. + + + + + Index of the first element in the block + sequence->first->start_index. + + + + + Number of elements in the block. + + + + + Pointer to the first element of the block. + + + + + Wrapped CvSeqReader structure + + + + + The size of the header + + + + + sequence, beign read + + + + + current block + + + + + pointer to element be read next + + + + + pointer to the beginning of block + + + + + pointer to the end of block + + + + + = seq->first->start_index + + + + + pointer to previous element + + + + + Wrapper CvSet structure + + + + + micsellaneous flags + + + + + size of sequence header + + + + + previous sequence + + + + + next sequence + + + + + 2nd previous sequence + + + + + 2nd next sequence + + + + + total number of elements + + + + + size of sequence element in bytes + + + + + maximal bound of the last block + + + + + current write pointer + + + + + how many elements allocated when the sequence grows (sequence granularity + + + + + where the seq is stored + + + + + free blocks list + + + + + pointer to the first sequence block + + + + + + + + + + + + + + + Wrapper CvSetElem structure + + + + + flags + + + + + next_free + + + + + Managed structure equivalent to CvSlice + + + + + Start index + + + + + End index + + + + + Create a new MCvSlice using the specific start and end index + + start index + end index + + + + Get the equivalent of CV_WHOLE_SEQ + + + + + Wrapped CvStereoBMState structure + + + + + 0 for now + + + + + ~5x5..21x21 + + + + + up to ~31 + + + + + Could be 5x5..21x21. Correspondence using Sum of Absolute Difference (SAD): + + + + + minimum disparity (=0) + + + + + maximum disparity - minimum disparity + + + + + areas with no texture are ignored + + + + + Filter out pixels if there are other close matches + + + + + Disparity variation window (not used) + + + + + Acceptable range of variation in window (not used) + + + + + If 1, the results may be more accurate at the expense of slower processing. + + + + + + + + + + + + + + + + + + + + internal buffers, do not modify (!) + + + + + internal buffers, do not modify (!) + + + + + internal buffers, do not modify (!) + + + + + internal buffers, do not modify (!) + + + + + internal buffers, do not modify (!) + + + + + Wrapped CvStereoGCState structure + + + + + Threshold for piece-wise linear data cost function (5 by default) + + + + + Radius for smoothness cost function (1 by default; means Potts model) + + + + + Parameters for the cost function + + + + + Parameters for the cost function + + + + + Parameters for the cost function + + + + + Parameters for the cost function + + + + + 10000 by default, (usually computed adaptively from the input data) + + + + + 0 by default; see CvStereoBMState + + + + + Defined by user; see CvStereoBMState + + + + + Number of iterations; defined by user. + + + + + Internal buffers + + + + + Internal buffers + + + + + Internal buffers + + + + + Internal buffers + + + + + Internal buffers + + + + + Internal buffers + + + + + Internal buffers + + + + + Internal buffers + + + + + Managed structure equivalent to CvTermCriteria + + + + + CV_TERMCRIT value + + + + + Maximum iteration + + + + + Epsilon + + + + + Create the termination criteria using the constrain of maximum iteration + + The maximum number of iteration allowed + + + + Create the termination Criteria using only the constrain of epsilon + + The epsilon value + + + + Create the termination criteria using the constrain of maximum iteration as well as epsilon + + The maximum number of iteration allowed + The epsilon value + + + + OpenCV's DMatch structure + + + + + Query descriptor index + + + + + Train descriptor index + + + + + Train image index + + + + + Distance + + + + + Managed structure equivalent to IplImage + + + + + sizeof(IplImage) + + + + + version (=0) + + + + + Most of OpenCV functions support 1,2,3 or 4 channels + + + + + ignored by OpenCV + + + + + pixel depth in bits: IPL_DEPTH_8U, IPL_DEPTH_8S, IPL_DEPTH_16U, IPL_DEPTH_16S, IPL_DEPTH_32S, IPL_DEPTH_32F and IPL_DEPTH_64F are supported + + + + + ignored by OpenCV + + + + + ignored by OpenCV + + + + + ignored by OpenCV + + + + + ignored by OpenCV + + + + + ignored by OpenCV + + + + + ignored by OpenCV + + + + + ignored by OpenCV + + + + + ignored by OpenCV + + + + + 0 - interleaved color channels, 1 - separate color channels. + cvCreateImage can only create interleaved images + + + + + 0 - top-left origin, + 1 - bottom-left origin (Windows bitmaps style) + + + + + Alignment of image rows (4 or 8). + OpenCV ignores it and uses widthStep instead + + + + + image width in pixels + + + + + image height in pixels + + + + + image ROI. when it is not NULL, this specifies image region to process + + + + + must be NULL in OpenCV + + + + + ditto + + + + + ditto + + + + + image data size in bytes + (=image->height*image->widthStep in case of interleaved data) + + + + + pointer to aligned image data + + + + + size of aligned image row in bytes + + + + + border completion mode, ignored by OpenCV + + + + + border completion mode, ignored by OpenCV + + + + + border completion mode, ignored by OpenCV + + + + + border completion mode, ignored by OpenCV + + + + + border const, ignored by OpenCV + + + + + border const, ignored by OpenCV + + + + + border const, ignored by OpenCV + + + + + border const, ignored by OpenCV + + + + + pointer to a very origin of image data (not necessarily aligned) - it is needed for correct image deallocation + + + + + OpenCV's KeyPoint class + + + + + The location of the keypoint + + + + + Size of the keypoint + + + + + Orientation of the keypoint + + + + + Response of the keypoint + + + + + octave + + + + + class id + + + + + The range use to setup the histogram + + + + + Create a range of the specific min/max value + + The min value of this range + The max value of this range + + + + Return true if the two RangeF equals + + The other RangeF to compare with + True if the two RangeF equals + + + + The minimum value of this range + + + + + The Maximum value of this range + + + + + Managed structure equivalent to CvBox2D + + + + + An interface for the convex polygon + + + + + Get the vertices of this convex polygon + + The vertices of this convex polygon + + + + The center of the box + + + + + The size of the box + + + + + The angle between the horizontal axis and the first side (i.e. width) in degrees + + Possitive value means counter-clock wise rotation + + + + Create a RotatedRect structure with the specific parameters + + The center of the box + The size of the box + The angle of the box in degrees. Possitive value means counter-clock wise rotation + + + + Shift the box by the specific amount + + The x value to be offseted + The y value to be offseted + + + + Get the 4 verticies of this Box. + + The vertives of this RotatedRect + + + + Get the minimum enclosing rectangle for this Box + + The minimum enclosing rectangle for this Box + + + + Returns true if the two box are equal + + The other box to compare with + True if two boxes are equal + + + + Convert a RectangleF to RotatedRect + + The rectangle + The equivalent RotatedRect + + + + Represent an uninitialized RotatedRect + + + + + A line segment + + + + A point on the line + + + An other point on the line + + + + Create a line segment with the specific starting point and end point + + The first point on the line segment + The second point on the line segment + + + + Determine which side of the line the 2D point is at + + the point + + 1 if on the right hand side; + 0 if on the line; + -1 if on the left hand side; + + + + + Get the exterior angle between this line and + + The other line + The exterior angle between this line and + + + A point on the line + + + An other point on the line + + + The direction of the line, the norm of which is 1 + + + + Get the length of the line segment + + + + + A line segment + + + + A point on the line + + + An other point on the line + + + + Create a line segment with the specific start point and end point + + The first point on the line segment + The second point on the line segment + + + Obtain the Y value from the X value using first degree interpolation + The X value + The Y value + + + + Determin which side of the line the 2D point is at + + the point + + 1 if on the right hand side; + 0 if on the line; + -1 if on the left hand side; + + + + + Get the exterior angle between this line and + + The other line + The exterior angle between this line and + + + A point on the line + + + An other point on the line + + + + Get the length of the line segment + + + + + The direction of the line, the norm of which is 1 + + + + + A 3D line segment + + + + A point on the line + + + An other point on the line + + + + Create a line segment with the specific start point and end point + + The first point on the line segment + The second point on the line segment + + + A point on the line + + + An other point on the line + + + + Get the length of the line segment + + + + + A collection of points + + + + + Fit an ellipse to the points collection + + The points to be fitted + An ellipse + + + + convert a series of points to LineSegment2D + + the array of points + if true, the last line segment is defined by the last point of the array and the first point of the array + array of LineSegment2D + + + + convert a series of System.Drawing.Point to LineSegment2D + + the array of points + if true, the last line segment is defined by the last point of the array and the first point of the array + array of LineSegment2D + + + + Find the bounding rectangle for the specific array of points + + The collection of points + The bounding rectangle for the array of points + + + + Re-project pixels on a 1-channel disparity map to array of 3D points. + + Disparity map + The re-projection 4x4 matrix, can be arbitrary, e.g. the one, computed by cvStereoRectify + The reprojected 3D points + + + + Generate a random point cloud around the ellipse. + + The region where the point cloud will be generated. The axes of e corresponds to std of the random point cloud. + The number of points to be generated + A random point cloud around the ellipse + + + + Attribute used by ImageBox to generate Operation Menu + + + + + Constructor + + + + + Get or Set the exposable value, if true, this function will be displayed in Operation Menu of ImageBox + + + + + The catefory of this function + + + + + The size for each generic parameter Options + + + + + The options for generic parameters + + + + + A generic parameter for the Operation class + + + + + Create a generic parameter for the Operation class + + The selected generic parameter typ + The types that can be used + + + + The selected generic parameter type + + + + + The types that can be used + + + + + A collection of reflection function that can be applied to ColorType object + + + + + Get the display color for each channel + + The color + The display color for each channel + + + + Get the names of the channels + + The color + The names of the channels + + + + A collection of reflection function that can be applied to IImage object + + + + + Get all the methods that belongs to the IImage and Image class with ExposableMethodAttribute set true. + + The IImage object to be refelected for methods marked with ExposableMethodAttribute + All the methods that belongs to the IImage and Image class with ExposableMethodAttribute set true + + + + Get the color type of the image + + The image to apply reflection on + The color type of the image + + + + Get the depth type of the image + + The image to apply reflection on + The depth type of the image + + + + Get the color at the specific location of the image + + The image to obtain pixel value from + The location to sample a pixel + The color at the specific location + + + A circle + + + Create a circle with the specific center and radius + The center of this circle + The radius of this circle + + + + Compare this circle with + + The other box to be compared + true if the two boxes equals + + + Get or Set the center of the circle + + + The radius of the circle + + + The area of the circle + + + + A 2D cross + + + + + Construct a cross + + The center of the cross + the width of the cross + the height of the cross + + + + The center of this cross + + + + + The size of this cross + + + + + Get the horizonal linesegment of this cross + + + + + Get the vertical linesegment of this cross + + + + + An ellipse + + + + + Create an ellipse with specific parameters + + The center of the ellipse + The width and height of the ellipse + The rotation angle in radian for the ellipse + + + + Create an ellipse from the specific RotatedRect + + The RotatedRect representation of this ellipse + + + + The RotatedRect representation of this ellipse + + + + + An interface for the convex polygon + + + + + Get the vertices of this convex polygon + + The vertices of this convex polygon + + + + A 2D triangle + + + + + Create a triangle using the specific vertices + + The first vertex + The second vertex + The third vertex + + + + Compare two triangles and return true if equal + + the other triangles to compare with + true if the two triangles equals, false otherwise + + + + Get the vertices of this triangle + + The vertices of this triangle + + + + One of the vertex of the triangle + + + + + One of the vertex of the triangle + + + + + One of the vertex of the triangle + + + + + Get the area of this triangle + + + + + Returns the centroid of this triangle + + + + + A 3D triangle + + + + + Create a triangle using the specific vertices + + The first vertex + The second vertex + The third vertex + + + + Compare two triangles and return true if equal + + the other triangles to compare with + true if the two triangles equals, false otherwise + + + + One of the vertex of the triangle + + + + + One of the vertex of the triangle + + + + + One of the vertex of the triangle + + + + + Get the area of this triangle + + + + + Get the normal of this triangle + + + + + Returns the centroid of this triangle + + + + + Create a sparse matrix + + The type of elements in this matrix + + + + Create a sparse matrix of the specific dimension + + The dimension of the sparse matrix + + + + Release the unmanaged memory associated with this sparse matrix + + + + + Get or Set the value in the specific and + + the row of the element + the col of the element + The element on the specific and + + + + Class for computing stereo correspondence using the block matching algorithm, introduced and contributed to OpenCV by K. Konolige. + + + + + Create a stereoBM object + + the linear size of the blocks compared by the algorithm. The size should be odd (as the block is centered at the current pixel). Larger block size implies smoother, though less accurate disparity map. Smaller block size gives more detailed disparity map, but there is higher chance for algorithm to find a wrong correspondence. + the disparity search range. For each pixel algorithm will find the best disparity from 0 (default minimum disparity) to . The search range can then be shifted by changing the minimum disparity. + + + + Release the stereo state and all the memory associate with it + + + + + Pointer to the stereo matcher + + + + + Extension methods for StereoMather + + + + + Computes disparity map for the specified stereo pair + + The stereo matcher + Left 8-bit single-channel image. + Right image of the same size and the same type as the left one. + Output disparity map. It has the same size as the input images. Some algorithms, like StereoBM or StereoSGBM compute 16-bit fixed-point disparity map (where each disparity value has 4 fractional bits), whereas other algorithms output 32-bit floating-point disparity map + + + + This is a variation of + "Stereo Processing by Semiglobal Matching and Mutual Information" + by Heiko Hirschmuller. + We match blocks rather than individual pixels, thus the algorithm is called + SGBM (Semi-global block matching) + + + + + Create a stereo disparity solver using StereoSGBM algorithm (combination of H. Hirschmuller + K. Konolige approaches) + + Minimum possible disparity value. Normally, it is zero but sometimes rectification algorithms can shift images, so this parameter needs to be adjusted accordingly. + Maximum disparity minus minimum disparity. The value is always greater than zero. In the current implementation, this parameter must be divisible by 16. + Matched block size. It must be an odd number >=1 . Normally, it should be somewhere in the 3..11 range. Use 0 for default. + The first parameter controlling the disparity smoothness. It is the penalty on the disparity change by plus or minus 1 between neighbor pixels. Reasonably good value is 8*number_of_image_channels*SADWindowSize*SADWindowSize. Use 0 for default + The second parameter controlling the disparity smoothness. It is the penalty on the disparity change by more than 1 between neighbor pixels. The algorithm requires > . Reasonably good value is 32*number_of_image_channels*SADWindowSize*SADWindowSize. Use 0 for default + Maximum allowed difference (in integer pixel units) in the left-right disparity check. Set it to a non-positive value to disable the check. + Truncation value for the prefiltered image pixels. The algorithm first computes x-derivative at each pixel and clips its value by [-preFilterCap, preFilterCap] interval. The result values are passed to the Birchfield-Tomasi pixel cost function. + Margin in percentage by which the best (minimum) computed cost function value should “win” the second best value to consider the found match correct. Normally, a value within the 5-15 range is good enough. + Maximum size of smooth disparity regions to consider their noise speckles and invalidate. Set it to 0 to disable speckle filtering. Otherwise, set it somewhere in the 50-200 range + Maximum disparity variation within each connected component. If you do speckle filtering, set the parameter to a positive value, it will be implicitly multiplied by 16. Normally, 1 or 2 is good enough. + Set it to HH to run the full-scale two-pass dynamic programming algorithm. It will consume O(W*H*numDisparities) bytes, which is large for 640x480 stereo and huge for HD-size pictures. By default, it is set to false. + + + + Release the unmanged memory associated with this stereo solver + + + + + Pointer to the StereoMatcher + + + + + The SGBM mode + + + + + This is the default mode, the algorithm is single-pass, which means that you consider only 5 directions instead of 8 + + + + + Run the full-scale two-pass dynamic programming algorithm. It will consume O(W*H*numDisparities) bytes, which is large for 640x480 stereo and huge for HD-size pictures. + + + + + Planar Subdivision, can be use to compute Delaunnay's triangulation or Voroni diagram. + + + + + Start the Delaunay's triangulation in the specific region of interest. + + The region of interest of the triangulation + + + + Create a planar subdivision from the given points. The ROI is computed as the minimum bounding Rectangle for the input points + + If true, any exception during insert will be ignored + The points to be inserted to this planar subdivision + + + + Insert a collection of points to this planar subdivision + + The points to be inserted to this planar subdivision + If true, any exception during insert will be ignored + + + + Insert a point to the triangulation. + + The point to be inserted + + + + Locates input point within subdivision + + The point to locate + The output edge the point falls onto or right to + Optional output vertex double pointer the input point coincides with + The type of location for the point + + + + Finds subdivision vertex that is the closest to the input point. It is not necessarily one of vertices of the facet containing the input point, though the facet (located using cvSubdiv2DLocate) is used as a starting point. + + Input point + The nearest subdivision vertex + The location type of the point + + + + Obtains the list of Voronoi Facets + + The list of Voronoi Facets + + + + Returns the triangles subdivision of the current planar subdivision. + + The triangles might contains virtual points that do not belongs to the inserted points, if you do not want those points, set to false + The triangles subdivision in the current planar subdivision + + + + Release unmanaged resources + + + + + A Voronoi Facet + + + + + Create a Voronoi facet using the specific and + + The point this facet associate with + The points that defines the contour of this facet + + + + The point this facet associates to + + + + + Get or set the vertices of this facet + + + + + A class that can be used for writing geotiff + + The color type of the image to be written + The depth type of the image to be written + + + + Create a tiff writer to save an image + + The file name to be saved + + + + Write the image to the tiff file + + The image to be written + + + + Write the geo information into the tiff file + + Model Tie Point, an array of size 6 + Model pixel scale, an array of size 3 + + + + Release the writer and write all data on to disk. + + + + + A writer for writing GeoTiff + + The color type of the image to be written + The depth type of the image to be written + + + + Create a TitleTiffWriter. + + The name of the file to be written to + The size of the image + The tile size in pixels + + + + Write a tile into the tile tiff + + The starting row for the tile + The starting col for the tile + The tile to be written + + + + Write the whole image as tile tiff + + The image to be written + + + + Get the equivalent size for a tile of data as it would be returned in a call to TIFFReadTile or as it would be expected in a call to TIFFWriteTile. + + + + + Get the number of bytes of a row of data in a tile. + + + + + Get tile size in pixels. + + + + + The Image which contains time stamp which specified what time this image is created + + + + + Create a empty Image + + + + + Create a blank Image of the specified width, height, depth and color. + + The width of the image + The height of the image + The initial color of the image + + + + Create an empty Image of the specified width and height + + The width of the image + The height of the image + + + + The time this image is captured + + + + + The equivalent of cv::Mat, should only be used if you know what you are doing. + In most case you should use the Matrix class instead + + + + + Constructor used to deserialize runtime serialized object + + The serialization info + The streaming context + + + + A function used for runtime deserailization of the object + + Serialization info + Streaming context + + + + A function used for runtime serialization of the object + + Serialization info + streaming context + + + + Create an empty cv::UMat + + + + + Create a umat of the specific type. + + Number of rows in a 2D array. + Number of columns in a 2D array. + Mat element type + Number of channels + + + + Create a umat of the specific type. + + Size of the UMat + Mat element type + Number of channels + + + + Get the Umat header for the specific roi of the parent + + The parent Umat + The region of interest + + + + Allocates new array data if needed. + + New number of rows. + New number of columns. + New matrix element depth type. + New matrix number of channels + + + + Copy the data in this umat to the other mat + + Operation mask. Its non-zero elements indicate which matrix elements need to be copied. + The input array to copy to + + + + Sets all or some of the array elements to the specified value. + + Assigned scalar converted to the actual array type. + Operation mask of the same size as the umat. + + + + Sets all or some of the array elements to the specified value. + + Assigned scalar value. + Operation mask of the same size as the umat. + + + + Return the Mat representation of the UMat + + + + + Release all the unmanaged memory associated with this object. + + + + + Pointer to the InputArray + + + + + Pointer to the OutputArray + + + + + Pointer to the InputOutputArray + + + + + Changes the shape and/or the number of channels of a 2D matrix without copying the data. + + New number of channels. If the parameter is 0, the number of channels remains the same. + New number of rows. If the parameter is 0, the number of rows remains the same. + A new mat header that has different shape + + + + Convert this Mat to Image + + The type of Color + The type of Depth + The image + + + + Returns the min / max location and values for the image + + The maximum locations for each channel + The maximum values for each channel + The minimum locations for each channel + The minimum values for each channel + + + + Converts an array to another data type with optional scaling. + + Output matrix; if it does not have a proper size or type before the operation, it is reallocated. + Desired output matrix type or, rather, the depth since the number of channels are the same as the input has; if rtype is negative, the output matrix will have the same type as the input. + Optional scale factor. + Optional delta added to the scaled values. + + + + Split current Image into an array of gray scale images where each element + in the array represent a single color channel of the original image + + + An array of gray scale images where each element + in the array represent a single color channel of the original image + + + + + Save this image to the specific file. + + The name of the file to be saved to + The image format is chosen depending on the filename extension, see cvLoadImage. Only 8-bit single-channel or 3-channel (with 'BGR' channel order) images can be saved using this function. If the format, depth or channel order is different, use cvCvtScale and cvCvtColor to convert it before saving, or use universal cvSave to save the image to XML or YAML format. + + + + Make a clone of the current UMat. + + A clone of the current UMat. + + + + Indicates whether the current object is equal to another object of the same type. + + An object to compare with this object. + + true if the current object is equal to the parameter; otherwise, false. + + + + + Copy data from this Mat to the managed array + + The type of managed data array + The managed array where data will be copied to. + + + + Copy data from managed array to this Mat + + The type of managed data array + The managed array where data will be copied from + + + + Computes the dot product of two mats + + The matrix to compute dot product with + The dot product + + + + The size of this matrix + + + + + The number of rows + + + + + The number of columns + + + + + The size of the elements in this matrix + + + + + The Get property provide a more efficient way to convert Image<Gray, Byte>, Image<Bgr, Byte> and Image<Bgra, Byte> into Bitmap + such that the image data is shared with Bitmap. + If you change the pixel value on the Bitmap, you change the pixel values on the Image object as well! + For other types of image this property has the same effect as ToBitmap() + Take extra caution not to use the Bitmap after the Image object is disposed + The Set property convert the bitmap to this Image type. + + + + + True if the data is continues + + + + + True if the matrix is a submatrix of another matrix + + + + + Depth type + + + + + True if the matrix is empty + + + + + Number of channels + + + + + The method returns the number of array elements (a number of pixels if the array represents an image) + + + + + The matrix dimensionality + + + + + Allocation usage. + + + + + Default + + + + + Buffer allocation policy is platform and usage specific + + + + + Buffer allocation policy is platform and usage specific + + + + + Buffer allocation policy is platform and usage specific + It is not equal to: AllocateHostMemory | AllocateDeviceMemory + + + + + A raw data storage + + The type of elements in the storage + + + + The file info + + + + + Create a binary File Storage + + The file name of the storage + + + + Create a binary File Storage + + The file name of the storage + The data will be read in trunk of this size internally. Can be use to seed up the file read. A good number will be 4096 + + + + Create a binary File Storage with the specific data + + The file name of the storage, all data in the existing file will be replaced + The data which will be stored in the storage + + + + Append the samples to the end of the storage + + The samples to be appended to the storage + + + + Delete all data in the existing storage, if there is any. + + + + + Estimate the number of elements in this storage as the size of the storage divided by the size of the elements + + An estimation of the number of elements in this storage + + + + Get a copy of the first element in the storage. If the storage is empty, a default value will be returned + + A copy of the first element in the storage. If the storage is empty, a default value will be returned + + + + Get the subsampled data in this storage + + The subsample rate + The sub-sampled data in this storage + + + + Get the data in this storage + + The data in this storage + + + + The file name of the storage + + + + + The default exception to be thrown when error encounter in Open CV + + + + + The default exception to be thrown when error is encountered in Open CV + + The numeric code for error status + The source file name where error is encountered + A description of the error + The source file name where error is encountered + The line number in the souce where error is encountered + + + + The numeric code for error status + + + + + The corresponding error string for the Status code + + + + + The name of the function the error is encountered + + + + + A description of the error + + + + + The source file name where error is encountered + + + + + The line number in the souce where error is encountered + + + + + Wrapper for cv::String. This class support UTF-8 chars. + + + + + Create a CvString from System.String + + The System.String object to be converted to CvString + + + + Create an empty CvString + + + + + Get the string representation of the CvString + + The string representation of the CvString + + + + Release all the unmanaged resource associated with this object. + + + + + Gets the length of the string + + + The length of the string + + + + + Utilities class + + + + + The ColorPalette of Grayscale for Bitmap Format8bppIndexed + + + + + Convert the color palette to four lookup tables + + The color palette to transform + Lookup table for the B channel + Lookup table for the G channel + Lookup table for the R channel + Lookup table for the A channel + + + + Convert arrays of data to matrix + + Arrays of data + A two dimension matrix that represent the array + + + + Convert arrays of points to matrix + + Arrays of points + A two dimension matrix that represent the points + + + + Compute the minimum and maximum value from the points + + The points + The minimum x,y,z values + The maximum x,y,z values + + + + Copy a generic vector to the unmanaged memory + + The data type of the vector + The source vector + Pointer to the destination unmanaged memory + Specify the number of bytes to copy. If this is -1, the number of bytes equals the number of bytes in the array + The number of bytes copied + + + + Copy a jagged two dimensional array to the unmanaged memory + + The data type of the jagged two dimensional + The source array + Pointer to the destination unmanaged memory + + + + Copy a jagged two dimensional array from the unmanaged memory + + The data type of the jagged two dimensional + The src array + Pointer to the destination unmanaged memory + + + + memcpy function + + the destination of memory copy + the source of memory copy + the number of bytes to be copied + + + + Given the source and destination color type, compute the color conversion code for CvInvoke.cvCvtColor function + + The source color type. Must be a type inherited from IColor + The dest color type. Must be a type inherited from IColor + The color conversion code for CvInvoke.cvCvtColor function + + + + A DataLogger for unmanaged code to log data back to managed code, using callback. + + + + + Create a MessageLogger and register the callback function + + The log level. + + + + Log some data + + Pointer to some unmanaged data + The logLevel. The Log function only logs when the is greater or equals to the DataLogger's logLevel + + + + Release the DataLogger and all the unmanaged memory associated with it. + + + + + The event that will be raised when the unmanaged code send over data + + + + + A generic version of the DataLogger + + The supported type includes System.String and System.ValueType + + + + Create a new DataLogger + + The log level. + + + + Log some data + + The data to be logged + The logLevel. The Log function only logs when the is greater or equals to the DataLogger's logLevel + + + + Implicit operator for IntPtr + + The DataLogger + The unmanaged pointer for this DataLogger + + + + Release the unmanaged memory associated with this DataLogger + + + + + The event that will be raised when the unmanaged code send over data + + + + + Pointer to the unmanaged object + + + + + The event that will be raised when the unmanaged code send over data + + + + + Extension methods to the IAlgorithm interface + + + + + Reads algorithm parameters from a file storage. + + The algorithm. + The node from file storage. + + + + Stores algorithm parameters in a file storage + + The algorithm. + The storage. + + + + Extension methods for IInputArrays + + + + + Determines whether the specified input array is umat. + + The array + True if it is a umat + + + + This is the proxy class for passing read-only input arrays into OpenCV functions. + + + + + Create a Input array from an existing unmanaged inputArray pointer + + The unmanaged pointer the the InputArray + + + + Get an empty input array + + An empty input array + + + + Get the Mat from the input array + + The index, in case if this is an VectorOfMat + The Mat + + + + Get the UMat from the input array + + The index, in case if this is an VectorOfUMat + The UMat + + + + Get the size of the input array + + The optional index + The size of the input array + + + + Return true if the input array is empty + + True if the input array is empty + + + + Get the depth type + + The optional index + The depth type + + + + Get the number of channels + + The optional index + The number of channels + + + + Release all the unmanaged memory associated with this InputArray + + + + + True if the input array is a Mat + + + + + True if the input array is an UMat + + + + + True if the input array is a vector of Mat + + + + + True if the input array is a vector of UMat + + + + + True if the input array is a Matx + + + + + This type is very similar to InputArray except that it is used for input/output function parameters. + + + + + This type is very similar to InputArray except that it is used for output function parameters. + + + + + Create an OutputArray from an existing unmanaged outputArray pointer + + The pointer to the unmanaged outputArray + + + + Get an empty output array + + An empty output array + + + + Release the unmanaged memory associated with this output array. + + + + + True if the output array is fixed size + + + + + True if the output array is fixed type + + + + + True if the output array is needed + + + + + Create an InputOutputArray from an existing unmanaged inputOutputArray pointer + + The pointer to the existing inputOutputArray + + + + Get an empty InputOutputArray + + An empty InputOutputArray + + + + Release all the memory associated with this InputOutputArry + + + + + An implementation of IInputArray intented to convert data to IInputArray + + + + + Create an InputArray from MCvScalar + + The MCvScalar to be converted to InputArray + + + + Create an InputArray from a double value + + The double value to be converted to InputArray + + + + Convert double scalar to InputArray + + The double scalar + The InputArray + + + + Convert MCvSalar to InputArray + + The MCvScalar + The InputArray + + + + Release all the unmanaged memory associated with this InputArray + + + + + The pointer to the input array + + + + + Cache the size of various header in bytes + + + + + The size of PointF + + + + + The size of RangF + + + + + The size of PointF + + + + + The size of MCvMat + + + + + The size of MCvSeq + + + + + The size of MCvContour + + + + + The size of IplImage + + + + + The size of CvSeqBlock + + + + + The size of MCvPoint3D32f + + + + + The size of MCvMatND + + + + + The size of MCvBlob + + + + + This class canbe used to initiate TBB. Only usefull if it is compiled with TBB support + + + + + Initialize the TBB task scheduler + + + + + Release the TBB task scheduler + + + + + Wrapped class of the C++ standard vector of Byte. + + + + + Constructor used to deserialize runtime serialized object + + The serialization info + The streaming context + + + + A function used for runtime serialization of the object + + Serialization info + Streaming context + + + + Create an empty standard vector of Byte + + + + + Create an standard vector of Byte of the specific size + + The size of the vector + + + + Create an standard vector of Byte with the initial values + + The initial values + + + + Push an array of value into the standard vector + + The value to be pushed to the vector + + + + Convert the standard vector to an array of Byte + + An array of Byte + + + + Clear the vector + + + + + Release the standard vector + + + + + Get the pointer to cv::_InputArray + + + + + Get the pointer to cv::_OutputArray + + + + + Get the pointer to cv::_InputOutputArray + + + + + Get the size of the vector + + + + + The pointer to the first element on the vector. In case of an empty vector, IntPtr.Zero will be returned. + + + + + Get the item in the specific index + + The index + The item in the specific index + + + + Wrapped class of the C++ standard vector of ColorPoint. + + + + + Constructor used to deserialize runtime serialized object + + The serialization info + The streaming context + + + + A function used for runtime serialization of the object + + Serialization info + Streaming context + + + + Create an empty standard vector of ColorPoint + + + + + Create an standard vector of ColorPoint of the specific size + + The size of the vector + + + + Create an standard vector of ColorPoint with the initial values + + The initial values + + + + Push an array of value into the standard vector + + The value to be pushed to the vector + + + + Convert the standard vector to an array of ColorPoint + + An array of ColorPoint + + + + Clear the vector + + + + + Release the standard vector + + + + + Get the pointer to cv::_InputArray + + + + + Get the pointer to cv::_OutputArray + + + + + Get the pointer to cv::_InputOutputArray + + + + + Get the size of the vector + + + + + The pointer to the first element on the vector. In case of an empty vector, IntPtr.Zero will be returned. + + + + + Get the item in the specific index + + The index + The item in the specific index + + + + Wrapped class of the C++ standard vector of CvString. + + + + + Create an empty standard vector of CvString + + + + + Create an standard vector of CvString of the specific size + + The size of the vector + + + + Create an standard vector of CvString with the initial values + + The initial values + + + + Clear the vector + + + + + Push a value into the standard vector + + The value to be pushed to the vector + + + + Push multiple values into the standard vector + + The values to be pushed to the vector + + + + Release the standard vector + + + + + Get the pointer to cv::_InputArray + + + + + Get the pointer to cv::_OutputArray + + + + + Get the pointer to cv::_InputOutputArray + + + + + Get the size of the vector + + + + + Get the item in the specific index + + The index + The item in the specific index + + + + Wrapped class of the C++ standard vector of DMatch. + + + + + Constructor used to deserialize runtime serialized object + + The serialization info + The streaming context + + + + A function used for runtime serialization of the object + + Serialization info + Streaming context + + + + Create an empty standard vector of DMatch + + + + + Create an standard vector of DMatch of the specific size + + The size of the vector + + + + Create an standard vector of DMatch with the initial values + + The initial values + + + + Push an array of value into the standard vector + + The value to be pushed to the vector + + + + Convert the standard vector to an array of DMatch + + An array of DMatch + + + + Clear the vector + + + + + Release the standard vector + + + + + Get the pointer to cv::_InputArray + + + + + Get the pointer to cv::_OutputArray + + + + + Get the pointer to cv::_InputOutputArray + + + + + Get the size of the vector + + + + + The pointer to the first element on the vector. In case of an empty vector, IntPtr.Zero will be returned. + + + + + Get the item in the specific index + + The index + The item in the specific index + + + + Wrapped class of the C++ standard vector of Double. + + + + + Constructor used to deserialize runtime serialized object + + The serialization info + The streaming context + + + + A function used for runtime serialization of the object + + Serialization info + Streaming context + + + + Create an empty standard vector of Double + + + + + Create an standard vector of Double of the specific size + + The size of the vector + + + + Create an standard vector of Double with the initial values + + The initial values + + + + Push an array of value into the standard vector + + The value to be pushed to the vector + + + + Convert the standard vector to an array of Double + + An array of Double + + + + Clear the vector + + + + + Release the standard vector + + + + + Get the pointer to cv::_InputArray + + + + + Get the pointer to cv::_OutputArray + + + + + Get the pointer to cv::_InputOutputArray + + + + + Get the size of the vector + + + + + The pointer to the first element on the vector. In case of an empty vector, IntPtr.Zero will be returned. + + + + + Get the item in the specific index + + The index + The item in the specific index + + + + Wrapped class of the C++ standard vector of Float. + + + + + Constructor used to deserialize runtime serialized object + + The serialization info + The streaming context + + + + A function used for runtime serialization of the object + + Serialization info + Streaming context + + + + Create an empty standard vector of Float + + + + + Create an standard vector of Float of the specific size + + The size of the vector + + + + Create an standard vector of Float with the initial values + + The initial values + + + + Push an array of value into the standard vector + + The value to be pushed to the vector + + + + Convert the standard vector to an array of Float + + An array of Float + + + + Clear the vector + + + + + Release the standard vector + + + + + Get the pointer to cv::_InputArray + + + + + Get the pointer to cv::_OutputArray + + + + + Get the pointer to cv::_InputOutputArray + + + + + Get the size of the vector + + + + + The pointer to the first element on the vector. In case of an empty vector, IntPtr.Zero will be returned. + + + + + Get the item in the specific index + + The index + The item in the specific index + + + + Wrapped class of the C++ standard vector of Int. + + + + + Constructor used to deserialize runtime serialized object + + The serialization info + The streaming context + + + + A function used for runtime serialization of the object + + Serialization info + Streaming context + + + + Create an empty standard vector of Int + + + + + Create an standard vector of Int of the specific size + + The size of the vector + + + + Create an standard vector of Int with the initial values + + The initial values + + + + Push an array of value into the standard vector + + The value to be pushed to the vector + + + + Convert the standard vector to an array of Int + + An array of Int + + + + Clear the vector + + + + + Release the standard vector + + + + + Get the pointer to cv::_InputArray + + + + + Get the pointer to cv::_OutputArray + + + + + Get the pointer to cv::_InputOutputArray + + + + + Get the size of the vector + + + + + The pointer to the first element on the vector. In case of an empty vector, IntPtr.Zero will be returned. + + + + + Get the item in the specific index + + The index + The item in the specific index + + + + Wrapped class of the C++ standard vector of KeyPoint. + + + + + Constructor used to deserialize runtime serialized object + + The serialization info + The streaming context + + + + A function used for runtime serialization of the object + + Serialization info + Streaming context + + + + Create an empty standard vector of KeyPoint + + + + + Create an standard vector of KeyPoint of the specific size + + The size of the vector + + + + Create an standard vector of KeyPoint with the initial values + + The initial values + + + + Push an array of value into the standard vector + + The value to be pushed to the vector + + + + Convert the standard vector to an array of KeyPoint + + An array of KeyPoint + + + + Clear the vector + + + + + Release the standard vector + + + + + Get the pointer to cv::_InputArray + + + + + Get the pointer to cv::_OutputArray + + + + + Get the pointer to cv::_InputOutputArray + + + + + Remove keypoints within borderPixels of an image edge. + + Image size + Border size in pixel + + + + Remove keypoints of sizes out of range. + + Minimum size + Maximum size + + + + Remove keypoints from some image by mask for pixels of this image. + + The mask + + + + Get the size of the vector + + + + + The pointer to the first element on the vector. In case of an empty vector, IntPtr.Zero will be returned. + + + + + Get the item in the specific index + + The index + The item in the specific index + + + + Wrapped class of the C++ standard vector of Mat. + + + + + Create an empty standard vector of Mat + + + + + Create an standard vector of Mat of the specific size + + The size of the vector + + + + Create an standard vector of Mat with the initial values + + The initial values + + + + Clear the vector + + + + + Push a value into the standard vector + + The value to be pushed to the vector + + + + Push multiple values into the standard vector + + The values to be pushed to the vector + + + + Release the standard vector + + + + + Get the pointer to cv::_InputArray + + + + + Get the pointer to cv::_OutputArray + + + + + Get the pointer to cv::_InputOutputArray + + + + + Convert a CvArray to cv::Mat and push it into the vector + + The type of depth of the cvArray + The cvArray to be pushed into the vector + + + + Convert a group of CvArray to cv::Mat and push them into the vector + + The type of depth of the cvArray + The values to be pushed to the vector + + + + Get the size of the vector + + + + + Get the item in the specific index + + The index + The item in the specific index + + + + Wrapped class of the C++ standard vector of OclPlatformInfo. + + + + + Create an empty standard vector of OclPlatformInfo + + + + + Create an standard vector of OclPlatformInfo of the specific size + + The size of the vector + + + + Create an standard vector of OclPlatformInfo with the initial values + + The initial values + + + + Clear the vector + + + + + Push a value into the standard vector + + The value to be pushed to the vector + + + + Push multiple values into the standard vector + + The values to be pushed to the vector + + + + Release the standard vector + + + + + Get the pointer to cv::_InputArray + + + + + Get the pointer to cv::_OutputArray + + + + + Get the pointer to cv::_InputOutputArray + + + + + Get the size of the vector + + + + + Get the item in the specific index + + The index + The item in the specific index + + + + Wrapped class of the C++ standard vector of Point. + + + + + Constructor used to deserialize runtime serialized object + + The serialization info + The streaming context + + + + A function used for runtime serialization of the object + + Serialization info + Streaming context + + + + Create an empty standard vector of Point + + + + + Create an standard vector of Point of the specific size + + The size of the vector + + + + Create an standard vector of Point with the initial values + + The initial values + + + + Push an array of value into the standard vector + + The value to be pushed to the vector + + + + Convert the standard vector to an array of Point + + An array of Point + + + + Clear the vector + + + + + Release the standard vector + + + + + Get the pointer to cv::_InputArray + + + + + Get the pointer to cv::_OutputArray + + + + + Get the pointer to cv::_InputOutputArray + + + + + Get the size of the vector + + + + + The pointer to the first element on the vector. In case of an empty vector, IntPtr.Zero will be returned. + + + + + Get the item in the specific index + + The index + The item in the specific index + + + + Wrapped class of the C++ standard vector of Point3D32F. + + + + + Constructor used to deserialize runtime serialized object + + The serialization info + The streaming context + + + + A function used for runtime serialization of the object + + Serialization info + Streaming context + + + + Create an empty standard vector of Point3D32F + + + + + Create an standard vector of Point3D32F of the specific size + + The size of the vector + + + + Create an standard vector of Point3D32F with the initial values + + The initial values + + + + Push an array of value into the standard vector + + The value to be pushed to the vector + + + + Convert the standard vector to an array of Point3D32F + + An array of Point3D32F + + + + Clear the vector + + + + + Release the standard vector + + + + + Get the pointer to cv::_InputArray + + + + + Get the pointer to cv::_OutputArray + + + + + Get the pointer to cv::_InputOutputArray + + + + + Get the size of the vector + + + + + The pointer to the first element on the vector. In case of an empty vector, IntPtr.Zero will be returned. + + + + + Get the item in the specific index + + The index + The item in the specific index + + + + Wrapped class of the C++ standard vector of PointF. + + + + + Constructor used to deserialize runtime serialized object + + The serialization info + The streaming context + + + + A function used for runtime serialization of the object + + Serialization info + Streaming context + + + + Create an empty standard vector of PointF + + + + + Create an standard vector of PointF of the specific size + + The size of the vector + + + + Create an standard vector of PointF with the initial values + + The initial values + + + + Push an array of value into the standard vector + + The value to be pushed to the vector + + + + Convert the standard vector to an array of PointF + + An array of PointF + + + + Clear the vector + + + + + Release the standard vector + + + + + Get the pointer to cv::_InputArray + + + + + Get the pointer to cv::_OutputArray + + + + + Get the pointer to cv::_InputOutputArray + + + + + Get the size of the vector + + + + + The pointer to the first element on the vector. In case of an empty vector, IntPtr.Zero will be returned. + + + + + Get the item in the specific index + + The index + The item in the specific index + + + + Wrapped class of the C++ standard vector of Rect. + + + + + Constructor used to deserialize runtime serialized object + + The serialization info + The streaming context + + + + A function used for runtime serialization of the object + + Serialization info + Streaming context + + + + Create an empty standard vector of Rect + + + + + Create an standard vector of Rect of the specific size + + The size of the vector + + + + Create an standard vector of Rect with the initial values + + The initial values + + + + Push an array of value into the standard vector + + The value to be pushed to the vector + + + + Convert the standard vector to an array of Rect + + An array of Rect + + + + Clear the vector + + + + + Release the standard vector + + + + + Get the pointer to cv::_InputArray + + + + + Get the pointer to cv::_OutputArray + + + + + Get the pointer to cv::_InputOutputArray + + + + + Get the size of the vector + + + + + The pointer to the first element on the vector. In case of an empty vector, IntPtr.Zero will be returned. + + + + + Get the item in the specific index + + The index + The item in the specific index + + + + Wrapped class of the C++ standard vector of Triangle2DF. + + + + + Constructor used to deserialize runtime serialized object + + The serialization info + The streaming context + + + + A function used for runtime serialization of the object + + Serialization info + Streaming context + + + + Create an empty standard vector of Triangle2DF + + + + + Create an standard vector of Triangle2DF of the specific size + + The size of the vector + + + + Create an standard vector of Triangle2DF with the initial values + + The initial values + + + + Push an array of value into the standard vector + + The value to be pushed to the vector + + + + Convert the standard vector to an array of Triangle2DF + + An array of Triangle2DF + + + + Clear the vector + + + + + Release the standard vector + + + + + Get the pointer to cv::_InputArray + + + + + Get the pointer to cv::_OutputArray + + + + + Get the pointer to cv::_InputOutputArray + + + + + Get the size of the vector + + + + + The pointer to the first element on the vector. In case of an empty vector, IntPtr.Zero will be returned. + + + + + Get the item in the specific index + + The index + The item in the specific index + + + + Wrapped class of the C++ standard vector of UMat. + + + + + Create an empty standard vector of UMat + + + + + Create an standard vector of UMat of the specific size + + The size of the vector + + + + Create an standard vector of UMat with the initial values + + The initial values + + + + Clear the vector + + + + + Push a value into the standard vector + + The value to be pushed to the vector + + + + Push multiple values into the standard vector + + The values to be pushed to the vector + + + + Release the standard vector + + + + + Get the pointer to cv::_InputArray + + + + + Get the pointer to cv::_OutputArray + + + + + Get the pointer to cv::_InputOutputArray + + + + + Get the size of the vector + + + + + Get the item in the specific index + + The index + The item in the specific index + + + + Wrapped class of the C++ standard vector of VectorOfDMatch. + + + + + Create an empty standard vector of VectorOfDMatch + + + + + Create an standard vector of VectorOfDMatch of the specific size + + The size of the vector + + + + Create an standard vector of VectorOfDMatch with the initial values + + The initial values + + + + Clear the vector + + + + + Push a value into the standard vector + + The value to be pushed to the vector + + + + Push multiple values into the standard vector + + The values to be pushed to the vector + + + + Release the standard vector + + + + + Get the pointer to cv::_InputArray + + + + + Get the pointer to cv::_OutputArray + + + + + Get the pointer to cv::_InputOutputArray + + + + + Create the standard vector of VectorOfDMatch + + + + + Convert the standard vector to arrays of int + + Arrays of int + + + + Get the size of the vector + + + + + Get the item in the specific index + + The index + The item in the specific index + + + + Wrapped class of the C++ standard vector of VectorOfInt. + + + + + Create an empty standard vector of VectorOfInt + + + + + Create an standard vector of VectorOfInt of the specific size + + The size of the vector + + + + Create an standard vector of VectorOfInt with the initial values + + The initial values + + + + Clear the vector + + + + + Push a value into the standard vector + + The value to be pushed to the vector + + + + Push multiple values into the standard vector + + The values to be pushed to the vector + + + + Release the standard vector + + + + + Get the pointer to cv::_InputArray + + + + + Get the pointer to cv::_OutputArray + + + + + Get the pointer to cv::_InputOutputArray + + + + + Create the standard vector of VectorOfInt + + + + + Convert the standard vector to arrays of int + + Arrays of int + + + + Get the size of the vector + + + + + Get the item in the specific index + + The index + The item in the specific index + + + + Wrapped class of the C++ standard vector of VectorOfPoint. + + + + + Create an empty standard vector of VectorOfPoint + + + + + Create an standard vector of VectorOfPoint of the specific size + + The size of the vector + + + + Create an standard vector of VectorOfPoint with the initial values + + The initial values + + + + Clear the vector + + + + + Push a value into the standard vector + + The value to be pushed to the vector + + + + Push multiple values into the standard vector + + The values to be pushed to the vector + + + + Release the standard vector + + + + + Get the pointer to cv::_InputArray + + + + + Get the pointer to cv::_OutputArray + + + + + Get the pointer to cv::_InputOutputArray + + + + + Create the standard vector of VectorOfPoint + + + + + Convert the standard vector to arrays of int + + Arrays of int + + + + Get the size of the vector + + + + + Get the item in the specific index + + The index + The item in the specific index + + + + Wrapped class of the C++ standard vector of VectorOfPoint3D32F. + + + + + Create an empty standard vector of VectorOfPoint3D32F + + + + + Create an standard vector of VectorOfPoint3D32F of the specific size + + The size of the vector + + + + Create an standard vector of VectorOfPoint3D32F with the initial values + + The initial values + + + + Clear the vector + + + + + Push a value into the standard vector + + The value to be pushed to the vector + + + + Push multiple values into the standard vector + + The values to be pushed to the vector + + + + Release the standard vector + + + + + Get the pointer to cv::_InputArray + + + + + Get the pointer to cv::_OutputArray + + + + + Get the pointer to cv::_InputOutputArray + + + + + Create the standard vector of VectorOfPoint3D32F + + + + + Convert the standard vector to arrays of int + + Arrays of int + + + + Get the size of the vector + + + + + Get the item in the specific index + + The index + The item in the specific index + + + + Wrapped class of the C++ standard vector of VectorOfPointF. + + + + + Create an empty standard vector of VectorOfPointF + + + + + Create an standard vector of VectorOfPointF of the specific size + + The size of the vector + + + + Create an standard vector of VectorOfPointF with the initial values + + The initial values + + + + Clear the vector + + + + + Push a value into the standard vector + + The value to be pushed to the vector + + + + Push multiple values into the standard vector + + The values to be pushed to the vector + + + + Release the standard vector + + + + + Get the pointer to cv::_InputArray + + + + + Get the pointer to cv::_OutputArray + + + + + Get the pointer to cv::_InputOutputArray + + + + + Create the standard vector of VectorOfPointF + + + + + Convert the standard vector to arrays of int + + Arrays of int + + + + Get the size of the vector + + + + + Get the item in the specific index + + The index + The item in the specific index + + + + Use zlib included in OpenCV to perform in-memory binary compression and decompression + + + + + Compress the data using the specific compression level + + The data to be compressed + The compression level, 0-9 where 0 mean no compression at all + The compressed bytes + + + + Uncompress the data + + The compressed data + The estimated size fo the uncompress data. Must be large enough to hold the decompressed data. + The decompressed data + + + + An abstract class that can be use the perform background / forground detection. + + + + + Update the background model + + The image that is used to update the background model + Use -1 for default + The output forground mask + + + + K-nearest neighbors - based Background/Foreground Segmentation Algorithm. + + + + + Create a K-nearest neighbors - based Background/Foreground Segmentation Algorithm. + + Length of the history. + Threshold on the squared distance between the pixel and the sample to decide whether a pixel is close to that sample. This parameter does not affect the background update. + If true, the algorithm will detect shadows and mark them. It decreases the speed a bit, so if you do not need this feature, set the parameter to false. + + + + Release all the unmanaged memory associated with this background model. + + + + + The class implements the following algorithm: + "Improved adaptive Gaussian mixture model for background subtraction" + Z.Zivkovic + International Conference Pattern Recognition, UK, August, 2004. + http://www.zoranz.net/Publications/zivkovic2004ICPR.pdf + + + + + Create an "Improved adaptive Gaussian mixture model for background subtraction". + + The length of the history. + The maximum allowed number of mixture components. Actual number is determined dynamically per pixel. + If true, the algorithm will detect shadows and mark them. It decreases the speed a bit, so if you do not need this feature, set the parameter to false. + + + + Release all the unmanaged memory associated with this background model. + + + + + Create a video writer that write images to video format + + + + + Create a video writer using the specific information. + On windows, it will open a codec selection dialog. + On linux, it will use the default codec for the specified filename + + The name of the video file to be written to + frame rate per second + the size of the frame + true if this is a color video, false otherwise + + + + Create a video writer using the specific information + + The name of the video file to be written to + Compression code. Usually computed using CvInvoke.CV_FOURCC. + On windows use -1 to open a codec selection dialog. + On Linux, use CvInvoke.CV_FOURCC('I', 'Y', 'U', 'V') for default codec for the specific file name. + + frame rate per second + the size of the frame + true if this is a color video, false otherwise + + + + Write a single frame to the video writer + + The frame to be written to the video writer + + + + Generate 4-character code of codec used to compress the frames. For example, CV_FOURCC('P','I','M','1') is MPEG-1 codec, CV_FOURCC('M','J','P','G') is motion-jpeg codec etc. + + + + + + + + + + Release the video writer and all the memory associate with it + + + + + Neural network + + + + + Interface for statistical models in OpenCV ML. + + + + + Return the pointer to the StatModel object + + The pointer to the StatModel object + + + + Create a neural network using the specific parameters + + + + + Release the memory associated with this neural network + + + + + Sets the layer sizes. + + Integer vector specifying the number of neurons in each layer including the input and output layers. The very first element specifies the number of elements in the input layer. The last element - number of elements in the output layer. + + + + Initialize the activation function for each neuron. + + Currently the default and the only fully supported activation function is SigmoidSym + The first parameter of the activation function. + The second parameter of the activation function. + + + + Sets training method and common parameters. + + The training method. + The param1. + The param2. + + + + Termination criteria of the training algorithm + + + + + BPROP: Strength of the weight gradient term + + + + + BPROP: Strength of the momentum term (the difference between weights on the 2 previous iterations) + + + + + RPROP: Initial value Delta_0 of update-values Delta_{ij} + + + + + RPROP: Increase factor + + + + + RPROP: Decrease factor + + + + + RPROP: Update-values lower limit + + + + + RPROP: Update-values upper limit + + + + + Possible activation functions + + + + + Identity + + + + + sigmoid symmetric + + + + + Gaussian + + + + + Training method for ANN_MLP + + + + + Back-propagation algorithm + + + + + Batch RPROP algorithm + + + + + This class contains functions to call into machine learning library + + + + + Release the ANN_MLP model + + The ANN_MLP model to be released + + + + Save the statistic model to the specific file + + The statistic model to save + The file name to save to + + + + Clear the statistic model + + The model to be cleared + + + + Create a normal bayes classifier + + The normal bayes classifier + + + + Release the memory associated with the bayes classifier + + The classifier to release + + + + Create a KNearest classifier + + The KNearest classifier + + + + Release the KNearest classifier + + The classifier to release + + + + Create a default EM model + + Pointer to the EM model + + + + Release the EM model + + + + + Given the EM , predict the probability of the + + The EM model + The input samples + The prediction results, should have the same # of rows as the + The result. + + + + Create a default SVM model + + Pointer to the SVM model + + + + Release the SVM model and all the memory associated to ir + + The SVM model to be released + + + + Get the default parameter grid for the specific SVM type + + The SVM type + The parameter grid reference, values will be filled in by the function call + + + + The method trains the SVM model automatically by choosing the optimal parameters C, gamma, p, nu, coef0, degree from CvSVMParams. By the optimality one mean that the cross-validation estimate of the test set error is minimal. + + The SVM model + The training data. + Cross-validation parameter. The training set is divided into k_fold subsets, one subset being used to train the model, the others forming the test set. So, the SVM algorithm is executed k_fold times + cGrid + gammaGrid + pGrid + nuGrid + coedGrid + degreeGrid + If true and the problem is 2-class classification then the method creates more balanced cross-validation subsets that is proportions between classes in subsets are close to such proportion in the whole train dataset. + + + + + The method retrieves a given support vector + + The SVM model + The output support vectors + + + + Create a default decision tree + + Pointer to the decision tree + + + + Release the decision tree model + + The decision tree model to be released + + + + Create a default random tree + + Pointer to the random tree + + + + Release the random tree model + + The random tree model to be released + + + + Create a default boost classifier + + Pointer to the boost classifier + + + + Release the boost classifier + + The boost classifier to be released + + + + Boost Tree + + + + + Create a default Boost classifier + + + + + Release the Boost classifier and all memory associate with it + + + + + Cluster possible values of a categorical variable into K less than or equals maxCategories clusters to find a suboptimal split + + + + + The maximum possible depth of the tree + + + + + If the number of samples in a node is less than this parameter then the node will not be split + + + + + If CVFolds greater than 1 then algorithms prunes the built decision tree using K-fold + + + + + If true then surrogate splits will be built + + + + + If true then a pruning will be harsher + + + + + If true then pruned branches are physically removed from the tree + + + + + Termination criteria for regression trees + + + + + Boost Type + + + + + Discrete AdaBoost. + + + + + Real AdaBoost. It is a technique that utilizes confidence-rated predictions and works well with categorical data. + + + + + LogitBoost. It can produce good regression fits. + + + + + Gentle AdaBoost. It puts less weight on outlier data points and for that reason is often good with regression data. + + + + + Decision Trees + + + + + Create a default decision tree + + + + + Release the decision tree and all the memory associate with it + + + + + Cluster possible values of a categorical variable into K less than or equals maxCategories clusters to find a suboptimal split + + + + + The maximum possible depth of the tree + + + + + If the number of samples in a node is less than this parameter then the node will not be split + + + + + If CVFolds greater than 1 then algorithms prunes the built decision tree using K-fold + + + + + If true then surrogate splits will be built + + + + + If true then a pruning will be harsher + + + + + If true then pruned branches are physically removed from the tree + + + + + Termination criteria for regression trees + + + + + Expectation Maximization model + + + + + Create an Expectation Maximization model + + + + + Estimate the Gaussian mixture parameters from a samples set. This variation starts with Expectation step. You need to provide initial means of mixture components. Optionally you can pass initial weights and covariance matrices of mixture components. + + Samples from which the Gaussian mixture model will be estimated. It should be a one-channel matrix, each row of which is a sample. If the matrix does not have CV_64F type it will be converted to the inner matrix of such type for the further computing. + Initial means of mixture components. It is a one-channel matrix of nclusters x dims size. If the matrix does not have CV_64F type it will be converted to the inner matrix of such type for the further computing. + The vector of initial covariance matrices of mixture components. Each of covariance matrices is a one-channel matrix of dims x dims size. If the matrices do not have CV_64F type they will be converted to the inner matrices of such type for the further computing. + Initial weights of mixture components. It should be a one-channel floating-point matrix with 1 x nclusters or nclusters x 1 size. + The optional output matrix that contains a likelihood logarithm value for each sample. It has nsamples x 1 size and CV_64FC1 type. + The optional output "class label" (indices of the most probable mixture component for each sample). It has nsamples x 1 size and CV_32SC1 type. + The optional output matrix that contains posterior probabilities of each Gaussian mixture component given the each sample. It has nsamples x nclusters size and CV_64FC1 type. + + + + Estimate the Gaussian mixture parameters from a samples set. + This variation starts with Expectation step. Initial values of the model parameters will be estimated by the k-means algorithm. + Unlike many of the ML models, EM is an unsupervised learning algorithm and it does not take responses (class labels or function values) as input. Instead, it computes the Maximum Likelihood Estimate of the Gaussian mixture parameters from an input sample set, stores all the parameters inside the structure, and optionally computes the output "class label" for each sample. + The trained model can be used further for prediction, just like any other classifier. + + Samples from which the Gaussian mixture model will be estimated. It should be a one-channel matrix, each row of which is a sample. If the matrix does not have CV_64F type it will be converted to the inner matrix of such type for the further computing. + The probs0. + The optional output matrix that contains a likelihood logarithm value for each sample. It has nsamples x 1 size and CV_64FC1 type. + The optional output "class label" for each sample(indices of the most probable mixture component for each sample). It has nsamples x 1 size and CV_32SC1 type. + The optional output matrix that contains posterior probabilities of each Gaussian mixture component given the each sample. It has nsamples x nclusters size and CV_64FC1 type. + + + + Predict the probability of the + + The input samples + The prediction results, should have the same # of rows as the + + + + Release the memory associated with this EM model + + + + + The number of mixtures + + + + + The type of the mixture covariation matrices + + + + + Termination criteria of the procedure. EM algorithm stops either after a certain number of iterations (term_crit.num_iter), or when the parameters change too little (no more than term_crit.epsilon) from iteration to iteration + + + + + The type of the mixture covariation matrices + + + + + A covariation matrix of each mixture is a scaled identity matrix, ?k*I, so the only parameter to be estimated is ?k. The option may be used in special cases, when the constraint is relevant, or as a first step in the optimization (e.g. in case when the data is preprocessed with PCA). The results of such preliminary estimation may be passed again to the optimization procedure, this time with cov_mat_type=COV_MAT_DIAGONAL + + + + + A covariation matrix of each mixture may be arbitrary diagonal matrix with positive diagonal elements, that is, non-diagonal elements are forced to be 0's, so the number of free parameters is d for each matrix. This is most commonly used option yielding good estimation results + + + + + A covariation matrix of each mixture may be arbitrary symmetrical positively defined matrix, so the number of free parameters in each matrix is about d2/2. It is not recommended to use this option, unless there is pretty accurate initial estimation of the parameters and/or a huge number of training samples + + + + + The default + + + + + The KNearest classifier + + + + + Create a default KNearest classifier + + + + + Release the classifier and all the memory associated with it + + + + + Default number of neighbors to use in predict method + + + + + Whether classification or regression model should be trained + + + + + Parameter for KDTree implementation + + + + + Algorithm type + + + + + ML implements logistic regression, which is a probabilistic classification technique. + + + + + Initializes a new instance of the class. + + + + + Release the unmanaged resources + + + + + Return the pointer to the StatModel object + + + + + Return the pointer to the algorithm object + + + + + Learning rate + + + + + Number of iterations + + + + + Kind of regularization to be applied + + + + + Kind of training method to be applied + + + + + Specifies the number of training samples taken in each step of Mini-Batch Gradient Descent + + + + + Termination criteria of the algorithm + + + + + Specifies the kind of training method used. + + + + + Batch method + + + + + Set MiniBatchSize to a positive integer when using this method. + + + + + Specifies the kind of regularization to be applied. + + + + + Regularization disabled. + + + + + L1 norm + + + + + L2 norm + + + + + A Normal Bayes Classifier + + + + + Create a normal Bayes classifier + + + + + Release the memory associated with this classifier + + + + + An OpenCV decision Tree Node + + + + + The assigned to the node normalized class index (to 0..class_count-1 range), it is used internally in classification trees and tree ensembles. + + + + + The tree index in a ordered sequence of trees. The indices are used during and after the pruning procedure. The root node has the maximum value Tn of the whole tree, child nodes have Tn less than or equal to the parent's Tn, and the nodes with Tn<=CvDTree::pruned_tree_idx are not taken into consideration at the prediction stage (the corresponding branches are considered as cut-off), even if they have not been physically deleted from the tree at the pruning stage. + + + + + The value assigned to the tree node. It is either a class label, or the estimated function value. + + + + + Pointer to the parent tree node + + + + + Pointer to the left tree node + + + + + Pointer to the right tree node + + + + + Pointer to CvDTreeSplit + + + + + The number of samples that fall into the node at the training stage. It is used to resolve the difficult cases - when the variable for the primary split is missing, and all the variables for other surrogate splits are missing too, + the sample is directed to the left if left->sample_count>right->sample_count and to the right otherwise + + + + + The node depth, the root node depth is 0, the child nodes depth is the parent's depth + 1. + + + + + Internal parameters + + + + + Internal parameters + + + + + Internal parameters + + + + + Internal parameters + + + + + Global pruning data + + + + + Global pruning data + + + + + Global pruning data + + + + + Global pruning data + + + + + Global pruning data + + + + + Cross-validation pruning data + + + + + Cross-validation pruning data + + + + + Cross-validation pruning data + + + + + Decision tree node split + + + + + Index of the variable used in the split + + + + + When it equals to 1, the inverse split rule is used (i.e. left and right branches are exchanged in the expressions below) + + + + + The split quality, a positive number. It is used to choose the best primary split, then to choose and sort the surrogate splits. After the tree is constructed, it is also used to compute variable importance + + + + + Pointer to the next split in the node split list + + + + + Get or Set the Order of this TreeSplit + + + + + Get the bit array indicating the value subset in case of split on a categorical variable. + The rule is: if var_value in subset then next_node<-left else next_node<-right + + + + + Wrapped Order structure + + + + + The threshold value in case of split on an ordered variable. + The rule is: if var_value < c then next_node<-left else next_node<-right + + + + + Used internally by the training algorithm + + + + + Wrapped CvParamGrid structure used by SVM + + + + + Minimum value + + + + + Maximum value + + + + + step + + + + + The flags for the neural network training function + + + + + + + + + + + + + + + + + + + + + + + + + The data layout type + + + + + Feature vectors are stored as cols + + + + + Feature vectors are stored as rows + + + + + Boosting type + + + + + Discrete AdaBoost + + + + + Real AdaBoost + + + + + LogitBoost + + + + + Gentle AdaBoost + + + + + Splitting criteria, used to choose optimal splits during a weak tree construction + + + + + Use the default criteria for the particular boosting method, see below + + + + + Use Gini index. This is default option for Real AdaBoost; may be also used for Discrete AdaBoost + + + + + Use misclassification rate. This is default option for Discrete AdaBoost; may be also used for Real AdaBoost + + + + + Use least squares criteria. This is default and the only option for LogitBoost and Gentle AdaBoost + + + + + Variable type + + + + + Numerical or Ordered + + + + + Catagorical + + + + + Random trees + + + + + Create a random tree + + + + + Release the random tree and all memory associate with it + + + + + Cluster possible values of a categorical variable into K less than or equals maxCategories clusters to find a suboptimal split + + + + + The maximum possible depth of the tree + + + + + If the number of samples in a node is less than this parameter then the node will not be split + + + + + If CVFolds greater than 1 then algorithms prunes the built decision tree using K-fold + + + + + If true then surrogate splits will be built + + + + + If true then a pruning will be harsher + + + + + If true then pruned branches are physically removed from the tree + + + + + Termination criteria for regression trees + + + + + If true then variable importance will be calculated + + + + + The size of the randomly selected subset of features at each tree node and that are used to find the best split(s) + + + + + The termination criteria that specifies when the training algorithm stops + + + + + A statistic model + + + + + Save the statistic model to file + + The StatModel + The file name where this StatModel will be saved + + + + Trains the statistical model. + + The stat model. + The training samples. + Type of the layout. + Vector of responses associated with the training samples. + + + + + Trains the statistical model. + + The model. + The train data. + The flags. + + + + + Predicts response(s) for the provided sample(s) + + The model. + The input samples, floating-point matrix. + The optional output matrix of results. + The optional flags, model-dependent. + Response for the provided sample + + + + Clear the statistic model + + + + + Support Vector Machine + + + + + Create a support Vector Machine + + + + + Release all the memory associated with the SVM + + + + + Get the default parameter grid for the specific SVM type + + The SVM type + The default parameter grid for the specific SVM type + + + + The method trains the SVM model automatically by choosing the optimal parameters C, gamma, p, nu, coef0, degree from CvSVMParams. By the optimality one mean that the cross-validation estimate of the test set error is minimal. + + The training data. + Cross-validation parameter. The training set is divided into k_fold subsets, one subset being used to train the model, the others forming the test set. So, the SVM algorithm is executed k_fold times + + + + + The method trains the SVM model automatically by choosing the optimal parameters C, gamma, p, nu, coef0, degree from CvSVMParams. By the optimality one mean that the cross-validation estimate of the test set error is minimal. + + The training data. + Cross-validation parameter. The training set is divided into k_fold subsets, one subset being used to train the model, the others forming the test set. So, the SVM algorithm is executed k_fold times + cGrid + grid for gamma + grid for p + grid for nu + grid for coeff + grid for degree + If true and the problem is 2-class classification then the method creates more balanced cross-validation subsets that is proportions between classes in subsets are close to such proportion in the whole train dataset. + + + + + Retrieves all the support vectors. + + All the support vector as floating-point matrix, where support vectors are stored as matrix rows. + + + + Initialize with one of predefined kernels + + + + + Type of a SVM formulation + + + + + Parameter gamma of a kernel function + + + + + Parameter coef0 of a kernel function + + + + + Parameter degree of a kernel function + + + + + Parameter C of a SVM optimization problem + + + + + Parameter nu of a SVM optimization problem + + + + + Parameter epsilon of a SVM optimization problem + + + + + Termination criteria of the iterative SVM training procedure which solves a partial case of constrained quadratic optimization problem + + + + + Type of a SVM kernel + + + + + Type of SVM + + + + + n-class classification (n>=2), allows imperfect separation of classes with penalty multiplier C for outliers + + + + + n-class classification with possible imperfect separation. Parameter nu (in the range 0..1, the larger the value, the smoother the decision boundary) is used instead of C + + + + + one-class SVM. All the training data are from the same class, SVM builds a boundary that separates the class from the rest of the feature space + + + + + Regression. The distance between feature vectors from the training set and the fitting hyper-plane must be less than p. For outliers the penalty multiplier C is used + + + + + Regression; nu is used instead of p. + + + + + SVM kernel type + + + + + Custom svm kernel type + + + + + No mapping is done, linear discrimination (or regression) is done in the original feature space. It is the fastest option. d(x,y) = x y == (x,y) + + + + + polynomial kernel: d(x,y) = (gamma*(xy)+coef0)^degree + + + + + Radial-basis-function kernel; a good choice in most cases: d(x,y) = exp(-gamma*|x-y|^2) + + + + + sigmoid function is used as a kernel: d(x,y) = tanh(gamma*(xy)+coef0) + + + + + Exponential Chi2 kernel, similar to the RBF kernel + + + + + Histogram intersection kernel. A fast kernel. K(xi,xj)=min(xi,xj). + + + + + The type of SVM parameters + + + + + C + + + + + Gamma + + + + + P + + + + + NU + + + + + COEF + + + + + DEGREE + + + + + Train data + + + + + Creates training data from in-memory arrays. + + Matrix of samples. It should have CV_32F type. + Type of the layout. + Matrix of responses. If the responses are scalar, they should be stored as a single row or as a single column. The matrix should have type CV_32F or CV_32S (in the former case the responses are considered as ordered by default; in the latter case - as categorical) + Vector specifying which variables to use for training. It can be an integer vector (CV_32S) containing 0-based variable indices or byte vector (CV_8U) containing a mask of active variables. + Vector specifying which samples to use for training. It can be an integer vector (CV_32S) containing 0-based sample indices or byte vector (CV_8U) containing a mask of training samples. + Optional vector with weights for each sample. It should have CV_32F type. + Optional vector of type CV_8U and size <number_of_variables_in_samples> + <number_of_variables_in_responses>, containing types of each input and output variable. + + + + Release the unmanaged resources + + + + + Use the Capture class as a FrameSource + + + + + A FrameSource that can be used by the Video Stabilizer + + + + + The unmanaged pointer the the frameSource + + + + + Retrieve the next frame from the FrameSoure + + + + + + Release the unmanaged memory associated with this FrameSource + + + + + Get or Set the capture type + + + + + Create a Capture frame source + + The capture object that will be converted to a FrameSource + + + + Release the unmanaged memory associated with this CaptureFrameSource + + + + + Gaussian motion filter + + + + + Create a Gaussian motion filter + + The radius, use 15 for default. + The standard deviation, use -1.0f for default + + + + Release all the unmanaged memory associated with this object + + + + + A one pass video stabilizer + + + + + Create a one pass stabilizer + + The capture object to be stabalized + + + + Set the Motion Filter + + The motion filter + + + + Release the unmanaged memory associated with the stabilizer + + + + + A two pass video stabilizer + + + + + Create a two pass video stabilizer. + + The capture object to be stabilized. Should not be a camera stream. + + + + Release the unmanaged memory + + + + + Create a video frame source + + + + + The pointer to the frame source + + + + + Create video frame source from video file + + The name of the file + If true, it will try to create video frame source using gpu + + + Create a framesource using the specific camera + The index of the camera to create capture from, starting from 0 + + + + Get the next frame + + + + + Release all the unmanaged memory associated with this framesource + + + + + Supper resolution + + + + + Create a super resolution solver for the given frameSource + + The type of optical flow algorithm to use + The frameSource + + + + Release all the unmanaged memory associated to this object + + + + + The type of optical flow algorithms used for super resolution + + + + + BTVL + + + + + BTVL using gpu + + + + + Finds features in the given image. + + + + + Pointer to the unmanaged FeaturesFinder object + + + + + ORB features finder. + + + + + Creates an ORB features finder + + Use (3, 1) for default grid size + The number of desired features. + Coefficient by which we divide the dimensions from one scale pyramid level to the next. + The number of levels in the scale pyramid. + + + + Release all the unmanaged memory associated with this FeaturesFinder + + + + + Image Stitching. + + + + + Creates a stitcher with the default parameters. + + If true, the stitcher will try to use GPU for processing when available + + + + Compute the panoramic images given the images + + The input images. This can be, for example, a VectorOfMat + The panoramic image + true if successful + + + + Release memory associated with this stitcher + + + + + Abstract base class for histogram cost algorithms. + + + + + Release the histogram cost extractor + + + + + A norm based cost extraction. + + + + + Create a norm based cost extraction. + + Distance type + Number of dummies + Default cost + + + + An EMD based cost extraction. + + + + + Create an EMD based cost extraction. + + Distance type + Number of dummies + Default cost + + + + An Chi based cost extraction. + + + + + Create an Chi based cost extraction. + + Number of dummies + Default cost + + + + An EMD-L1 based cost extraction. + + + + + Create an EMD-L1 based cost extraction. + + Number of dummies + Default cost + + + + Library to invoke functions that belongs to the shape module + + + + + Abstract base class for shape distance algorithms. + + + + + Compute the shape distance between two shapes defined by its contours. + + Contour defining first shape + Contour defining second shape + The shape distance between two shapes defined by its contours. + + + + Implementation of the Shape Context descriptor and matching algorithm proposed by Belongie et al. in “Shape Matching and Object Recognition Using Shape Contexts” (PAMI 2002). + + + + + Create a shape context distance extractor + + The histogram cost extractor + The shape transformer + Establish the number of angular bins for the Shape Context Descriptor used in the shape matching pipeline. + Establish the number of radial bins for the Shape Context Descriptor used in the shape matching pipeline. + Set the inner radius of the shape context descriptor. + Set the outer radius of the shape context descriptor. + Iterations + + + + Release the memory associated with this shape context distance extractor + + + + + A simple Hausdorff distance measure between shapes defined by contours, according to the paper “Comparing Images using the Hausdorff distance.” by D.P. Huttenlocher, G.A. Klanderman, and W.J. Rucklidge. (PAMI 1993). + + + + + Create Hausdorff distance extractor + + Rhe norm used to compute the Hausdorff value between two shapes. It can be L1 or L2 norm. + The rank proportion (or fractional value) that establish the Kth ranked value of the partial Hausdorff distance. Experimentally had been shown that 0.6 is a good value to compare shapes. + + + + Release the memory associated with this Hausdorff distance extrator + + + + + Abstract base class for shape transformation algorithms. + + + + + Release the unmanaged memory associated with this ShapeTransformer object + + + + + Definition of the transformation ocupied in the paper “Principal Warps: Thin-Plate Splines and Decomposition of Deformations”, by F.L. Bookstein (PAMI 1989). + + + + + Create a thin plate spline shape transformer + + The regularization parameter for relaxing the exact interpolation requirements of the TPS algorithm. + + + + Wrapper class for the OpenCV Affine Transformation algorithm. + + + + + Create an affine transformer + + Full affine + + + + Library to invoke Tesseract OCR functions + + + + + The tesseract page iterator + + + + + Block of text/image/separator line. + + + + + Paragraph within a block. + + + + + Line within a paragraph. + + + + + Word within a textline. + + + + + Symbol/character within a word. + + + + + The tesseract OCR engine + + + + + Create a default tesseract engine. Needed to Call Init function to load language files in a later stage. + + + + + Create an tesseract OCR engine. + + + The datapath must be the name of the parent directory of tessdata and + must end in / . Any name after the last / will be stripped. + + + The language is (usually) an ISO 639-3 string or NULL will default to eng. + It is entirely safe (and eventually will be efficient too) to call + Init multiple times on the same instance to change language, or just + to reset the classifier. + The language may be a string of the form [~]%lt;lang>[+[~]<lang>]* indicating + that multiple languages are to be loaded. Eg hin+eng will load Hindi and + English. Languages may specify internally that they want to be loaded + with one or more other languages, so the ~ sign is available to override + that. Eg if hin were set to load eng by default, then hin+~eng would force + loading only hin. The number of loaded languages is limited only by + memory, with the caveat that loading additional languages will impact + both speed and accuracy, as there is more work to do to decide on the + applicable language, and there is more chance of hallucinating incorrect + words. + + OCR engine mode + + + + Create an tesseract OCR engine. + + + The datapath must be the name of the parent directory of tessdata and + must end in / . Any name after the last / will be stripped. + + + The language is (usually) an ISO 639-3 string or NULL will default to eng. + It is entirely safe (and eventually will be efficient too) to call + Init multiple times on the same instance to change language, or just + to reset the classifier. + The language may be a string of the form [~]%lt;lang>[+[~]<lang>]* indicating + that multiple languages are to be loaded. Eg hin+eng will load Hindi and + English. Languages may specify internally that they want to be loaded + with one or more other languages, so the ~ sign is available to override + that. Eg if hin were set to load eng by default, then hin+~eng would force + loading only hin. The number of loaded languages is limited only by + memory, with the caveat that loading additional languages will impact + both speed and accuracy, as there is more work to do to decide on the + applicable language, and there is more chance of hallucinating incorrect + words. + + OCR engine mode + This can be used to specify a white list for OCR. e.g. specify "1234567890" to recognize digits only. Note that the white list currently seems to only work with OcrEngineMode.OEM_TESSERACT_ONLY + + + + Initialize the OCR engine using the specific dataPath and language name. + + + The datapath must be the name of the parent directory of tessdata and + must end in / . Any name after the last / will be stripped. + + + The language is (usually) an ISO 639-3 string or NULL will default to eng. + It is entirely safe (and eventually will be efficient too) to call + Init multiple times on the same instance to change language, or just + to reset the classifier. + The language may be a string of the form [~]%lt;lang>[+[~]<lang>]* indicating + that multiple languages are to be loaded. Eg hin+eng will load Hindi and + English. Languages may specify internally that they want to be loaded + with one or more other languages, so the ~ sign is available to override + that. Eg if hin were set to load eng by default, then hin+~eng would force + loading only hin. The number of loaded languages is limited only by + memory, with the caveat that loading additional languages will impact + both speed and accuracy, as there is more work to do to decide on the + applicable language, and there is more chance of hallucinating incorrect + words. + + OCR engine mode + + + + Release the unmanaged resource associated with this class + + + + The image where detection took place + + + + Set the variable to the specific value. + + The name of the tesseract variable. e.g. use "tessedit_char_blacklist" to black list characters and ""tessedit_char_whitelist" to white list characters + The value to be set + + + + Get all the text in the image + + All the text in the image + + + + Detect all the characters in the image. + + All the characters in the image + + + + Get the tesseract version + + + + + Gets or sets the page seg mode. + + + The page seg mode. + + + + + This represent a character that is detected by the OCR engine + + + + + The text + + + + + The cost. The lower it is, the more confident is the result + + + + + The region where the character is detected. + + + + + When Tesseract/Cube is initialized we can choose to instantiate/load/run + only the Tesseract part, only the Cube part or both along with the combiner. + The preference of which engine to use is stored in tessedit_ocr_engine_mode. + + + + + Run Tesseract only - fastest + + + + + Run Cube only - better accuracy, but slower + + + + + Run both and combine results - best accuracy + + + + + Specify this mode to indicate that any of the above modes + should be automatically inferred from the variables in the + language-specific config, or if not specified in any of + the above should be set to the default OEM_TESSERACT_ONLY. + + + + + Tesseract page segmentation mode + + + + + PageOrientation and script detection only. + + + + + Automatic page segmentation with orientation and script detection. (OSD) + + + + + Automatic page segmentation, but no OSD, or OCR. + + + + + Fully automatic page segmentation, but no OSD. + + + + + Assume a single column of text of variable sizes. + + + + + Assume a single uniform block of vertically aligned text. + + + + + Assume a single uniform block of text. (Default.) + + + + + Treat the image as a single text line. + + + + + Treat the image as a single word. + + + + + Treat the image as a single word in a circle. + + + + + Treat the image as a single character. + + + + + Find as much text as possible in no particular order. + + + + + Sparse text with orientation and script det. + + + + + Treat the image as a single text line, bypassing hacks that are Tesseract-specific. + + + + + Number of enum entries. + + + + + This structure is primary used for PInvoke + + + + + The length + + + + + The cost + + + + + The region + + + + + Wrapped class of the C++ standard vector of TesseractResult. + + + + + Constructor used to deserialize runtime serialized object + + The serialization info + The streaming context + + + + A function used for runtime serialization of the object + + Serialization info + Streaming context + + + + Create an empty standard vector of TesseractResult + + + + + Create an standard vector of TesseractResult of the specific size + + The size of the vector + + + + Create an standard vector of TesseractResult with the initial values + + The initial values + + + + Push an array of value into the standard vector + + The value to be pushed to the vector + + + + Convert the standard vector to an array of TesseractResult + + An array of TesseractResult + + + + Clear the vector + + + + + Release the standard vector + + + + + Get the pointer to cv::_InputArray + + + + + Get the pointer to cv::_OutputArray + + + + + Get the pointer to cv::_InputOutputArray + + + + + Get the size of the vector + + + + + The pointer to the first element on the vector. In case of an empty vector, IntPtr.Zero will be returned. + + + + + Get the item in the specific index + + The index + The item in the specific index + + + + Gaussian Mixture-based Background/Foreground Segmentation Algorithm. + + + + + Create a Gaussian Mixture-based Background/Foreground Segmentation model + + + + + Updates the background model + + Next video frame. + The learning rate, use -1.0f for default value. + Use a Stream to call the function asynchronously (non-blocking) or null to call the function synchronously (blocking). + The foregroundMask + + + + Release all the unmanaged resource associated with this object + + + + + This class wraps the functional calls to the opencv_gpu module + + + + + Get the compute capability of the device + + The device + The major version of the compute capability + The minor version of the compute capability + + + + Get the number of multiprocessors on device + + The device + The number of multiprocessors on device + + + + Get the device name + + + + + Get the opencl platform summary as a string + + An opencl platfor summary + + + + Get the number of Cuda enabled devices + + The number of Cuda enabled devices + + + + Set the current Gpu Device + + The id of the device to be setted as current + + + + Get the current Cuda device id + + The current Cuda device id + + + + Create a GpuMat from the specific region of . The data is shared between the two GpuMat. + + The gpuMat to extract regions from. + The column range. Use MCvSlice.WholeSeq for all columns. + The row range. Use MCvSlice.WholeSeq for all rows. + Pointer to the GpuMat + + + + Resize the GpuMat + + The input GpuMat + The resulting GpuMat + The interpolation type + Use a Stream to call the function asynchronously (non-blocking) or IntPtr.Zero to call the function synchronously (blocking). + + + + gpuMatReshape the src GpuMat + + The source GpuMat + The resulting GpuMat, as input it should be an empty GpuMat. + The new number of channels + The new number of rows + + + + Converts image from one color space to another + + The source GpuMat + The destination GpuMat + The color conversion code + Use a Stream to call the function asynchronously (non-blocking) or null to call the function synchronously (blocking). + + + + Swap channels. + + The image where the channels will be swapped + + Integer array describing how channel values are permutated. The n-th entry + of the array contains the number of the channel that is stored in the n-th channel of + the output image. E.g. Given an RGBA image, aDstOrder = [3,2,1,0] converts this to ABGR + channel order. + + Use a Stream to call the function asynchronously (non-blocking) or null to call the function synchronously (blocking). + + + + Returns header, corresponding to a specified rectangle of the input GpuMat. In other words, it allows the user to treat a rectangular part of input array as a stand-alone array. + + Input GpuMat + Zero-based coordinates of the rectangle of interest. + Pointer to the resultant sub-array header. + + + + Shifts a matrix to the left (c = a << scalar) + + The matrix to be shifted. + The scalar to shift by. + The result of the shift + Use a Stream to call the function asynchronously (non-blocking) or IntPtr.Zero to call the function synchronously (blocking). + + + + Shifts a matrix to the right (c = a >> scalar) + + The matrix to be shifted. + The scalar to shift by. + The result of the shift + Use a Stream to call the function asynchronously (non-blocking) or IntPtr.Zero to call the function synchronously (blocking). + + + + Adds one matrix to another (c = a + b). + + The first matrix to be added. + The second matrix to be added. + The sum of the two matrix + The optional mask that is used to select a subarray. Use null if not needed + Use a Stream to call the function asynchronously (non-blocking) or null to call the function synchronously (blocking). + + + + Subtracts one matrix from another (c = a - b). + + The matrix where subtraction take place + The matrix to be substracted + The result of a - b + The optional mask that is used to select a subarray. Use null if not needed + Use a Stream to call the function asynchronously (non-blocking) or null to call the function synchronously (blocking). + + + + Computes element-wise product of the two GpuMat: c = scale * a * b. + + The first GpuMat to be element-wise multiplied. + The second GpuMat to be element-wise multiplied. + The element-wise multiplication of the two GpuMat + The scale + Use a Stream to call the function asynchronously (non-blocking) or null to call the function synchronously (blocking). + + + + Computes element-wise quotient of the two GpuMat (c = scale * a / b). + + The first GpuMat + The second GpuMat + The element-wise quotient of the two GpuMat + The scale + Use a Stream to call the function asynchronously (non-blocking) or null to call the function synchronously (blocking). + + + + Computes the weighted sum of two arrays (dst = alpha*src1 + beta*src2 + gamma) + + The first source GpuMat + The weight for + The second source GpuMat + The weight for + The constant to be added + The result + Use a Stream to call the function asynchronously (non-blocking) or null to call the function synchronously (blocking). + + + + Computes element-wise absolute difference of two GpuMats (c = abs(a - b)). + + The first GpuMat + The second GpuMat + The result of the element-wise absolute difference. + Use a Stream to call the function asynchronously (non-blocking) or null to call the function synchronously (blocking). + + + + Computes absolute value of each pixel in an image + + The source GpuMat, support depth of Int16 and float. + The resulting GpuMat + Use a Stream to call the function asynchronously (non-blocking) or null to call the function synchronously (blocking). + + + + Computes square of each pixel in an image + + The source GpuMat, support depth of byte, UInt16, Int16 and float. + The resulting GpuMat + Use a Stream to call the function asynchronously (non-blocking) or null to call the function synchronously (blocking). + + + + Computes square root of each pixel in an image + + The source GpuMat, support depth of byte, UInt16, Int16 and float. + The resulting GpuMat + Use a Stream to call the function asynchronously (non-blocking) or null to call the function synchronously (blocking). + + + + Compares elements of two GpuMats (c = a <cmpop> b). + Supports CV_8UC4, CV_32FC1 types + + The first GpuMat + The second GpuMat + The result of the comparison. + The type of comparison + Use a Stream to call the function asynchronously (non-blocking) or null to call the function synchronously (blocking). + + + + Resizes the image. + + The source image. Has to be GpuMat<Byte>. If stream is used, the GpuMat has to be either single channel or 4 channels. + The destination image. + The interpolation type. Supports INTER_NEAREST, INTER_LINEAR. + Use a Stream to call the function asynchronously (non-blocking) or null to call the function synchronously (blocking). + + + + Copies each plane of a multi-channel GpuMat to a dedicated GpuMat + + The multi-channel gpuMat + Pointer to an array of single channel GpuMat pointers + Use a Stream to call the function asynchronously (non-blocking) or IntPtr.Zero to call the function synchronously (blocking). + + + + Makes multi-channel GpuMat out of several single-channel GpuMats + + Pointer to an array of single channel GpuMat pointers + The multi-channel gpuMat + Use a Stream to call the function asynchronously (non-blocking) or IntPtr.Zero to call the function synchronously (blocking). + + + + Computes exponent of each matrix element (b = exp(a)) + + The source GpuMat. Supports Byte, UInt16, Int16 and float type. + The resulting GpuMat + Use a Stream to call the function asynchronously (non-blocking) or null to call the function synchronously (blocking). + + + + Computes power of each matrix element: + (dst(i,j) = pow( src(i,j) , power), if src.type() is integer; + (dst(i,j) = pow(fabs(src(i,j)), power), otherwise. + supports all, except depth == CV_64F + + The source GpuMat + The power + The resulting GpuMat + Use a Stream to call the function asynchronously (non-blocking) or null to call the function synchronously (blocking). + + + + Computes natural logarithm of absolute value of each matrix element: b = log(abs(a)) + + The source GpuMat. Supports Byte, UInt16, Int16 and float type. + The resulting GpuMat + Use a Stream to call the function asynchronously (non-blocking) or null to call the function synchronously (blocking). + + + + Computes magnitude of each (x(i), y(i)) vector + + The source GpuMat. Supports only floating-point type + The source GpuMat. Supports only floating-point type + The destination GpuMat. Supports only floating-point type + Use a Stream to call the function asynchronously (non-blocking) or null to call the function synchronously (blocking). + + + + Computes squared magnitude of each (x(i), y(i)) vector + + The source GpuMat. Supports only floating-point type + The source GpuMat. Supports only floating-point type + The destination GpuMat. Supports only floating-point type + Use a Stream to call the function asynchronously (non-blocking) or null to call the function synchronously (blocking). + + + + Computes angle (angle(i)) of each (x(i), y(i)) vector + + The source GpuMat. Supports only floating-point type + The source GpuMat. Supports only floating-point type + The destination GpuMat. Supports only floating-point type + If true, the output angle is in degrees, otherwise in radian + Use a Stream to call the function asynchronously (non-blocking) or null to call the function synchronously (blocking). + + + + Converts Cartesian coordinates to polar + + The source GpuMat. Supports only floating-point type + The source GpuMat. Supports only floating-point type + The destination GpuMat. Supports only floating-point type + The destination GpuMat. Supports only floating-point type + If true, the output angle is in degrees, otherwise in radian + Use a Stream to call the function asynchronously (non-blocking) or null to call the function synchronously (blocking). + + + + Converts polar coordinates to Cartesian + + The source GpuMat. Supports only floating-point type + The source GpuMat. Supports only floating-point type + The destination GpuMat. Supports only floating-point type + The destination GpuMat. Supports only floating-point type + If true, the input angle is in degrees, otherwise in radian + Use a Stream to call the function asynchronously (non-blocking) or null to call the function synchronously (blocking). + + + + Finds minimum and maximum element values and their positions. The extremums are searched over the whole GpuMat or, if mask is not IntPtr.Zero, in the specified GpuMat region. + + The source GpuMat, single-channel + Pointer to returned minimum value + Pointer to returned maximum value + Pointer to returned minimum location + Pointer to returned maximum location + The optional mask that is used to select a subarray. Use null if not needed + + + + Performs downsampling step of Gaussian pyramid decomposition. + + The source CudaImage. + The destination CudaImage, should have 2x smaller width and height than the source. + Use a Stream to call the function asynchronously (non-blocking) or null to call the function synchronously (blocking). + + + + Performs up-sampling step of Gaussian pyramid decomposition. + + The source CudaImage. + The destination image, should have 2x smaller width and height than the source. + Use a Stream to call the function asynchronously (non-blocking) or null to call the function synchronously (blocking). + + + + Computes mean value and standard deviation + + The GpuMat. Supports only CV_8UC1 type + The mean value + The standard deviation + + + + Computes norm of the difference between two GpuMats + + The GpuMat. Supports only CV_8UC1 type + If IntPtr.Zero, norm operation is apply to only. Otherwise, this is the GpuMat of type CV_8UC1 + The norm type. Supports NORM_INF, NORM_L1, NORM_L2. + The norm of the if is IntPtr.Zero. Otherwise the norm of the difference between two GpuMats. + + + + Counts non-zero array elements + + The GpuMat + The number of non-zero GpuMat elements + + + + Reduces GpuMat to a vector by treating the GpuMat rows/columns as a set of 1D vectors and performing the specified operation on the vectors until a single row/column is obtained. + + The input GpuMat + The destination GpuMat. Must be preallocated 1 x n matrix and have the same number of channels as the input GpuMat + The dimension index along which the matrix is reduce. + The reduction operation type + Use a Stream to call the function asynchronously (non-blocking) or null to call the function synchronously (blocking). + + + + Flips the GpuMat in one of different 3 ways (row and column indices are 0-based): + dst(i,j)=src(rows(src)-i-1,j) if flip_mode = 0 + dst(i,j)=src(i,cols(src1)-j-1) if flip_mode > 0 + dst(i,j)=src(rows(src)-i-1,cols(src)-j-1) if flip_mode < 0 + + Source GpuMat. + Destination GpuMat. + + Specifies how to flip the GpuMat. + flip_mode = 0 means flipping around x-axis, + flip_mode > 0 (e.g. 1) means flipping around y-axis and + flip_mode < 0 (e.g. -1) means flipping around both axises. + + Use a Stream to call the function asynchronously (non-blocking) or IntPtr.Zero to call the function synchronously (blocking). + + + + Flips the GpuMat<Byte> in one of different 3 ways (row and column indices are 0-based). + + The source GpuMat. supports 1, 3 and 4 channels GpuMat with Byte, UInt16, int or float depth + Destination GpuMat. The same source and type as + Specifies how to flip the GpuMat. + Use a Stream to call the function asynchronously (non-blocking) or null to call the function synchronously (blocking). + + + + Calculates per-element bit-wise logical conjunction of two GpuMats: + dst(I)=src1(I)^src2(I) if mask(I)!=0 + In the case of floating-point GpuMats their bit representations are used for the operation. All the GpuMats must have the same type, except the mask, and the same size + + The first source GpuMat + The second source GpuMat + The destination GpuMat + Mask, 8-bit single channel GpuMat; specifies elements of destination GpuMat to be changed. Use IntPtr.Zero if not needed. + Use a Stream to call the function asynchronously (non-blocking) or null to call the function synchronously (blocking). + + + + Calculates per-element bit-wise logical or of two GpuMats: + dst(I)=src1(I) | src2(I) if mask(I)!=0 + In the case of floating-point GpuMats their bit representations are used for the operation. All the GpuMats must have the same type, except the mask, and the same size + + The first source GpuMat + The second source GpuMat + The destination GpuMat + Mask, 8-bit single channel GpuMat; specifies elements of destination GpuMat to be changed. Use IntPtr.Zero if not needed. + Use a Stream to call the function asynchronously (non-blocking) or null to call the function synchronously (blocking). + + + + Calculates per-element bit-wise logical and of two GpuMats: + dst(I)=src1(I) & src2(I) if mask(I)!=0 + In the case of floating-point GpuMats their bit representations are used for the operation. All the GpuMats must have the same type, except the mask, and the same size + + The first source GpuMat + The second source GpuMat + The destination GpuMat + Mask, 8-bit single channel GpuMat; specifies elements of destination GpuMat to be changed. Use IntPtr.Zero if not needed. + Use a Stream to call the function asynchronously (non-blocking) or null to call the function synchronously (blocking). + + + + Calculates per-element bit-wise logical not + dst(I)=~src(I) if mask(I)!=0 + In the case of floating-point GpuMats their bit representations are used for the operation. All the GpuMats must have the same type, except the mask, and the same size + + The source GpuMat + The destination GpuMat + Mask, 8-bit single channel GpuMat; specifies elements of destination GpuMat to be changed. Use IntPtr.Zero if not needed. + Use a Stream to call the function asynchronously (non-blocking) or null to call the function synchronously (blocking). + + + + Computes per-element minimum of two GpuMats (dst = min(src1, src2)) + + The first GpuMat + The second GpuMat + The result GpuMat + Use a Stream to call the function asynchronously (non-blocking) or null to call the function synchronously (blocking). + + + + Computes per-element maximum of two GpuMats (dst = max(src1, src2)) + + The first GpuMat + The second GpuMat + The result GpuMat + Use a Stream to call the function asynchronously (non-blocking) or null to call the function synchronously (blocking). + + + + Applies fixed-level thresholding to single-channel array. The function is typically used to get bi-level (binary) image out of grayscale image or for removing a noise, i.e. filtering out pixels with too small or too large values. There are several types of thresholding the function supports that are determined by thresholdType + + Source array (single-channel, 8-bit of 32-bit floating point). + Destination array; must be either the same type as src or 8-bit. + Threshold value + Maximum value to use with CV_THRESH_BINARY and CV_THRESH_BINARY_INV thresholding types + Thresholding type + Use a Stream to call the function asynchronously (non-blocking) or null to call the function synchronously (blocking). + + + + Performs generalized matrix multiplication: + dst = alpha*op(src1)*op(src2) + beta*op(src3), where op(X) is X or XT + + The first source array. + The second source array. + The scalar + The third source array (shift). Can be IntPtr.Zero, if there is no shift. + The scalar + The destination array. + The gemm operation type + Use a Stream to call the function asynchronously (non-blocking) or null to call the function synchronously (blocking). + + + + Warps the image using affine transformation + + The source GpuMat + The destination GpuMat + The 2x3 transformation matrix (pointer to CvArr) + Supports NN, LINEAR, CUBIC + The border mode, use BORDER_TYPE.CONSTANT for default. + The border value, use new MCvScalar() for default. + Use a Stream to call the function asynchronously (non-blocking) or null to call the function synchronously (blocking). + + + + Warps the image using perspective transformation + + The source GpuMat + The destination GpuMat + The 2x3 transformation matrix (pointer to CvArr) + Supports NN, LINEAR, CUBIC + The border mode, use BORDER_TYPE.CONSTANT for default. + The border value, use new MCvScalar() for default. + Use a Stream to call the function asynchronously (non-blocking) or null to call the function synchronously (blocking). + + + + DST[x,y] = SRC[xmap[x,y],ymap[x,y]] with bilinear interpolation. + + The source GpuMat. Supports CV_8UC1, CV_8UC3 source types. + The dstination GpuMat. Supports CV_8UC1, CV_8UC3 source types. + The xmap. Supports CV_32FC1 map type. + The ymap. Supports CV_32FC1 map type. + Interpolation type. + Border mode. Use BORDER_CONSTANT for default. + The value of the border. + Use a Stream to call the function asynchronously (non-blocking) or null to call the function synchronously (blocking). + + + + Performs mean-shift filtering for each point of the source image. It maps each point of the source + image into another point, and as the result we have new color and new position of each point. + + Source CudaImage. Only CV 8UC4 images are supported for now. + Destination CudaImage, containing color of mapped points. Will have the same size and type as src. + Spatial window radius. + Color window radius. + Termination criteria. + Use a Stream to call the function asynchronously (non-blocking) or null to call the function synchronously (blocking). + + + + Performs mean-shift procedure and stores information about processed points (i.e. their colors + and positions) into two images. + + Source CudaImage. Only CV 8UC4 images are supported for now. + Destination CudaImage, containing color of mapped points. Will have the same size and type as src. + Destination CudaImage, containing position of mapped points. Will have the same size as src and CV 16SC2 type. + Spatial window radius. + Color window radius. + Termination criteria. + Use a Stream to call the function asynchronously (non-blocking) or null to call the function synchronously (blocking). + + + + Performs mean-shift segmentation of the source image and eleminates small segments. + + Source CudaImage. Only CV 8UC4 images are supported for now. + Segmented Image. Will have the same size and type as src. Note that this is an Image type and not CudaImage type + Spatial window radius. + Color window radius. + Minimum segment size. Smaller segements will be merged. + Termination criteria. + + + + Rotates an image around the origin (0,0) and then shifts it. + + Source image. Supports 1, 3 or 4 channels images with Byte, UInt16 or float depth + Destination image with the same type as src. Must be pre-allocated + Angle of rotation in degrees + Shift along the horizontal axis + Shift along the verticle axis + Interpolation method. Only INTER_NEAREST, INTER_LINEAR, and INTER_CUBIC are supported. + Use a Stream to call the function asynchronously (non-blocking) or null to call the function synchronously (blocking). + + + + Copies a 2D array to a larger destination array and pads borders with the given constant. + + Source image. + Destination image with the same type as src. The size is Size(src.cols+left+right, src.rows+top+bottom). + Number of pixels in each direction from the source image rectangle to extrapolate. + Number of pixels in each direction from the source image rectangle to extrapolate. + Number of pixels in each direction from the source image rectangle to extrapolate. + Number of pixels in each direction from the source image rectangle to extrapolate. + Border Type + Border value. + Use a Stream to call the function asynchronously (non-blocking) or null to call the function synchronously (blocking). + + + + Computes the integral image and integral for the squared image + + The source GpuMat, supports only CV_8UC1 source type + The sum GpuMat, supports only CV_32S source type, but will contain unsigned int values + Use a Stream to call the function asynchronously (non-blocking) or null to call the function synchronously (blocking). + + + + Computes squared integral image + + The source GpuMat, supports only CV_8UC1 source type + The sqsum GpuMat, supports only CV32F source type. + Use a Stream to call the function asynchronously (non-blocking) or null to call the function synchronously (blocking). + + + + Performs a forward or inverse discrete Fourier transform (1D or 2D) of floating point matrix. + Param dft_size is the size of DFT transform. + + If the source matrix is not continous, then additional copy will be done, + so to avoid copying ensure the source matrix is continous one. If you want to use + preallocated output ensure it is continuous too, otherwise it will be reallocated. + + Being implemented via CUFFT real-to-complex transform result contains only non-redundant values + in CUFFT's format. Result as full complex matrix for such kind of transform cannot be retrieved. + + For complex-to-real transform it is assumed that the source matrix is packed in CUFFT's format. + + The source GpuMat + The resulting GpuMat of the DST, must be pre-allocated and continious. If single channel, the result is real. If double channel, the result is complex + DFT flags + Use a Stream to call the function asynchronously (non-blocking) or null to call the function synchronously (blocking). + + + + Calculates histogram with evenly distributed bins for single channel source. + + The source GpuMat. Supports CV_8UC1, CV_16UC1 and CV_16SC1 types. + Histogram with evenly distributed bins. A GpuMat<int> type. + The size of histogram (number of levels) + The lower level + The upper level + Use a Stream to call the function asynchronously (non-blocking) or null to call the function synchronously (blocking). + Histogram with evenly distributed bins + + + + Performs linear blending of two images. + + First image. Supports only CV_8U and CV_32F depth. + Second image. Must have the same size and the same type as img1 . + Weights for first image. Must have tha same size as img1. Supports only CV_32F type. + Weights for second image. Must have tha same size as img2. Supports only CV_32F type. + Destination image. + Use a Stream to call the function asynchronously (non-blocking) or null to call the function synchronously (blocking). + + + + Applies bilateral filter to the image. + + The source image + The destination image; should have the same size and the same type as src + The diameter of each pixel neighborhood, that is used during filtering. + Filter sigma in the color space. Larger value of the parameter means that farther colors within the pixel neighborhood (see sigmaSpace) will be mixed together, resulting in larger areas of semi-equal color + Filter sigma in the coordinate space. Larger value of the parameter means that farther pixels will influence each other (as long as their colors are close enough; see sigmaColor). Then d>0, it specifies the neighborhood size regardless of sigmaSpace, otherwise d is proportional to sigmaSpace. + Pixel extrapolation method, use DEFAULT for default + Use a Stream to call the function asynchronously (non-blocking) or null to call the function synchronously (blocking). + + + + Routines for correcting image color gamma + + Source image (3- or 4-channel 8 bit). + Destination image. + True for forward gamma correction or false for inverse gamma correction. + Stream for the asynchronous version. + + + + Release the GpuMat + + Pointer to the GpuMat + + + + Create an empty GpuMat + + Pointer to an empty GpuMat + + + + Convert a CvArr to a GpuMat + + Pointer to a CvArr + Pointer to the GpuMat + + + + Get the GpuMat size: + width == number of columns, height == number of rows + + The GpuMat + The size of the matrix + + + + Get the GpuMat type + + The GpuMat + The GpuMat type + + + + Create a GpuMat of the specified size + + The number of rows (height) + The number of columns (width) + The type of GpuMat + Pointer to the GpuMat + + + + Create a GpuMat of the specified size. The allocated data is continuous within this GpuMat. + + The number of rows (height) + The number of columns (width) + The type of GpuMat + Pointer to the GpuMat + + + + Pefroms blocking upload data to GpuMat. + + The destination gpuMat + The CvArray to be uploaded to GPU + + + + Downloads data from device to host memory. Blocking calls. + + The source GpuMat + The CvArray where data will be downloaded to + + + + Copy the source GpuMat to destination GpuMat, using an optional mask. + + The GpuMat to be copied from + The GpuMat to be copied to + The optional mask, use IntPtr.Zero if not needed. + Use a Stream to call the function asynchronously (non-blocking) or IntPtr.Zero to call the function synchronously (blocking). + + + + This function has several different purposes and thus has several synonyms. It copies one GpuMat to another with optional scaling, which is performed first, and/or optional type conversion, performed after: + dst(I)=src(I)*scale + (shift,shift,...) + All the channels of multi-channel GpuMats are processed independently. + The type conversion is done with rounding and saturation, that is if a result of scaling + conversion can not be represented exactly by a value of destination GpuMat element type, it is set to the nearest representable value on the real axis. + In case of scale=1, shift=0 no prescaling is done. This is a specially optimized case and it has the appropriate convertTo synonym. + + Source GpuMat + Destination GpuMat + Scale factor + Value added to the scaled source GpuMat elements + Use a Stream to call the function asynchronously (non-blocking) or IntPtr.Zero to call the function synchronously (blocking). + + + + Changes shape of GpuMat without copying data. + + The GpuMat to be reshaped. + The result GpuMat. + New number of channels. newCn = 0 means that the number of channels remains unchanged. + New number of rows. newRows = 0 means that the number of rows remains unchanged unless it needs to be changed according to newCn value. + A GpuMat of different shape + + + + This function is similiar to cvCalcBackProjectPatch. It slids through image, compares overlapped patches of size wxh with templ using the specified method and stores the comparison results to result + + Image where the search is running. It should be 8-bit or 32-bit floating-point + Searched template; must be not greater than the source image and the same data type as the image + A map of comparison results; single-channel 32-bit floating-point. If image is WxH and templ is wxh then result must be W-w+1xH-h+1. + Pointer to cv::gpu::TemplateMatching + Use a Stream to call the function asynchronously (non-blocking) or IntPtr.Zero to call the function synchronously (blocking). + + + + Return true if Cuda is found on the system + + + + + Gaussian Mixture-based Background/Foreground Segmentation Algorithm. + + + + + Create a Gaussian Mixture-based Background/Foreground Segmentation model + + + + + Updates the background model + + Next video frame. + The learning rate, use -1.0f for default value. + Use a Stream to call the function asynchronously (non-blocking) or null to call the function synchronously (blocking). + + + + Release all the unmanaged resource associated with this object + + + + + Works only under Windows, Supports olny H264 video codec and AVI files. + + + + + Surface format + + + + + Cascade Classifier for object detection using Cuda + + + + + Create a Cuda cascade classifier using the specific file + + The file to create the classifier from + + + + Finds rectangular regions in the given image that are likely to contain objects the cascade has been trained for and returns those regions as a sequence of rectangles. + + The image where search will take place + An array of regions for the detected objects + + + + Release all unmanaged resources associated with this object + + + + + Contrast Limited Adaptive Histogram Equalization + + + + + Create the Contrast Limited Adaptive Histogram Equalization + + Threshold for contrast limiting. Use 40.0 for default + Size of grid for histogram equalization. Input image will be divided into equally sized rectangular tiles. This parameter defines the number of tiles in row and column. Use (8, 8) for default + + + + Equalizes the histogram of a grayscale image using Contrast Limited Adaptive Histogram Equalization. + + Source image + Destination image + Use a Stream to call the function asynchronously (non-blocking) or null to call the function synchronously (blocking). + + + + Release all the unmanaged memory associated with this object + + + + + The Cuda device information + + + + + Query the information of the gpu device that is currently in use. + + + + + Query the information of the cuda device with the specific id. + + The device id + + + + Indicates if the decive has the specific feature + + + + + Release the unmanaged resource related to the GpuDevice + + + + + The id of the device + + + + + The name of the device + + + + + The compute capability + + + + + The number of single multi processors + + + + + Get the amount of free memory at the moment + + + + + Get the amount of total memory + + + + + Checks whether the Cuda module can be run on the given device + + + + + GPU feature + + + + + Cuda compute 1.0 + + + + + Cuda compute 1.1 + + + + + Cuda compute 1.2 + + + + + Cuda compute 1.3 + + + + + Cuda compute 2.0 + + + + + Cuda compute 2.1 + + + + + Global Atomic + + + + + Shared Atomic + + + + + Native double + + + + + A HOG descriptor + + + + + Create a new HOGDescriptor using the specific parameters + + Block size in cells. Use (16, 16) for default. + Cell size. Use (8, 8) for default. + Block stride. Must be a multiple of cell size. Use (8,8) for default. + Number of bins. + Detection window size. Must be aligned to block size and block stride. Must match the size of the training image. Use (64, 128) for default. + + + + Returns coefficients of the classifier trained for people detection (for default window size). + + The default people detector + + + + Set the SVM detector + + The SVM detector + + + + Release the unmanaged memory associated with this HOGDescriptor + + + + + An CudaImage is very similar to the Emgu.CV.Image except that it is being used for GPU processing + + Color type of this image (either Gray, Bgr, Bgra, Hsv, Hls, Lab, Luv, Xyz, Ycc, Rgb or Rbga) + Depth of this image (either Byte, SByte, Single, double, UInt16, Int16 or Int32) + + + + Similar to CvArray but use GPU for processing + + The type of element in the matrix + + + + A GpuMat, use the generic version if possible. The non generic version is good for use as buffer in stream calls. + + + + + Create an empty GpuMat + + + + + Create a GpuMat of the specified size + + The number of rows (height) + The number of columns (width) + The number of channels + The type of depth + Indicates if the data should be continuous + + + + Create a GpuMat from the specific pointer + + Pointer to the unmanaged gpuMat + + + + Create a GpuMat from an CvArray of the same depth type + + The CvArry to be converted to GpuMat + + + + Create a GpuMat from the specific region of . The data is shared between the two GpuMat + + The matrix where the region is extracted from + The column range. Use MCvSlice.WholeSeq for all columns. + The row range. Use MCvSlice.WholeSeq for all rows. + + + + Release the unmanaged memory associated with this GpuMat + + + + + Pointer to the InputArray + + + + + Pointer to the OutputArray + + + + + Pointer to the InputOutputArray + + + + + Performs blocking upload data to GpuMat + + The CvArray to be uploaded to GpuMat + + + + Downloads data from device to host memory. Blocking calls + + The destination CvArray where the GpuMat data will be downloaded to. + + + + Copies scalar value to every selected element of the destination GpuMat: + arr(I)=value if mask(I)!=0 + + Fill value + Operation mask, 8-bit single channel GpuMat; specifies elements of destination GpuMat to be changed. Can be IntPtr.Zero if not used + Use a Stream to call the function asynchronously (non-blocking) or IntPtr.Zero to call the function synchronously (blocking). + + + + Copy the source GpuMat to destination GpuMat, using an optional mask. + + The output array to be copied to + The optional mask, use IntPtr.Zero if not needed. + Use a Stream to call the function asynchronously (non-blocking) or IntPtr.Zero to call the function synchronously (blocking). + + + + This function has several different purposes and thus has several synonyms. It copies one GpuMat to another with optional scaling, which is performed first, and/or optional type conversion, performed after: + dst(I)=src(I)*scale + (shift,shift,...) + All the channels of multi-channel GpuMats are processed independently. + The type conversion is done with rounding and saturation, that is if a result of scaling + conversion can not be represented exactly by a value of destination GpuMat element type, it is set to the nearest representable value on the real axis. + In case of scale=1, shift=0 no prescaling is done. This is a specially optimized case and it has the appropriate convertTo synonym. + + Destination GpuMat + Scale factor + Value added to the scaled source GpuMat elements + Use a Stream to call the function asynchronously (non-blocking) or IntPtr.Zero to call the function synchronously (blocking). + + + + Changes shape of GpuMat without copying data. + + New number of channels. newCn = 0 means that the number of channels remains unchanged. + New number of rows. newRows = 0 means that the number of rows remains unchanged unless it needs to be changed according to newCn value. + A GpuMat of different shape + + + + Returns a GpuMat corresponding to the ith row of the GpuMat. The data is shared with the current GpuMat. + + The row to be extracted + The ith row of the GpuMat + The parent GpuMat should never be released before the returned GpuMat that represent the subregion + + + + Returns a GpuMat corresponding to the [ ) rows of the GpuMat. The data is shared with the current GpuMat. + + The inclusive stating row to be extracted + The exclusive ending row to be extracted + The [ ) rows of the GpuMat + The parent GpuMat should never be released before the returned GpuMat that represent the subregion + + + + Returns a GpuMat corresponding to the ith column of the GpuMat. The data is shared with the current GpuMat. + + The column to be extracted + The ith column of the GpuMat + The parent GpuMat should never be released before the returned GpuMat that represent the subregion + + + + Returns a GpuMat corresponding to the [ ) columns of the GpuMat. The data is shared with the current GpuMat. + + The inclusive stating column to be extracted + The exclusive ending column to be extracted + The [ ) columns of the GpuMat + The parent GpuMat should never be released before the returned GpuMat that represent the subregion + + + + Returns true if the two GpuMat equals + + The other GpuMat to be compares with + True if the two GpuMat equals + + + + Makes multi-channel array out of several single-channel arrays + + + An array of single channel GpuMat where each item + in the array represent a single channel of the GpuMat + + Use a Stream to call the function asynchronously (non-blocking) or null to call the function synchronously (blocking). + + + + Split current Image into an array of gray scale images where each element + in the array represent a single color channel of the original image + + + An array of single channel GpuMat where each item + in the array represent a single channel of the original GpuMat + + Use a Stream to call the function asynchronously (non-blocking) or null to call the function synchronously (blocking). + + + + Split current GpuMat into an array of single channel GpuMat where each element + in the array represent a single channel of the original GpuMat + + Use a Stream to call the function asynchronously (non-blocking) or null to call the function synchronously (blocking). + + An array of single channel GpuMat where each element + in the array represent a single channel of the original GpuMat + + + + + Returns the min / max location and values for the image + + The maximum locations for each channel + The maximum values for each channel + The minimum locations for each channel + The minimum values for each channel + + + + Get the GpuMat size: + width == number of columns, height == number of rows + + + + + Get the type of the GpuMat + + + + + True if the data is continues + + + + + Depth type + + + + + True if the matrix is empty + + + + + Number of channels + + + + + Create a GpuMat from the unmanaged pointer + + The unmanaged pointer to the GpuMat + + + + Create an empty GpuMat + + + + + Create a GpuMat from an CvArray of the same depth type + + The CvArry to be converted to GpuMat + + + + Create a GpuMat of the specified size + + The number of rows (height) + The number of columns (width) + The number of channels + Indicates if the data should be continuous + + + + Create a GpuMat of the specified size + + The size of the GpuMat + The number of channels + + + + Convert this GpuMat to a Matrix + + The matrix that contains the same values as this GpuMat + + + + Returns a GpuMat corresponding to a specified rectangle of the current GpuMat. The data is shared with the current matrix. In other words, it allows the user to treat a rectangular part of input array as a stand-alone array. + + Zero-based coordinates of the rectangle of interest. + A GpuMat that represent the region of the current matrix. + The parent GpuMat should never be released before the returned GpuMat the represent the subregion + + + + Create an empty CudaImage + + + + + Create the CudaImage from the unmanaged pointer. + + The unmanaged pointer to the GpuMat. It is the user's responsibility that the Color type and depth matches between the managed class and unmanaged pointer. + + + + Create a GPU image from a regular image + + The image to be converted to GPU image + + + + Create a CudaImage of the specific size + + The number of rows (height) + The number of columns (width) + Indicates if the data should be continuous + + + + Create a CudaImage of the specific size + + The number of rows (height) + The number of columns (width) + + + + Create a CudaImage of the specific size + + The size of the image + + + + Create a CudaImage from the specific region of . The data is shared between the two CudaImage + + The CudaImage where the region is extracted from + The column range. Use MCvSlice.WholeSeq for all columns. + The row range. Use MCvSlice.WholeSeq for all rows. + + + + Convert the current CudaImage to a regular Image. + + A regular image + + + Convert the current CudaImage to the specific color and depth + The type of color to be converted to + The type of pixel depth to be converted to + CudaImage of the specific color and depth + + + + Convert the source image to the current image, if the size are different, the current image will be a resized version of the srcImage. + + The color type of the source image + The color depth of the source image + The sourceImage + + + + Create a clone of this CudaImage + + Use a Stream to call the function asynchronously (non-blocking) or null to call the function synchronously (blocking). + A clone of this CudaImage + + + + Resize the CudaImage. The calling GpuMat be GpuMat%lt;Byte>. If stream is specified, it has to be either 1 or 4 channels. + + The new size + The interpolation type + Use a Stream to call the function asynchronously (non-blocking) or null to call the function synchronously (blocking). + A CudaImage of the new size + + + + Returns a CudaImage corresponding to a specified rectangle of the current CudaImage. The data is shared with the current matrix. In other words, it allows the user to treat a rectangular part of input array as a stand-alone array. + + Zero-based coordinates of the rectangle of interest. + A CudaImage that represent the region of the current CudaImage. + The parent CudaImage should never be released before the returned CudaImage that represent the subregion + + + + Returns a CudaImage corresponding to the ith row of the CudaImage. The data is shared with the current Image. + + The row to be extracted + The ith row of the CudaImage + The parent CudaImage should never be released before the returned CudaImage that represent the subregion + + + + Returns a CudaImage corresponding to the [ ) rows of the CudaImage. The data is shared with the current Image. + + The inclusive stating row to be extracted + The exclusive ending row to be extracted + The [ ) rows of the CudaImage + The parent CudaImage should never be released before the returned CudaImage that represent the subregion + + + + Returns a CudaImage corresponding to the ith column of the CudaImage. The data is shared with the current Image. + + The column to be extracted + The ith column of the CudaImage + The parent CudaImage should never be released before the returned CudaImage that represent the subregion + + + + Returns a CudaImage corresponding to the [ ) columns of the CudaImage. The data is shared with the current Image. + + The inclusive stating column to be extracted + The exclusive ending column to be extracted + The [ ) columns of the CudaImage + The parent CudaImage should never be released before the returned CudaImage that represent the subregion + + + + convert the current CudaImage to its equivalent Bitmap representation + + + + + Gpu look up table + + + + + Create the look up table + + It should be either 1 or 3 channel matrix of 1x256 + + + + Transform the image using the lookup table + + The image to be transformed + The transformation result + Use a Stream to call the function asynchronously (non-blocking) or null to call the function synchronously (blocking). + + + + Release all the unmanaged memory associated with this look up table + + + + + Descriptor matcher + + + + + Find the k-nearest match + + An n x m matrix of descriptors to be query for nearest neighbors. n is the number of descriptor and m is the size of the descriptor + Number of nearest neighbors to search for + Can be null if not needed. An n x 1 matrix. If 0, the query descriptor in the corresponding row will be ignored. + Matches. Each matches[i] is k or less matches for the same query descriptor. + + + + Add the model descriptors + + The model descriptors + + + + Release all the unmanaged memory associated with this matcher + + + + + A Brute force matcher using Cuda + + + + + Create a CudaBruteForceMatcher using the specific distance type + + The distance type + + + + A FAST detector using Cuda + + + + + The feature 2D base class + + + + + Get the pointer to the Feature2DAsync object + + The pointer to the Feature2DAsync object + + + + Create a fast detector with the specific parameters + + Threshold on difference between intensity of center pixel and pixels on circle around + this pixel. Use 10 for default. + Specifiy if non-maximum supression should be used. + + + + Release the unmanaged resource associate to the Detector + + + + + An ORB detector using Cuda + + + + + Create a ORBDetector using the specific values + + The number of desired features. + Coefficient by which we divide the dimensions from one scale pyramid level to the next. + The number of levels in the scale pyramid. + The level at which the image is given. If 1, that means we will also look at the image. times bigger + How far from the boundary the points should be. + How many random points are used to produce each cell of the descriptor (2, 3, 4 ...). + Type of the score to use. + Patch size. + + + + Release the unmanaged resource associate to the Detector + + + + + Detect keypoints in an image and compute the descriptors on the image from the keypoint locations. + + The image + The optional mask, can be null if not needed + The detected keypoints will be stored in this vector + The descriptors from the keypoints + If true, the method will skip the detection phase and will compute descriptors for the provided keypoints + + + + Detect the features in the image + + The result vector of keypoints + The image from which the features will be detected from + The optional mask. + + + + Compute the descriptors on the image from the given keypoint locations. + + The image to compute descriptors from + The keypoints where the descriptor computation is perfromed + The descriptors from the given keypoints + + + + BoxMax filter + + + + + Base Cuda filter class + + + + + Release all the unmanaged memory associated with this gpu filter + + + + + Apply the cuda filter + + The source CudaImage where the filter will be applied to + The destination CudaImage + Use a Stream to call the function asynchronously (non-blocking) or null to call the function synchronously (blocking). + + + + Create a BoxMax filter. + + Size of the kernel + The center of the kernel. User (-1, -1) for the default kernel center. + The border type. + The border value. + + + + BoxMin filter + + + + + Create a BoxMin filter. + + Size of the kernel + The center of the kernel. User (-1, -1) for the default kernel center. + The border type. + The border value. + + + + Gaussian filter + + + + + Create a Gaussian filter. + + The size of the kernel + This parameter may specify Gaussian sigma (standard deviation). If it is zero, it is calculated from the kernel size. + In case of non-square Gaussian kernel the parameter may be used to specify a different (from param3) sigma in the vertical direction. Use 0 for default + The row border type. + The column border type. + + + + Laplacian filter + + + + + Create a Laplacian filter. + + Either 1 or 3 + Optional scale. Use 1.0 for default + The border type. + The border value. + + + + Applies arbitrary linear filter to the image. In-place operation is supported. When the aperture is partially outside the image, the function interpolates outlier pixel values from the nearest pixels that is inside the image + + + + + Create a Gpu LinearFilter + + Convolution kernel, single-channel floating point matrix (e.g. Emgu.CV.Matrix). If you want to apply different kernels to different channels, split the gpu image into separate color planes and process them individually + The anchor of the kernel that indicates the relative position of a filtered point within the kernel. The anchor shoud lie within the kernel. The special default value (-1,-1) means that it is at the kernel center + Border type. Use REFLECT101 as default. + The border value + + + + Morphology filter + + + + + Create a Morphology filter. + + Type of morphological operation + 2D 8-bit structuring element for the morphological operation. + Anchor position within the structuring element. Negative values mean that the anchor is at the center. + Number of times erosion and dilation to be applied. + + + + Sobel filter + + + + + Create a Sobel filter. + + Order of the derivative x + Order of the derivative y + Size of the extended Sobel kernel + Optional scale, use 1 for default. + The row border type. + The column border type. + + + + Cascade Classifier for object detection using Cuda + + + + + Canny edge detector using Cuda. + + The first threshold, used for edge linking + The second threshold, used to find initial segments of strong edges + Aperture parameter for Sobel operator, use 3 for default + Use false for default + + + + Finds the edges on the input and marks them in the output image edges using the Canny algorithm. + + Input image + Image to store the edges found by the function + + + + Release all the unmanaged memory associate with this Canny edge detector. + + + + + Base CornernessCriteria class + + + + + Release all the unmanaged memory associated with this gpu filter + + + + + Apply the cuda filter + + The source CudaImage where the filter will be applied to + The destination CudaImage + Use a Stream to call the function asynchronously (non-blocking) or null to call the function synchronously (blocking). + + + + Cuda implementation of GoodFeaturesToTrackDetector + + + + + Create the Cuda implementation of GoodFeaturesToTrackDetector + + + + + Find the good features to track + + + + + Release all the unmanaged memory associated with this detector + + + + + Runs the Harris edge detector on image. Similarly to cvCornerMinEigenVal and cvCornerEigenValsAndVecs, for each pixel it calculates 2x2 gradient covariation matrix M over block_size x block_size neighborhood. Then, it stores + det(M) - k*trace(M)^2 + to the destination image. Corners in the image can be found as local maxima of the destination image. + + + + + Create a Cuda Harris Corner detector + + Neighborhood size + + Harris detector free parameter. + Boreder type, use REFLECT101 for default + + + + Base class for circles detector algorithm. + + + + + Create hough circles detector + + Inverse ratio of the accumulator resolution to the image resolution. For example, if dp=1 , the accumulator has the same resolution as the input image. If dp=2 , the accumulator has half as big width and height. + Minimum distance between the centers of the detected circles. If the parameter is too small, multiple neighbor circles may be falsely detected in addition to a true one. If it is too large, some circles may be missed. + The higher threshold of the two passed to Canny edge detector (the lower one is twice smaller). + The accumulator threshold for the circle centers at the detection stage. The smaller it is, the more false circles may be detected. + Minimum circle radius. + Maximum circle radius. + Maximum number of output circles. + + + + Finds circles in a grayscale image using the Hough transform. + + 8-bit, single-channel grayscale input image. + Output vector of found circles. Each vector is encoded as a 3-element floating-point vector. + + + + Release the unmanaged memory associated with this circle detector. + + + + + Base class for lines detector algorithm. + + + + + Create a hough lines detector + + Distance resolution of the accumulator in pixels. + Angle resolution of the accumulator in radians. + Accumulator threshold parameter. Only those lines are returned that get enough votes (> threshold). + Performs lines sort by votes. + Maximum number of output lines. + + + + Finds line segments in a binary image using the probabilistic Hough transform. + + 8-bit, single-channel binary source image + Output vector of lines.Output vector of lines. Each line is represented by a two-element vector. + The first element is the distance from the coordinate origin (top-left corner of the image). + The second element is the line rotation angle in radians. + + + + Release the unmanaged memory associated to this line detector. + + + + + Base class for line segments detector algorithm. + + + + + Create a hough segment detector + + Distance resolution of the accumulator in pixels. + Angle resolution of the accumulator in radians. + Minimum line length. Line segments shorter than that are rejected. + Maximum allowed gap between points on the same line to link them. + Maximum number of output lines. + + + + Finds line segments in a binary image using the probabilistic Hough transform. + + 8-bit, single-channel binary source image + Output vector of lines. Each line is represented by a 4-element vector (x1, y1, x2, y2) , where (x1, y1) and (x2, y2) are the ending points of each detected line segment. + + + + Release the unmanaged memory associated with this segment detector + + + + + Cuda template matching filter. + + + + + Create a Cuda template matching filter + + Specifies the way the template must be compared with image regions + The block size + + + + This function is similiar to cvCalcBackProjectPatch. It slids through image, compares overlapped patches of size wxh with templ using the specified method and stores the comparison results to result + + Image where the search is running. It should be 8-bit or 32-bit floating-point + Searched template; must be not greater than the source image and the same data type as the image + A map of comparison results; single-channel 32-bit floating-point. If image is WxH and templ is wxh then result must be W-w+1xH-h+1. + Use a Stream to call the function asynchronously (non-blocking) or null to call the function synchronously (blocking). + + + + Release the buffer + + + + + Background/Foreground Segmentation Algorithm. + + + + + Create a Background/Foreground Segmentation model + + + + + + + + + + Background reference image update parameter + Stat model update parameter. 0.002f ~ 1K frame(~45sec), 0.005 ~ 18sec (if 25fps and absolutely static BG) + start value for alpha parameter (to fast initiate statistic model) + + + + + + + Updates the background model + + Next video frame. + The learning rate, use -1.0f for default value. + + + + Release all the unmanaged resource associated with this object + + + + + Background/Foreground Segmentation Algorithm. + + + + + Create a Background/Foreground Segmentation model + + + + + Updates the background model + + Next video frame. + The learning rate, use -1.0f for default value. + Use a Stream to call the function asynchronously (non-blocking) or null to call the function synchronously (blocking). + + + + Release all the unmanaged resource associated with this object + + + + + Brox optical flow + + + + + Create the Brox optical flow solver + + Flow smoothness + Gradient constancy importance + Pyramid scale factor + Number of lagged non-linearity iterations (inner loop) + Number of warping iterations (number of pyramid levels) + Number of linear system solver iterations + + + + Release all the unmanaged memory associated with this optical flow solver. + + + + + PyrLK optical flow + + + + + Create the PyrLK optical flow solver + + Windows size. Use 21x21 for default + The maximum number of pyramid levels. + The number of iterations. + Weather or not use the initial flow in the input matrix. + + + + Release all the unmanaged memory associated with this optical flow solver. + + + + + Farneback optical flow + + + + + + + + + + + + + + + + + + Release all the unmanaged memory associated with this optical flow solver. + + + + + DualTvl1 optical flow + + + + + Initializes a new instance of the class. + + + + + Release all the unmanaged memory associated with this optical flow solver. + + + + + Sparse PyrLK optical flow + + + + + Create the PyrLK optical flow solver + + Windows size. Use 21x21 for default + The maximum number of pyramid levels. + The number of iterations. + Weather or not use the initial flow in the input matrix. + + + + Release all the unmanaged memory associated with this optical flow solver. + + + + + Disparity map refinement using joint bilateral filtering given a single color image. + Qingxiong Yang, Liang Wang†, Narendra Ahuja + http://vision.ai.uiuc.edu/~qyang6/ + + + + + Create a GpuDisparityBilateralFilter + + Number of disparities. Use 64 as default + Filter radius, use 3 as default + Number of iterations, use 1 as default + + + + Apply the filter to the disparity image + + The input disparity map + The image + The output disparity map, should have the same size as the input disparity map + Use a Stream to call the function asynchronously (non-blocking) or null to call the function synchronously (blocking). + + + + Release the unmanaged resources associated with the filter. + + + + + Use Block Matching algorithm to find stereo correspondence + + + + + Create a stereoBM + + The number of disparities. Must be multiple of 8. Use 64 for default + The SAD window size. Use 19 for default + + + + Computes disparity map for the input rectified stereo pair. + + The left single-channel, 8-bit image + The right image of the same size and the same type + The disparity map + Use a Stream to call the function asynchronously (non-blocking) or null to call the function synchronously (blocking). + + + + Release the stereo state and all the memory associate with it + + + + + A Constant-Space Belief Propagation Algorithm for Stereo Matching. + Qingxiong Yang, Liang Wang, Narendra Ahuja. + http://vision.ai.uiuc.edu/~qyang6/ + + + + + A Constant-Space Belief Propagation Algorithm for Stereo Matching + + The number of disparities. Use 128 as default + The number of BP iterations on each level. Use 8 as default. + The number of levels. Use 4 as default + The number of active disparity on the first level. Use 4 as default. + + + + Computes disparity map for the input rectified stereo pair. + + The left single-channel, 8-bit image + The right image of the same size and the same type + The disparity map + Use a Stream to call the function asynchronously (non-blocking) or null to call the function synchronously (blocking). + + + + Release the unmanaged memory + + + + + Encapculates Cuda Stream. Provides interface for async coping. + Passed to each function that supports async kernel execution. + Reference counting is enabled + + + + + Create a new Cuda Stream + + + + + Wait for the completion + + + + + Release the stream + + + + + Check if the stream is completed + + + + + Gives information about what GPU archs this OpenCV GPU module was compiled for + + + + + Check if the GPU module is build with the specific feature set. + + The feature set to be checked. + True if the GPU module is build with the specific feature set. + + + + Check if the GPU module is targeted for the specific device version + + The major version + The minor version + True if the GPU module is targeted for the specific device version. + + + + Check if the GPU module is targeted for the specific PTX version + + The major version + The minor version + True if the GPU module is targeted for the specific PTX version. + + + + Check if the GPU module is targeted for the specific BIN version + + The major version + The minor version + True if the GPU module is targeted for the specific BIN version. + + + + Check if the GPU module is targeted for equal or less PTX version + + The major version + The minor version + True if the GPU module is targeted for equal or less PTX version. + + + + Check if the GPU module is targeted for equal or greater device version + + The major version + The minor version + True if the GPU module is targeted for equal or greater device version. + + + + Check if the GPU module is targeted for equal or greater PTX version + + The major version + The minor version + True if the GPU module is targeted for equal or greater PTX version. + + + + Check if the GPU module is targeted for equal or greater BIN version + + The major version + The minor version + True if the GPU module is targeted for equal or greater BIN version. + + + + Wrapped class of the C++ standard vector of GpuMat. + + + + + Create an empty standard vector of GpuMat + + + + + Create an standard vector of GpuMat of the specific size + + The size of the vector + + + + Create an standard vector of GpuMat with the initial values + + The initial values + + + + Clear the vector + + + + + Push a value into the standard vector + + The value to be pushed to the vector + + + + Push multiple values into the standard vector + + The values to be pushed to the vector + + + + Release the standard vector + + + + + Get the pointer to cv::_InputArray + + + + + Get the pointer to cv::_OutputArray + + + + + Get the pointer to cv::_InputOutputArray + + + + + Get the size of the vector + + + + + Get the item in the specific index + + The index + The item in the specific index + + + + Background Subtractor module based on the algorithm given in: + Andrew B. Godbehere, Akihiro Matsukawa, Ken Goldberg, + “Visual Tracking of Human Visitors under Variable-Lighting Conditions for a Responsive Audio Art Installation”, + American Control Conference, Montreal, June 2012. + + + + + Create a background subtractor module based on GMG + + Number of frames used to initialize the background models. + Threshold value, above which it is marked foreground, else background. + + + + Release all the unmanaged memory associated with this background model. + + + + + Gaussian Mixture-based Background/Foreground Segmentation Algorithm. + The class implements the following algorithm: + "An improved adaptive background mixture model for real-time tracking with shadow detection" + P. KadewTraKuPong and R. Bowden, + Proc. 2nd European Workshp on Advanced Video-Based Surveillance Systems, 2001." + http://personal.ee.surrey.ac.uk/Personal/R.Bowden/publications/avbs01/avbs01.pdf + + + + + Create an "Improved adaptive Gaussian mixture model for background subtraction". + + The length of the history. + The maximum number of gaussian mixtures. + Background ratio + Noise strength (standard deviation of the brightness or each color channel). 0 means some automatic value. + + + + Release all the unmanaged memory associated with this background model. + + + + + Face Recognizer + + + + + Train the face recognizer with the specific images and labels + + The images used in the training. This can be a VectorOfMat + The labels of the images. This can be a VectorOfInt + + + + Train the face recognizer with the specific images and labels + + The images used in the training. + The labels of the images. + + + + Predict the label of the image + + The image where prediction will be based on + The prediction label + + + + Save the FaceRecognizer to a file + + The file name to be saved to + + + + Load the FaceRecognizer from the file + + The file where the FaceRecognizer will be loaded from + + + + Release the unmanaged memory associated with this FaceRecognizer + + + + + The prediction result + + + + + The label + + + + + The distance + + + + + Eigen face recognizer + + + + + Create an EigenFaceRecognizer + + The number of components + The distance threshold + + + + Fisher face recognizer + + + + + Create a FisherFaceRecognizer + + The number of components + The distance threshold + + + + LBPH face recognizer + + + + + Create a LBPH face recognizer + + Radius + Neighbors + Grid X + Grid Y + The distance threshold + + + + Updates a FaceRecognizer with given data and associated labels. + + The training images, that means the faces you want to learn. The data has to be given as a VectorOfMat. + The labels corresponding to the images + + + + Update the face recognizer with the specific images and labels + + The images used for updating the face recognizer + The labels of the images + + + + The ERStat structure represents a class-specific Extremal Region (ER). + An ER is a 4-connected set of pixels with all its grey-level values smaller than the values in its outer boundary. + A class-specific ER is selected (using a classifier) from all the ER’s in the component tree of the image. + + + + + Seed point + + + + + Threshold (max grey-level value) + + + + + Area + + + + + Perimeter + + + + + Euler number + + + + + Bounding box + + + + + Order 1 raw moments to derive the centroid + + + + + Order 1 raw moments to derive the centroid + + + + + Order 2 central moments to construct the covariance matrix + + + + + Order 2 central moments to construct the covariance matrix + + + + + Order 2 central moments to construct the covariance matrix + + + + + Pointer to horizontal crossings + + + + + Median of the crossings at three different height levels + + + + + Hole area ratio + + + + + Convex hull ratio + + + + + Number of inflexion points + + + + + Pointer to pixels + + + + + Probability that the ER belongs to the class we are looking for + + + + + Pointer to the parent ERStat + + + + + Pointer to the child ERStat + + + + + Pointer to the next ERStat + + + + + Pointer to the previous ERStat + + + + + If or not the regions is a local maxima of the probability + + + + + Pointer to the ERStat that is the max probability ancestor + + + + + Pointer to the ERStat that is the min probability ancestor + + + + + Get the center of the region + + The source image width + The center of the region + + + + Base class for 1st and 2nd stages of Neumann and Matas scene text detection algorithm + + + + + Release all the unmanaged memory associate with this ERFilter + + + + + Takes image on input and returns the selected regions in a vector of ERStat only distinctive ERs which correspond to characters are selected by a sequential classifier + + Sinle channel image CV_8UC1 + Output for the 1st stage and Input/Output for the 2nd. The selected Extremal Regions are stored here. + + + + Find groups of Extremal Regions that are organized as text blocks. + + The image where ER grouping is to be perform on + Array of single channel images from which the regions were extracted + Vector of ER’s retrieved from the ERFilter algorithm from each channel + The XML or YAML file with the classifier model (e.g. trained_classifier_erGrouping.xml) + The minimum probability for accepting a group. + The grouping methods + The output of the algorithm that indicates the text regions + + + + The grouping method + + + + + Only perform grouping horizontally. + + + + + Perform grouping in any orientation. + + + + + Extremal Region Filter for the 1st stage classifier of N&M algorithm + + + + + Create an Extremal Region Filter for the 1st stage classifier of N&M algorithm + + The file name of the classifier + Threshold step in subsequent thresholds when extracting the component tree. + The minimum area (% of image size) allowed for retreived ER’s. + The maximum area (% of image size) allowed for retreived ER’s. + The minimum probability P(er|character) allowed for retreived ER’s. + Whenever non-maximum suppression is done over the branch probabilities. + The minimum probability difference between local maxima and local minima ERs. + + + + Extremal Region Filter for the 2nd stage classifier of N&M algorithm + + + + + Create an Extremal Region Filter for the 2nd stage classifier of N&M algorithm + + The file name of the classifier + The minimum probability P(er|character) allowed for retreived ER’s. + + + + Wrapped class of the C++ standard vector of ERStat. + + + + + Constructor used to deserialize runtime serialized object + + The serialization info + The streaming context + + + + A function used for runtime serialization of the object + + Serialization info + Streaming context + + + + Create an empty standard vector of ERStat + + + + + Create an standard vector of ERStat of the specific size + + The size of the vector + + + + Create an standard vector of ERStat with the initial values + + The initial values + + + + Push an array of value into the standard vector + + The value to be pushed to the vector + + + + Convert the standard vector to an array of ERStat + + An array of ERStat + + + + Clear the vector + + + + + Release the standard vector + + + + + Get the pointer to cv::_InputArray + + + + + Get the pointer to cv::_OutputArray + + + + + Get the pointer to cv::_InputOutputArray + + + + + Get the size of the vector + + + + + The pointer to the first element on the vector. In case of an empty vector, IntPtr.Zero will be returned. + + + + + Get the item in the specific index + + The index + The item in the specific index + + + + BRIEF Descriptor + + + + + Create a BRIEF descriptor extractor. + + The size of descriptor. It can be equal 16, 32 or 64 bytes. + + + + Release all the unmanaged resource associated with BRIEF + + + + + This class wraps the functional calls to the opencv contrib modules + + + + + A SURF detector using Cuda + + + + + Create a Cuda SURF detector + + The interest operator threshold. + The number of octaves to process. + The number of layers in each octave. + True, if generate 128-len descriptors, false - 64-len descriptors. + Max features = featuresRatio * img.size().srea(). + If set to true, the orientation is not computed for the keypoints + + + + Detect keypoints in the CudaImage + + The image where keypoints will be detected from + The optional mask, can be null if not needed + + The keypoints GpuMat that will have 1 row. + keypoints.at<float[6]>(1, i) contains i'th keypoint + format: (x, y, size, response, angle, octave) + + + + + Detect keypoints in the CudaImage + + The image where keypoints will be detected from + The optional mask, can be null if not needed + An array of keypoints + + + + Obtain the keypoints array from GpuMat + + The keypoints obtained from DetectKeyPointsRaw + The vector of keypoints + + + + Obtain a GpuMat from the keypoints array + + The keypoints array + A GpuMat that represent the keypoints + + + + Compute the descriptor given the image and the point location + + The image where the descriptor will be computed from + The optional mask, can be null if not needed + The keypoint where the descriptor will be computed from. The order of the keypoints might be changed unless the GPU_SURF detector is UP-RIGHT. + The image features founded on the keypoint location + + + + Release the unmanaged resource associate to the Detector + + + + + Return the size of the descriptor (64/128) + + + + + Daisy descriptor. + + + + + Create DAISY descriptor extractor + + Radius of the descriptor at the initial scale. + Amount of radial range division quantity. + Amount of angular range division quantity. + Amount of gradient orientations range division quantity. + Descriptors normalization type. + optional 3x3 homography matrix used to warp the grid of daisy but sampling keypoints remains unwarped on image + Switch to disable interpolation for speed improvement at minor quality loss + Sample patterns using keypoints orientation, disabled by default. + + + + Release all the unmanaged resource associated with BRIEF + + + + + Normalization type + + + + + Will not do any normalization (default) + + + + + Histograms are normalized independently for L2 norm equal to 1.0 + + + + + Descriptors are normalized for L2 norm equal to 1.0 + + + + + Descriptors are normalized for L2 norm equal to 1.0 but no individual one is bigger than 0.154 as in SIFT + + + + + The FREAK (Fast Retina Keypoint) keypoint descriptor: + Alahi, R. Ortiz, and P. Vandergheynst. FREAK: Fast Retina Keypoint. In IEEE Conference on Computer + Vision and Pattern Recognition, 2012. CVPR 2012 Open Source Award Winner. + The algorithm + propose a novel keypoint descriptor inspired by the human visual system and more precisely the retina, coined Fast + Retina Key- point (FREAK). A cascade of binary strings is computed by efficiently comparing image intensities over a + retinal sampling pattern. FREAKs are in general faster to compute with lower memory load and also more robust than + SIFT, SURF or BRISK. They are competitive alternatives to existing keypoints in particular for embedded applications. + + + + + Create a Freak descriptor extractor. + + Enable orientation normalization + Enable scale normalization + Scaling of the description pattern + Number of octaves covered by the detected keypoints. + + + + Release all the unmanaged resource associated with BRIEF + + + + + latch Class for computing the LATCH descriptor. + If you find this code useful, please add a reference to the following paper in your work: + Gil Levi and Tal Hassner, "LATCH: Learned Arrangements of Three Patch Codes", arXiv preprint arXiv:1501.03719, 15 Jan. 2015 + LATCH is a binary descriptor based on learned comparisons of triplets of image patches. + + + + + Create LATCH descriptor extractor + + The size of the descriptor - can be 64, 32, 16, 8, 4, 2 or 1 + Whether or not the descriptor should compensate for orientation changes. + the size of half of the mini-patches size. For example, if we would like to compare triplets of patches of size 7x7x + then the half_ssd_size should be (7-1)/2 = 3. + + + + Release all the unmanaged resource associated with BRIEF + + + + + The locally uniform comparison image descriptor: + An image descriptor that can be computed very fast, while being + about as robust as, for example, SURF or BRIEF. + + + + + Create a locally uniform comparison image descriptor. + + Kernel for descriptor construction, where 1=3x3, 2=5x5, 3=7x7 and so forth + kernel for blurring image prior to descriptor construction, where 1=3x3, 2=5x5, 3=7x7 and so forth + + + + Release all the unmanaged resource associated with BRIEF + + + + + Wrapped SIFT detector + + + + + Create a SIFT using the specific values + + The desired number of features. Use 0 for un-restricted number of features + The number of octave layers. Use 3 for default + Contrast threshold. Use 0.04 as default + Detector parameter. Use 10.0 as default + Use 1.6 as default + + + + Release the unmanaged resources associated with this object + + + + + StarDetector + + + + + Create a star detector with the specific parameters + + + Maximum size of the features. The following + values of the parameter are supported: + 4, 6, 8, 11, 12, 16, 22, 23, 32, 45, 46, 64, 90, 128 + + Threshold for the approximated laplacian, + used to eliminate weak features. The larger it is, + the less features will be retrieved + + + Another threshold for the laplacian to eliminate edges. + The larger the threshold, the more points you get. + + + Another threshold for the feature size to eliminate edges. + The larger the threshold, the more points you get. + + + + + + + Release the unmanaged memory associated with this detector. + + + + + Class for extracting Speeded Up Robust Features from an image + + + + + Create a SURF detector using the specific values + + + Only features with keypoint.hessian larger than that are extracted. + good default value is ~300-500 (can depend on the average local contrast and sharpness of the image). + user can further filter out some features based on their hessian values and other characteristics + + + false means basic descriptors (64 elements each), + true means extended descriptors (128 elements each) + + + The number of octaves to be used for extraction. + With each next octave the feature size is doubled + + + The number of layers within each octave + + + False means that detector computes orientation of each feature. + True means that the orientation is not computed (which is much, much faster). + For example, if you match images from a stereo pair, or do image stitching, the matched features likely have very similar angles, and you can speed up feature extraction by setting upright=true. + + + + Release the unmanaged memory associated with this detector. + + + + + The function implements different algorithm of automatic white balance, i.e. it tries to map image’s white color to perceptual white (this can be violated due to specific illumination or camera settings). + + The source. + The DST. + Type of the algorithm to use. Use SIMPLE to perform smart histogram adjustments (ignoring 4% pixels with minimal and maximal values) for each channel. + Minimum value in the input image + Maximum value in the input image + Minimum value in the output image + Maximum value in the output image + + + + The function implements simple dct-based denoising, link: http://www.ipol.im/pub/art/2011/ys-dct/. + + Source image + Destination image + Expected noise standard deviation + Size of block side where dct is computed + + + diff --git a/HMI Label And Editor Control/bin/Debug/How to create HMI Control Real-Time.exe b/HMI Label And Editor Control/bin/Debug/How to create HMI Control Real-Time.exe new file mode 100644 index 0000000000000000000000000000000000000000..7c38523919322d1d8ed0ab1d89467d6ea7cd548b GIT binary patch literal 107008 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 K + + + + + + + + + + + + + \ No newline at end of file diff --git a/HMI Label And Editor Control/bin/Debug/How to create HMI Control Real-Time.pdb b/HMI Label And Editor Control/bin/Debug/How to create HMI Control Real-Time.pdb new file mode 100644 index 0000000000000000000000000000000000000000..09697e333e57a9776b1a46b7b5460dc032686313 GIT binary patch literal 130560 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

ho1AC^t}6H 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 K+Ew9WFu*T)|yY~;m=e@qKqfizfP*=g49PotQF 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�_K^FeO>O{=m|2C%nLz11af@l=Bi7tL}-?fu_z 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

$jbrQ;RQuj7@trQ=mlI$jOK>39wP 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 literal 0 HcmV?d00001 diff --git a/HMI Label And Editor Control/bin/Debug/How to create HMI Control Real-Time.vshost.exe b/HMI Label And Editor Control/bin/Debug/How to create HMI Control Real-Time.vshost.exe new file mode 100644 index 0000000000000000000000000000000000000000..f4438052ce250a3f2c42a2c2cbd108b77f44e478 GIT binary patch literal 24216 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 + + + + + + + + + + + + + \ No newline at end of file diff --git a/HMI Label And Editor Control/bin/Debug/How to create HMI Control Real-Time.vshost.exe.manifest b/HMI Label And Editor Control/bin/Debug/How to create HMI Control Real-Time.vshost.exe.manifest new file mode 100644 index 0000000..061c9ca --- /dev/null +++ b/HMI Label And Editor Control/bin/Debug/How to create HMI Control Real-Time.vshost.exe.manifest @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/HMI Label And Editor Control/bin/Debug/IC_Stack.tula b/HMI Label And Editor Control/bin/Debug/IC_Stack.tula new file mode 100644 index 0000000000000000000000000000000000000000..3f1fa32aafced420d108900c2379297544260278 GIT binary patch literal 20 UcmZR`l3b;)$0}&V#K`~y03M40-T(jq literal 0 HcmV?d00001 diff --git a/HMI Label And Editor Control/bin/Debug/NG_Stack.tula b/HMI Label And Editor Control/bin/Debug/NG_Stack.tula new file mode 100644 index 0000000000000000000000000000000000000000..a21d91b3d5068469129e6101a5a2b5a9d43a9e92 GIT binary patch literal 20 UcmZSB!2E`(SU8!1nTr7i04jL`m;e9( literal 0 HcmV?d00001 diff --git a/HMI Label And Editor Control/bin/Debug/Nozzle.tula b/HMI Label And Editor Control/bin/Debug/Nozzle.tula new file mode 100644 index 0000000000000000000000000000000000000000..41d3a3e4953ccac35b48600f286c654c16e0d7ca GIT binary patch literal 20 RcmZQzWME=oW?*4J0ssK201E&B literal 0 HcmV?d00001 diff --git a/HMI Label And Editor Control/bin/Debug/PASS_Stack.tula b/HMI Label And Editor Control/bin/Debug/PASS_Stack.tula new file mode 100644 index 0000000000000000000000000000000000000000..d25139c131ca12534ade19ea6a0a61d55cc963dc GIT binary patch literal 20 UcmZRu)sWXbqAR7s%*6l$03Cw?>Hq)$ literal 0 HcmV?d00001 diff --git a/HMI Label And Editor Control/bin/Debug/ROM_Stack.tula b/HMI Label And Editor Control/bin/Debug/ROM_Stack.tula new file mode 100644 index 0000000000000000000000000000000000000000..32d489766aa28c8a2cb97871967d9da4afad1388 GIT binary patch literal 20 UcmZR$z}_KTAg-az$ie^v043`JN&o-= literal 0 HcmV?d00001 diff --git a/HMI Label And Editor Control/bin/Debug/cvextern.dll b/HMI Label And Editor Control/bin/Debug/cvextern.dll new file mode 100644 index 0000000000000000000000000000000000000000..5f87608ebaa9775af297fb1b2270414d4525b138 GIT binary patch literal 14909440 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