Esempio n. 1
0
        public static ByteImage ToByteImageOfY(this BitmapSource source)
        {
            var bmp = source.ToBgr24();

            var data = new byte[bmp.PixelWidth * bmp.PixelHeight * 3];

            bmp.CopyPixels(data, bmp.PixelWidth * 3, 0);

            var r = new ByteImage(bmp.PixelWidth, bmp.PixelHeight);

            var yc = new Vector3(66, 129, 25);
            var i  = 0;

            for (var dy = 0; dy < r.Height; dy++)
            {
                for (var dx = 0; dx < r.Width; dx++)
                {
                    Vector3 sv;
                    sv.Z = data[i++];
                    sv.Y = data[i++];
                    sv.X = data[i++];

                    r[dx, dy] = (byte)(((int)(Vector3.Dot(yc, sv) + 128) >> 8) + 16);
                }
            }

            return(r);
        }
Esempio n. 2
0
        public ByteImage Transpose()
        {
            var r = new ByteImage(_Height, _Width);

            this.TransposeTo(r);
            return(r);
        }
Esempio n. 3
0
        public void Test(int seed, int width)
        {
            _Output.WriteLine("Vector<float>.Count: {0}", Vector <float> .Count);
            _Output.WriteLine("Vector.IsHardwareAccelerated: {0}", Vector.IsHardwareAccelerated);

            var r = new Random(seed);

            var src = new ByteImage(1280, 720);

            r.NextBytes(src.Array);

            var ker = new FloatImage(width, 10);
            var sum = 0f;

            for (var i = 0; i < ker.Array.Length; i++)
            {
                sum += ker.Array[i] = (float)r.NextDouble();
            }
            ker.MultiplyInplace(1 / sum);

            var wrapper = new ByteImageWrapper(src);

            var sw = new Stopwatch();

            sw.Start();
            var expected = ByteImageOperations <ByteImageWrapper> .ConvolveSingle(wrapper, ker, ker.Width, ker.Height);

            sw.Stop();
            _Output.WriteLine("interface: " + sw.ElapsedMilliseconds + "ms");

            sw.Reset();
            sw.Start();
            var actual = new ByteImageOperations <ByteImageWrapper>().Convolve(wrapper, ker);

            sw.Stop();
            _Output.WriteLine("Vector<float>: " + sw.ElapsedMilliseconds + "ms");

            for (var i = 0; i < expected.Array.Length; i++)
            {
                Assert.Equal(
                    0,
                    (expected.Array[i] - actual.Array[i]) / expected.Array[i], 4);
            }
        }
Esempio n. 4
0
        public void ConvolveTest(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   = new ByteImage(W, H, d).Convolve(new FloatImage(7, 7, 1));
            var v0_3_6 = V0_3_6.Imaging.ByteImageHelper.Convolve(
                new V0_3_6.Imaging.ByteImage(W, H, d),
                new V0_3_6.Imaging.FloatImage(7, 7, 1));

            for (var y = 0; y < H; y++)
            {
                for (var x = 0; x < W; x++)
                {
                    Assert.Equal(0, head[x, y] - v0_3_6[x, y], 1);
                }
            }
        }
Esempio n. 5
0
 public ByteImageWrapper(ByteImage image)
 {
     _Image = image;
 }