public void TestGetDiagColRow() { Matrix <double> m = new Matrix <double>(new double[, ] { { 1, 2 }, { 3, 4 } }); Matrix <double> diag = m.GetDiag(); EmguAssert.IsTrue(diag[0, 0] == 1); EmguAssert.IsTrue(diag[1, 0] == 4); EmguAssert.IsTrue(diag.Sum == m.Trace.V0); Matrix <double> col1 = m.GetCol(1); EmguAssert.IsTrue(col1[0, 0] == 2); EmguAssert.IsTrue(col1[1, 0] == 4); EmguAssert.IsTrue(col1.Sum == 2 + 4); Matrix <double> row1 = m.GetRow(1); EmguAssert.IsTrue(row1[0, 0] == 3); EmguAssert.IsTrue(row1[0, 1] == 4); EmguAssert.IsTrue(row1.Sum == 3 + 4); }
public void TestQuaternionsSlerp4() { Random r = new Random(); Quaternions q1 = new Quaternions(); q1.AxisAngle = new MCvPoint3D64f(0.0, 175.0 / 180 * Math.PI, 0.0); Quaternions q2 = new Quaternions(); q2.AxisAngle = new MCvPoint3D64f(0.0, 5.0 / 180 * Math.PI, 0.0); double epsilon = 1.0e-12; double x = 0, y = 0, z = 0; Quaternions q = q1.Slerp(q2, 0.5); q.GetEuler(ref x, ref y, ref z); EmguAssert.IsFalse(double.IsNaN(x)); EmguAssert.IsFalse(double.IsNaN(y)); EmguAssert.IsFalse(double.IsNaN(z)); double deltaDegree = Math.Abs(y / Math.PI * 180.0 - 90.0); EmguAssert.IsTrue(deltaDegree <= epsilon); }
public void TestRuntimeSerialize3() { MCvPoint3D32f[] data = new MCvPoint3D32f[] { new MCvPoint3D32f() }; GCHandle handle = GCHandle.Alloc(data, GCHandleType.Pinned); Matrix <float> mat = new Matrix <float>(data.GetLength(0), 1, 3, handle.AddrOfPinnedObject(), sizeof(float) * 3); System.Runtime.Serialization.Formatters.Binary.BinaryFormatter formatter = new System.Runtime.Serialization.Formatters.Binary.BinaryFormatter(); Byte[] bytes; using (MemoryStream ms = new MemoryStream()) { formatter.Serialize(ms, mat); bytes = ms.GetBuffer(); } using (MemoryStream ms2 = new MemoryStream(bytes)) { Matrix <float> mat2 = (Matrix <float>)formatter.Deserialize(ms2); EmguAssert.IsTrue(mat.Equals(mat2)); } handle.Free(); }
public void TestRuntimeSerialize2() { Random r = new Random(); double[,,] data = new double[100, 80, 2]; for (int i = 0; i < data.GetLength(0); i++) { for (int j = 0; j < data.GetLength(1); j++) { for (int k = 0; k < data.GetLength(2); k++) { data[i, j, k] = r.NextDouble(); } } } GCHandle handle = GCHandle.Alloc(data, GCHandleType.Pinned); Matrix <Double> mat = new Matrix <Double>(data.GetLength(0), data.GetLength(1), data.GetLength(2), handle.AddrOfPinnedObject(), sizeof(double) * data.GetLength(1) * data.GetLength(2)); System.Runtime.Serialization.Formatters.Binary.BinaryFormatter formatter = new System.Runtime.Serialization.Formatters.Binary.BinaryFormatter(); Byte[] bytes; using (MemoryStream ms = new MemoryStream()) { formatter.Serialize(ms, mat); bytes = ms.GetBuffer(); } using (MemoryStream ms2 = new MemoryStream(bytes)) { Matrix <Double> mat2 = (Matrix <double>)formatter.Deserialize(ms2); EmguAssert.IsTrue(mat.Equals(mat2)); } handle.Free(); }
public void TestSanity() { EmguAssert.IsTrue(CvInvoke.SanityCheck()); }
public void TestBrisk() { Brisk detector = new Brisk(); EmguAssert.IsTrue(TestFeature2DTracker(detector, detector), "Unable to find homography matrix"); }
public void TestOclKernel() { if (CvInvoke.HaveOpenCL && CvInvoke.UseOpenCL) { Ocl.Device defaultDevice = Ocl.Device.Default; Mat img = EmguAssert.LoadMat("lena.jpg"); Mat imgGray = new Mat(); CvInvoke.CvtColor(img, imgGray, ColorConversion.Bgr2Gray); Mat imgFloat = new Mat(); imgGray.ConvertTo(imgFloat, DepthType.Cv32F, 1.0 / 255); UMat umat = imgFloat.GetUMat(AccessType.Read, UMat.Usage.AllocateDeviceMemory); UMat umatDst = new UMat(); umatDst.Create(umat.Rows, umat.Cols, DepthType.Cv32F, umat.NumberOfChannels, UMat.Usage.AllocateDeviceMemory); String buildOpts = String.Format("-D dstT={0}", Ocl.OclInvoke.TypeToString(umat.Depth)); String sourceStr = @" __constant sampler_t samplerLN = CLK_NORMALIZED_COORDS_FALSE | CLK_ADDRESS_CLAMP_TO_EDGE | CLK_FILTER_LINEAR; __kernel void myshift(const image2d_t src, float shift_x, float shift_y, __global uchar* dst, int dst_step, int dst_offset, int dst_rows, int dst_cols) { int x = get_global_id(0); int y = get_global_id(1); if (x >= dst_cols) return; int dst_index = mad24(y, dst_step, mad24(x, (int)sizeof(dstT), dst_offset)); __global dstT *dstf = (__global dstT *)(dst + dst_index); float2 coord = (float2)((float)x+0.5f+shift_x, (float)y+0.5f+shift_y); dstf[0] = (dstT)read_imagef(src, samplerLN, coord).x; }"; using (CvString errorMsg = new CvString()) using (Ocl.ProgramSource ps = new Ocl.ProgramSource(sourceStr)) using (Ocl.Kernel kernel = new Ocl.Kernel()) using (Ocl.Image2D image2d = new Ocl.Image2D(umat)) using (Ocl.KernelArg ka = new Ocl.KernelArg(Ocl.KernelArg.Flags.ReadWrite, umatDst)) { float shiftX = 100.5f; float shiftY = -50.0f; bool success = kernel.Create("myshift", ps, buildOpts, errorMsg); EmguAssert.IsTrue(success, errorMsg.ToString()); int idx = 0; idx = kernel.Set(idx, image2d); idx = kernel.Set(idx, ref shiftX); idx = kernel.Set(idx, ref shiftY); idx = kernel.Set(idx, ka); IntPtr[] globalThreads = new IntPtr[] { new IntPtr(umat.Cols), new IntPtr(umat.Rows), new IntPtr(1) }; success = kernel.Run(globalThreads, null, true); EmguAssert.IsTrue(success, "Failed to run the kernel"); using (Mat matDst = umatDst.GetMat(AccessType.Read)) using (Mat saveMat = new Mat()) { matDst.ConvertTo(saveMat, DepthType.Cv8U, 255.0); FileInfo fi = new FileInfo("tmp.jpg"); saveMat.Save(fi.FullName); } } } }
public void TestOclKernel() { if (CvInvoke.HaveOpenCL && CvInvoke.UseOpenCL) { Ocl.Device defaultDevice = Ocl.Device.Default; Mat img = EmguAssert.LoadMat("lena.jpg"); Mat imgGray = new Mat(); CvInvoke.CvtColor(img, imgGray, ColorConversion.Bgr2Gray); Mat imgFloat = new Mat(); imgGray.ConvertTo(imgFloat, DepthType.Cv32F, 1.0 / 255); UMat umat = imgFloat.GetUMat(AccessType.Read, UMat.Usage.AllocateDeviceMemory); UMat umatDst = new UMat(); umatDst.Create(umat.Rows, umat.Cols, DepthType.Cv32F, umat.NumberOfChannels, UMat.Usage.AllocateDeviceMemory); String buildOpts = String.Format("-D dstT={0}", Ocl.OclInvoke.TypeToString(umat.Depth)); String sourceStr = @" __kernel void magnutude_filter_8u( __global const uchar* src, int src_step, int src_offset, __global uchar* dst, int dst_step, int dst_offset, int dst_rows, int dst_cols, float scale) { int x = get_global_id(0); int y = get_global_id(1); if (x < dst_cols && y < dst_rows) { int dst_idx = y * dst_step + x + dst_offset; if (x > 0 && x < dst_cols - 1 && y > 0 && y < dst_rows - 2) { int src_idx = y * src_step + x + src_offset; int dx = (int)src[src_idx]*2 - src[src_idx - 1] - src[src_idx + 1]; int dy = (int)src[src_idx]*2 - src[src_idx - 1*src_step] - src[src_idx + 1*src_step]; dst[dst_idx] = convert_uchar_sat(sqrt((float)(dx*dx + dy*dy)) * scale); } else { dst[dst_idx] = 0; } } }"; using (CvString errorMsg = new CvString()) using (Ocl.ProgramSource ps = new Ocl.ProgramSource(sourceStr)) using (Ocl.Kernel kernel = new Ocl.Kernel()) using (Ocl.Image2D image2d = new Ocl.Image2D(umat)) using (Ocl.KernelArg ka = new Ocl.KernelArg(Ocl.KernelArg.Flags.ReadWrite, umatDst)) { float shiftX = 100.5f; float shiftY = -50.0f; bool success = kernel.Create("myshift", ps, buildOpts, errorMsg); EmguAssert.IsTrue(success, errorMsg.ToString()); int idx = 0; idx = kernel.Set(idx, image2d); idx = kernel.Set(idx, ref shiftX); idx = kernel.Set(idx, ref shiftY); idx = kernel.Set(idx, ka); IntPtr[] globalThreads = new IntPtr[] { new IntPtr(umat.Cols), new IntPtr(umat.Rows), new IntPtr(1) }; success = kernel.Run(globalThreads, null, true); EmguAssert.IsTrue(success, "Failed to run the kernel"); using (Mat matDst = umatDst.GetMat(AccessType.Read)) using (Mat saveMat = new Mat()) { matDst.ConvertTo(saveMat, DepthType.Cv8U, 255.0); saveMat.Save("tmp.jpg"); } } } }
public void TestSIFT() { SIFTDetector detector = new SIFTDetector(); EmguAssert.IsTrue(TestFeature2DTracker(detector, detector), "Unable to find homography matrix"); }
public void TestORB() { ORBDetector orb = new ORBDetector(700); EmguAssert.IsTrue(TestFeature2DTracker(orb, orb), "Unable to find homography matrix"); }