コード例 #1
0
        public static bool TryGetBitmapBGR(IDenseTensor <float> src, out SpanBitmap <Vector3> bmp)
        {
            bmp = default;

            var dims = src.Dimensions;

            if (dims.Length < 3 || dims.Length > 4)
            {
                return(false);
            }
            if (dims.Length == 4)
            {
                if (dims[0] != 1)
                {
                    return(false);
                }
                dims = dims.Slice(1);
            }

            if (dims[2] != 3)
            {
                return(false);
            }

            var data = System.Runtime.InteropServices.MemoryMarshal.Cast <float, byte>(src.Span);

            bmp = new SpanBitmap <Vector3>(data, dims[1], dims[0], Pixel.BGR96F.Format);
            return(true);
        }
コード例 #2
0
        /// <summary>
        /// Throws an exception if <paramref name="tensor"/> name doesn't meet <paramref name="nameConstraint"/>
        /// </summary>
        /// <typeparam name="T">An unmanaged type</typeparam>
        /// <param name="tensor">The tensor to verify.</param>
        /// <param name="nameConstraint">The name contraint to meet.</param>
        /// <returns><paramref name="tensor"/>.</returns>
        public static IDenseTensor<T> VerifyName<T>(this IDenseTensor<T> tensor, Predicate<String> nameConstraint)
            where T:unmanaged
        {
            if (tensor == null) throw new ArgumentNullException(nameof(tensor));
            if (!nameConstraint(tensor.Name)) throw new ArgumentException($"Name mismatch, found '{tensor.Name}'.");

            return tensor;
        }
コード例 #3
0
        public static SpanBitmap GetSpanBitmap <T>(IDenseTensor <T> tensor) where T : unmanaged
        {
            var dims   = tensor.Dimensions;
            var width  = dims[2];
            var height = dims[1];
            var fmt    = PixelFormat.CreateFromDepthAndChannels(typeof(T), dims[3]);

            var info = new BitmapInfo(width, height, fmt);
            var data = System.Runtime.InteropServices.MemoryMarshal.Cast <T, Byte>(tensor.Span);

            return(new SpanBitmap(data, info));
        }
コード例 #4
0
        public static IDenseTensor<T> VerifyDimensions<T>(this IDenseTensor<T> tensor, params int[] dims)
            where T : unmanaged
        {
            if (tensor == null) throw new ArgumentNullException(nameof(tensor));
            if (tensor.Dimensions.Length != dims.Length) throw new ArgumentException($"Dimensions mismatch, expected 4 but found {tensor.Dimensions.Length}.");

            for(int i=0; i < tensor.Dimensions.Length; ++i)
            {
                var d = dims[i]; if (d <= 0) continue;
                if (d != tensor.Dimensions[i]) throw new ArgumentException($"Dimension[{i}] mismatch, expected {d} but found {tensor.Dimensions[i]}.");
            }

            return tensor;
        }
コード例 #5
0
 public static SpanTensor5<T> AsSpanTensor5<T>(this IDenseTensor<T> tensor, int idx)
     where T : unmanaged
 {
     return new SpanTensor6<T>(tensor.Span, tensor.Dimensions)[idx];
 }
コード例 #6
0
 public static SpanTensor4<T> AsSpanTensor4<T>(this IDenseTensor<T> tensor)
     where T : unmanaged
 {
     return new SpanTensor4<T>(tensor.Span, tensor.Dimensions);
 }