1793ee12c6df9cad3806238d32528c49a3ff9331dNoah Preslerpackage org.opencv.test.core;
2793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
3793ee12c6df9cad3806238d32528c49a3ff9331dNoah Preslerimport java.util.ArrayList;
4793ee12c6df9cad3806238d32528c49a3ff9331dNoah Preslerimport java.util.Arrays;
5793ee12c6df9cad3806238d32528c49a3ff9331dNoah Preslerimport java.util.List;
6793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
7793ee12c6df9cad3806238d32528c49a3ff9331dNoah Preslerimport org.opencv.core.Core;
8793ee12c6df9cad3806238d32528c49a3ff9331dNoah Preslerimport org.opencv.core.Core.MinMaxLocResult;
9793ee12c6df9cad3806238d32528c49a3ff9331dNoah Preslerimport org.opencv.core.CvException;
10793ee12c6df9cad3806238d32528c49a3ff9331dNoah Preslerimport org.opencv.core.CvType;
11793ee12c6df9cad3806238d32528c49a3ff9331dNoah Preslerimport org.opencv.core.Mat;
12793ee12c6df9cad3806238d32528c49a3ff9331dNoah Preslerimport org.opencv.core.MatOfDouble;
13793ee12c6df9cad3806238d32528c49a3ff9331dNoah Preslerimport org.opencv.core.MatOfInt;
14793ee12c6df9cad3806238d32528c49a3ff9331dNoah Preslerimport org.opencv.core.MatOfPoint;
15793ee12c6df9cad3806238d32528c49a3ff9331dNoah Preslerimport org.opencv.core.Point;
16793ee12c6df9cad3806238d32528c49a3ff9331dNoah Preslerimport org.opencv.core.Rect;
17793ee12c6df9cad3806238d32528c49a3ff9331dNoah Preslerimport org.opencv.core.RotatedRect;
18793ee12c6df9cad3806238d32528c49a3ff9331dNoah Preslerimport org.opencv.core.Scalar;
19793ee12c6df9cad3806238d32528c49a3ff9331dNoah Preslerimport org.opencv.core.Size;
20793ee12c6df9cad3806238d32528c49a3ff9331dNoah Preslerimport org.opencv.core.TermCriteria;
21793ee12c6df9cad3806238d32528c49a3ff9331dNoah Preslerimport org.opencv.test.OpenCVTestCase;
22793ee12c6df9cad3806238d32528c49a3ff9331dNoah Preslerimport org.opencv.imgproc.Imgproc;
23793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
24793ee12c6df9cad3806238d32528c49a3ff9331dNoah Preslerpublic class CoreTest extends OpenCVTestCase {
25793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
26793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    public void testAbsdiff() {
27793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        Core.absdiff(gray128, gray255, dst);
28793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
29793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        assertMatEqual(gray127, dst);
30793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    }
31793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
32793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    public void testAddMatMatMat() {
33793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        Core.add(gray128, gray128, dst);
34793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
35793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        assertMatEqual(gray255, dst);
36793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    }
37793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
38793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    public void testAddMatMatMatMatInt() {
39793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        Core.add(gray0, gray1, dst, gray1, CvType.CV_32F);
40793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
41793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        assertEquals(CvType.CV_32F, dst.depth());
42793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        assertMatEqual(gray1_32f, dst, EPS);
43793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    }
44793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
45793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    public void testAddWeightedMatDoubleMatDoubleDoubleMat() {
46793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        Core.addWeighted(gray1, 120.0, gray127, 1.0, 10.0, dst);
47793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
48793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        assertMatEqual(gray255, dst);
49793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    }
50793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
51793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    public void testAddWeightedMatDoubleMatDoubleDoubleMatInt() {
52793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        Core.addWeighted(gray1, 126.0, gray127, 1.0, 2.0, dst, CvType.CV_32F);
53793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
54793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        assertEquals(CvType.CV_32F, dst.depth());
55793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        assertMatEqual(gray255_32f, dst, EPS);
56793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    }
57793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
58793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    public void testBitwise_andMatMatMat() {
59793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        Core.bitwise_and(gray127, gray3, dst);
60793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
61793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        assertMatEqual(gray3, dst);
62793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    }
63793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
64793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    public void testBitwise_andMatMatMatMat() {
65793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        Core.bitwise_and(gray3, gray1, dst, gray255);
66793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
67793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        assertMatEqual(gray1, dst);
68793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    }
69793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
70793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    public void testBitwise_notMatMat() {
71793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        Core.bitwise_not(gray255, dst);
72793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
73793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        assertMatEqual(gray0, dst);
74793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    }
75793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
76793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    public void testBitwise_notMatMatMat() {
77793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        Core.bitwise_not(gray0, dst, gray1);
78793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
79793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        assertMatEqual(gray255, dst);
80793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    }
81793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
82793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    public void testBitwise_orMatMatMat() {
83793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        Core.bitwise_or(gray1, gray2, dst);
84793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
85793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        assertMatEqual(gray3, dst);
86793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    }
87793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
88793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    public void testBitwise_orMatMatMatMat() {
89793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        Core.bitwise_or(gray127, gray3, dst, gray255);
90793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
91793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        assertMatEqual(gray127, dst);
92793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    }
93793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
94793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    public void testBitwise_xorMatMatMat() {
95793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        Core.bitwise_xor(gray3, gray2, dst);
96793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
97793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        assertMatEqual(gray1, dst);
98793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    }
99793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
100793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    public void testBitwise_xorMatMatMatMat() {
101793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        Core.bitwise_or(gray127, gray128, dst, gray255);
102793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
103793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        assertMatEqual(gray255, dst);
104793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    }
105793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
106793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    public void testCalcCovarMatrixMatMatMatInt() {
107793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        Mat covar = new Mat(matSize, matSize, CvType.CV_64FC1);
108793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        Mat mean = new Mat(1, matSize, CvType.CV_64FC1);
109793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
110793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        Core.calcCovarMatrix(gray0_32f, covar, mean, Core.COVAR_ROWS | Core.COVAR_NORMAL);
111793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
112793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        assertMatEqual(gray0_64f, covar, EPS);
113793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        assertMatEqual(gray0_64f_1d, mean, EPS);
114793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    }
115793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
116793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    public void testCalcCovarMatrixMatMatMatIntInt() {
117793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        Mat covar = new Mat(matSize, matSize, CvType.CV_32F);
118793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        Mat mean = new Mat(1, matSize, CvType.CV_32F);
119793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
120793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        Core.calcCovarMatrix(gray0_32f, covar, mean, Core.COVAR_ROWS | Core.COVAR_NORMAL, CvType.CV_32F);
121793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
122793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        assertMatEqual(gray0_32f, covar, EPS);
123793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        assertMatEqual(gray0_32f_1d, mean, EPS);
124793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    }
125793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
126793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    public void testCartToPolarMatMatMatMat() {
127793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        Mat x = new Mat(1, 3, CvType.CV_32F) {
128793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler            {
129793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler                put(0, 0, 3.0, 6.0, 5, 0);
130793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler            }
131793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        };
132793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        Mat y = new Mat(1, 3, CvType.CV_32F) {
133793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler            {
134793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler                put(0, 0, 4.0, 8.0, 12.0);
135793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler            }
136793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        };
137793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        Mat dst_angle = new Mat();
138793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
139793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        Core.cartToPolar(x, y, dst, dst_angle);
140793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
141793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        Mat expected_magnitude = new Mat(1, 3, CvType.CV_32F) {
142793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler            {
143793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler                put(0, 0, 5.0, 10.0, 13.0);
144793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler            }
145793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        };
146793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        Mat expected_angle = new Mat(1, 3, CvType.CV_32F) {
147793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler            {
148793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler                put(0, 0, atan2rad(4,3), atan2rad(8,6), atan2rad(12,5));
149793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler            }
150793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        };
151793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        assertMatEqual(expected_magnitude, dst, EPS);
152793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        assertMatEqual(expected_angle, dst_angle, EPS);
153793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    }
154793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
155793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    public void testCartToPolarMatMatMatMatBoolean() {
156793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        Mat x = new Mat(1, 3, CvType.CV_32F) {
157793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler            {
158793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler                put(0, 0, 3.0, 6.0, 5, 0);
159793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler            }
160793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        };
161793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        Mat y = new Mat(1, 3, CvType.CV_32F) {
162793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler            {
163793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler                put(0, 0, 4.0, 8.0, 12.0);
164793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler            }
165793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        };
166793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        Mat dst_angle = new Mat();
167793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
168793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        Core.cartToPolar(x, y, dst, dst_angle, true);
169793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
170793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        Mat expected_magnitude = new Mat(1, 3, CvType.CV_32F) {
171793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler            {
172793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler                put(0, 0, 5.0, 10.0, 13.0);
173793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler            }
174793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        };
175793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        Mat expected_angle = new Mat(1, 3, CvType.CV_32F) {
176793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler            {
177793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler                put(0, 0, atan2deg(4,3), atan2deg(8,6), atan2deg(12,5));
178793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler            }
179793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        };
180793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        assertMatEqual(expected_magnitude, dst, EPS);
181793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        assertMatEqual(expected_angle, dst_angle, EPS * 180/Math.PI);
182793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    }
183793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
184793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
185793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    public void testCheckRangeMat() {
186793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        Mat outOfRange = new Mat(2, 2, CvType.CV_64F);
187793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        outOfRange.put(0, 0, Double.NaN, Double.NEGATIVE_INFINITY, Double.POSITIVE_INFINITY, 0);
188793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
189793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        assertTrue(Core.checkRange(grayRnd_32f));
190793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        assertTrue(Core.checkRange(new Mat()));
191793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        assertFalse(Core.checkRange(outOfRange));
192793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    }
193793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
194793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
195793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    public void testCheckRangeMatBooleanPointDoubleDouble() {
196793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        Mat inRange = new Mat(2, 3, CvType.CV_64F) {
197793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler            {
198793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler                put(0, 0, 14, 48, 76, 33, 5, 99);
199793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler            }
200793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        };
201793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
202793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        assertTrue(Core.checkRange(inRange, true, 5, 100));
203793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
204793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        Mat outOfRange = new Mat(2, 3, CvType.CV_64F) {
205793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler            {
206793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler                put(0, 0, -4, 0, 6, 33, 4, 109);
207793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler            }
208793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        };
209793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
210793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        assertFalse(Core.checkRange(outOfRange, true, 5, 100));
211793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    }
212793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
213793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    public void testCompare() {
214793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        Core.compare(gray0, gray0, dst, Core.CMP_EQ);
215793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
216793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        assertMatEqual(dst, gray255);
217793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
218793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        Core.compare(gray0, gray1, dst, Core.CMP_EQ);
219793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
220793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        assertMatEqual(dst, gray0);
221793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
222793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        grayRnd.put(0, 0, 0, 0);
223793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
224793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        Core.compare(gray0, grayRnd, dst, Core.CMP_GE);
225793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
226793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        int expected = (int) (grayRnd.total() - Core.countNonZero(grayRnd));
227793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        assertEquals(expected, Core.countNonZero(dst));
228793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    }
229793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
230793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    public void testCompleteSymmMat() {
231793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        Core.completeSymm(grayRnd_32f);
232793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
233793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        assertMatEqual(grayRnd_32f, grayRnd_32f.t(), EPS);
234793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    }
235793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
236793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    public void testCompleteSymmMatBoolean() {
237793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        Mat grayRnd_32f2 = grayRnd_32f.clone();
238793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
239793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        Core.completeSymm(grayRnd_32f, true);
240793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
241793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        assertMatEqual(grayRnd_32f, grayRnd_32f.t(), EPS);
242793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        Core.completeSymm(grayRnd_32f2, false);
243793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        assertMatNotEqual(grayRnd_32f2, grayRnd_32f, EPS);
244793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    }
245793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
246793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    public void testConvertScaleAbsMatMat() {
247793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        Core.convertScaleAbs(gray0, dst);
248793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
249793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        assertMatEqual(gray0, dst, EPS);
250793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
251793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        Core.convertScaleAbs(gray_16u_256, dst);
252793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
253793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        assertMatEqual(gray255, dst, EPS);
254793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    }
255793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
256793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    public void testConvertScaleAbsMatMatDoubleDouble() {
257793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        Core.convertScaleAbs(gray_16u_256, dst, 2, -513);
258793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
259793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        assertMatEqual(gray1, dst);
260793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    }
261793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
262793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    public void testCountNonZero() {
263793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        assertEquals(0, Core.countNonZero(gray0));
264793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
265793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        gray0.put(0, 0, 255);
266793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        gray0.put(gray0.rows() - 1, gray0.cols() - 1, 255);
267793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
268793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        assertEquals(2, Core.countNonZero(gray0));
269793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    }
270793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
271793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    public void testCubeRoot() {
272793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        float res = Core.cubeRoot(-27.0f);
273793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
274793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        assertEquals(-3.0f, res);
275793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    }
276793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
277793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    public void testDctMatMat() {
278793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        Mat in = new Mat(1, 4, CvType.CV_32F) {
279793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler            {
280793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler                put(0, 0, 135.22211, 50.811096, 102.27016, 207.6682);
281793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler            }
282793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        };
283793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        Mat dst1 = new Mat();
284793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        Mat dst2 = new Mat();
285793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
286793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        Core.dct(gray0_32f_1d, dst1);
287793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        Core.dct(in, dst2);
288793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
289793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        truth = new Mat(1, 4, CvType.CV_32F) {
290793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler            {
291793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler                put(0, 0, 247.98576, -61.252407, 94.904533, 14.013477);
292793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler            }
293793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        };
294793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        assertMatEqual(gray0_32f_1d, dst1, EPS);
295793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        assertMatEqual(truth, dst2, EPS);
296793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    }
297793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
298793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    public void testDctMatMatInt() {
299793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        Mat in = new Mat(1, 4, CvType.CV_32F) {
300793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler            {
301793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler                put(0, 0, 247.98576, -61.252407, 94.904533, 14.013477);
302793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler            }
303793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        };
304793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        Mat dst1 = new Mat();
305793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        Mat dst2 = new Mat();
306793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
307793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        Core.dct(gray0_32f_1d, dst1, Core.DCT_INVERSE);
308793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        Core.dct(in, dst2, Core.DCT_INVERSE);
309793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
310793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        truth = new Mat(1, 4, CvType.CV_32F) {
311793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler            {
312793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler                put(0, 0, 135.22211, 50.811096, 102.27016, 207.6682);
313793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler            }
314793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        };
315793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        assertMatEqual(gray0_32f_1d, dst1, EPS);
316793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        assertMatEqual(truth, dst2, EPS);
317793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    }
318793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
319793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    public void testDeterminant() {
320793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        Mat mat = new Mat(2, 2, CvType.CV_32F) {
321793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler            {
322793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler                put(0, 0, 4.0);
323793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler                put(0, 1, 2.0);
324793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler                put(1, 0, 4.0);
325793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler                put(1, 1, 4.0);
326793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler            }
327793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        };
328793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
329793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        double det = Core.determinant(mat);
330793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
331793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        assertEquals(8.0, det);
332793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    }
333793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
334793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    public void testDftMatMat() {
335793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        Core.dft(gray0_32f_1d, dst);
336793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
337793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        assertMatEqual(gray0_32f_1d, dst, EPS);
338793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    }
339793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
340793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    public void testDftMatMatIntInt() {
341793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        Mat src1 = new Mat(2, 4, CvType.CV_32F) {
342793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler            {
343793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler                put(0, 0, 1, 2, 3, 4);
344793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler                put(1, 0, 1, 1, 1, 1);
345793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler            }
346793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        };
347793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        Mat src2 = new Mat(2, 4, CvType.CV_32F) {
348793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler            {
349793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler                put(0, 0, 1, 2, 3, 4);
350793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler                put(1, 0, 0, 0, 0, 0);
351793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler            }
352793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        };
353793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        Mat dst1 = new Mat();
354793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        Mat dst2 = new Mat();
355793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
356793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        Core.dft(src1, dst1, Core.DFT_REAL_OUTPUT, 1);
357793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        Core.dft(src2, dst2, Core.DFT_REAL_OUTPUT, 0);
358793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
359793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        assertMatEqual(dst2, dst1, EPS);
360793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    }
361793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
362793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    public void testDivideDoubleMatMat() {
363793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        Core.divide(4.0, gray2, dst);
364793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
365793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        assertMatEqual(gray2, dst);
366793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
367793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        Core.divide(4.0, gray0, dst);
368793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
369793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        assertMatEqual(gray0, dst);
370793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    }
371793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
372793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    public void testDivideDoubleMatMatInt() {
373793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        Core.divide(9.0, gray3, dst, CvType.CV_32F);
374793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
375793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        assertMatEqual(gray3_32f, dst, EPS);
376793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    }
377793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
378793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    public void testDivideMatMatMat() {
379793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        Core.divide(gray9, gray3, dst);
380793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
381793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        assertMatEqual(gray3, dst);
382793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    }
383793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
384793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    public void testDivideMatMatMatDouble() {
385793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        Core.divide(gray1, gray2, dst, 6.0);
386793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
387793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        assertMatEqual(gray3, dst);
388793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    }
389793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
390793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    public void testDivideMatMatMatDoubleInt() {
391793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        Core.divide(gray1, gray2, dst, 6.0, CvType.CV_32F);
392793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
393793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        assertMatEqual(gray3_32f, dst, EPS);
394793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    }
395793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
396793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    public void testEigen() {
397793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        Mat src = new Mat(3, 3, CvType.CV_32FC1, new Scalar(2.0));
398793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        Mat eigenVals = new Mat();
399793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        Mat eigenVecs = new Mat();
400793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
401793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        Core.eigen(src, eigenVals, eigenVecs);
402793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
403793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        Mat expectedEigenVals = new Mat(3, 1, CvType.CV_32FC1) {
404793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler            {
405793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler                put(0, 0, 6, 0, 0);
406793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler            }
407793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        };
408793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        Mat expectedEigenVecs = new Mat(3, 3, CvType.CV_32FC1) {
409793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler            {
410793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler                put(0, 0, 0.57735026, 0.57735026, 0.57735032);
411793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler                put(1, 0, 0.70710677, -0.70710677, 0);
412793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler                put(2, 0, -0.40824831, -0.40824831, 0.81649661);
413793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler            }
414793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        };
415793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        assertMatEqual(eigenVals, expectedEigenVals, EPS);
416793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        assertMatEqual(eigenVecs, expectedEigenVecs, EPS);
417793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    }
418793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
419793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    public void testExp() {
420793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        Core.exp(gray0_32f, dst);
421793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
422793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        assertMatEqual(gray1_32f, dst, EPS);
423793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    }
424793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
425793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    public void testExtractChannel() {
426793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        Core.extractChannel(rgba128, dst, 0);
427793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
428793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        assertMatEqual(gray128, dst);
429793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    }
430793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
431793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    public void testFastAtan2() {
432793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        double eps = 0.3;
433793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
434793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        float res = Core.fastAtan2(50, 50);
435793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
436793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        assertEquals(45, res, eps);
437793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
438793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        float res2 = Core.fastAtan2(80, 20);
439793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
440793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        assertEquals(Math.atan2(80, 20) * 180 / Math.PI, res2, eps);
441793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    }
442793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
443793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    public void testFillConvexPolyMatListOfPointScalar() {
444793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        MatOfPoint polyline = new MatOfPoint(new Point[]{new Point(1, 1), new Point(5, 0), new Point(6, 8), new Point(0, 9)});
445793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
446793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        Imgproc.fillConvexPoly(gray0, polyline, new Scalar(150));
447793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
448793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        assertTrue(0 < Core.countNonZero(gray0));
449793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        assertTrue(gray0.total() > Core.countNonZero(gray0));
450793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    }
451793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
452793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    public void testFillConvexPolyMatListOfPointScalarIntInt() {
453793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        MatOfPoint polyline1 = new MatOfPoint(new Point(2, 1), new Point(5, 1), new Point(5, 7), new Point(2, 7));
454793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        MatOfPoint polyline2 = new MatOfPoint(new Point(4, 2), new Point(10, 2), new Point(10, 14), new Point(4, 14));
455793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
456793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        // current implementation of fixed-point version of fillConvexPoly
457793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        // requires image to be at least 2-pixel wider in each direction than
458793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        // contour
459793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        Imgproc.fillConvexPoly(gray0, polyline1, colorWhite, Imgproc.LINE_8, 0);
460793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
461793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        assertTrue(0 < Core.countNonZero(gray0));
462793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        assertTrue(gray0.total() > Core.countNonZero(gray0));
463793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
464793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        Imgproc.fillConvexPoly(gray0, polyline2, colorBlack, Imgproc.LINE_8, 1);
465793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
466793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        assertEquals("see http://code.opencv.org/issues/1284", 0, Core.countNonZero(gray0));
467793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    }
468793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
469793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    public void testFillPolyMatListOfListOfPointScalar() {
470793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        int matSize = 10;
471793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        Mat gray0 = Mat.zeros(matSize, matSize, CvType.CV_8U);
472793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        MatOfPoint polyline = new MatOfPoint(new Point(1, 4), new Point(1, 8), new Point(4, 1), new Point(7, 8), new Point(7, 4));
473793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        List<MatOfPoint> polylines = new ArrayList<MatOfPoint>();
474793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        polylines.add(polyline);
475793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
476793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        Imgproc.fillPoly(gray0, polylines, new Scalar(1));
477793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
478793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        final byte[] truth = new byte[] {
479793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler                0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
480793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler                0, 0, 0, 0, 1, 0, 0, 0, 0, 0,
481793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler                0, 0, 0, 0, 1, 0, 0, 0, 0, 0,
482793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler                0, 0, 0, 1, 1, 1, 0, 0, 0, 0,
483793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler                0, 1, 1, 1, 1, 1, 1, 1, 0, 0,
484793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler                0, 1, 1, 0, 0, 0, 1, 1, 0, 0,
485793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler                0, 1, 1, 0, 0, 0, 1, 1, 0, 0,
486793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler                0, 1, 0, 0, 0, 0, 0, 1, 0, 0,
487793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler                0, 1, 0, 0, 0, 0, 0, 1, 0, 0,
488793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler                0, 0, 0, 0, 0, 0, 0, 0, 0, 0 };
489793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
490793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        assertMatEqual(new Mat(gray0.size(), CvType.CV_8U) {
491793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler            {
492793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler                put(0, 0, truth);
493793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler            }
494793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        }, gray0);
495793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    }
496793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
497793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    public void testFillPolyMatListOfListOfPointScalarIntIntPoint() {
498793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        MatOfPoint polyline1 = new MatOfPoint(new Point(1, 4), new Point(1, 8), new Point(4, 1), new Point(7, 8), new Point(7, 4));
499793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        MatOfPoint polyline2 = new MatOfPoint(new Point(0, 3), new Point(0, 7), new Point(3, 0), new Point(6, 7), new Point(6, 3));
500793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
501793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        List<MatOfPoint> polylines1 = new ArrayList<MatOfPoint>();
502793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        polylines1.add(polyline1);
503793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
504793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        List<MatOfPoint> polylines2 = new ArrayList<MatOfPoint>();
505793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        polylines2.add(polyline2);
506793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
507793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        Imgproc.fillPoly(gray0, polylines1, new Scalar(1), Imgproc.LINE_8, 0, new Point(0, 0));
508793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
509793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        assertTrue(0 < Core.countNonZero(gray0));
510793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
511793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        Imgproc.fillPoly(gray0, polylines2, new Scalar(0), Imgproc.LINE_8, 0, new Point(1, 1));
512793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
513793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        assertEquals(0, Core.countNonZero(gray0));
514793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    }
515793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
516793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    public void testFlip() {
517793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        Mat src = new Mat(2, 2, CvType.CV_32F) {
518793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler            {
519793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler                put(0, 0, 1.0);
520793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler                put(0, 1, 2.0);
521793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler                put(1, 0, 3.0);
522793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler                put(1, 1, 4.0);
523793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler            }
524793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        };
525793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        Mat dst1 = new Mat();
526793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        Mat dst2 = new Mat();
527793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
528793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        Core.flip(src, dst1, 0);
529793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        Core.flip(src, dst2, 1);
530793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
531793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        Mat dst_f1 = new Mat(2, 2, CvType.CV_32F) {
532793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler            {
533793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler                put(0, 0, 3.0);
534793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler                put(0, 1, 4.0);
535793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler                put(1, 0, 1.0);
536793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler                put(1, 1, 2.0);
537793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler            }
538793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        };
539793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        Mat dst_f2 = new Mat(2, 2, CvType.CV_32F) {
540793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler            {
541793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler                put(0, 0, 2.0);
542793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler                put(0, 1, 1.0);
543793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler                put(1, 0, 4.0);
544793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler                put(1, 1, 3.0);
545793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler            }
546793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        };
547793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        assertMatEqual(dst_f1, dst1, EPS);
548793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        assertMatEqual(dst_f2, dst2, EPS);
549793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    }
550793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
551793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    public void testGemmMatMatDoubleMatDoubleMat() {
552793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        Mat m1 = new Mat(2, 2, CvType.CV_32FC1) {
553793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler            {
554793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler                put(0, 0, 1.0, 0.0);
555793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler                put(1, 0, 1.0, 0.0);
556793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler            }
557793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        };
558793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        Mat m2 = new Mat(2, 2, CvType.CV_32FC1) {
559793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler            {
560793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler                put(0, 0, 1.0, 0.0);
561793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler                put(1, 0, 1.0, 0.0);
562793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler            }
563793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        };
564793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        Mat dmatrix = new Mat(2, 2, CvType.CV_32FC1) {
565793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler            {
566793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler                put(0, 0, 0.001, 0.001);
567793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler                put(1, 0, 0.001, 0.001);
568793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler            }
569793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        };
570793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
571793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        Core.gemm(m1, m2, 1.0, dmatrix, 1.0, dst);
572793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
573793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        Mat expected = new Mat(2, 2, CvType.CV_32FC1) {
574793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler            {
575793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler                put(0, 0, 1.001, 0.001);
576793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler                put(1, 0, 1.001, 0.001);
577793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler            }
578793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        };
579793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        assertMatEqual(expected, dst, EPS);
580793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    }
581793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
582793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    public void testGemmMatMatDoubleMatDoubleMatInt() {
583793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        Mat m1 = new Mat(2, 2, CvType.CV_32FC1) {
584793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler            {
585793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler                put(0, 0, 1.0, 0.0);
586793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler                put(1, 0, 1.0, 0.0);
587793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler            }
588793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        };
589793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        Mat m2 = new Mat(2, 2, CvType.CV_32FC1) {
590793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler            {
591793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler                put(0, 0, 1.0, 0.0);
592793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler                put(1, 0, 1.0, 0.0);
593793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler            }
594793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        };
595793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        Mat dmatrix = new Mat(2, 2, CvType.CV_32FC1) {
596793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler            {
597793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler                put(0, 0, 0.001, 0.001);
598793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler                put(1, 0, 0.001, 0.001);
599793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler            }
600793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        };
601793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
602793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        Core.gemm(m1, m2, 1.0, dmatrix, 1.0, dst, Core.GEMM_1_T);
603793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
604793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        Mat expected = new Mat(2, 2, CvType.CV_32FC1) {
605793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler            {
606793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler                put(0, 0, 2.001, 0.001);
607793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler                put(1, 0, 0.001, 0.001);
608793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler            }
609793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        };
610793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        assertMatEqual(expected, dst, EPS);
611793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    }
612793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
613793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    public void testGetCPUTickCount() {
614793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        long cpuCountStart = 0, actualTickCount;
615793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
616793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        cpuCountStart = Core.getCPUTickCount();
617793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        Core.sumElems(gray255);
618793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        actualTickCount = Core.getCPUTickCount();
619793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
620793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        long expectedTickCount = actualTickCount - cpuCountStart;
621793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        assertTrue(expectedTickCount > 0);
622793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    }
623793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
624793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    public void testGetNumberOfCPUs() {
625793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        int cpus = Core.getNumberOfCPUs();
626793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
627793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        assertTrue(Runtime.getRuntime().availableProcessors() <= cpus);
628793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    }
629793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
630793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    public void testGetOptimalDFTSize() {
631793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        assertEquals(1, Core.getOptimalDFTSize(0));
632793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        assertEquals(135, Core.getOptimalDFTSize(133));
633793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        assertEquals(15, Core.getOptimalDFTSize(13));
634793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    }
635793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
636793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    public void testGetTickCount() {
637793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        long startCount, endCount, count;
638793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
639793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        startCount = Core.getTickCount();
640793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        Core.divide(gray2, gray1, dst);
641793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        endCount = Core.getTickCount();
642793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
643793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        count = endCount - startCount;
644793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        assertTrue(count > 0);
645793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    }
646793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
647793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    public void testGetTickFrequency() {
648793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        double freq1 = Core.getTickFrequency();
649793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        Core.divide(gray2, gray1, dst);
650793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        double freq2 = Core.getTickFrequency();
651793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
652793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        assertTrue(0 < freq1);
653793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        assertEquals(freq1, freq2);
654793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    }
655793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
656793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    public void testHconcat() {
657793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        List<Mat> mats = Arrays.asList(Mat.eye(3, 3, CvType.CV_8U), Mat.zeros(3, 2, CvType.CV_8U));
658793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
659793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        Core.hconcat(mats, dst);
660793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
661793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        assertMatEqual(Mat.eye(3, 5, CvType.CV_8U), dst);
662793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    }
663793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
664793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    public void testIdctMatMat() {
665793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        Mat in = new Mat(1, 8, CvType.CV_32F) {
666793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler            {
667793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler                put(0, 0, 1.0, 2.0, 1.0, 0.0, 1.0, 2.0, 3.0, 1.0);
668793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler            }
669793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        };
670793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
671793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        Core.idct(in, dst);
672793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
673793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        truth = new Mat(1, 8, CvType.CV_32F) {
674793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler            {
675793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler                put(0, 0, 3.3769724, -1.6215782, 2.3608727, 0.20730907, -0.86502546, 0.028082132, -0.7673766, 0.10917115);
676793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler            }
677793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        };
678793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        assertMatEqual(truth, dst, EPS);
679793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    }
680793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
681793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    public void testIdctMatMatInt() {
682793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        Mat in = new Mat(2, 8, CvType.CV_32F) {
683793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler            {
684793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler                put(0, 0, 1.0, 2.0, 1.0, 0.0, 1.0, 2.0, 3.0, 1.0);
685793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler                put(1, 0, 1.0, 2.0, 1.0, 0.0, 1.0, 2.0, 3.0, 1.0);
686793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler            }
687793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        };
688793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
689793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        Core.idct(in, dst, Core.DCT_ROWS);
690793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
691793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        truth = new Mat(2, 8, CvType.CV_32F) {
692793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler            {
693793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler                put(0, 0, 3.3769724, -1.6215782, 2.3608727, 0.20730907, -0.86502546, 0.028082132, -0.7673766, 0.10917115);
694793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler                put(1, 0, 3.3769724, -1.6215782, 2.3608727, 0.20730907, -0.86502546, 0.028082132, -0.7673766, 0.10917115);
695793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler            }
696793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        };
697793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        assertMatEqual(truth, dst, EPS);
698793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    }
699793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
700793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    public void testIdftMatMat() {
701793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        Mat in = new Mat(1, 4, CvType.CV_32F) {
702793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler            {
703793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler                put(0, 0, 1.0, 2.0, 3.0, 4.0);
704793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler            }
705793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        };
706793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
707793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        Core.idft(in, dst);
708793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
709793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        truth = new Mat(1, 4, CvType.CV_32F) {
710793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler            {
711793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler                put(0, 0, 9, -9, 1, 3);
712793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler            }
713793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        };
714793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        assertMatEqual(truth, dst, EPS);
715793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    }
716793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
717793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    public void testIdftMatMatIntInt() {
718793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        Mat in = new Mat(2, 4, CvType.CV_32F) {
719793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler            {
720793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler                put(0, 0, 1.0, 2.0, 3.0, 4.0);
721793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler                put(1, 0, 1.0, 2.0, 3.0, 4.0);
722793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler            }
723793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        };
724793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        Mat dst = new Mat();
725793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
726793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        Core.idft(in, dst, Core.DFT_REAL_OUTPUT, 1);
727793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
728793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        truth = new Mat(2, 4, CvType.CV_32F) {
729793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler            {
730793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler                put(0, 0, 18, -18, 2, 6);
731793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler                put(1, 0, 0, 0, 0, 0);
732793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler            }
733793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        };
734793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        assertMatEqual(truth, dst, EPS);
735793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    }
736793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
737793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    public void testInRange() {
738793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        gray0.put(1, 1, 100, 150, 200);
739793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
740793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        Core.inRange(gray0, new Scalar(120), new Scalar(160), dst);
741793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
742793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        byte vals[] = new byte[3];
743793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        dst.get(1, 1, vals);
744793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
745793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        assertEquals(0, vals[0]);
746793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        assertEquals(-1, vals[1]);
747793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        assertEquals(0, vals[2]);
748793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        assertEquals(1, Core.countNonZero(dst));
749793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    }
750793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
751793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    public void testInsertChannel() {
752793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        Core.insertChannel(gray0, rgba128, 0);
753793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        Core.insertChannel(gray0, rgba128, 1);
754793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        Core.insertChannel(gray0, rgba128, 2);
755793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        Core.insertChannel(gray0, rgba128, 3);
756793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
757793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        assertMatEqual(rgba0, rgba128);
758793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    }
759793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
760793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    public void testInvertMatMat() {
761793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        Mat src = new Mat(2, 2, CvType.CV_32F) {
762793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler            {
763793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler                put(0, 0, 1.0);
764793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler                put(0, 1, 2.0);
765793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler                put(1, 0, 1.5);
766793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler                put(1, 1, 4.0);
767793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler            }
768793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        };
769793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
770793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        Core.invert(src, dst);
771793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
772793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        truth = new Mat(2, 2, CvType.CV_32F) {
773793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler            {
774793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler                put(0, 0, 4.0);
775793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler                put(0, 1, -2.0);
776793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler                put(1, 0, -1.5);
777793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler                put(1, 1, 1.0);
778793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler            }
779793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        };
780793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        assertMatEqual(truth, dst, EPS);
781793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    }
782793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
783793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    public void testInvertMatMatInt() {
784793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        Mat src = Mat.eye(3, 3, CvType.CV_32FC1);
785793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        src.put(0, 2, 1);
786793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
787793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        double cond = Core.invert(src, dst, Core.DECOMP_SVD);
788793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
789793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        truth = Mat.eye(3, 3, CvType.CV_32FC1);
790793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        truth.put(0, 2, -1);
791793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        assertMatEqual(truth, dst, EPS);
792793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        assertEquals(0.3819660544395447, cond, EPS);
793793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    }
794793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
795793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    public void testKmeansMatIntMatTermCriteriaIntInt() {
796793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        Mat data = new Mat(4, 5, CvType.CV_32FC1) {
797793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler            {
798793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler                put(0, 0, 1, 2, 3, 4, 5);
799793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler                put(1, 0, 2, 3, 4, 5, 6);
800793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler                put(2, 0, 5, 4, 3, 2, 1);
801793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler                put(3, 0, 6, 5, 4, 3, 2);
802793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler            }
803793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        };
804793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        TermCriteria criteria = new TermCriteria(TermCriteria.EPS, 0, EPS);
805793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        Mat labels = new Mat();
806793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
807793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        Core.kmeans(data, 2, labels, criteria, 1, Core.KMEANS_PP_CENTERS);
808793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
809793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        int[] first_center = new int[1];
810793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        labels.get(0, 0, first_center);
811793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        final int c1 = first_center[0];
812793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        Mat expected_labels = new Mat(4, 1, CvType.CV_32S) {
813793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler            {
814793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler                put(0, 0, c1, c1, 1 - c1, 1 - c1);
815793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler            }
816793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        };
817793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        assertMatEqual(expected_labels, labels);
818793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    }
819793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
820793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    public void testKmeansMatIntMatTermCriteriaIntIntMat() {
821793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        Mat data = new Mat(4, 5, CvType.CV_32FC1) {
822793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler            {
823793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler                put(0, 0, 1, 2, 3, 4, 5);
824793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler                put(1, 0, 2, 3, 4, 5, 6);
825793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler                put(2, 0, 5, 4, 3, 2, 1);
826793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler                put(3, 0, 6, 5, 4, 3, 2);
827793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler            }
828793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        };
829793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        TermCriteria criteria = new TermCriteria(TermCriteria.EPS, 0, EPS);
830793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        Mat labels = new Mat();
831793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        Mat centers = new Mat();
832793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
833793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        Core.kmeans(data, 2, labels, criteria, 6, Core.KMEANS_RANDOM_CENTERS, centers);
834793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
835793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        int[] first_center = new int[1];
836793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        labels.get(0, 0, first_center);
837793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        final int c1 = first_center[0];
838793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        Mat expected_labels = new Mat(4, 1, CvType.CV_32S) {
839793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler            {
840793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler                put(0, 0, c1, c1, 1 - c1, 1 - c1);
841793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler            }
842793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        };
843793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        Mat expected_centers = new Mat(2, 5, CvType.CV_32FC1) {
844793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler            {
845793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler                put(c1, 0, 1.5, 2.5, 3.5, 4.5, 5.5);
846793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler                put(1 - c1, 0, 5.5, 4.5, 3.5, 2.5, 1.5);
847793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler            }
848793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        };
849793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        assertMatEqual(expected_labels, labels);
850793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        assertMatEqual(expected_centers, centers, EPS);
851793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    }
852793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
853793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    public void testLineMatPointPointScalar() {
854793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        int nPoints = Math.min(gray0.cols(), gray0.rows());
855793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        Point point1 = new Point(0, 0);
856793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        Point point2 = new Point(nPoints, nPoints);
857793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        Scalar color = new Scalar(255);
858793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
859793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        Imgproc.line(gray0, point1, point2, color);
860793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
861793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        assertTrue(nPoints == Core.countNonZero(gray0));
862793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    }
863793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
864793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    public void testLineMatPointPointScalarInt() {
865793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        int nPoints = Math.min(gray0.cols(), gray0.rows());
866793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        Point point1 = new Point(0, 0);
867793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        Point point2 = new Point(nPoints, nPoints);
868793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
869793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        Imgproc.line(gray0, point1, point2, colorWhite, 0);
870793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
871793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        assertTrue(nPoints == Core.countNonZero(gray0));
872793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    }
873793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
874793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    public void testLineMatPointPointScalarIntIntInt() {
875793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        int nPoints = Math.min(gray0.cols(), gray0.rows());
876793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        Point point1 = new Point(3, 4);
877793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        Point point2 = new Point(nPoints, nPoints);
878793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        Point point1_4 = new Point(3 * 4, 4 * 4);
879793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        Point point2_4 = new Point(nPoints * 4, nPoints * 4);
880793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
881793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        Imgproc.line(gray0, point2, point1, colorWhite, 2, Imgproc.LINE_8, 0);
882793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
883793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        assertFalse(0 == Core.countNonZero(gray0));
884793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
885793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        Imgproc.line(gray0, point2_4, point1_4, colorBlack, 2, Imgproc.LINE_8, 2);
886793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
887793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        assertEquals(0, Core.countNonZero(gray0));
888793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    }
889793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
890793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    public void testLog() {
891793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        Mat in = new Mat(1, 4, CvType.CV_32FC1) {
892793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler            {
893793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler                put(0, 0, 1.0, 10.0, 100.0, 1000.0);
894793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler            }
895793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        };
896793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
897793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        Core.log(in, dst);
898793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
899793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        Mat expected = new Mat(1, 4, CvType.CV_32FC1) {
900793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler            {
901793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler                put(0, 0, 0, 2.3025851, 4.6051702, 6.9077554);
902793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler            }
903793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        };
904793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        assertMatEqual(expected, dst, EPS);
905793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    }
906793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
907793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    public void testLUTMatMatMat() {
908793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        Mat lut = new Mat(1, 256, CvType.CV_8UC1);
909793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        lut.setTo(new Scalar(0));
910793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
911793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        Core.LUT(grayRnd, lut, dst);
912793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
913793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        assertMatEqual(gray0, dst);
914793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
915793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        lut.setTo(new Scalar(255));
916793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
917793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        Core.LUT(grayRnd, lut, dst);
918793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
919793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        assertMatEqual(gray255, dst);
920793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    }
921793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
922793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    public void testMagnitude() {
923793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        Mat x = new Mat(1, 4, CvType.CV_32F);
924793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        Mat y = new Mat(1, 4, CvType.CV_32F);
925793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        x.put(0, 0, 3.0, 5.0, 9.0, 6.0);
926793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        y.put(0, 0, 4.0, 12.0, 40.0, 8.0);
927793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
928793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        Core.magnitude(x, y, dst);
929793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
930793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        Mat out = new Mat(1, 4, CvType.CV_32F);
931793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        out.put(0, 0, 5.0, 13.0, 41.0, 10.0);
932793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        assertMatEqual(out, dst, EPS);
933793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
934793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        Core.magnitude(gray0_32f, gray255_32f, dst);
935793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
936793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        assertMatEqual(gray255_32f, dst, EPS);
937793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    }
938793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
939793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    public void testMahalanobis() {
940793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        Mat covar = new Mat(matSize, matSize, CvType.CV_32F);
941793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        Mat mean = new Mat(1, matSize, CvType.CV_32F);
942793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        Core.calcCovarMatrix(grayRnd_32f, covar, mean, Core.COVAR_ROWS | Core.COVAR_NORMAL, CvType.CV_32F);
943793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        covar = covar.inv();
944793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        Mat line1 = grayRnd_32f.row(0);
945793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        Mat line2 = grayRnd_32f.row(1);
946793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
947793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        double d = Core.Mahalanobis(line1, line1, covar);
948793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
949793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        assertEquals(0.0, d);
950793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
951793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        d = Core.Mahalanobis(line1, line2, covar);
952793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
953793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        assertTrue(d > 0.0);
954793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    }
955793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
956793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    public void testMax() {
957793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        Core.max(gray0, gray255, dst);
958793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
959793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        assertMatEqual(gray255, dst);
960793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
961793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        Mat x = new Mat(1, 1, CvType.CV_32F);
962793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        Mat y = new Mat(1, 1, CvType.CV_32F);
963793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        x.put(0, 0, 23.0);
964793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        y.put(0, 0, 4.0);
965793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
966793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        Core.max(x, y, dst);
967793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
968793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        Mat truth = new Mat(1, 1, CvType.CV_32F);
969793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        truth.put(0, 0, 23.0);
970793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        assertMatEqual(truth, dst, EPS);
971793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    }
972793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
973793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    public void testMeanMat() {
974793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        Scalar mean = Core.mean(makeMask(gray128));
975793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
976793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        assertScalarEqual(new Scalar(64), mean, EPS);
977793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    }
978793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
979793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    public void testMeanMatMat() {
980793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        Mat mask1 = makeMask(gray1.clone());
981793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        Mat mask2 = makeMask(gray0, 1);
982793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
983793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        Scalar mean1 = Core.mean(grayRnd, mask1);
984793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        Scalar mean2 = Core.mean(grayRnd, mask2);
985793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        Scalar mean = Core.mean(grayRnd, gray1);
986793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
987793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        assertScalarEqual(mean, new Scalar(0.5 * (mean1.val[0] + mean2.val[0])), EPS);
988793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    }
989793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
990793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    public void testMeanStdDevMatMatMat() {
991793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        MatOfDouble mean   = new MatOfDouble();
992793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        MatOfDouble stddev = new MatOfDouble();
993793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
994793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        Core.meanStdDev(rgbLena, mean, stddev);
995793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
996793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        double expectedMean[] = new double[]
997793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler            {105.3989906311035, 99.56269836425781, 179.7303047180176};
998793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        double expectedDev[] = new double[]
999793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler            {33.74205485167219, 52.8734582803278, 49.01569488056406};
1000793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
1001793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        assertArrayEquals(expectedMean, mean.toArray(), EPS);
1002793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        assertArrayEquals(expectedDev, stddev.toArray(), EPS);
1003793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    }
1004793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
1005793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    public void testMeanStdDevMatMatMatMat() {
1006793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        Mat submat = grayRnd.submat(0, grayRnd.rows() / 2, 0, grayRnd.cols() / 2);
1007793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        submat.setTo(new Scalar(33));
1008793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        Mat mask = gray0.clone();
1009793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        submat = mask.submat(0, mask.rows() / 2, 0, mask.cols() / 2);
1010793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        submat.setTo(new Scalar(1));
1011793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        MatOfDouble mean   = new MatOfDouble();
1012793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        MatOfDouble stddev = new MatOfDouble();
1013793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
1014793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        Core.meanStdDev(grayRnd, mean, stddev, mask);
1015793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
1016793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        double expectedMean[] = new double[] {33d};
1017793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        double expectedDev[]  = new double[] {0d};
1018793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
1019793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        assertArrayEquals(expectedMean, mean.toArray(), EPS);
1020793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        assertArrayEquals(expectedDev, stddev.toArray(), EPS);
1021793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    }
1022793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
1023793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    public void testMerge() {
1024793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        Mat src1 = new Mat(2, 2, CvType.CV_32FC1, new Scalar(1));
1025793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        Mat src2 = new Mat(2, 2, CvType.CV_32FC1, new Scalar(2));
1026793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        Mat src3 = new Mat(2, 2, CvType.CV_32FC1, new Scalar(3));
1027793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        List<Mat> listMat = Arrays.asList(src1, src2, src3);
1028793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
1029793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        Core.merge(listMat, dst);
1030793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
1031793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        truth = new Mat(2, 2, CvType.CV_32FC3, new Scalar(1, 2, 3));
1032793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        assertMatEqual(truth, dst, EPS);
1033793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    }
1034793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
1035793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    public void testMin() {
1036793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        Core.min(gray0, gray255, dst);
1037793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
1038793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        assertMatEqual(gray0, dst);
1039793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    }
1040793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
1041793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    public void testMinMaxLocMat() {
1042793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        double minVal = 1;
1043793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        double maxVal = 10;
1044793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        Point minLoc = new Point(gray3.cols() / 4, gray3.rows() / 2);
1045793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        Point maxLoc = new Point(gray3.cols() / 2, gray3.rows() / 4);
1046793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        gray3.put((int) minLoc.y, (int) minLoc.x, minVal);
1047793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        gray3.put((int) maxLoc.y, (int) maxLoc.x, maxVal);
1048793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
1049793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        Core.MinMaxLocResult mmres = Core.minMaxLoc(gray3);
1050793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
1051793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        assertEquals(minVal, mmres.minVal);
1052793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        assertEquals(maxVal, mmres.maxVal);
1053793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        assertPointEquals(minLoc, mmres.minLoc, EPS);
1054793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        assertPointEquals(maxLoc, mmres.maxLoc, EPS);
1055793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    }
1056793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
1057793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    public void testMinMaxLocMatMat() {
1058793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        Mat src = new Mat(4, 4, CvType.CV_8U) {
1059793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler            {
1060793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler                put(0, 0, 2, 4, 27, 3);
1061793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler                put(1, 0, 0, 8, 7, 130);
1062793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler                put(2, 0, 13, 4, 13, 4);
1063793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler                put(3, 0, 6, 4, 2, 13);
1064793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler            }
1065793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        };
1066793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        Mat mask = new Mat(4, 4, CvType.CV_8U, new Scalar(0));
1067793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        mask.submat(1, 3, 1, 4).setTo(new Scalar(1));
1068793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
1069793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        MinMaxLocResult res = Core.minMaxLoc(src, mask);
1070793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
1071793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        assertEquals(4.0, res.minVal);
1072793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        assertEquals(130.0, res.maxVal);
1073793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        assertPointEquals(new Point(1, 2), res.minLoc, EPS);
1074793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        assertPointEquals(new Point(3, 1), res.maxLoc, EPS);
1075793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    }
1076793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
1077793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    public void testMixChannels() {
1078793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        rgba0.setTo(new Scalar(10, 20, 30, 40));
1079793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        List<Mat> src = Arrays.asList(rgba0);
1080793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        List<Mat> dst = Arrays.asList(gray3, gray2, gray1, gray0, getMat(CvType.CV_8UC3, 0, 0, 0));
1081793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        MatOfInt fromTo = new MatOfInt(
1082793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler                3, 0,
1083793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler                3, 1,
1084793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler                2, 2,
1085793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler                0, 3,
1086793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler                2, 4,
1087793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler                1, 5,
1088793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler                0, 6
1089793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        );
1090793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
1091793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        Core.mixChannels(src, dst, fromTo);
1092793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
1093793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        assertMatEqual(getMat(CvType.CV_8U, 40), dst.get(0));
1094793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        assertMatEqual(getMat(CvType.CV_8U, 40), dst.get(1));
1095793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        assertMatEqual(getMat(CvType.CV_8U, 30), dst.get(2));
1096793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        assertMatEqual(getMat(CvType.CV_8U, 10), dst.get(3));
1097793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        assertMatEqual(getMat(CvType.CV_8UC3, 30, 20, 10), dst.get(4));
1098793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    }
1099793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
1100793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    public void testMulSpectrumsMatMatMatInt() {
1101793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        Mat src1 = new Mat(1, 4, CvType.CV_32F) {
1102793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler            {
1103793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler                put(0, 0, 1.0, 2.0, 3.0, 4.0);
1104793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler            }
1105793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        };
1106793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        Mat src2 = new Mat(1, 4, CvType.CV_32F) {
1107793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler            {
1108793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler                put(0, 0, 1.0, 2.0, 3.0, 4.0);
1109793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler            }
1110793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        };
1111793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
1112793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        Core.mulSpectrums(src1, src2, dst, Core.DFT_ROWS);
1113793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
1114793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        Mat expected = new Mat(1, 4, CvType.CV_32F) {
1115793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler            {
1116793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler                put(0, 0, 1, -5, 12, 16);
1117793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler            }
1118793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        };
1119793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        assertMatEqual(expected, dst, EPS);
1120793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    }
1121793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
1122793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    public void testMulSpectrumsMatMatMatIntBoolean() {
1123793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        Mat src1 = new Mat(1, 4, CvType.CV_32F) {
1124793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler            {
1125793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler                put(0, 0, 1.0, 2.0, 3.0, 4.0);
1126793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler            }
1127793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        };
1128793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        Mat src2 = new Mat(1, 4, CvType.CV_32F) {
1129793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler            {
1130793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler                put(0, 0, 1.0, 2.0, 3.0, 4.0);
1131793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler            }
1132793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        };
1133793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
1134793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        Core.mulSpectrums(src1, src2, dst, Core.DFT_ROWS, true);
1135793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
1136793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        Mat expected = new Mat(1, 4, CvType.CV_32F) {
1137793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler            {
1138793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler                put(0, 0, 1, 13, 0, 16);
1139793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler            }
1140793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        };
1141793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        assertMatEqual(expected, dst, EPS);
1142793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    }
1143793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
1144793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    public void testMultiplyMatMatMat() {
1145793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        Core.multiply(gray0, gray255, dst);
1146793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
1147793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        assertMatEqual(gray0, dst);
1148793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    }
1149793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
1150793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    public void testMultiplyMatMatMatDouble() {
1151793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        Core.multiply(gray1, gray1, dst, 2.0);
1152793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
1153793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        assertMatEqual(gray2, dst);
1154793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
1155793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    }
1156793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
1157793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    public void testMultiplyMatMatMatDoubleInt() {
1158793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        Core.multiply(gray1, gray2, dst, 1.5, CvType.CV_32F);
1159793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
1160793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        assertMatEqual(gray3_32f, dst, EPS);
1161793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    }
1162793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
1163793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    public void testMulTransposedMatMatBoolean() {
1164793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        Core.mulTransposed(grayE_32f, dst, true);
1165793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
1166793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        assertMatEqual(grayE_32f, dst, EPS);
1167793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    }
1168793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
1169793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    public void testMulTransposedMatMatBooleanMatDouble() {
1170793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        Core.mulTransposed(grayE_32f, dst, true, gray0_32f, 2);
1171793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
1172793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        truth = gray0_32f;
1173793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        truth.diag().setTo(new Scalar(2));
1174793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        assertMatEqual(truth, dst, EPS);
1175793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    }
1176793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
1177793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    public void testMulTransposedMatMatBooleanMatDoubleInt() {
1178793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        Mat a = getMat(CvType.CV_32F, 1);
1179793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
1180793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        Core.mulTransposed(a, dst, true, gray0_32f, 3, CvType.CV_64F);
1181793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
1182793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        assertMatEqual(getMat(CvType.CV_64F, 3 * a.rows()), dst, EPS);
1183793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    }
1184793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
1185793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    public void testNormalizeMatMat() {
1186793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        Mat m = gray0.clone();
1187793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        m.diag().setTo(new Scalar(2));
1188793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
1189793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        Core.normalize(m, dst);
1190793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
1191793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        assertMatEqual(gray0, dst);
1192793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    }
1193793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
1194793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    public void testNormalizeMatMatDoubleDoubleInt() {
1195793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        Mat src = new Mat(1, 4, CvType.CV_32F) {
1196793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler            {
1197793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler                put(0, 0, 1.0, 2.0, 3.0, 4.0);
1198793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler            }
1199793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        };
1200793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
1201793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        Core.normalize(src, dst, 1.0, 2.0, Core.NORM_INF);
1202793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
1203793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        Mat expected = new Mat(1, 4, CvType.CV_32F) {
1204793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler            {
1205793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler                put(0, 0, 0.25, 0.5, 0.75, 1);
1206793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler            }
1207793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        };
1208793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        assertMatEqual(expected, dst, EPS);
1209793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    }
1210793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
1211793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    public void testNormalizeMatMatDoubleDoubleIntInt() {
1212793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        Mat src = new Mat(1, 5, CvType.CV_32F) {
1213793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler            {
1214793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler                put(0, 0, 0, 1, 2, 3, 4);
1215793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler            }
1216793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        };
1217793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
1218793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        Core.normalize(src, dst, 1, 2, Core.NORM_MINMAX, CvType.CV_64F);
1219793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
1220793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        Mat expected = new Mat(1, 5, CvType.CV_64F) {
1221793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler            {
1222793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler                put(0, 0, 1, 1.25, 1.5, 1.75, 2);
1223793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler            }
1224793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        };
1225793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        assertMatEqual(expected, dst, EPS);
1226793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    }
1227793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
1228793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    public void testNormalizeMatMatDoubleDoubleIntIntMat() {
1229793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        Mat src = new Mat(1, 5, CvType.CV_32F) {
1230793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler            {
1231793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler                put(0, 0, 0, 1, 2, 3, 4);
1232793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler            }
1233793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        };
1234793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        Mat mask = new Mat(1, 5, CvType.CV_8U) {
1235793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler            {
1236793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler                put(0, 0, 1, 0, 0, 0, 1);
1237793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler            }
1238793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        };
1239793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        dst = src.clone();
1240793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
1241793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        Core.normalize(src, dst, 1, 2, Core.NORM_MINMAX, CvType.CV_32F, mask);
1242793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
1243793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        Mat expected = new Mat(1, 5, CvType.CV_32F) {
1244793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler            {
1245793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler                put(0, 0, 1, 1, 2, 3, 2);
1246793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler            }
1247793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        };
1248793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        assertMatEqual(expected, dst, EPS);
1249793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    }
1250793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
1251793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    public void testNormMat() {
1252793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        double n = Core.norm(gray1);
1253793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
1254793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        assertEquals(10., n);
1255793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    }
1256793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
1257793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    public void testNormMatInt() {
1258793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        double n = Core.norm(gray127, Core.NORM_INF);
1259793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
1260793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        assertEquals(127., n);
1261793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    }
1262793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
1263793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    public void testNormMatIntMat() {
1264793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        double n = Core.norm(gray3, Core.NORM_L1, gray0);
1265793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
1266793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        assertEquals(0.0, n);
1267793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    }
1268793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
1269793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    public void testNormMatMat() {
1270793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        double n = Core.norm(gray0, gray1);
1271793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
1272793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        assertEquals(10.0, n);
1273793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    }
1274793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
1275793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    public void testNormMatMatInt() {
1276793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        double n = Core.norm(gray127, gray1, Core.NORM_INF);
1277793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
1278793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        assertEquals(126.0, n);
1279793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    }
1280793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
1281793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    public void testNormMatMatIntMat() {
1282793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        double n = Core.norm(gray3, gray0, Core.NORM_L1, makeMask(gray0.clone(), 1));
1283793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
1284793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        assertEquals(150.0, n);
1285793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    }
1286793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
1287793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    public void testPCABackProject() {
1288793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        Mat mean = new Mat(1, 4, CvType.CV_32F) {
1289793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler            {
1290793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler                put(0, 0, 2, 4, 4, 8);
1291793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler            }
1292793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        };
1293793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        Mat vectors = new Mat(1, 4, CvType.CV_32F, new Scalar(0)) {
1294793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler            {
1295793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler                put(0, 0, 0.2, 0.4, 0.4, 0.8);
1296793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler            }
1297793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        };
1298793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        Mat data = new Mat(3, 1, CvType.CV_32F) {
1299793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler            {
1300793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler                put(0, 0, -5, 0, -10);
1301793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler            }
1302793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        };
1303793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        Mat result = new Mat();
1304793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
1305793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        Core.PCABackProject(data, mean, vectors, result);
1306793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
1307793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        Mat truth = new Mat(3, 4, CvType.CV_32F) {
1308793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler            {
1309793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler                put(0, 0, 1, 2, 2, 4);
1310793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler                put(1, 0, 2, 4, 4, 8);
1311793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler                put(2, 0, 0, 0, 0, 0);
1312793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler            }
1313793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        };
1314793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        assertMatEqual(truth, result, EPS);
1315793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    }
1316793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
1317793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    public void testPCAComputeMatMatMat() {
1318793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        Mat data = new Mat(3, 4, CvType.CV_32F) {
1319793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler            {
1320793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler                put(0, 0, 1, 2, 2, 4);
1321793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler                put(1, 0, 2, 4, 4, 8);
1322793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler                put(2, 0, 3, 6, 6, 12);
1323793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler            }
1324793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        };
1325793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        Mat mean = new Mat();
1326793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        Mat vectors = new Mat();
1327793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
1328793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        Core.PCACompute(data, mean, vectors);
1329793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
1330793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        Mat mean_truth = new Mat(1, 4, CvType.CV_32F) {
1331793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler            {
1332793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler                put(0, 0, 2, 4, 4, 8);
1333793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler            }
1334793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        };
1335793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        Mat vectors_truth = new Mat(3, 4, CvType.CV_32F, new Scalar(0)) {
1336793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler            {
1337793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler                put(0, 0, 0.2, 0.4, 0.4, 0.8);
1338793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler            }
1339793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        };
1340793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        assertMatEqual(mean_truth, mean, EPS);
1341793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        assertMatEqual(vectors_truth, vectors, EPS);
1342793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    }
1343793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
1344793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    public void testPCAComputeMatMatMatInt() {
1345793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        Mat data = new Mat(3, 4, CvType.CV_32F) {
1346793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler            {
1347793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler                put(0, 0, 1, 2, 2, 4);
1348793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler                put(1, 0, 2, 4, 4, 8);
1349793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler                put(2, 0, 3, 6, 6, 12);
1350793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler            }
1351793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        };
1352793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        Mat mean = new Mat();
1353793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        Mat vectors = new Mat();
1354793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
1355793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        Core.PCACompute(data, mean, vectors, 1);
1356793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
1357793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        Mat mean_truth = new Mat(1, 4, CvType.CV_32F) {
1358793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler            {
1359793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler                put(0, 0, 2, 4, 4, 8);
1360793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler            }
1361793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        };
1362793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        Mat vectors_truth = new Mat(1, 4, CvType.CV_32F, new Scalar(0)) {
1363793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler            {
1364793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler                put(0, 0, 0.2, 0.4, 0.4, 0.8);
1365793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler            }
1366793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        };
1367793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        assertMatEqual(mean_truth, mean, EPS);
1368793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        assertMatEqual(vectors_truth, vectors, EPS);
1369793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    }
1370793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
1371793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    public void testPCAProject() {
1372793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        Mat mean = new Mat(1, 4, CvType.CV_32F) {
1373793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler            {
1374793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler                put(0, 0, 2, 4, 4, 8);
1375793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler            }
1376793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        };
1377793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        Mat vectors = new Mat(1, 4, CvType.CV_32F, new Scalar(0)) {
1378793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler            {
1379793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler                put(0, 0, 0.2, 0.4, 0.4, 0.8);
1380793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler            }
1381793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        };
1382793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        Mat data = new Mat(3, 4, CvType.CV_32F) {
1383793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler            {
1384793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler                put(0, 0, 1, 2, 2, 4);
1385793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler                put(1, 0, 2, 4, 4, 8);
1386793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler                put(2, 0, 0, 0, 0, 0);
1387793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler            }
1388793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        };
1389793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        Mat result = new Mat();
1390793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
1391793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        Core.PCAProject(data, mean, vectors, result);
1392793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
1393793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        Mat truth = new Mat(3, 1, CvType.CV_32F) {
1394793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler            {
1395793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler                put(0, 0, -5, 0, -10);
1396793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler            }
1397793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        };
1398793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        assertMatEqual(truth, result, EPS);
1399793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    }
1400793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
1401793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    public void testPerspectiveTransform() {
1402793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        Mat src = new Mat(matSize, matSize, CvType.CV_32FC2);
1403793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        Core.randu(src, 0, 256);
1404793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        Mat transformMatrix = Mat.eye(3, 3, CvType.CV_32F);
1405793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
1406793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        Core.perspectiveTransform(src, dst, transformMatrix);
1407793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        assertMatEqual(src, dst, EPS);
1408793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    }
1409793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
1410793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    public void testPerspectiveTransform3D() {
1411793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        Mat src = new Mat(matSize, matSize, CvType.CV_32FC3);
1412793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        Core.randu(src, 0, 256);
1413793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        Mat transformMatrix = Mat.eye(4, 4, CvType.CV_32F);
1414793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
1415793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        Core.perspectiveTransform(src, dst, transformMatrix);
1416793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
1417793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        assertMatEqual(src, dst, EPS);
1418793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    }
1419793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
1420793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    private static double atan2deg(double y, double x)
1421793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    {
1422793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        double res = Math.atan2(y, x);
1423793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        if (res < 0)
1424793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler            res = Math.PI * 2 + res;
1425793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        return res * 180 / Math.PI;
1426793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    }
1427793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
1428793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    private static double atan2rad(double y, double x)
1429793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    {
1430793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        double res = Math.atan2(y, x);
1431793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        if (res < 0)
1432793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler            res = Math.PI * 2 + res;
1433793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        return res;
1434793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    }
1435793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
1436793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    public void testPhaseMatMatMat() {
1437793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        Mat x = new Mat(1, 4, CvType.CV_32F) {
1438793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler            {
1439793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler                put(0, 0, 10.0, 10.0, 20.0, 5.0);
1440793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler            }
1441793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        };
1442793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        Mat y = new Mat(1, 4, CvType.CV_32F) {
1443793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler            {
1444793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler                put(0, 0, 20.0, 15.0, 20.0, 20.0);
1445793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler            }
1446793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        };
1447793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        Mat gold = new Mat(1, 4, CvType.CV_32F) {
1448793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler            {
1449793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler                put(0, 0, atan2rad(20, 10), atan2rad(15, 10), atan2rad(20, 20), atan2rad(20, 5));
1450793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler            }
1451793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        };
1452793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
1453793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        Core.phase(x, y, dst);
1454793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
1455793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        assertMatEqual(gold, dst, EPS);
1456793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    }
1457793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
1458793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    public void testPhaseMatMatMatBoolean() {
1459793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        Mat x = new Mat(1, 4, CvType.CV_32F) {
1460793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler            {
1461793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler                put(0, 0, 10.0, 10.0, 20.0, 5.0);
1462793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler            }
1463793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        };
1464793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        Mat y = new Mat(1, 4, CvType.CV_32F) {
1465793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler            {
1466793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler                put(0, 0, 20.0, 15.0, 20.0, 20.0);
1467793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler            }
1468793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        };
1469793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        Mat gold = new Mat(1, 4, CvType.CV_32F) {
1470793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler            {
1471793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler                put(0, 0, atan2deg(20, 10), atan2deg(15, 10), atan2deg(20, 20), atan2deg(20, 5));
1472793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler            }
1473793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        };
1474793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
1475793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        Core.phase(x, y, dst, true);
1476793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
1477793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        assertMatEqual(gold, dst, EPS * 180 / Math.PI);
1478793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    }
1479793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
1480793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    public void testPolarToCartMatMatMatMat() {
1481793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        Mat magnitude = new Mat(1, 3, CvType.CV_32F) {
1482793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler            {
1483793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler                put(0, 0, 5.0, 10.0, 13.0);
1484793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler            }
1485793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        };
1486793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        Mat angle = new Mat(1, 3, CvType.CV_32F) {
1487793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler            {
1488793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler                put(0, 0, 0.92729962, 0.92729962, 1.1759995);
1489793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler            }
1490793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        };
1491793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        Mat xCoordinate = new Mat();
1492793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        Mat yCoordinate = new Mat();
1493793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
1494793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        Core.polarToCart(magnitude, angle, xCoordinate, yCoordinate);
1495793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
1496793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        Mat x = new Mat(1, 3, CvType.CV_32F) {
1497793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler            {
1498793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler                put(0, 0, 3.0, 6.0, 5, 0);
1499793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler            }
1500793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        };
1501793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        Mat y = new Mat(1, 3, CvType.CV_32F) {
1502793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler            {
1503793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler                put(0, 0, 4.0, 8.0, 12.0);
1504793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler            }
1505793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        };
1506793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        assertMatEqual(x, xCoordinate, EPS);
1507793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        assertMatEqual(y, yCoordinate, EPS);
1508793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    }
1509793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
1510793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    public void testPolarToCartMatMatMatMatBoolean() {
1511793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        Mat magnitude = new Mat(1, 3, CvType.CV_32F) {
1512793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler            {
1513793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler                put(0, 0, 5.0, 10.0, 13.0);
1514793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler            }
1515793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        };
1516793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        Mat angle = new Mat(1, 3, CvType.CV_32F) {
1517793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler            {
1518793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler                put(0, 0, 0.92729962, 0.92729962, 1.1759995);
1519793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler            }
1520793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        };
1521793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        Mat xCoordinate = new Mat();
1522793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        Mat yCoordinate = new Mat();
1523793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
1524793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        Core.polarToCart(magnitude, angle, xCoordinate, yCoordinate, true);
1525793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
1526793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        Mat x = new Mat(1, 3, CvType.CV_32F) {
1527793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler            {
1528793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler                put(0, 0, 4.9993458, 9.9986916, 12.997262);
1529793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler            }
1530793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        };
1531793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        Mat y = new Mat(1, 3, CvType.CV_32F) {
1532793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler            {
1533793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler                put(0, 0, 0.080918625, 0.16183725, 0.26680708);
1534793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler            }
1535793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        };
1536793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        assertMatEqual(x, xCoordinate, EPS);
1537793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        assertMatEqual(y, yCoordinate, EPS);
1538793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    }
1539793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
1540793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    public void testPow() {
1541793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        Core.pow(gray2, 7, dst);
1542793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
1543793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        assertMatEqual(gray128, dst);
1544793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    }
1545793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
1546793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    public void testRandn() {
1547793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        Core.randn(gray0, 100, 23);
1548793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
1549793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        assertEquals(100., Core.mean(gray0).val[0], 23 / 2);
1550793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    }
1551793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
1552793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    public void testRandShuffleMat() {
1553793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        Mat original = new Mat(1, 10, CvType.CV_32F) {
1554793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler            {
1555793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler                put(0, 0, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9);
1556793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler            }
1557793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        };
1558793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        Mat shuffled = original.clone();
1559793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
1560793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        Core.randShuffle(shuffled);
1561793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
1562793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        assertMatNotEqual(original, shuffled, EPS);
1563793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        Mat dst1 = new Mat();
1564793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        Mat dst2 = new Mat();
1565793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        Core.sort(original, dst1, Core.SORT_ASCENDING);
1566793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        Core.sort(shuffled, dst2, Core.SORT_ASCENDING);
1567793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        assertMatEqual(dst1, dst2, EPS);
1568793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    }
1569793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
1570793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    public void testRandShuffleMatDouble() {
1571793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        Mat original = new Mat(1, 10, CvType.CV_32F) {
1572793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler            {
1573793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler                put(0, 0, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9);
1574793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler            }
1575793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        };
1576793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        Mat shuffled = original.clone();
1577793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
1578793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        Core.randShuffle(shuffled, 10);
1579793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
1580793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        assertMatNotEqual(original, shuffled, EPS);
1581793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        Mat dst1 = new Mat();
1582793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        Mat dst2 = new Mat();
1583793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        Core.sort(original, dst1, Core.SORT_ASCENDING);
1584793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        Core.sort(shuffled, dst2, Core.SORT_ASCENDING);
1585793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        assertMatEqual(dst1, dst2, EPS);
1586793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    }
1587793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
1588793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    public void testRandu() {
1589793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        Core.randu(gray0, 3, 23);
1590793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        fail("Not yet implemented");
1591793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        //assertTrue(Core.checkRange(gray0, true, null, 3, 23));
1592793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    }
1593793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
1594793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    public void testRectangleMatPointPointScalar() {
1595793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        Point bottomRight = new Point(gray0.cols() / 2, gray0.rows() / 2);
1596793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        Point topLeft = new Point(0, 0);
1597793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        Scalar color = new Scalar(128);
1598793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
1599793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        Imgproc.rectangle(gray0, bottomRight, topLeft, color);
1600793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
1601793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        assertTrue(0 != Core.countNonZero(gray0));
1602793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    }
1603793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
1604793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    public void testRectangleMatPointPointScalarInt() {
1605793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        Point bottomRight = new Point(gray0.cols(), gray0.rows());
1606793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        Point topLeft = new Point(0, 0);
1607793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        Scalar color = new Scalar(128);
1608793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
1609793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        Imgproc.rectangle(gray0, bottomRight, topLeft, color, 2);
1610793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        Imgproc.rectangle(gray0, bottomRight, topLeft, colorBlack);
1611793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
1612793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        assertTrue(0 != Core.countNonZero(gray0));
1613793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    }
1614793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
1615793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    public void testRectangleMatPointPointScalarIntInt() {
1616793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        Point bottomRight = new Point(gray0.cols() / 2, gray0.rows() / 2);
1617793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        Point topLeft = new Point(0, 0);
1618793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        Scalar color = new Scalar(128);
1619793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
1620793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        Imgproc.rectangle(gray0, bottomRight, topLeft, color, 2, Imgproc.LINE_AA, 0);
1621793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        Imgproc.rectangle(gray0, bottomRight, topLeft, colorBlack, 2, Imgproc.LINE_4, 0);
1622793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
1623793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        assertTrue(0 != Core.countNonZero(gray0));
1624793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    }
1625793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
1626793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    public void testRectangleMatPointPointScalarIntIntInt() {
1627793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        Point bottomRight1 = new Point(gray0.cols(), gray0.rows());
1628793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        Point bottomRight2 = new Point(gray0.cols() / 2, gray0.rows() / 2);
1629793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        Point topLeft = new Point(0, 0);
1630793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        Scalar color = new Scalar(128);
1631793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
1632793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        Imgproc.rectangle(gray0, bottomRight1, topLeft, color, 2, Imgproc.LINE_8, 1);
1633793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
1634793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        assertTrue(0 != Core.countNonZero(gray0));
1635793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
1636793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        Imgproc.rectangle(gray0, bottomRight2, topLeft, colorBlack, 2, Imgproc.LINE_8, 0);
1637793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
1638793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        assertEquals(0, Core.countNonZero(gray0));
1639793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    }
1640793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
1641793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    public void testReduceMatMatIntInt() {
1642793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        Mat src = new Mat(2, 2, CvType.CV_32F) {
1643793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler            {
1644793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler                put(0, 0, 1, 0);
1645793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler                put(1, 0, 3, 0);
1646793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler            }
1647793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        };
1648793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
1649793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        Core.reduce(src, dst, 0, Core.REDUCE_AVG);
1650793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
1651793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        Mat out = new Mat(1, 2, CvType.CV_32F) {
1652793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler            {
1653793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler                put(0, 0, 2, 0);
1654793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler            }
1655793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        };
1656793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        assertMatEqual(out, dst, EPS);
1657793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    }
1658793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
1659793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    public void testReduceMatMatIntIntInt() {
1660793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        Mat src = new Mat(2, 2, CvType.CV_32F) {
1661793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler            {
1662793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler                put(0, 0, 1, 0);
1663793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler                put(1, 0, 2, 3);
1664793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler            }
1665793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        };
1666793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
1667793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        Core.reduce(src, dst, 1, Core.REDUCE_SUM, CvType.CV_64F);
1668793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
1669793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        Mat out = new Mat(2, 1, CvType.CV_64F) {
1670793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler            {
1671793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler                put(0, 0, 1, 5);
1672793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler            }
1673793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        };
1674793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        assertMatEqual(out, dst, EPS);
1675793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    }
1676793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
1677793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    public void testRepeat() {
1678793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        Mat src = new Mat(1, 2, CvType.CV_32F, new Scalar(0));
1679793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
1680793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        Core.repeat(src, matSize, matSize / 2, dst);
1681793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
1682793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        assertMatEqual(gray0_32f, dst, EPS);
1683793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    }
1684793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
1685793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    public void testScaleAdd() {
1686793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        Core.scaleAdd(gray3, 2.0, gray3, dst);
1687793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
1688793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        assertMatEqual(gray9, dst);
1689793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    }
1690793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
1691793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    public void testSetIdentityMat() {
1692793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        Core.setIdentity(gray0_32f);
1693793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
1694793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        assertMatEqual(grayE_32f, gray0_32f, EPS);
1695793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    }
1696793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
1697793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    public void testSetIdentityMatScalar() {
1698793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        Mat m = gray0_32f;
1699793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
1700793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        Core.setIdentity(m, new Scalar(5));
1701793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
1702793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        truth = new Mat(m.size(), m.type(), new Scalar(0));
1703793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        truth.diag().setTo(new Scalar(5));
1704793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        assertMatEqual(truth, m, EPS);
1705793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    }
1706793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
1707793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    public void testSolveCubic() {
1708793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        Mat coeffs = new Mat(1, 4, CvType.CV_32F) {
1709793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler            {
1710793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler                put(0, 0, 1, 6, 11, 6);
1711793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler            }
1712793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        };
1713793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
1714793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        assertEquals(3, Core.solveCubic(coeffs, dst));
1715793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
1716793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        Mat roots = new Mat(3, 1, CvType.CV_32F) {
1717793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler            {
1718793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler                put(0, 0, -3, -1, -2);
1719793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler            }
1720793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        };
1721793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        assertMatEqual(roots, dst, EPS);
1722793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    }
1723793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
1724793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    public void testSolveMatMatMat() {
1725793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        Mat a = new Mat(3, 3, CvType.CV_32F) {
1726793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler            {
1727793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler                put(0, 0, 1, 1, 1);
1728793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler                put(1, 0, 1, -2, 2);
1729793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler                put(2, 0, 1, 2, 1);
1730793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler            }
1731793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        };
1732793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        Mat b = new Mat(3, 1, CvType.CV_32F) {
1733793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler            {
1734793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler                put(0, 0, 0, 4, 2);
1735793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler            }
1736793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        };
1737793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
1738793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        assertTrue(Core.solve(a, b, dst));
1739793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
1740793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        Mat res = new Mat(3, 1, CvType.CV_32F) {
1741793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler            {
1742793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler                put(0, 0, -12, 2, 10);
1743793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler            }
1744793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        };
1745793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        assertMatEqual(res, dst, EPS);
1746793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    }
1747793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
1748793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    public void testSolveMatMatMatInt() {
1749793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        Mat a = new Mat(3, 3, CvType.CV_32F) {
1750793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler            {
1751793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler                put(0, 0, 1, 1, 1);
1752793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler                put(1, 0, 1, -2, 2);
1753793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler                put(2, 0, 1, 2, 1);
1754793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler            }
1755793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        };
1756793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        Mat b = new Mat(3, 1, CvType.CV_32F) {
1757793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler            {
1758793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler                put(0, 0, 0, 4, 2);
1759793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler            }
1760793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        };
1761793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
1762793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        assertTrue(Core.solve(a, b, dst, Core.DECOMP_QR | Core.DECOMP_NORMAL));
1763793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
1764793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        Mat res = new Mat(3, 1, CvType.CV_32F) {
1765793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler            {
1766793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler                put(0, 0, -12, 2, 10);
1767793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler            }
1768793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        };
1769793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        assertMatEqual(res, dst, EPS);
1770793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    }
1771793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
1772793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    public void testSolvePolyMatMat() {
1773793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        Mat coeffs = new Mat(4, 1, CvType.CV_32F) {
1774793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler            {
1775793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler                put(0, 0, -6, 11, -6, 1);
1776793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler            }
1777793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        };
1778793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        Mat roots = new Mat();
1779793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
1780793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        assertEquals(0.0, Core.solvePoly(coeffs, roots));
1781793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
1782793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        truth = new Mat(3, 1, CvType.CV_32FC2) {
1783793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler            {
1784793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler                put(0, 0, 1, 0, 2, 0, 3, 0);
1785793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler            }
1786793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        };
1787793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        assertMatEqual(truth, roots, EPS);
1788793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    }
1789793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
1790793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    public void testSolvePolyMatMatInt() {
1791793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        Mat coeffs = new Mat(4, 1, CvType.CV_32F) {
1792793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler            {
1793793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler                put(0, 0, -6, 11, -6, 1);
1794793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler            }
1795793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        };
1796793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        Mat roots = new Mat();
1797793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
1798793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        assertEquals(10.198039027185569, Core.solvePoly(coeffs, roots, 1));
1799793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
1800793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        truth = new Mat(3, 1, CvType.CV_32FC2) {
1801793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler            {
1802793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler                put(0, 0, 1, 0, -1, 2, -2, 12);
1803793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler            }
1804793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        };
1805793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        assertMatEqual(truth, roots, EPS);
1806793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    }
1807793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
1808793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    public void testSort() {
1809793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        Mat submat = gray0.submat(0, gray0.rows() / 2, 0, gray0.cols() / 2);
1810793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        submat.setTo(new Scalar(1.0));
1811793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
1812793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        Core.sort(gray0, dst, Core.SORT_EVERY_ROW);
1813793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
1814793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        submat = dst.submat(0, dst.rows() / 2, dst.cols() / 2, dst.cols());
1815793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        assertTrue(submat.total() == Core.countNonZero(submat));
1816793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
1817793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        Core.sort(gray0, dst, Core.SORT_EVERY_COLUMN);
1818793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
1819793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        submat = dst.submat(dst.rows() / 2, dst.rows(), 0, dst.cols() / 2);
1820793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
1821793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        assertTrue(submat.total() == Core.countNonZero(submat));
1822793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    }
1823793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
1824793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    public void testSortIdx() {
1825793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        Mat a = Mat.eye(3, 3, CvType.CV_8UC1);
1826793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        Mat b = new Mat();
1827793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
1828793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        Core.sortIdx(a, b, Core.SORT_EVERY_ROW | Core.SORT_ASCENDING);
1829793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
1830793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        truth = new Mat(3, 3, CvType.CV_32SC1) {
1831793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler            {
1832793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler                put(0, 0, 1, 2, 0);
1833793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler                put(1, 0, 0, 2, 1);
1834793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler                put(2, 0, 0, 1, 2);
1835793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler            }
1836793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        };
1837793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        assertMatEqual(truth, b);
1838793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    }
1839793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
1840793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    public void testSplit() {
1841793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        Mat m = getMat(CvType.CV_8UC3, 1, 2, 3);
1842793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        ArrayList<Mat> cois = new ArrayList<Mat>();
1843793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
1844793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        Core.split(m, cois);
1845793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
1846793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        assertMatEqual(gray1, cois.get(0));
1847793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        assertMatEqual(gray2, cois.get(1));
1848793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        assertMatEqual(gray3, cois.get(2));
1849793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    }
1850793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
1851793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    public void testSqrt() {
1852793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        Core.sqrt(gray9_32f, dst);
1853793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
1854793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        assertMatEqual(gray3_32f, dst, EPS);
1855793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
1856793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        Mat rgba144 = new Mat(matSize, matSize, CvType.CV_32FC4, Scalar.all(144));
1857793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        Mat rgba12 = new Mat(matSize, matSize, CvType.CV_32FC4, Scalar.all(12));
1858793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
1859793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        Core.sqrt(rgba144, dst);
1860793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
1861793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        assertMatEqual(rgba12, dst, EPS);
1862793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    }
1863793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
1864793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    public void testSubtractMatMatMat() {
1865793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        Core.subtract(gray128, gray1, dst);
1866793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
1867793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        assertMatEqual(gray127, dst);
1868793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    }
1869793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
1870793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    public void testSubtractMatMatMatMat() {
1871793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        Mat mask = makeMask(gray1.clone());
1872793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        dst = gray128.clone();
1873793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
1874793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        Core.subtract(gray128, gray1, dst, mask);
1875793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
1876793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        assertMatEqual(makeMask(gray127, 128), dst);
1877793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    }
1878793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
1879793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    public void testSubtractMatMatMatMatInt() {
1880793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        Core.subtract(gray3, gray2, dst, gray1, CvType.CV_32F);
1881793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
1882793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        assertMatEqual(gray1_32f, dst, EPS);
1883793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    }
1884793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
1885793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    public void testSumElems() {
1886793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        Mat src = new Mat(4, 4, CvType.CV_8U, new Scalar(10));
1887793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
1888793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        Scalar res1 = Core.sumElems(src);
1889793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
1890793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        assertScalarEqual(new Scalar(160), res1, EPS);
1891793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    }
1892793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
1893793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    public void testSVBackSubst() {
1894793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        Mat w = new Mat(2, 2, CvType.CV_32FC1, new Scalar(2));
1895793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        Mat u = new Mat(2, 2, CvType.CV_32FC1, new Scalar(4));
1896793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        Mat vt = new Mat(2, 2, CvType.CV_32FC1, new Scalar(2));
1897793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        Mat rhs = new Mat(2, 2, CvType.CV_32FC1, new Scalar(1));
1898793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
1899793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        Core.SVBackSubst(w, u, vt, rhs, dst);
1900793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
1901793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        Mat truth = new Mat(2, 2, CvType.CV_32FC1, new Scalar(16));
1902793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        assertMatEqual(truth, dst, EPS);
1903793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    }
1904793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
1905793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    public void testSVDecompMatMatMatMat() {
1906793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        Mat src = new Mat(1, 4, CvType.CV_32FC1) {
1907793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler            {
1908793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler                put(0, 0, 1, 4, 8, 6);
1909793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler            }
1910793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        };
1911793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        Mat w = new Mat();
1912793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        Mat u = new Mat();
1913793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        Mat vt = new Mat();
1914793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
1915793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        Core.SVDecomp(src, w, u, vt);
1916793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
1917793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        Mat truthW = new Mat(1, 1, CvType.CV_32FC1, new Scalar(10.816654));
1918793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        Mat truthU = new Mat(1, 1, CvType.CV_32FC1, new Scalar(1));
1919793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        Mat truthVT = new Mat(1, 4, CvType.CV_32FC1) {
1920793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler            {
1921793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler                put(0, 0, 0.09245003, 0.36980012, 0.73960024, 0.5547002);
1922793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler            }
1923793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        };
1924793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        assertMatEqual(truthW, w, EPS);
1925793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        assertMatEqual(truthU, u, EPS);
1926793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        assertMatEqual(truthVT, vt, EPS);
1927793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    }
1928793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
1929793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    public void testSVDecompMatMatMatMatInt() {
1930793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        Mat src = new Mat(1, 4, CvType.CV_32FC1) {
1931793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler            {
1932793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler                put(0, 0, 1, 4, 8, 6);
1933793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler            }
1934793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        };
1935793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        Mat w = new Mat();
1936793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        Mat u = new Mat();
1937793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        Mat vt = new Mat();
1938793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
1939793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        Core.SVDecomp(src, w, u, vt, Core.SVD_NO_UV);
1940793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
1941793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        Mat truthW = new Mat(1, 1, CvType.CV_32FC1, new Scalar(10.816654));
1942793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        assertMatEqual(truthW, w, EPS);
1943793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        assertTrue(u.empty());
1944793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        assertTrue(vt.empty());
1945793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    }
1946793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
1947793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    public void testTrace() {
1948793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        Scalar s = Core.trace(gray1);
1949793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
1950793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        assertEquals(new Scalar(matSize), s);
1951793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    }
1952793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
1953793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    public void testTransform() {
1954793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        Mat src = new Mat(2, 2, CvType.CV_32F, new Scalar(55));
1955793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        Mat m = Mat.eye(2, 2, CvType.CV_32FC1);
1956793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
1957793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        Core.transform(src, dst, m);
1958793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
1959793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        truth = new Mat(2, 2, CvType.CV_32FC2, new Scalar(55, 1));
1960793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        assertMatEqual(truth, dst, EPS);
1961793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    }
1962793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
1963793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    public void testTranspose() {
1964793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        gray0.submat(0, gray0.rows() / 2, 0, gray0.cols()).setTo(new Scalar(1));
1965793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        Mat destination = getMat(CvType.CV_8U, 0);
1966793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
1967793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        Core.transpose(gray0, destination);
1968793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
1969793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        Mat subdst = destination.submat(0, destination.rows(), 0, destination.cols() / 2);
1970793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        assertTrue(subdst.total() == Core.countNonZero(subdst));
1971793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    }
1972793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
1973793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    public void testVconcat() {
1974793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        List<Mat> mats = Arrays.asList(Mat.eye(3, 3, CvType.CV_8U), Mat.zeros(2, 3, CvType.CV_8U));
1975793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
1976793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        Core.vconcat(mats, dst);
1977793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
1978793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        assertMatEqual(Mat.eye(5, 3, CvType.CV_8U), dst);
1979793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
1980793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    }
1981793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
1982793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    public void testCopyMakeBorderMatMatIntIntIntIntInt() {
1983793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        Mat src = new Mat(2, 2, CvType.CV_32F, new Scalar(1));
1984793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        int border = 2;
1985793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
1986793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        Core.copyMakeBorder(src, dst, border, border, border, border, Core.BORDER_REPLICATE);
1987793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
1988793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        truth = new Mat(6, 6, CvType.CV_32F, new Scalar(1));
1989793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        assertMatEqual(truth, dst, EPS);
1990793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    }
1991793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
1992793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    public void testCopyMakeBorderMatMatIntIntIntIntIntScalar() {
1993793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        Mat src = new Mat(2, 2, CvType.CV_32F, new Scalar(1));
1994793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
1995793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        Scalar value = new Scalar(0);
1996793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        int border = 2;
1997793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
1998793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        Core.copyMakeBorder(src, dst, border, border, border, border, Core.BORDER_REPLICATE, value);
1999793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        // TODO_: write better test (use Core.BORDER_CONSTANT)
2000793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
2001793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        truth = new Mat(6, 6, CvType.CV_32F, new Scalar(1));
2002793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        assertMatEqual(truth, dst, EPS);
2003793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    }
2004793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
2005793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    public void testBorderInterpolate() {
2006793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        float val1 = Core.borderInterpolate(100, 150, Core.BORDER_REFLECT_101);
2007793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        assertEquals(100f, val1);
2008793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
2009793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        float val2 = Core.borderInterpolate(-5, 10, Core.BORDER_WRAP);
2010793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler        assertEquals(5f, val2);
2011793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    }
2012793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
2013793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler}
2014