Beispiel #1
0
        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);
             *
             */
        }
Beispiel #2
0
        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);
        }
Beispiel #3
0
        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);
        }
Beispiel #4
0
        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);
                }
            }
        }
Beispiel #5
0
        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);
            }
        }
Beispiel #6
0
        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));
            }
        }