123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446 |
- using System;
- using System.Runtime.InteropServices;
- using System.Collections.Generic;
- namespace OpenCVForUnity.ImgprocModule
- {
- //javadoc:Moments
- [System.Serializable]
- public class Moments
- {
- public double m00;
- public double m10;
- public double m01;
- public double m20;
- public double m11;
- public double m02;
- public double m30;
- public double m21;
- public double m12;
- public double m03;
- public double mu20;
- public double mu11;
- public double mu02;
- public double mu30;
- public double mu21;
- public double mu12;
- public double mu03;
- public double nu20;
- public double nu11;
- public double nu02;
- public double nu30;
- public double nu21;
- public double nu12;
- public double nu03;
- public Moments(
- double m00,
- double m10,
- double m01,
- double m20,
- double m11,
- double m02,
- double m30,
- double m21,
- double m12,
- double m03)
- {
- this.m00 = m00;
- this.m10 = m10;
- this.m01 = m01;
- this.m20 = m20;
- this.m11 = m11;
- this.m02 = m02;
- this.m30 = m30;
- this.m21 = m21;
- this.m12 = m12;
- this.m03 = m03;
- this.completeState();
- }
- public Moments()
- : this(0, 0, 0, 0, 0, 0, 0, 0, 0, 0)
- {
- }
- public Moments(double[] vals)
- {
- set(vals);
- }
- public void set(double[] vals)
- {
- if (vals != null)
- {
- m00 = vals.Length > 0 ? vals[0] : 0;
- m10 = vals.Length > 1 ? vals[1] : 0;
- m01 = vals.Length > 2 ? vals[2] : 0;
- m20 = vals.Length > 3 ? vals[3] : 0;
- m11 = vals.Length > 4 ? vals[4] : 0;
- m02 = vals.Length > 5 ? vals[5] : 0;
- m30 = vals.Length > 6 ? vals[6] : 0;
- m21 = vals.Length > 7 ? vals[7] : 0;
- m12 = vals.Length > 8 ? vals[8] : 0;
- m03 = vals.Length > 9 ? vals[9] : 0;
- this.completeState();
- }
- else
- {
- m00 = 0;
- m10 = 0;
- m01 = 0;
- m20 = 0;
- m11 = 0;
- m02 = 0;
- m30 = 0;
- m21 = 0;
- m12 = 0;
- m03 = 0;
- mu20 = 0;
- mu11 = 0;
- mu02 = 0;
- mu30 = 0;
- mu21 = 0;
- mu12 = 0;
- mu03 = 0;
- nu20 = 0;
- nu11 = 0;
- nu02 = 0;
- nu30 = 0;
- nu21 = 0;
- nu12 = 0;
- nu03 = 0;
- }
- }
- //@Override
- public override string ToString()
- {
- return "Moments [ " +
- "\n" +
- "m00=" + m00 + ", " +
- "\n" +
- "m10=" + m10 + ", " +
- "m01=" + m01 + ", " +
- "\n" +
- "m20=" + m20 + ", " +
- "m11=" + m11 + ", " +
- "m02=" + m02 + ", " +
- "\n" +
- "m30=" + m30 + ", " +
- "m21=" + m21 + ", " +
- "m12=" + m12 + ", " +
- "m03=" + m03 + ", " +
- "\n" +
- "mu20=" + mu20 + ", " +
- "mu11=" + mu11 + ", " +
- "mu02=" + mu02 + ", " +
- "\n" +
- "mu30=" + mu30 + ", " +
- "mu21=" + mu21 + ", " +
- "mu12=" + mu12 + ", " +
- "mu03=" + mu03 + ", " +
- "\n" +
- "nu20=" + nu20 + ", " +
- "nu11=" + nu11 + ", " +
- "nu02=" + nu02 + ", " +
- "\n" +
- "nu30=" + nu30 + ", " +
- "nu21=" + nu21 + ", " +
- "nu12=" + nu12 + ", " +
- "nu03=" + nu03 + ", " +
- "\n]";
- }
- protected void completeState()
- {
- double cx = 0, cy = 0;
- double mu20, mu11, mu02;
- double inv_m00 = 0.0;
- if (System.Math.Abs(this.m00) > 0.00000001)
- {
- inv_m00 = 1.0 / this.m00;
- cx = this.m10 * inv_m00;
- cy = this.m01 * inv_m00;
- }
- // mu20 = m20 - m10*cx
- mu20 = this.m20 - this.m10 * cx;
- // mu11 = m11 - m10*cy
- mu11 = this.m11 - this.m10 * cy;
- // mu02 = m02 - m01*cy
- mu02 = this.m02 - this.m01 * cy;
- this.mu20 = mu20;
- this.mu11 = mu11;
- this.mu02 = mu02;
- // mu30 = m30 - cx*(3*mu20 + cx*m10)
- this.mu30 = this.m30 - cx * (3 * mu20 + cx * this.m10);
- mu11 += mu11;
- // mu21 = m21 - cx*(2*mu11 + cx*m01) - cy*mu20
- this.mu21 = this.m21 - cx * (mu11 + cx * this.m01) - cy * mu20;
- // mu12 = m12 - cy*(2*mu11 + cy*m10) - cx*mu02
- this.mu12 = this.m12 - cy * (mu11 + cy * this.m10) - cx * mu02;
- // mu03 = m03 - cy*(3*mu02 + cy*m01)
- this.mu03 = this.m03 - cy * (3 * mu02 + cy * this.m01);
- double inv_sqrt_m00 = System.Math.Sqrt(System.Math.Abs(inv_m00));
- double s2 = inv_m00 * inv_m00, s3 = s2 * inv_sqrt_m00;
- this.nu20 = this.mu20 * s2;
- this.nu11 = this.mu11 * s2;
- this.nu02 = this.mu02 * s2;
- this.nu30 = this.mu30 * s3;
- this.nu21 = this.mu21 * s3;
- this.nu12 = this.mu12 * s3;
- this.nu03 = this.mu03 * s3;
- }
- public double get_m00()
- {
- return this.m00;
- }
- public double get_m10()
- {
- return this.m10;
- }
- public double get_m01()
- {
- return this.m01;
- }
- public double get_m20()
- {
- return this.m20;
- }
- public double get_m11()
- {
- return this.m11;
- }
- public double get_m02()
- {
- return this.m02;
- }
- public double get_m30()
- {
- return this.m30;
- }
- public double get_m21()
- {
- return this.m21;
- }
- public double get_m12()
- {
- return this.m12;
- }
- public double get_m03()
- {
- return this.m03;
- }
- public double get_mu20()
- {
- return this.mu20;
- }
- public double get_mu11()
- {
- return this.mu11;
- }
- public double get_mu02()
- {
- return this.mu02;
- }
- public double get_mu30()
- {
- return this.mu30;
- }
- public double get_mu21()
- {
- return this.mu21;
- }
- public double get_mu12()
- {
- return this.mu12;
- }
- public double get_mu03()
- {
- return this.mu03;
- }
- public double get_nu20()
- {
- return this.nu20;
- }
- public double get_nu11()
- {
- return this.nu11;
- }
- public double get_nu02()
- {
- return this.nu02;
- }
- public double get_nu30()
- {
- return this.nu30;
- }
- public double get_nu21()
- {
- return this.nu21;
- }
- public double get_nu12()
- {
- return this.nu12;
- }
- public double get_nu03()
- {
- return this.nu03;
- }
- public void set_m00(double m00)
- {
- this.m00 = m00;
- }
- public void set_m10(double m10)
- {
- this.m10 = m10;
- }
- public void set_m01(double m01)
- {
- this.m01 = m01;
- }
- public void set_m20(double m20)
- {
- this.m20 = m20;
- }
- public void set_m11(double m11)
- {
- this.m11 = m11;
- }
- public void set_m02(double m02)
- {
- this.m02 = m02;
- }
- public void set_m30(double m30)
- {
- this.m30 = m30;
- }
- public void set_m21(double m21)
- {
- this.m21 = m21;
- }
- public void set_m12(double m12)
- {
- this.m12 = m12;
- }
- public void set_m03(double m03)
- {
- this.m03 = m03;
- }
- public void set_mu20(double mu20)
- {
- this.mu20 = mu20;
- }
- public void set_mu11(double mu11)
- {
- this.mu11 = mu11;
- }
- public void set_mu02(double mu02)
- {
- this.mu02 = mu02;
- }
- public void set_mu30(double mu30)
- {
- this.mu30 = mu30;
- }
- public void set_mu21(double mu21)
- {
- this.mu21 = mu21;
- }
- public void set_mu12(double mu12)
- {
- this.mu12 = mu12;
- }
- public void set_mu03(double mu03)
- {
- this.mu03 = mu03;
- }
- public void set_nu20(double nu20)
- {
- this.nu20 = nu20;
- }
- public void set_nu11(double nu11)
- {
- this.nu11 = nu11;
- }
- public void set_nu02(double nu02)
- {
- this.nu02 = nu02;
- }
- public void set_nu30(double nu30)
- {
- this.nu30 = nu30;
- }
- public void set_nu21(double nu21)
- {
- this.nu21 = nu21;
- }
- public void set_nu12(double nu12)
- {
- this.nu12 = nu12;
- }
- public void set_nu03(double nu03)
- {
- this.nu03 = nu03;
- }
- }
- }
|