public void ComputeDctHashTest(int seed) { const int W = 40; const int H = 30; var d = new byte[W * H]; var r = new Random(seed); r.NextBytes(d); var head = ImagePhash.ComputeDctHash(new ByteImage(W, H, d)); var v0_3_6 = V0_3_6.ImagePhash.ComputeDctHash(new V0_3_6.Imaging.ByteImage(W, H, d)); _Output.WriteLine($"{head:x16} {v0_3_6:x16} {ImagePhash.GetHammingDistance(head, v0_3_6)}"); Assert.Equal(v0_3_6, head); /* * var img = image.Convolve(new FloatImage(7, 7, 1)); * * var resized = img.Resize(32, 32); * var C = CreateDctMatrix(32); * var Ctransp = C.Transpose(); * var dctImage = C.Multiply(resized).Multiply(Ctransp); * */ }
public void ComputeDigest(int seed) { const int W = 128; const int H = 128; var d = new byte[W * H]; var r = new Random(seed); r.NextBytes(d); var head = ImagePhash.ComputeDigest(new ByteImage(W, H, d)); var v0_3_6 = V0_3_6.ImagePhash.ComputeDigest(new V0_3_6.Imaging.ByteImage(W, H, d)); var cc = ImagePhash.GetCrossCorrelation(head.Coefficients, v0_3_6.Coefficients); _Output.WriteLine($"ImagePhash.GetCrossCorrelation: {cc}"); Assert.Equal(1, cc, 3); }
public void NormalizeDigestTest(int seed) { _Output.WriteLine("Vector<float>.Count: {0}", Vector <float> .Count); _Output.WriteLine("Vector.IsHardwareAccelerated: {0}", Vector.IsHardwareAccelerated); var r = new Random(seed); var a = new float[40]; for (var i = 0; i < a.Length; i++) { a[i] = (float)r.NextDouble(); } var max = Enumerable.Max(a); var min = Enumerable.Min(a); var digest = ImagePhash.NormalizeDigest(a, max, min); Assert.Equal(a.Select(e => (byte)(byte.MaxValue * (e - min) / (max - min))), digest.Coefficients); }
public void CreateDctMatrixTest(int size) { var head = ImagePhash.CreateDctMatrix(size); var v0_3_6 = V0_3_6.ImagePhash.CreateDctMatrix(size); _Output.WriteLine($"{head.Width}x{head.Height}"); _Output.WriteLine(string.Join(" ", head.Array.Select(e => e.ToString("f3")))); _Output.WriteLine($"{v0_3_6.Width}x{v0_3_6.Height}"); _Output.WriteLine(string.Join(" ", v0_3_6.Array.Select(e => e.ToString("f3")))); Assert.Equal(v0_3_6.Width, head.Width); Assert.Equal(v0_3_6.Height, head.Height); for (var y = 0; y < head.Height; y++) { for (var x = 0; x < head.Width; x++) { Assert.Equal(0, head[x, y] - v0_3_6[x, y], 5); } } }
public void GetCrossCorrelationTest(int seed) { _Output.WriteLine("Vector<float>.Count: {0}", Vector <float> .Count); _Output.WriteLine("Vector.IsHardwareAccelerated: {0}", Vector.IsHardwareAccelerated); var a = new byte[40]; var b = new byte[40]; for (var i = 0; i < 100; i++) { var r = new Random(seed); r.NextBytes(a); r.NextBytes(b); var expected = GetCrossCorrelationSimple(a, b, 40); var actual = ImagePhash.GetCrossCorrelation(a, b); Assert.Equal(expected, actual, 5); } }
public void GetMedianOf64Test(int seed) { var r = new Random(seed); var img = new FloatImage(9, 9); var list = new List <float>(64); for (var c = 0; c < 100; c++) { list.Clear(); for (int y = 1; y <= 8; y++) { for (int x = 1; x <= 8; x++) { var v = (float)r.NextDouble(); img[x, y] = v; list.Add(v); } } list.Sort(); Assert.Equal(list[31], ImagePhash.GetMedianOf64(img)); } }