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); }
public ByteImage Transpose() { var r = new ByteImage(_Height, _Width); this.TransposeTo(r); return(r); }
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); } }
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); } } }
public ByteImageWrapper(ByteImage image) { _Image = image; }